maio 1 2009

Calendário em C++

Muita gente possui certa dificuldade em montar um programa de calendário em C ou C++, e esse é um exercício que muitos professores de faculdade pedem, irei passar para vocês 3 códigos de calendário em C++, o que eu criei é o mais POG(Programação Orientada a Gambiarra).

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int ano, mes, i, dias_mes, anobi, diasecular;
    int termo1, termo2, termo3, termo4, termo5, termo6, termo7, resto;
printf("Calendario\n\n");
printf("Autor: <Vinicius Viana http://www.infomaroto.com>\n\n");
printf("Entre com o ano (1901-2099):");
scanf("%d", &ano);
if(ano>=1901 && ano<2099){
          }else{
          printf("\nO ano tem que ser entre 1901 e 2099\n\n");
          system("PAUSE"); 
          return EXIT_SUCCESS;}
printf("Entre com o mes (1-12):");
scanf("%d", &mes);
            if(mes <=12 && mes >= 1){
if(mes==2 && ano%4==0 && ano%100!=0 || mes==2 && ano%400==0){
	anobi = 1;
}else{ anobi = 0;}
if (mes == 2 && anobi== 1){
        dias_mes = 29;}
else if (mes == 2 && anobi== 0){
     dias_mes = 28;}
else if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10
          || mes == 12){
	dias_mes = 31;}
else if(mes == 4 || mes == 6 || mes == 9 || mes == 11){
   dias_mes = 30;}  
// deus abencoe http://www.inf.ufrgs.br/~cabral/Dia_do_Seculo.html
   termo1 = (ano - 1901)*365;
   termo2 = (ano - 1901)/4;
   termo3 = (mes - 1) *31;
   termo4 = (mes * 4 + 23)/10;
   termo5 = (mes + 12)/ 15;
   termo6 = (4 - ano % 4) / 4;
   termo7 = (mes + 12)/ 15;
   diasecular = termo1 + termo2 + 1 + termo3 - termo4 * termo5 + termo6 * termo7; 
   resto = diasecular % 7;
   printf("%d Dia-do-Seculo(%d)\n\n", diasecular, resto);
   switch(resto){
            case 0:
            printf("D  S  T  Q  Q  S  S\n");
            printf("   1  ");
            for (i=2;i<7;i++){
            printf("%d  ", i);}
            printf("\n");
            for (i=7;i<10;i++){
                printf("%d  ", i);}
               for (i=10;i<14;i++){
                printf("%d ", i);}   
                printf("\n");
                for (i=14;i<21;i++){
                 printf("%d ", i);}
                 printf("\n");
                 for (i=21;i<28;i++){
                 printf("%d ", i);}
                 printf("\n");
                 if (dias_mes == 28){
                 printf("28\n");} 
                 if (dias_mes >=29){  
                 for (i=28;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");}
            break;
            case 1:
                 printf("D  S  T  Q  Q  S  S\n");
                 printf("      1  ");
            for (i=2;i<6;i++){
            printf("%d  ", i);}
            printf("\n");
            for (i=6;i<10;i++){
                printf("%d  ", i);}
               for (i=10;i<13;i++){
                printf("%d ", i);}   
                printf("\n");
                for (i=13;i<20;i++){
                 printf("%d ", i);}
                 printf("\n");
                 for (i=20;i<27;i++){
                 printf("%d ", i);}
                 printf("\n");   
                 for (i=27;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");
            break;
            case 2:
                 printf("D  S  T  Q  Q  S  S\n");
                 printf("         1  ");
            for (i=2;i<5;i++){
            printf("%d  ", i);}
            printf("\n");
            for (i=5;i<10;i++){
                printf("%d  ", i);}
               for (i=10;i<12;i++){
                printf("%d ", i);}   
                printf("\n");
                for (i=12;i<19;i++){
                 printf("%d ", i);}
                 printf("\n");
                 for (i=19;i<26;i++){
                 printf("%d ", i);}
                 printf("\n");   
                 for (i=26;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");  
            break;
            case 3:
                 printf("D  S  T  Q  Q  S  S\n");
                 printf("            1  ");
            for (i=2;i<4;i++){
            printf("%d  ", i);}
            printf("\n");
            for (i=4;i<9;i++){
                printf("%d  ", i);}
               for (i=9;i<11;i++){
                printf("%d  ", i);}   
                printf("\n");
                for (i=11;i<18;i++){
                 printf("%d ", i);}
                 printf("\n");
                 for (i=18;i<25;i++){
                 printf("%d ", i);}
                 printf("\n");   
                 for (i=25;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");
            break;
            case 4:
                 printf("D  S  T  Q  Q  S  S\n");
                 printf("               1  ");
            for (i=2;i<3;i++){
            printf("%d  ", i);}
            printf("\n");
            for (i=3;i<10;i++){
                printf("%d  ", i);}
                printf("\n");
               for (i=10;i<17;i++){
                printf("%d ", i);}   
                printf("\n");
                for (i=17;i<24;i++){
                 printf("%d ", i);}
                 printf("\n");
                 if (dias_mes == 30 || dias_mes == 29||dias_mes == 28 ){
                 for (i=24;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");
                 }else{
                 for (i=24;i<=30;i++){
                 printf("%d ", i);} 
                 printf("\n");
                 printf("31\n");}
            break;
             case 5:
                 printf("D  S  T  Q  Q  S  S\n");
                 printf("                  1\n");
            for (i=2;i<9;i++){
            printf("%d  ", i);}
            printf("\n");
            printf("9  ");
            for (i=10;i<16;i++){
                printf("%d ", i);}
                printf("\n");
               for (i=16;i<23;i++){
                printf("%d ", i);}   
                printf("\n");
                 if (dias_mes == 28 || dias_mes == 29){   
                 for (i=23;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");}
                 else if (dias_mes == 30){
                 for (i=23;i<=30;i++){
                 printf("%d ", i);} 
                 printf("\n");
                 printf("30\n");}
                 else if (dias_mes == 31){
                 for (i=23;i<30;i++){
                 printf("%d ", i);} 
                 printf("\n");
                 printf("30 ");
                 printf("31\n");
                 }
            break;
             case 6:
                  printf("D  S  T  Q  Q  S  S\n");
                  printf("1  ");
            for (i=2;i<8;i++){
            printf("%d  ", i);}
            printf("\n");
            for (i=8;i<10;i++){
                printf("%d  ", i);}
                for (i=10;i<15;i++){
                printf("%d ", i);}
                printf("\n");
               for (i=15;i<22;i++){
                printf("%d ", i);}   
                printf("\n");
                for (i=22;i<29;i++){
                 printf("%d ", i);}
                 printf("\n");
                 for (i=29;i<=dias_mes;i++){
                 printf("%d ", i);} 
                 printf("\n");
            break;
            }
 
 
}else{
      printf("\nO mes tem que ser de 1 a 12\n\n");}
     system("PAUSE"); 
    return EXIT_SUCCESS;
}
/*********************************************************/
/* Calendário */
/* Bruno Annunciato */
/* Data: 08/04/2009 */
/* */
/*********************************************************/
#include <stdio.h>
#include <stdlib.h>
 
#define domingo    0
#define segunda    1
#define terca      2
#define quarta     3
#define quinta     4
#define sexta      5
#define sabado     6
 
#define NMAX     100
 
#define VERDADEIRO 1
#define FALSO      0
 
 
void forneca_instrucoes(void);
int obtenha_ano(void);
int obtenha_mes(void);
void imprima_calendario(int ano);
void imprima_calendario_do_mes(int mes, int ano);
void indente_primeira_linha(int dia_da_semana);
int numero_de_dias_do_mes(int mes, int ano);
int primeiro_dia_do_mes(int mes, int ano);
int eh_bissexto(int ano);
void imprima_cabecalho(int mes, int ano);
 
 
int main()
{
    int ano, mes;
 
    forneca_instrucoes();
    ano = obtenha_ano();
    mes = obtenha_mes();
    imprima_calendario(ano);
 
    system("pause");
    return 0;
}
 
void forneca_instrucoes(void)
{
 
    printf("Este programa imprime o calendario para um dado ano e mes.\n");
    printf("Autor: Bruno Annunciato RA: 200804140\n\n");
    printf("INSTRUCOES:\n");    
    printf("- O ano nao pode ser anterior a 1901.\n");
    printf("- Os meses sao apresentados do seguinte modo:\n");
    printf("     JANEIRO eh 1.\n");    
    printf("     FEVEREIRO eh 2.\n");    
    printf("     MARCO eh 3.\n");    
    printf("     ABRIL eh 4.\n");    
    printf("     MAIO eh 5.\n");    
    printf("     JUNHO eh 6.\n");    
    printf("     JULHO eh 7.\n");    
    printf("     AGOSTO eh 8.\n");    
    printf("     SETEMBRO eh 9.\n");    
    printf("     OUTUBRO eh 10.\n");    
    printf("     NOVEMBRO eh 11.\n");    
    printf("     DEZEMBRO eh 12.\n");    
    printf("- Ano ou mes fora das intrucoes nao serao aceitos.\n\n");
    }
 
int obtenha_ano(void)
{
    int ano;
 
    while (VERDADEIRO) {
        printf("Calendario de que ano? ");
        scanf("%d", &ano);
        if (ano >= 1901){
            printf("Calendario de %d\n", ano);
            return ano;
        }
        printf("O ano precisa ser pelo menos 1901.\n");
    }
}
 
int obtenha_mes(void)
{
    int mes;
 
    while (VERDADEIRO) {
        printf("Qual sera o mes desse ano: ");
        scanf("%d", &mes);
        if (mes >=1 && mes<=12){
              switch(mes) {
              case  1: printf("Calendario do mes de Janeiro\n\n"); break;
              case  2: printf("Calendario do mes de Fevereiro\n\n"); break;
              case  3: printf("Calendario do mes de Marco\n\n"); break;
              case  4: printf("Calendario do mes de Abril\n\n"); break;
              case  5: printf("Calendario do mes de Maio\n\n"); break;
              case  6: printf("Calendario do mes de Junho\n\n"); break;
              case  7: printf("Calendario do mes de Julho\n\n"); break;
              case  8: printf("Calendario do mes de Agosto\n\n"); break;
              case  9: printf("Calendario do mes de Setembro\n\n"); break;
              case 10: printf("Calendario do mes de Outubro\n\n"); break;
              case 11: printf("Calendario do mes de Novembro\n\n"); break;
              case 12: printf("Calendario do mes de Dezembro\n\n"); break;
              }
                return mes;
        }
        printf("O mes deve ser de 1 a 12 como especificado nas instrucoes.\n");
    }
}
 
void imprima_calendario(int ano)
{
    int mes;
 
        imprima_calendario_do_mes(mes, ano);
        printf("\n");
 
}
 
void imprima_calendario_do_mes(int mes, int ano)
{
    int dia_da_semana, n_dias, dia, v[NMAX], A[NMAX][NMAX], B[NMAX][NMAX], C[NMAX][NMAX];
 
    imprima_cabecalho(mes, ano);
    printf(" Do Se Te Qu Qu Se Sa\n");
    n_dias = numero_de_dias_do_mes(mes, ano);
    dia_da_semana = primeiro_dia_do_mes(mes, ano);
    indente_primeira_linha(dia_da_semana);
    for (dia = 1; dia <= n_dias; dia++) {
        printf(" %2d", dia);
        if (dia_da_semana == sabado){
          printf("\n");
        }
        dia_da_semana = (dia_da_semana + 1) % 7;
 
    }
    if (dia_da_semana != domingo) printf("\n");
}
 
void imprima_cabecalho(int mes, int ano)
{
  switch(mes) {
    case  1: printf("    Janeiro"); break;
    case  2: printf("    Fevereiro"); break;
    case  3: printf("    Marco"); break;
    case  4: printf("    Abril"); break;
    case  5: printf("    Maio"); break;
    case  6: printf("    Junho"); break;
    case  7: printf("    Julho"); break;
    case  8: printf("    Agosto"); break;
    case  9: printf("    Setembro"); break;
    case 10: printf("    Outubro"); break;
    case 11: printf("    Novembro"); break;
    case 12: printf("    Dezembro"); break;
    default: printf("não pode acontecer!\n"); exit(0);
  }
 
  printf(" %d\n", ano);
}
 
void indente_primeira_linha(int dia_da_semana)
{
    int i;
 
    for (i = 0; i < dia_da_semana; i++) {
        printf("   ");
    }
}
 
int numero_de_dias_do_mes(int mes, int ano)
{
    switch (mes) {
      case 2:
        if (eh_bissexto(ano)) return 29;
        return 28;
      case 4: case 6: case 9: case 11:
        return 30;
      default:
        return 31;
    }
}
 
int primeiro_dia_do_mes(mes, ano)
{
    int dia_da_semana, i;
 
    dia_da_semana = terca;
    for (i = 1901; i < ano; i++) {
        dia_da_semana = (dia_da_semana + 365) % 7;
        if (eh_bissexto(i)) dia_da_semana = (dia_da_semana + 1) % 7;
    }
    for (i = 1; i < mes; i++) {
        dia_da_semana = (dia_da_semana + numero_de_dias_do_mes(i, ano)) % 7;
    }
    return dia_da_semana;
}
 
int eh_bissexto(int ano)
{
    return  ((ano % 4 == 0) && (ano % 100 != 0))
             || (ano % 400 == 0);
}
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  int i;
  int mes, ano;
  int dias;
  int dia_da_semana;
  int dias_no_mes;
  char *meses[] = { "JANEIRO", "FEVEREIRO", "MARCO", "ABRIL", "MAIO", "JUNHO",
                    "JULHO", "AGOSTO", "SETEMBRO", "OUTUBRO", "NOVEMBRO", "DEZEMBRO" };
 
/*----Entrada de dados. */
 
  printf( "Calendário:\n" );
  printf( "Autor: Rodolfo Goya\n\n" );
 
  do /* Repete até teclar ano entre 1901 e 2099. */
  {
    printf( "\nEntre com o ano (1901-2099):  " );
    scanf( "%d", &ano );
  }
  while( ano < 1901 || ano > 2099 );
 
  do /* Repete até teclar mes entre 1 e 12.      */
  {
    printf( "\nEntre com o mes (1-12):  " );
    scanf( "%d", &mes );
  }
  while( mes < 1 || mes > 12 );
 
/*----Calcula o numero de dias entre 1/1/1901 e 1/mes/ano. */
 
  dias  = 365 * ( ano - 1901 );   /* dias entre 01/01/1901 e 31/12/(ano-1)                   */
  dias += ( ano - 1901 ) / 4;     /* dias de anos bissextos entre 01/01/1901 e 31/12/(ano-1) */
  switch( mes )
  {
    case 12: dias += 30; /* soma os dias do mes de novembro. */
    case 11: dias += 31; /* soma os dias do mes de outubro.  */
    case 10: dias += 30; /* soma os dias do mes de setembro. */
    case 9:  dias += 31; /* soma os dias do mes de agosto.   */
    case 8:  dias += 31; /* soma os dias do mes de julho.    */
    case 7:  dias += 30; /* soma os dias do mes de junho.    */
    case 6:  dias += 31; /* soma os dias do mes de maio.     */
    case 5:  dias += 30; /* soma os dias do mes de abril.    */
    case 4:  dias += 31; /* soma os dias do mes de março.    */
    case 3:  if( ano % 4 == 0 ) /* ano%4==0 -> ano bissexto. */
               dias += 29;
             else
               dias += 28;
    case 2:  dias += 31; /* soma os dias do mes de janeiro.  */
    case 1:  break;
  }
 
/*----Calcula o dia da semana de 1/mes/ano. 0= domingo, 1=segunda, ... 6=sabado */
 
  dia_da_semana = ( 2 + dias ) % 7; /* 1/1/1901 foi terca-feira. */
 
/*----Calcula o número de dias no mes. */
 
  switch( mes )
  {
    case 12: dias_no_mes = 31; /* dias do mes de dezembro. */
             break;
    case 11: dias_no_mes = 30; /* dias do mes de novembro. */
             break;
    case 10: dias_no_mes = 31; /* dias do mes de outubro.  */
             break;
    case 9:  dias_no_mes = 30; /* dias do mes de setembro. */
             break;
    case 8:  dias_no_mes = 31; /* dias do mes de agosto.   */
             break;
    case 7:  dias_no_mes = 31; /* dias do mes de julho.    */
             break;
    case 6:  dias_no_mes = 30; /* dias do mes de junho.    */
             break;
    case 5:  dias_no_mes = 31; /* dias do mes de maio.     */
             break;
    case 4:  dias_no_mes = 30; /* dias do mes de abril.    */
             break;
    case 3:  dias_no_mes = 31; /* dias do mes de março.    */
             break;
    case 2:  if( ano % 4 == 0 ) /* ano%4==0 -> ano bissexto. */
               dias_no_mes = 29;
             else
               dias_no_mes = 28;
             break;
    case 1:  dias_no_mes = 31; /* dias do mes de janeiro.  */
             break;
  }
 
  printf( "%15s/%d\n", meses[ mes - 1 ], ano );
  printf( " D  S  T  Q  Q  S  S\n" );
  for( i = 0; i < dia_da_semana; i++ )
    printf( "   " );
 
  for( i = 1; i <= dias_no_mes; i++ )
  {
    printf( "%2d ", i );
    if( ++dia_da_semana == 7 )
    {
      dia_da_semana = 0;
      printf( "\n" );
    }
  }
 
  printf( "\n" );
 
  system("PAUSE");
  return 0;
}


4 Comentários:

Trackbacks

  1. dety diz:
    Ficou dez!!!!
    junho 3rd, 2011 às 4:40 pm
  2. Filipe diz:
    Olhando um algoritmo desse, nessas horas eu me sinto um lixo

    Fico imaginando como eu sou burro, pq se nem olhando eu consigo entender direito, imagina se eu tivesse que fazer isso.

    Acho que nem eu copiando mil vezes, não entenderia o conceito por completo. Acho muito complexo. Devo ter QI -1. rsrs

    Muito bom!

    outubro 28th, 2011 às 12:37 pm
  3. frederico diz:
    muito bom , mais o segundo está com erro de compilação por que não se coloca Caracteres em variáveis que foram atribuídas como inteiro.

    Ex: int numero”_”de”_”dias”_”do”_”mes(int mes, int ano);

    março 26th, 2012 às 3:44 pm
  4. Adenilson Rodrigues diz:
    Oi boa noite muito bom mesmo parabens, tem como voce colocar uns comentarios, ou se tem como voce mim manda para meu email, explicando como estasendo feito o progama, com comentario…. quero entender como foi feito eu so entendie um poco mais ainda to com Duvida, se poder fazer isso por mim eu serei eternamente grato, estou com muitas duvidas, to precisando de mais… Tudo de bom.
    email: adenilson_wyd@hotmail.com
    março 17th, 2013 às 9:02 pm

DEIXE UM COMENTÁRIO

Subscrever

Subscreve o Blog



Publicidade

Comentários Recentes

  • shirley Balazs: Parabéns!! Informações de utilidade publica e de primeira, foi muito útil a mim.Obrigada!!
  • Jefferson Ferreira de brito: eu quero muito
  • thiago valente: Eu quero um para mim
  • Lucas martins balieiro: Eu não fiz o enem mesmo assim eu posso me inscrever no site essa é minha dúvida, só queme...
  • Francisca Marli Oliveira: quero saber quanto tenho no meu fgts

Links

Leitores Recentes

VALE O CLIQUE!

Site Seguro Ocioso

Divulgue o blog Infomaroto em seu site e tenha seu link ou banner aqui.
Blog Infomaroto