Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [c]confrontare date

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]confrontare date

    Ho scritto questo programma che serve a confrontare due date immesse dall'utente e che dice qual'e' la piu recente.
    codice:
    #include <stdio.h>
    
    void sostituisci(int);
    
    int bisestile(int a)
    {
     if (a>=0) {
         if (a<1582)
             return (a % 4) ? 1 : 0;
         else
             return ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0) ? 1 : 0;
     }
     return 0;
    }    
    
    main()
    {
     int giorni[]={31,28,31,30,31,30,31,31,30,31,30,31};
     char x;
     int g1,g2,m1,m2,a1,a2,ris,val;
     int fail_1=1;
     int fail_2=1;
     printf("\n\t\t\tCONFRONTO DATE\n\n");
     printf("// prima data //\n\n");
     do {
         printf("Inserire Giorno: ");
         val = scanf("%d",&g1);
         while(getc(stdin)!='\n');
     } while(val==0);
     do {
         printf("Inserire Mese: ");
         val = scanf("%d",&m1);
         while(getc(stdin)!='\n');
     } while(val==0);
     do {
         printf("Inserire Anno: ");
         val = scanf("%d",&a1);
         while(getc(stdin)!='\n');
     } while(val==0);
     ris=bisestile(a1);
     if (a1>0) 
         if (m1>0 && m1<13) 
             if (g1>0 && g1<giorni[m1-1]+1 + (m1==2 ? ris : 0)) 
                 {
                  fail_1=0;  
                  printf("\nHai inserito %d-%d-%d \n\n\n",g1,m1,a1);
                  printf("// seconda data //\n\n");
                  do {
                      printf("Inserire Giorno: ");
                      val = scanf("%d",&g2);
                      while(getc(stdin)!='\n');
                  } while(val==0);
                  do {
                      printf("Inserire Mese: ");
                      val = scanf("%d",&m2);
                      while(getc(stdin)!='\n');
                  } while(val==0);
                  do {
                      printf("Inserire Anno: ");
                      val = scanf("%d",&a2);
                      while(getc(stdin)!='\n');
                  } while(val==0);
                  ris=bisestile(a2);
                  if (a2>0) 
                      if (m2>0 && m2<13) 
                          if (g2>0 && g2<giorni[m2-1]+1 + (m2==2 ? ris : 0)) 
                              {
                               fail_2=0;  
                               printf("\nHai inserito %d-%d-%d \n\n",g2,m2,a2);
                               printf("Premere INVIO per continuare...");
                               x=getchar();
                               if (x=='\n') {
                                   printf("\n");
                                   if (g2==g1 && m2==m1 && a2==a1) 
                                       printf("Le date sono identiche\n\n");
                                   else {
                                      if (a2>a1) sostituisci();
                                      else if (a2==a1) 
                                               if (m2>m1) sostituisci();
                                               else if (m2==m1)
                                                        if (g2>g1) sostituisci();
                                      printf("La data più recente è %d-%d-%d\n\n",g1,m1,a1);
                                   } 
                               }
                          }
                  if (fail_2) printf("\nLa data inserita non é valida\n\n");     
                 }
     if (fail_1) printf("\nLa data inserita non è valida\n\n");    
    }
    
    void sostituisci(g1,m1,a1,g2,m2,a2)
    {
     g1=g2;
     m1=m2;
     a1=a2;
    }
    a parte il problema nella dichiarazione della funzione sostituisci, scritta per risparmiare qualche linea di codice e come buona pratica, vorrei capire come posso fare per scambiare le due date quando la seconda e' piu recente della prima,magari con una variabile ausiliare.Io non ci sono riuscito.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema e' solo lo scambio?

    Parti considerando solamente una sola variabile, ad esempio il giorno ...
    Come faresti a scambiare

    g1 con g2

    sulla carta?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    errata corrige: rileggendo il post,mi sono accorto di essermi espresso in modo sbagliato.
    Voglio dire che non devo scambiare le date,come ho detto prima, ma semplicemente nel caso la seconda sia piu recente, fare in modo che la prima data assuma i valori della seconda.Sorry

    In questo caso cosa potrei fare?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E quindi la domanda qual e'?

    Non sai fare il confronto o l'assegnazione?

    E cosa c'entra tutto il codice che hai mostrato ...? C'e' qualche parte da esaminare perche' sbagliata o non funzionante ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    E' sempre stato detto di mostrare tutto il codice.

    Il problema credo sia nella funzione sostituisci.Io vorrei creare una funzione che assegni la data2 alla data1 quando viene chiamata.Ma credo che come l'ho scritta io non vada bene,oltre che per il passaggio dei paramentri.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da cristianc
    E' sempre stato detto di mostrare tutto il codice.
    Non ho detto il contrario ... ti ho chiesto di indicare non solo il codice ma anche DOVE e' il problema rispetto al codice mostrato ...

    Il problema credo sia nella funzione sostituisci.Io vorrei creare una funzione che assegni la data2 alla data1 quando viene chiamata.Ma credo che come l'ho scritta io non vada bene,oltre che per il passaggio dei paramentri.
    Beh ... certo ...

    Hai notato che hai usato 6 parametri nella tua funzione sostituisci e quando la chiami non ne passi neanche uno?

    E in ogni caso, se vuoi modificare dei valori passati ad una funzione, devi passarli tramite puntatore ... quelli che devono essere scritti almeno ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    ho risolto cosi e per il momento sembra funzionare:
    codice:
    #include <stdio.h>
    
    void sostituisci(int *,int *,int *,int *,int *,int *);
    
    int bisestile(int a)
    {
     if (a>=0) {
         if (a<1582)
             return (a % 4) ? 1 : 0;
         else
             return ((a % 4 == 0 && a % 100 != 0) || a % 400 == 0) ? 1 : 0;
     }
     return 0;
    }    
    
    main()
    {
     int giorni[]={31,28,31,30,31,30,31,31,30,31,30,31};
     char x;
     int g1,g2,m1,m2,a1,a2,ris,val;
     int fail_1=1;
     int fail_2=1;
     printf("\n\t\t\tCONFRONTO DATE\n\n");
     printf("// prima data //\n\n");
     do {
         printf("Inserire Giorno: ");
         val = scanf("%d",&g1);
         while(getc(stdin)!='\n');
     } while(val==0);
     do {
         printf("Inserire Mese: ");
         val = scanf("%d",&m1);
         while(getc(stdin)!='\n');
     } while(val==0);
     do {
         printf("Inserire Anno: ");
         val = scanf("%d",&a1);
         while(getc(stdin)!='\n');
     } while(val==0);
     ris=bisestile(a1);
     if (a1>0) 
         if (m1>0 && m1<13) 
             if (g1>0 && g1<giorni[m1-1]+1 + (m1==2 ? ris : 0)) 
                 {
                  fail_1=0;  
                  printf("\nHai inserito %d-%d-%d \n\n\n",g1,m1,a1);
                  printf("// seconda data //\n\n");
                  do {
                      printf("Inserire Giorno: ");
                      val = scanf("%d",&g2);
                      while(getc(stdin)!='\n');
                  } while(val==0);
                  do {
                      printf("Inserire Mese: ");
                      val = scanf("%d",&m2);
                      while(getc(stdin)!='\n');
                  } while(val==0);
                  do {
                      printf("Inserire Anno: ");
                      val = scanf("%d",&a2);
                      while(getc(stdin)!='\n');
                  } while(val==0);
                  ris=bisestile(a2);
                  if (a2>0) 
                      if (m2>0 && m2<13) 
                          if (g2>0 && g2<giorni[m2-1]+1 + (m2==2 ? ris : 0)) 
                              {
                               fail_2=0;  
                               printf("\nHai inserito %d-%d-%d \n\n",g2,m2,a2);
                               printf("Premere INVIO per continuare...");
                               x=getchar();
                               if (x=='\n') {
                                   printf("\n");
                                   if (g2==g1 && m2==m1 && a2==a1) 
                                       printf("Le date sono identiche\n\n");
                                   else {
                                      if (a2>a1) sostituisci(&g1,&m1,&a1,&g2,&m2,&a2);
                                      else if (a2==a1) 
                                               if (m2>m1) sostituisci(&g1,&m1,&a1,&g2,&m2,&a2);
                                               else if (m2==m1)
                                                        if (g2>g1) sostituisci(&g1,&m1,&a1,&g2,&m2,&a2);
                                      printf("La data più recente è %d-%d-%d\n\n",g1,m1,a1);
                                   } 
                               }
                          }
                  if (fail_2) printf("\nLa data inserita non é valida\n\n");     
                 }
     if (fail_1) printf("\nLa data inserita non è valida\n\n");    
    }
    
    void sostituisci(int *g1,int *m1,int *a1,int *g2,int *m2,int *a2)
    {
     *g1=*g2;
     *m1=*m2;
     *a1=*a2;
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da cristianc
    ho risolto cosi e per il momento sembra funzionare
    Beh ... hai fatto come ti avevo detto ... anche se i puntatori bastavano per i parametri destinazione ...

    Ma va bene lo stesso ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    in che senso?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Nel senso che ti ho detto ... cosa non ti e' chiaro ?
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.