Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] errore con la stampa di un calendario

    Salve a tutti eccomi di nuovo qui.Sto svolgendo un esercizio che inserito un anno da tastiera mi stampi il calendario corretto.Ora posto il codice ,la mia difficolta è far stampare esattamente il numero preciso sotto il giorno ,in poche parole il primo giorno del mese viene stampato sempre sotto Domenica!!! Non so come fare !!Grazie in anticipo!!!
    codice:
    #include<stdio.h>
    #define annoiniziale 1752
    int main(){
        int anno;
        int inizio;
        int mese=1;
        int giorno=1;
        int colonna=0;
        
        printf("inserire anno: ");
        scanf("%d",&anno);
        
        
        
            
        
        
        
            while(mese<=12){
                giorno=1;
                if (mese==1){
                    printf("GENNAIO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==2){
                    printf("FEbbRAIO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==3){
                    printf("MARZO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==4){
                    printf("APRILE\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                
                }
                else if(mese==5){
                    printf("MAGGIO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==6){
                    printf("GIUGNO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==7){
                    printf("LUGLIO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==8){
                    printf("AGOSTO\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==9){
                    printf("SETTEMbRE\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==10){
                    printf("OTTObRE\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==11){
                    printf("NOVEMbRE\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                else if(mese==12){
                    printf("DICEMbRE\n");
                    printf("\n");
                    printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAb\t\n");
                }
                switch(mese){
                    case 4: case 6: case 9: case 11:    
                    while(giorno<=30){
                        colonna=0;
                        while(colonna<=6){
                            if(giorno>30){
                                break;
                            }
                            else{
                                printf("%d\t",giorno);
                                colonna++;
                                giorno++;
                            }
                        }
                        printf("\n");    
                    }
                    printf("\n");
                mese++;    
                break;
                    case 1: case 3: case 5:case 7: case 8: case 10: case 12:
                    while(giorno<=31){
                        colonna=0;
                        while(colonna<=6){
                            if(giorno>31){
                                break;
                            }
                            else{
                                printf("%d\t",giorno);
                                colonna++;
                                giorno++;
                            }
                        }
                        printf("\n");
                    }
                    printf("\n");
                    mese++;    
                    break;
                    case 2:
                    if(anno%400==0){
                        while(giorno<=29){
                            colonna=0;
                            while(colonna<=6){
                                if(giorno>29){
                                    break;
                                }
                                else{
                                    printf("%d\t",giorno);
                                    colonna++;
                                    giorno++;
                                }
                            }
                            printf("\n");
                        }
                        printf("\n");
                        mese++;
                    }
                    else{
                        while(giorno<=28){
                            colonna=0;
                            while(colonna<=6){
                                if(giorno>28){
                                    break;
                                }
                                else{
                                    printf("%d\t",giorno);
                                    colonna++;
                                    giorno++;
                                }
                            }
                            printf("\n");
                        }
                        printf("\n");
                        mese++;
                    }
                    break;
                }
        }    
        return 0;
    }

  2. #2
    In buona sostanza devi calcolare il giorno della settimana relativo al primo giorno del mese di gennaio dell'anno considerato e stampare tanti tab quanti ne occorrono per posizionare il giorno corrispondente nella colonna giusta:

    codice:
    ...
            dblDay = CalendarDateToJulianDay(anno, mese, giorno);
                
            colonna = DayOfTheWeek(dblDay); 
                
            for ( x = 0; x < colonna; x++ )
                printf("\t");                                  
    ...

    codice:
    #include <stdio.h>
    
    #define annoiniziale 1752
    
    int myal_IsJulianDate(int year, int month, int day)
    {
        if ( year > 1582 )
            return 0;
            
        if ( month > 10 )
            return 0;
            
        if ( day > 4 )
            return 0;
            
        return 1;
    }
    
    double CalendarDateToJulianDay(int year, int month, int day)
    {
        double Y, M, D;
        double A, B;
            
        B = 0;
        
        D = day;    
        
        if ( month <= 2 )
        {
            Y = year - 1;
            M = month + 12;
        }
        else
        {
            Y = year;
            M = month;
        }
        
        if ( !myal_IsJulianDate(year, month, day) )
        {
            A = (int)(Y/100);
            B = 2 - A + (int)(A/4);
        }
        
        return ( (int)(365.25 * (Y + 4716)) + (int)(30.6001 * (M + 1)) + D + B - 1524.5 );    
    }
    
    int DayOfTheWeek(double jd)
    {
        int num = (int)(jd + 1.5);
        int retValue = num % 7;
            
        return retValue;    
    }
    
    int IsLeapYear(int year)
    {
        if ( year % 4 != 0 )
        {
            return 0;
        }
        else
        {
            if ( year % 100 != 0 )
                return 1;
            else if ( year % 400 != 0 )
                return 0;
            else
                return 1;            
        }
    }
    
    void PrintCalendar(int year)
    {
        int anno = year;
        int mese = 1;
        int giorno = 1;
        int colonna = 0;
        double dblDay;
        int x;
        
        int giorniMese[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            
        if ( IsLeapYear(anno) )
            giorniMese[2] = 29;
                
        while(mese <= 12)
        {
            giorno = 1;
            
            switch ( mese )
            {
                case 1:
                    printf("GENNAIO\n");
                    break;
                case 2:
                    printf("FRBBRAIO\n");
                    break;
                case 3:
                    printf("MARZO\n");
                    break;
                case 4:
                    printf("APRILE\n");
                    break;
                case 5:
                    printf("MAGGIO\n");
                    break;
                case 6:
                    printf("GIUGNO\n");
                    break;
                case 7:
                    printf("LUGLIO\n");
                    break;
                case 8:
                    printf("AGOSTO\n");
                    break;
                case 9:
                    printf("SETTEMBRE\n");
                    break;
                case 10:
                    printf("OTTOBRE\n");
                    break;
                case 11:
                    printf("NOVEMBRE\n");
                    break;
                case 12:
                    printf("DICEMBRE\n");
                    break;            
            }
                         
            printf("\n");
            printf("DOM\tLUN\tMAR\tMER\tGIO\tVEN\tSAB\t\n");
            
                
            dblDay = CalendarDateToJulianDay(anno, mese, giorno);
                
            colonna = DayOfTheWeek(dblDay); 
                
            for ( x = 0; x < colonna; x++ )
                printf("\t");                                  
                
            while( giorno <= giorniMese[mese]){                    
                while( colonna <= 6){
                    if( giorno > giorniMese[mese] ){
                        break;
                    }
                    else{
                        printf("%d\t",giorno);
                        colonna++;
                        giorno++;
                    }
                }
                printf("\n");
                colonna = 0;   
            }
            printf("\n");
            mese++;                                                          
        }        
    }
    
    int main()
    {
        int anno;
            
        printf("inserire anno: ");
        scanf("%d",&anno); 
        
        PrintCalendar(anno);
            
        return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.