Ir ao conteúdo
  • Cadastre-se

Ajuda com programa de exercicio com Dia, Mes, Ano


Ranan

Posts recomendados

Alguem poderia me ajudar? Etudo programação em C de forma auto-didata, e na apostila que estou estudando, encontrei o seguinte exercicio:

Escreva um programa que peça três inteiros, correspondentes a dia , mês e ano.

Peça os números até conseguir valores que estejam na faixa correta (dias entre 1

e 31, mês entre 1 e 12 e ano entre 1900 e 2100). Verifique se o mês e o número

de dias batem (incluindo verificação de anos bissextos). Se estiver tudo certo

imprima o número que aquele dia corresponde no ano. Comente seu programa.

PS: Um ano é bissexto se for divisível por 4 e não for divisível por 100, exceto

para os anos divisíveis por 400, que também são bissextos.

Como a parte que eu ja estudei possui apenas a biblioteca stdio.h, e ainda nao estudei struct nem void, creio eu que é para fazer o programa sem esses elementos.

O PROGRAMA ATE AGORA FICOU ASSIM:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int Janeiro, Fevereiro, Marco, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro;

int Total, Dia, Mes, Ano;

Janeiro==31;

Marco==31;

Abril==30;

Maio==31;

Junho==30;

Julho==31;

Agosto==31;

Setembro==30;

Outubro==31;

Novembro==30;

Dezembro==31;

if (Mes

do

{

printf ("\n\nEntre com um dia do mes: ");

scanf ("%d", &Dia);

}

while

((Dia<1)||(Dia>31));

NOVAMENTE:

if

(Dia=31)

{

do

{

printf ("\n\nDigite agora o mes desejado: ");

scanf ("%d", &Mes);

}

while ((Mes<1)||(Mes>12));

switch (Mes)

{

case 1:

goto MENSAL;

case 2:

goto NOVAMENTE;

case 3:

goto MENSAL;

case 4:

goto NOVAMENTE;

case 5:

goto MENSAL;

case 6:

goto NOVAMENTE;

case 7:

goto MENSAL;

case 8:

goto MENSAL;

case 9:

goto NOVAMENTE;

case 10:

goto MENSAL;

case 11:

goto NOVAMENTE;

case 12:

goto MENSAL;

}

MENSAL:

do

{

printf ("\n\nDigite agora o ano desejado: ");

scanf ("%d", Ano);

system ("PAUSE");

return 0;

}

while ((Ano<1900)||(Ano>2100));

}

MENSALINO:

if (Dia=30)

{

do

{

printf ("\n\nDigite agora o mes desejado: ");

scanf ("%d", &Mes);

}

while ((Mes<1)||(Mes>12));

switch (Mes)

{

case 2:

goto MENSALINO;

}

printf ("\nDigite agora o ano desejado: ");

scanf ("%d", &Ano);

system ("PAUSE");

return 0;

}

if (Dia<=28)

{

do

{

printf ("\n\nDigite agora o mes desejado: ");

scanf ("%d", &Mes);

}

while ((Mes<1)||(Mes>12));

printf ("Digite agora o ano desejado: ");

scanf ("%d", &Ano);

if (ano%4==0)

{

Fevereiro==29;

}

else

{

Fevereiro==28;

}

system ("PAUSE");

return 0;

}

getch();

}

Esse programa nao ta 100%, mas pelo menos por enquanto ta atendendo as necessidades do ecercicio, porém agora eu preciso fazer 2 funções: uma função para relacionar O numero do Mes, com o nome do mes correspondente, igual: (Mes 1=Janeiro, Mes 2=Fevereiro, Mes 3=Março, etc), e outra função que relacione a data especificada no programa, com o dia que essa data representa no ano, por exemplo: 7/7/2007 corresponde ao dia:189 do ano.

Se alguem puder me ajudar, pode fazer as alterações necessarias nesse programa que eu comecei a fazer, ou então fazer um programa totalmente novo.

Obrigado.

Link para o comentário
Compartilhar em outros sites

Não sei se vai copilar, porque to no trampooooo isso aeee corretamente to postando pra você ver se é isso, qualquer coisa quando chegar em casa copilo e arrumo o resto :P mais está ae o que eu consegui fazer

#include <stdio.h>

#include <stdlib.h>

int dia, mes, ano, bissexto, somameses, i;

int calendario[12] = {31,29,31,30,31,30,31,31,30,31,30,31};

//coleta os dados necessarios para o programa

int ColetaDados( ){

while( dia == 0 || dia > 31 )

{

printf("Digite um dia");

scanf("%d",&dia);

system("cls");

}

while( mes == 0 || mes > 12 )

{

printf("Digite um mes");

scanf("%d",&mes);

system("cls");

}

while ( ano == 0 || ano < 1990 || ano > 2100)

{

printf("Digite um ano");

scanf("%d",&ano");

system("cls");

}

}

// aqui valida o mes e fala se e bissexto ou nao

int ValidacaoMesDia( ){

if(mes==1 & dia <= 31)

{

int Janeiro= mes;

}

else

if(mes==2 & dia <= 29)

{

if (ano%4==0 & dia <= 29 )

{

int Fevereiro= mes;

bissexto = 1;

}

else

if( dia <= 28 )

{

int Fevereiro= mes;

bissexto = 0;

}

}

else

if(mes==3 & dia <= 31)

{

int Marco= mes;

}

else

if(mes==4 & dia <=30)

{

int Abril= mes;

}

else

if(mes==5 & dia <=31)

{

int Maio= mes;

}

else

if(mes==6 & dia<=30)

{

int Junho= mes;

}

else

if(mes==7 & dia <= 31)

{

int Julho= mes;

}

else

if(mes==8 & dia <=31)

{

int Agosto= mes;

}

else

if(mes==9 & dia <= 30)

{

int Setembro= mes;

}

else

if(mes==10 & dia <= 31)

{

int Outubro= mes;

}

else

if(mes==11 & dia <= 30)

{

int Novembro= mes;

}

else

if(mes==12 & dia <= 31)

{

int Dezembro= mes;

}

else{

printf("Erro Confirme os dados novamente... \n\n");

return ColetaDados( );

}

}

//aqui fala quantos dias estão decorrentes de um ano

int QtdDias( )

{

for( i=0; i<=calendario[mes-1]; i++)

{

somameses = somameses + caledario;

}

totaldias = dias + somameses;

if(bissexto == 0 )

{

totaldias = dias + somameses - 1;

}

}

// aqui exibe a data

int Exibir ( ){

printf("A data a ser mostrada e: \n\n");

printf("%d / %d / %d", data, mes, ano);

printf("\t corresponde ao %d", totaldias);

}

// main

main ( )

{

ColetaDados( );

ValidacaoMesDia( );

QtdDias( );

Exibir( );

system("pause");

}

Link para o comentário
Compartilhar em outros sites

O programa está dando alguns erros na hora

ompilar, mandando declarar i.

cheguei em casa e tava sem INTERNET lega a SPEEDY hehehehe mais hj vi que você falou e realmente nao declarei o I;

ai ta agora com a variavel I hehe

#include <stdio.h>

#include <stdlib.h>

int dia, mes, ano, bissexto, somameses, i;

int calendario[12] = {31,29,31,30,31,30,31,31,30,31,30,31};

//coleta os dados necessarios para o programa

int ColetaDados( ){

while( dia == 0 || dia > 31 )

{

printf("Digite um dia");

scanf("%d",&dia);

system("cls");

}

while( mes == 0 || mes > 12 )

{

printf("Digite um mes");

scanf("%d",&mes);

system("cls");

}

while ( ano == 0 || ano < 1990 || ano > 2100)

{

printf("Digite um ano");

scanf("%d",&ano");

system("cls");

}

}

// aqui valida o mes e fala se e bissexto ou nao

int ValidacaoMesDia( ){

if(mes==1 & dia <= 31)

{

int Janeiro= mes;

}

else

if(mes==2 & dia <= 29)

{

if (ano%4==0 & dia <= 29 )

{

int Fevereiro= mes;

bissexto = 1;

}

else

if( dia <= 28 )

{

int Fevereiro= mes;

bissexto = 0;

}

}

else

if(mes==3 & dia <= 31)

{

int Marco= mes;

}

else

if(mes==4 & dia <=30)

{

int Abril= mes;

}

else

if(mes==5 & dia <=31)

{

int Maio= mes;

}

else

if(mes==6 & dia<=30)

{

int Junho= mes;

}

else

if(mes==7 & dia <= 31)

{

int Julho= mes;

}

else

if(mes==8 & dia <=31)

{

int Agosto= mes;

}

else

if(mes==9 & dia <= 30)

{

int Setembro= mes;

}

else

if(mes==10 & dia <= 31)

{

int Outubro= mes;

}

else

if(mes==11 & dia <= 30)

{

int Novembro= mes;

}

else

if(mes==12 & dia <= 31)

{

int Dezembro= mes;

}

else{

printf("Erro Confirme os dados novamente... \n\n");

return ColetaDados( );

}

}

//aqui fala quantos dias estão decorrentes de um ano

int QtdDias( )

{

for( i=0; i<=calendario[mes-1]; i++)

{

somameses = somameses + caledario;

}

totaldias = dias + somameses;

if(bissexto == 0 )

{

totaldias = dias + somameses - 1;

}

}

Link para o comentário
Compartilhar em outros sites

eu fiz uma alteração no codigo fonte, pra poder rodar, porque tava tendo algumas falhas de caracteres das variaveis digitadas errada, e no segundo codigo fonte que você postou, faltou o bloco exibir e o bloco main, que você havia feito no seu primeiro post. Depois que eu fiz as alteracoes necessarias, o programa passou a rodar, porém ta ocorrendo 2 bugs: o primeiro é que ele nao esta colocando o dia no ano que a data especificada representa, e o segundo bug é que ele ainda esta aceitando datas como: 31/2 (dia trinta e um do mes dois), porém essa data nao existe.... :P huahuauhauhahuahuhua mas ja esta muito bom!!!

vou colocar a forma com que eu deixei o programa:

#include <stdio.h>

#include <stdlib.h>

int dia, mes, ano, bissexto, somameses, i, totaldias;

int calendario[12] = {31,29,31,30,31,30,31,31,30,31,30,31};

//coleta os dados necessarios para o programa

int ColetaDados( ){

while( dia == 0 || dia > 31 )

{

printf("Digite um dia: ");

scanf("%d",&dia);

}

while( mes == 0 || mes > 12 )

{

printf("\n\nDigite um mes: ");

scanf("%d",&mes);

}

while ( ano == 0 || ano < 1990 || ano > 2100)

{

printf("\n\nDigite um ano: ");

scanf("%d",&ano);

system("cls");

}

}

// aqui valida o mes e fala se e bissexto ou nao

int ValidacaoMesDia( ){

if(mes==1 & dia <= 31)

{

int Janeiro= mes;

}

else

if(mes==2 & dia <= 29)

{

if (ano%4==0 & dia <= 29 )

{

int Fevereiro= mes;

bissexto = 1;

}

else

if( dia <= 28 )

{

int Fevereiro= mes;

bissexto = 0;

}

}

else

if(mes==3 & dia <= 31)

{

int Marco= mes;

}

else

if(mes==4 & dia <=30)

{

int Abril= mes;

}

else

if(mes==5 & dia <=31)

{

int Maio= mes;

}

else

if(mes==6 & dia<=30)

{

int Junho= mes;

}

else

if(mes==7 & dia <= 31)

{

int Julho= mes;

}

else

if(mes==8 & dia <=31)

{

int Agosto= mes;

}

else

if(mes==9 & dia <= 30)

{

int Setembro= mes;

}

else

if(mes==10 & dia <= 31)

{

int Outubro= mes;

}

else

if(mes==11 & dia <= 30)

{

int Novembro= mes;

}

else

if(mes==12 & dia <= 31)

{

int Dezembro= mes;

}

else{

printf("Erro Confirme os dados novamente... \n\n");

return ColetaDados( );

}

}

//aqui fala quantos dias estão decorrentes de um ano

int QtdDias( )

{

for( i=0; i<=calendario[mes-1]; i++)

{

somameses = somameses + calendario;

}

totaldias = dia + somameses;

if(bissexto == 0 )

{

totaldias = dia + somameses - 1;

}

}

// aqui exibe a data

int Exibir ( ){

printf("A data a ser mostrada e: \n\n");

printf("%d / %d / %d", dia, mes, ano);

printf("\t corresponde ao %d", totaldias);

}

// main

main ( )

{

ColetaDados( );

ValidacaoMesDia( );

QtdDias( );

Exibir( );

system("pause");

}

Link para o comentário
Compartilhar em outros sites

A lógica do C não é assim como você fez o programa. Depois fica tão complicado ajustar isso. Não interferi na lógica, só dei um jeito no "C" que estava com muito bug, na verificação e numa chamada inválida que você fez ao coletadados.

Virou esse resultado:

#include <stdio.h>

#include <stdlib.h>

int dia, mes, ano, bissexto, somameses, i, totaldias;

int calendario[12] = {31,29,31,30,31,30,31,31,30,31,30,31};

//coleta os dados necessarios para o programa

void ColetaDados( ){

while( dia == 0 || dia > 31 )

{

printf("Digite um dia: ");

scanf("%d",&dia);

}

while( mes == 0 || mes > 12 )

{

printf("\n\nDigite um mes: ");

scanf("%d",&mes);

}

while ( ano == 0 || ano < 1990 || ano > 2100)

{

printf("\n\nDigite um ano: ");

scanf("%d",&ano);

system("cls");

}

}

// aqui valida o mes e fala se e bissexto ou nao

int ValidacaoMesDia( ){

if(mes==1 & dia <= 31)

{

int Janeiro= mes;

return 1;

}

if(mes==2 & dia <= 29)

{

if (ano%4==0 & dia <= 29 )

{

int Fevereiro= mes;

bissexto = 1;

return 1;

}

else

if( dia <= 28 )

{

int Fevereiro= mes;

bissexto = 0;

return 1;

}

}

if(mes==3 & dia <= 31)

{

int Marco= mes;

return 1;

}

if(mes==4 & dia <=30)

{

int Abril= mes;

return 1;

}

if(mes==5 & dia <=31)

{

int Maio= mes;

return 1;

}

if(mes==6 & dia<=30)

{

int Junho= mes;

return 1;

}

if(mes==7 & dia <= 31)

{

int Julho= mes;

return 1;

}

if(mes==8 & dia <=31)

{

int Agosto= mes;

return 1;

}

if(mes==9 & dia <= 30)

{

int Setembro= mes;

return 1;

}

if(mes==10 & dia <= 31)

{

int Outubro= mes;

return 1;

}

if(mes==11 & dia <= 30)

{

int Novembro= mes;

return 1;

}

if(mes==12 & dia <= 31)

{

int Dezembro= mes;

return 1;

}

printf("Erro Confirme os dados novamente... \n\n");

return 0;

// return ColetaDados( ); isto não é possível fazer!!!

}

//aqui fala quantos dias estão decorrentes de um ano

void QtdDias( )

{

for( i=0; i<=calendario[mes-1]; i++)

{

somameses = somameses + calendario;

}

totaldias = dia + somameses;

if(bissexto == 0 )

{

totaldias = dia + somameses - 1;

}

}

// aqui exibe a data

void Exibir ( )

{

printf("A data a ser mostrada e: \n\n");

printf("%d / %d / %d", dia, mes, ano);

printf("\t corresponde ao %d", totaldias);

}

// main

void main ( )

{

ColetaDados( );

while ( 0 == ValidacaoMesDia( ) );

QtdDias( );

Exibir( );

system("pause");

}

Link para o comentário
Compartilhar em outros sites

todos os programas continuam com a mesma falha: nao apresentam o dia do ano que a data apresentada corresponde.

seria isso que voce gostaria tipo

// 27/07/2009 => 27 + 30 (6) + 31(5) + 30 (4) + 31(3) + 29/28 (2) + 31(1) = X dias do ano 2009...

// codigo abaixo

int calendario[12] = {31,0,31,30,31,30,31,31,30,31,30,31};

int QtdDias( )

{

for( i=0; i<=calendario[mes-2]; i++)

{

somameses = somameses + calendario;

}

totaldias = dia + somameses;

if(bissexto == 0 )

{

totaldias = dia + somameses - 1;

}

Link para o comentário
Compartilhar em outros sites

aproveitando a ocasião, sera que alguém conhece algum algoritmo de descriptografia? por exemplo para descriptografar chaves de programas, senhas de servidores web, para wireless do tipo wpa e wep?

KKKKKKKKKKKKKKKKKKKK

você e kabuloso tipo para descriptografia ja vi algo em C mais nunca mexi com o mesmo para quebrar senhas de internet WIRELESS eu uso LINUX com um programinha,ou seja NET FREE!!

Link para o comentário
Compartilhar em outros sites

huhuahuahua porque kabuloso? tipo, tava querendo saber esses algoritmos de descriptografia por brute force, desses que tentam todas as combinações possiveis, ate chegar no resultado.

kkkkkkkkkkkkkk

quase impossivel meu hj em dia MSN, ORKUT para hackear esta muito dificl os antigos bug's foram corrigidos...

Link para o comentário
Compartilhar em outros sites

mas existe os programas que trabalham pro brute force... por exemplo, se você faz um acesso via ftp em um servidor, ele vai te pedir username e password. se for um servidor baseado em unix, provavelmente você vai conseguir logar como root. isso é a parte simples, pois depois você tem de descobrir o password. Para descobrir o password, você pode fazer por brute force, que é uma forma que testa todas as combinações possiveis sequencias de caracteres. Existem varios programas que fazem exatamente isso... o que eu queria saber é como esses programas trabalham... como é o algoritmo que eles rodam, etc...

Link para o comentário
Compartilhar em outros sites

  • 9 anos depois...
  • 10 meses depois...

/*#include<stdio.h>

#include<math.h>

#include<string.h>

int main()

{

int ano, anobissexto, mesfevereirobissexto;

char mes[15];

 

scanf("%s",mes);

scanf("%d",&ano);

 

if (ano % 4==0 ) {

anobissexto = 366;

mesfevereirobissexto = 29;

}

 

else {

anobissexto = 365;

mesfevereirobissexto = 28;

}

 

if (strcmp(mes,"JANEIRO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"FEVEREIRO") == 0){

printf("DIAS = %d\n",mesfevereirobissexto);

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"MARCO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"ABRIL") == 0){

printf("DIAS = 30\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"MAIO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"JUNHO") == 0){

printf("DIAS = 30\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"JULHO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"AGOSTO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"SETEMBRO") == 0){

printf("DIAS = 30\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

else if (strcmp(mes,"OUTUBRO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

else if (strcmp(mes,"NOVEMBRO") == 0){

printf("DIAS = 30\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

else if (strcmp(mes,"DEZEMBRO") == 0){

printf("DIAS = 31\n");

printf("DIAS NO ANO = %d\n",anobissexto);

}

 

return 0;

 

}

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!