Accedi

Ho dimenticato la password

Ultimi argomenti
» argomento
Dom Giu 02, 2013 4:30 pm Da ruggiero98

» problema con la funzione SE aiutoooo x favore?????
Dom Giu 02, 2013 4:18 pm Da ruggiero98

» aiuto in programma con if
Dom Mag 26, 2013 5:39 pm Da ruggiero98

»  CALCOLO PERCENTUALE IN C
Sab Apr 20, 2013 8:22 pm Da ruggiero98

» Costruire un temporizzatore software per accensione luci a led
Lun Mar 25, 2013 2:34 pm Da Cristina Shady

» Ciao a tutti!
Gio Mar 22, 2012 4:19 am Da cosmos91

» Virtualbox VS le periferiche USB
Mar Apr 06, 2010 1:49 pm Da dandeciani

» PROGRAMMA: BINARY CODE
Mar Dic 23, 2008 7:28 pm Da Thalionwen

» saluti a tutti
Mar Dic 23, 2008 7:12 pm Da Thalionwen

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Prima Parte]
Sab Nov 29, 2008 11:44 am Da ya89

» un semplice ciao
Sab Nov 29, 2008 11:38 am Da ya89

» Aiuto per alice 7 mega
Ven Nov 14, 2008 4:03 pm Da root

» FORUM: I nuovi banner
Ven Nov 14, 2008 2:48 pm Da Thalionwen

» Zooming Ricorsivo, questo sconosciuto.
Ven Nov 14, 2008 2:43 pm Da Thalionwen

» GUIDA : LEZIONE 4 : UTILIZZARE GLI ARRAY IN C#
Ven Nov 14, 2008 1:54 pm Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Terza e Ultima Parte]
Ven Nov 14, 2008 12:41 am Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Seconda Parte]
Mer Nov 12, 2008 12:59 am Da ab89

» [PS2] Dark Cloud
Mar Nov 11, 2008 6:50 pm Da ab89

» [PC] Sacred 2
Lun Nov 10, 2008 10:49 pm Da ab89

» GUIDA : CAP 1 LEZIONE 3 INTRODUZIONE AGLI ARRAY
Lun Nov 10, 2008 1:37 pm Da ab89

Flusso RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 



PROGRAMMA: Convertitore data in cifra in data nominale

Andare in basso

PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da Thalionwen il Ven Ott 10, 2008 6:17 pm

Della serie, i programmini scemi!!
Non importa, visto che mi sono impegnata, lo posto lo stesso. Ecco qui di seguito un programmino grazie al quale è possibile convertire una data inserita in cifra (ES: 12.4.2009) in una data scritta "a parole" (ES: 12 Aprile 2009).
Più che altro si è trattato di un esercizio per imparare ad utilizzare il ciclo switch().
Ecco il codice:
Codice:

#include<stdio.h>

main ()
{
    int gg;
    int mm;
    int aaaa;
         
    printf("Inserisci il GIORNO (Es: gg) in cifre da 1 a 31: ");
    scanf("%d",&gg);
             
    printf("Inserisci il MESE (Es: m) in cifre da 1 a 12: ");
    scanf("%d",&mm);
   
    printf("Inserisci l'ANNO (Es: aaaa) in cifre: ");
    scanf("%d",&aaaa);
         
    switch(mm){
    case 1:printf("La data inserita corrisponde al %d Gennaio %d.\n",gg,aaaa);
              break;
    case 2:printf("La data inserita corrisponde al %d Febbraio %d.\n",gg,aaaa);
              break;
    case 3:printf("La data inserita corrisponde al %d Marzo %d.\n",gg,aaaa);
              break;
    case 4:printf("La data inserita corrisponde al %d Aprile %d.\n",gg,aaaa);
              break;
    case 5:printf("La data inserita corrisponde al %d Maggio %d.\n",gg,aaaa);
              break;
    case 6:printf("La data inserita corrisponde al %d Giugno %d.\n",gg,aaaa);
              break;
    case 7:printf("La data inserita corrisponde al %d Luglio %d.\n",gg,aaaa);
              break;
    case 8:printf("La data inserita corrisponde al %d Agosto %d.\n",gg,aaaa);
              break;
    case 9:printf("La data inserita corrisponde al %d Settembre %d.\n",gg,aaaa);
              break;
    case 10:printf("La data inserita corrisponde al %d Ottobre %d.\n",gg,aaaa);
                break;
    case 11:printf("La data inserita corrisponde al %d Novembre %d.\n",gg,aaaa);
                break;
    case 12:printf("La data inserita corrisponde al %d Dicembre %d.\n",gg,aaaa);
                break;
              }
   
    system("PAUSE");
    }
   

Ora però ho una domanda da fare a "chi-se-ne-intende":
1) mettiamo che qualche genio inserisca alla richiesta della cifra del giorno o del mese un numero più grande di 31 per i giorni e più grande di 12 per mesi. Come posso fare in modo che il programma riconosca l'errore e chieda all'untente di reinserire i dati fino a quando quesi non siano corretti? Ho provato ad incastrare if() e while() ma con scarsi risultati.

Aspetto commenti e consigli! Very Happy
avatar
Thalionwen
Novizio
Novizio

Numero di messaggi : 44
Età : 29
Località : Ferrara
Data d'iscrizione : 30.09.08

Visualizza il profilo http://thalionwen.altervista.org

Torna in alto Andare in basso

RE: PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da ab89 il Ven Ott 10, 2008 7:54 pm

Intanto ciao Very Happy
Nessuna critica da fare al programma.
Tutto sommato va bene. Forse in fatto di terminologie sarebbe giusto definire lo Switch come un costrutto più che un ciclo, ma comunque sono dettagli.

Per il problema dei valori da inserire per l'anno il mese e il giorno ti consiglierei :

  1. invertire il senso di inserimento perchè il numero massimo di giorni al mese varia relativamente al mese scelto;
  2. invece di utilizzare un ciclo while provare ad usare un ciclo do..while che in queste situazioni risulta più utile dal mio punto di vista;
La sintassi generale per controllare l'errore sarebbe

do
{
//lettura valore
}
while(valore non valido);

che tradotto in codice diventa

Codice:

    do
    {
        printf("Inserisci il MESE (Es: m) in cifre da 1 a 12: ");
        scanf("%d",&mm);
    }
    while(mm <= 0 || m > 12);

Poi se si volesse fare un cosa fatta bene con tanto di messaggio d'errore sarebbe

Codice:

        int r = 0;
    int limiteGiorni = 0;

    do
    {
        r++;
        if (r > 1)
            printf("Errore ANNO deve essere maggiore di 0 \n ");
        printf("Inserisci l'ANNO (Es: aaaa) in cifre: ");
        scanf("%d",&aaaa);
    }while(aaaa <= 0);
    r = 0;
    do
    {
        r++;
        if (r > 1)
            printf("Errore il GIORNO deve essere espresso in cifre da 1 a 12\n ");
        printf("Inserisci il MESE (Es: m) in cifre da 1 a 12: ");
        scanf("%d",&mm);
    }while(mm <= 0 || mm > 12);
 
    //determina giorni massimi del mese
    if (mm == 2)
      limiteGiorni = 28 + (aaaa%4==0?(aaaa%100==0?(aaaa%400==0?1:0):1):0); //anno bisestile o meno
    else if (mm <= 6)
            limiteGiorni = mm % 2 == 0? 30:31;
          else
            limiteGiorni = mm % 2 == 0? 31:30;
    r = 0;

    do
    {
        r++;
        if (r > 1)
            printf("Errore il GIORNO deve essere espresso in cifre da 1 a %d: \n ", limiteGiorni);
        printf("Inserisci il GIORNO (Es: gg) in cifre da 1 a %d: ",limiteGiorni);
        scanf("%d",&gg);
    }while(gg <= 0 || gg > limiteGiorni);
 

Allora, il codice è semplice anche se può apparire complesso. E' che così risulta meno lineare.
Ora sotituisci la parte di inserimento dei valori del tuo programma con quanto ho scritto e dovresti avere tutti i controlli necessari Very Happy

Se hai bisogno sono a disposizione Very Happy Ciao

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da Thalionwen il Mar Ott 14, 2008 12:49 am

Mitico!! Grazie!! Very Happy

_________________


"...Veramente, faccio quello che mi va di fare. Peccato che abbia sempre troppo da fare per fare quello che veramente mi va di fare. Ne deduco che, alla fine dei conti, veramente faccio sempre quello che devo fare e mai quello che mi va di fare.
Cacchio. Ho il mal di testa."

(cosa pensata in un momento di crisi mistica, sempre più vera)
avatar
Thalionwen
Novizio
Novizio

Numero di messaggi : 44
Età : 29
Località : Ferrara
Data d'iscrizione : 30.09.08

Visualizza il profilo http://thalionwen.altervista.org

Torna in alto Andare in basso

Re: PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da Thalionwen il Mar Ott 14, 2008 6:18 pm

Rieccomi!!
Ho finalmente modificato a mio piacimento il programma di partenza includendo nelle modifiche (chiaramente) i consigli di ab89.
Ecco il codice:
Codice:

#include<stdio.h>

main ()
{
    int gg;
    int mm;
    int aaaa;
    int r = 0;
         
    do
    {
        printf("Inserisci il GIORNO (Es: gg) in cifre da 1 a 31: ");
        scanf("%d",&gg);
    }
    while(gg <= 0 || gg > 31);
             
    do
    {
        printf("Inserisci il MESE (Es: m) in cifre da 1 a 12: ");
        scanf("%d",&mm);
    }
    while(mm <= 0 || mm > 12);
   
    do
    {
        r++;
        if (r > 1){
            printf("Errore: l'ANNO deve essere maggiore di 0\n ");
            }
        printf("Inserisci l'ANNO (Es: aaaa) in cifre: ");
        scanf("%d",&aaaa);
    }
    while(aaaa <= 0);
    r = 0;
   
    switch(mm){
              case 1:printf("La data inserita corrisponde al %d Gennaio %d.\n",gg,aaaa); break;
              case 2:printf("La data inserita corrisponde al %d Febbraio %d.\n",gg,aaaa); break;
              case 3:printf("La data inserita corrisponde al %d Marzo %d.\n",gg,aaaa); break;
              case 4:printf("La data inserita corrisponde al %d Aprile %d.\n",gg,aaaa); break;
              case 5:printf("La data inserita corrisponde al %d Maggio %d.\n",gg,aaaa); break;
              case 6:printf("La data inserita corrisponde al %d Giugno %d.\n",gg,aaaa); break;
              case 7:printf("La data inserita corrisponde al %d Luglio %d.\n",gg,aaaa); break;
              case 8:printf("La data inserita corrisponde al %d Agosto %d.\n",gg,aaaa); break;
              case 9:printf("La data inserita corrisponde al %d Settembre %d.\n",gg,aaaa); break;
              case 10:printf("La data inserita corrisponde al %d Ottobre %d.\n",gg,aaaa); break;
              case 11:printf("La data inserita corrisponde al %d Novembre %d.\n",gg,aaaa); break;
              case 12:printf("La data inserita corrisponde al %d Dicembre %d.\n",gg,aaaa); break;
              }
   
    system("PAUSE");
    }
   

Senza tante pretese, ora il programma funziona come volevo!!
Grazie ab89!

PS. Non ho apportato tutte le modifiche che hai consigliato, se hai notato. Ho fatto una cernita. Grazie lo stesso per lo spunto!

_________________


"...Veramente, faccio quello che mi va di fare. Peccato che abbia sempre troppo da fare per fare quello che veramente mi va di fare. Ne deduco che, alla fine dei conti, veramente faccio sempre quello che devo fare e mai quello che mi va di fare.
Cacchio. Ho il mal di testa."

(cosa pensata in un momento di crisi mistica, sempre più vera)
avatar
Thalionwen
Novizio
Novizio

Numero di messaggi : 44
Età : 29
Località : Ferrara
Data d'iscrizione : 30.09.08

Visualizza il profilo http://thalionwen.altervista.org

Torna in alto Andare in basso

Re: PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da ab89 il Mar Ott 14, 2008 6:30 pm

Felice di esserti stato di aiuto Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum