cal.c (3568B)
1 /* Esercizio 4.36 */ 2 3 #include <stdio.h> 4 5 int main() 6 { 7 int giorno, mese, anno; 8 int giorni; /* giorni del mese corrente */ 9 10 /* l_giorni: copia di giorni (per il loop) 11 * newline: per indentare e andare a capo. */ 12 int l_giorni = 0, newline = 0, i; 13 14 do { /* Prendo in input l'anno */ 15 printf("Inserire anno [ '94 - '99 ]: "); 16 scanf("%d", &anno); 17 } while(anno < 1994 || anno > 1999); 18 printf("\n"); 19 20 for(i = 1994; i <= anno; ++i) { 21 22 /* mesi */ 23 for(mese = 1; mese <= 12; ++mese) { 24 25 /* conto i giorni */ 26 switch(mese) { 27 case 1: 28 case 3: 29 case 5: 30 case 7: 31 case 8: 32 case 10: 33 case 12: 34 giorni = 31; 35 break; 36 37 case 2: 38 if ( !( i % 4 ) && i % 100 || !( i % 400 ) ) 39 giorni = 29; 40 else 41 giorni = 28; 42 43 break; 44 45 case 4: 46 case 6: 47 case 9: 48 case 11: 49 giorni = 30; 50 51 } /* end switch (mese) */ 52 53 if (i == anno) { /* se è l'anno richiesto */ 54 55 printf("%5s", " "); 56 57 switch(mese) { 58 case 1: 59 printf("Gennaio"); 60 break; 61 case 2: 62 printf("Febbraio"); 63 break; 64 case 3: 65 printf("Marzo"); 66 break; 67 case 4: 68 printf("Aprile"); 69 break; 70 case 5: 71 printf("Maggio"); 72 break; 73 case 6: 74 printf("Giugno"); 75 break; 76 case 7: 77 printf("Luglio"); 78 break; 79 case 8: 80 printf("Agosto"); 81 break; 82 case 9: 83 printf("Settembre"); 84 break; 85 case 10: 86 printf("Ottobbre"); 87 break; 88 case 11: 89 printf("Novembre"); 90 break; 91 case 12: 92 printf("Dicembre"); 93 } 94 95 printf(" %d\n", anno); 96 97 /* ciclo i giorni */ 98 printf("%3s%3s%3s%3s%3s%3s%3s\n", 99 "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"); 100 101 for(giorno = 1; giorno <= giorni; ++giorno) { 102 103 if (giorno == 1) { /* primo del mese */ 104 105 switch((l_giorni+giorno) % 7) { 106 107 case 0: /* venerdì */ 108 printf("%3s%3s%3s%3s", 109 " ", " ", " ", " "); 110 newline = 5; 111 break; 112 case 1: /* Sabato */ 113 printf("%3s%3s%3s%3s%3s", 114 " ", " ", " ", " ", " "); 115 newline = 6; 116 break; 117 case 2: /* domenica */ 118 printf("%3s%3s%3s%3s%3s%3s", 119 " ", " ", " ", " ", " ", " "); 120 newline = 0; 121 break; 122 case 3: /* lunedì */ 123 newline = 1; 124 break; 125 case 4: /* martedì */ 126 printf("%3s", " "); 127 newline = 2; 128 break; 129 case 5: /* mercoledì */ 130 printf("%3s%3s", " ", " "); 131 newline = 3; 132 break; 133 case 6: /* giovedì */ 134 printf("%3s%3s%3s", " ", " ", " "); 135 newline = 4; 136 137 } /* end switch (giorn? % 7) */ 138 } /* end if (giorno == 1) */ 139 140 printf("%3d", giorno); 141 142 if( !(newline % 7) && giorno != giorni) 143 printf("\n"); 144 ++newline; 145 146 } /* end for (giorno <= giorni) */ 147 printf("\n\n"); 148 } /* end if (i == anno) */ 149 150 l_giorni += giorni; 151 152 } /* for (mesi) */ 153 } /* for (anno) */ 154 155 return 0; 156 } /* E0F main */ 157