PDA

Ver Versão Completa : [Uma grande ajuda!][+ alguém manja de C ?]


Dr. Pecado
09/06/2009, 10:11
Pessoal, de novo venho recorrer a ajuda dos meus bons e velhos amigos de fórum... to enroscado numa matéria na facu, pois a professora apesar de gente boníssima, explica mal demais a matéria e não quero carregar DP senão do fudido :(

Teria como uma boa alma que manje em C me ajudar a fazer um programinha bobo abaixo?

Desvendando o Amanhã

Podemos representar uma data por três números inteiros positivos da seguinte forma:
1) O primeiro número representa o dia;
2) O segundo número representa o mês;
3) O terceiro número representa o ano.
Por exemplo, os números 27 5 2002 representam a data 27 de maio de 2002.
Por outro lado, os números 29 2 1999 não representam uma data válida.
Seu problema é escrever um programa em C que leia uma seqüência de triplas de números que representam datas e, para cada data, emita como resultado:
Se a data for inválida, uma mensagem indicando este fato;
Se a data for válida, a data referente ao dia seguinte da data fornecida.

Obs.:
1) Um ano é bissexto se o número referente ao ano for múltiplo de 4 mas não de 100 ou se o número referente ao ano for múltiplo de 400.
2) A seqüência de triplas deve ser terminada quando for digitada uma data com o dia, o mês e o ano valendo zero.
3) Na data referente ao dia seguinte, escrever o mês por extenso (e não como número).
4) Seu programa poderá, por exemplo, produzir a seguinte saída:
31 12 2002
1 de janeiro de 2003
29 2 2001
data inválida
28 2 2000
29 de fevereiro de 2000
28 2 2002
1 de março de 2002

Importante: Não esqueça de documentar bem o programa, identá-lo e de entregar uma cópia impressa do programa-fonte, além do CD. Guarde com você uma cópia do seu EP, pois esta pode ser requisitada mais tarde.

Critério para correção:
1) O programa deve estar sem erros de sintaxe
2) Falta ou excesso de comentários
3) Falta de identação
4) Nomes de variáveis inadequados
5) Erros de lógica
6) Uso de recursos não permitidos (goto, por exemplo)



Se alguém puder ajudar, ficarei eternamente grato, pois quebrei a cabeça aqui e não tenho idéia de como fazer :(

Tesla
13/06/2009, 10:38
Como eu tô entediado, e preciso treinar minha habildiade em lógica e C:

#include <stdio.h>
#include <string.h>

int main(void) {

int dia;
int mes;
int ano;
int ch;
int bissexto;
int data = 1;
int mudou = 0;
char nome[10];

do {

printf("Digite 0 para dia, m\x88s e ano se quiser sair do programa \n\n");

do {
printf("\nDigite o dia (1-31): ");
while (scanf("%d", &dia) != 1)
{
while ( getchar() != '\n' );
printf ("Digite um n\xa3mero inteiro: ");
}
if ( dia < 0 || dia > 31 ) {
printf("Digite um valor dentro do intervalo (1-31) \n");
}
} while ( dia < 0 || dia > 31 );

do {
printf("\nDigite o m\x88s (1-12): ");
while (scanf("%d", &mes) != 1)
{
while ( getchar() != '\n' );
printf ("Digite um n\xa3mero inteiro: ");
}
if ( mes < 0 || mes > 12 ) {
printf("Digite um valor dentro do intervalo (1-12) \n");
}
} while ( mes < 0 || mes > 12 );

do {
printf("\nDigite o ano (1-xxxx): ");
while (scanf("%d", &ano) != 1)
{
while ( getchar() != '\n' );
printf ("Digite um n\xa3mero inteiro: ");
}
if ( ano < 0 ) {
printf("Digite um valor maior que 0 \n");
}
} while ( ano < 0 );

if ( ano % 400 == 0 ) {
bissexto = 1;
} else {
if ( ano % 100 == 0 ) {
bissexto = 0;
} else {
if ( ano % 4 == 0 ) {
bissexto = 1;
} else {
bissexto = 0;
}
}
}

if ( dia == 0 && mes == 0 && ano == 0 ) {
break;
}

if ( dia == 0 || mes == 0 || ano == 0 ) {
printf("Data invalida: %d/%d/%d \n\n", dia,mes,ano);
data = 0;
} else {
if ( mes == 4 || mes == 6 || mes == 9 || mes == 11) {
if ( dia == 31 ) {
printf("Data invalida: %d/%d/%d \n\n", dia,mes,ano);
data = 0;
}
} else {
if ( mes == 2 && dia > 29 ) {
printf("Data invalida: %d/%d/%d \n\n", dia,mes,ano);
data = 0;
} else {
if ( mes == 2 && dia == 29 ) {
if ( bissexto == 0) {
printf("Data invalida: %d/%d/%d \n\n", dia,mes,ano);
data = 0;
}
}
}
}
}
if ( data == 1 ) {
if ( mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12 ) {
if ( dia == 31) {
dia = 1;
if (mes == 12 ) {
mes = 1;
ano++;
mudou = 1;
} else {
mes++;
mudou = 1;
}
}
}
if ( (mes == 4 || mes == 6 || mes == 9 || mes == 11) && (dia == 30)) {

dia = 1;
mes++;
mudou = 1;
}
if ( mes == 2 ) {
if ( bissexto == 1 && dia == 29 ) {
dia = 1;
mes++;
mudou = 1;
} else {
if ( bissexto == 0 && dia == 28) {
dia = 1;
mes++;
mudou = 1;
} else {
dia++;
mudou = 1;
}
}
}

if ( mudou == 0 ) {
dia++;
}

if ( mes == 1 ) {
strcpy (nome,"janeiro");
} else {
if ( mes == 2 ) {
strcpy (nome,"fevereiro");
} else {
if ( mes == 3 ) {
strcpy (nome,"mar\x87o");
} else {
if ( mes == 4 ) {
strcpy (nome,"abril");
} else {
if ( mes == 5 ) {
strcpy (nome,"maio");
} else {
if ( mes == 6 ) {
strcpy (nome,"junho");
} else {
if ( mes == 7 ) {
strcpy (nome,"julho");
} else {
if ( mes == 8 ) {
strcpy (nome,"agosto");
} else {
if ( mes == 9 ) {
strcpy (nome,"setembro");
} else {
if ( mes == 10 ) {
strcpy (nome,"outubro");
} else {
if ( mes == 11 ) {
strcpy (nome,"novembro");
} else {
strcpy (nome,"dezembro");
}
}
}
}
}
}
}
}
}
}
}
printf("A data digitada \x82 %d de %s de %d \n\n", dia,nome,ano);
}

printf ("Aperte ENTER para continuar... \n\n\n");
while ((ch = getchar()) != '\n' && ch != EOF);
getchar ();


} while (dia>0 || mes>0 || ano>0);



while ((ch = getchar()) != '\n' && ch != EOF);
printf ("Aperte ENTER para sair...");
getchar ();

return 0;
}



Algumas considerações. Faz séculos que não programo algo, então esse negócio tá mal otimizado. Eu também não documentei NADA, afinal o trabalho é seu. :p