training

Code I wrote during training
git clone git://git.bitsmanent.org/training
Log | Files | Refs | README

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