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

    [C]calendario perpetuo

    Ragazzi devo realizzare un calendario perpetuo
    ho realizzato tutto gli script,mi sono trovato in che giorno inizia la settimana.

    ho questo schema

    D L M M G V S
    i dati in input sono aanno = l'anno da controllare (bisestile?)
    amese = mese da visualizzare (30,31,29 giorni?)

    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>




    int riga;
    int start; //scarto
    int x;
    int w;
    int t;
    int i;
    int ws;
    int settimana;
    int mese;
    int giorni;
    int amese;
    int aanno;

    main(){


    printf("#######################################\n" );
    printf(" Calendario\n");
    printf("#######################################\n" );

    printf("Inserisci il mese del quale vuoi visualizzare il calendario: es(12)\n");
    scanf("%d",&amese);
    printf("\nInserisci l'anno del quale vuoi visualizzare il calendario:es(2001)\n");
    scanf("%d",&aanno);
    printf("\n");

    printf("D\t");
    printf("L\t");
    printf("M\t");
    printf("M\t");
    printf("G\t");
    printf("V\t");
    printf("S\t");
    printf("\n");

    //bisestile?
    if(aanno % 4 == 0 && aanno % 100 != 0 || aanno % 400 == 0){ x=1;} else {x=0;}


    switch(amese){
    case 1:
    w=30;
    break;

    case 2:
    if(x==1){
    w=29;
    }
    else {w=28;}
    break;


    case 3:
    w=31;
    break;

    case 4:
    w=30;
    break;

    case 5:
    w=31;
    break;

    case 6:
    w=30;
    break;

    case 7:
    w=31;
    break;

    case 8:
    w=31;
    break;

    case 9:
    w=30;
    break;

    case 10:
    w=31;
    break;

    case 11:
    w=30;
    break;

    case 12:
    w=31;
    break;

    default:
    printf("ERRORE");

    }



    ws = (aanno+ (aanno- 1 ) /4 - (aanno - 1) / 100 + (aanno - 1) /400) %7; //formula per il calcolo del primo giorno della sett
    switch(ws){//calcolo gli spazi da saltare
    case 1: start=0; break; //domenica
    case 2: start=1; break; //lunedi
    case 3: start=2; break; //martedi
    case 4: start=3; break; //mercoledi
    case 5: start=4; break; //giovedi
    case 6: start=5; break; //venerdi
    case 7: start=6; break; //sabato
    }



    for(i=-1;i<start;i++){printf(" \t"); t++;} //??
    for(x=5-t;x<4;x++){printf("%d\t",x); }

    for(giorni=7-t+1;giorni<=w+1;giorni++){

    if(giorni == 7-t+1 ||giorni== 14-t+1 || giorni == 21-t+1 || giorni == 28-t+1) {printf("\n");}
    printf("%d\t",giorni);}





    getch();
    }


    oltre questo non riesco a proseguire,sono un neofita col C..
    in pratica ho start che sono le \t che ho saltato
    con un ciclo for inserisco le tabulazioni
    ora dovrei ricompletare la riga

    non riesco a trovare un algoritmo che mi permetta,sapendo il numero delle tabulazioni da scarta,di continuare la riga e poi andare a capo appena sn stati scritti 7 numeri


    il risultato che ottengo è sempre questo

    D L M M G V S
    1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    etc

    ovvero il valore della prima riga non cambia con i mesi,ma il valore restituito da ws(il giorno in cui inizia la settimana 1=domenica,2=lunedi)è giusto

    sto impazzendo

  2. #2
    credo di aver trovato l'errore..
    ho sbagliato la formula del calcolo del primo giorno

  3. #3
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    quello switch è agghiacciante
    con paio di if avresti lo stesso risultato

    codice:
     if(amese==1||amese==4||amese==6||amese==9||amese==11) w=30;
       else if(amese==2)if(x)w=29; else w=28;
       else w=31;

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ant_alt
    agghiacciante
    E' il termine piu' appropriato ...

    (senza offesa per chi inizia ...)

    Come l'altro switch

    switch(ws)

    ... bastava una

    start=ws-1;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    scusate se rompo
    innanzitutto grazie delle correzioni

    come posso fare per sapere in che giorno cade il prossimo mese?

    sapendo che gennaio 2009 è un giovedi come dovrei impostare un algoritmo in grado di dirti in che giorno cade il primo febbraio?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da System
    come posso fare per sapere in che giorno cade il prossimo mese?

    sapendo che gennaio 2009 è un giovedi come dovrei impostare un algoritmo in grado di dirti in che giorno cade il primo febbraio?
    Che vuol dire "gennaio 2009 è un giovedì" ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente bannato
    Registrato dal
    Feb 2004
    Messaggi
    2,803
    Originariamente inviato da oregon
    Che vuol dire "gennaio 2009 è un giovedì" ?
    vuol dire che il primo gennario 09 è giovedì, infatti, a prescindere dal suo codice, credo che per un programma del genere stabilire il primo giorno dell'anno sia il primo passo

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da ant_alt
    vuol dire che il primo gennario 09 è giovedì
    Gia' ... basta scriverlo ... poteva essere l'ultimo del mese, il 15 o chissa' cosa ... quando si danno delle spiegazioni, bisogna darle precise ...

    In ogni caso, se parliamo del primo del mese, considerando che gennaio e' di 31 giorni, trovi il resto della divisione per 7

    31 mod 7

    cioe' 3 e, partendo dal giovedì, aggiungi tale risultato

    venerdì sabato domenica

    Il 1 febbraio sarà domenica ...

    (SE&O)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.