Accedi

Ho dimenticato la password

Ultimi argomenti
» argomento
PROGRAMMA: Convertitore data in cifra in data nominale EmptyDom Giu 02, 2013 4:30 pm Da ruggiero98

» problema con la funzione SE aiutoooo x favore?????
PROGRAMMA: Convertitore data in cifra in data nominale EmptyDom Giu 02, 2013 4:18 pm Da ruggiero98

» aiuto in programma con if
PROGRAMMA: Convertitore data in cifra in data nominale EmptyDom Mag 26, 2013 5:39 pm Da ruggiero98

»  CALCOLO PERCENTUALE IN C
PROGRAMMA: Convertitore data in cifra in data nominale EmptySab Apr 20, 2013 8:22 pm Da ruggiero98

» Costruire un temporizzatore software per accensione luci a led
PROGRAMMA: Convertitore data in cifra in data nominale EmptyLun Mar 25, 2013 2:34 pm Da Cristina Shady

» Ciao a tutti!
PROGRAMMA: Convertitore data in cifra in data nominale EmptyGio Mar 22, 2012 4:19 am Da cosmos91

» Virtualbox VS le periferiche USB
PROGRAMMA: Convertitore data in cifra in data nominale EmptyMar Apr 06, 2010 1:49 pm Da dandeciani

» PROGRAMMA: BINARY CODE
PROGRAMMA: Convertitore data in cifra in data nominale EmptyMar Dic 23, 2008 7:28 pm Da Thalionwen

» saluti a tutti
PROGRAMMA: Convertitore data in cifra in data nominale EmptyMar Dic 23, 2008 7:12 pm Da Thalionwen

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Prima Parte]
PROGRAMMA: Convertitore data in cifra in data nominale EmptySab Nov 29, 2008 11:44 am Da ya89

» un semplice ciao
PROGRAMMA: Convertitore data in cifra in data nominale EmptySab Nov 29, 2008 11:38 am Da ya89

» Aiuto per alice 7 mega
PROGRAMMA: Convertitore data in cifra in data nominale EmptyVen Nov 14, 2008 4:03 pm Da root

» FORUM: I nuovi banner
PROGRAMMA: Convertitore data in cifra in data nominale EmptyVen Nov 14, 2008 2:48 pm Da Thalionwen

» Zooming Ricorsivo, questo sconosciuto.
PROGRAMMA: Convertitore data in cifra in data nominale EmptyVen Nov 14, 2008 2:43 pm Da Thalionwen

» GUIDA : LEZIONE 4 : UTILIZZARE GLI ARRAY IN C#
PROGRAMMA: Convertitore data in cifra in data nominale EmptyVen Nov 14, 2008 1:54 pm Da ab89

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

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Seconda Parte]
PROGRAMMA: Convertitore data in cifra in data nominale EmptyMer Nov 12, 2008 12:59 am Da ab89

» [PS2] Dark Cloud
PROGRAMMA: Convertitore data in cifra in data nominale EmptyMar Nov 11, 2008 6:50 pm Da ab89

» [PC] Sacred 2
PROGRAMMA: Convertitore data in cifra in data nominale EmptyLun Nov 10, 2008 10:49 pm Da ab89

» GUIDA : CAP 1 LEZIONE 3 INTRODUZIONE AGLI ARRAY
PROGRAMMA: Convertitore data in cifra in data nominale EmptyLun 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 Empty 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
Thalionwen
Thalionwen
Novizio
Novizio

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

http://thalionwen.altervista.org

Torna in alto Andare in basso

PROGRAMMA: Convertitore data in cifra in data nominale Empty 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

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。
PROGRAMMA: Convertitore data in cifra in data nominale 841_Allen_Walker
What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee
PROGRAMMA: Convertitore data in cifra in data nominale BT*xJmx*PTEyMjMxMDgxNTY1MTUmcHQ9MTIyMzEwODE1OTI1MCZwPTY5MDgxJmQ9Jm49Jmc9MSZ*PSZvPWNjZTE1NjdiYjc2NDQ*Y2I5YjRjNmYwYThlM2FlZTBi
PROGRAMMA: Convertitore data in cifra in data nominale Admingn2
ab89
ab89
Admin
Admin

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

Scheda personaggio
PF:

Torna in alto Andare in basso

PROGRAMMA: Convertitore data in cifra in data nominale Empty Re: PROGRAMMA: Convertitore data in cifra in data nominale

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

Mitico!! Grazie!! Very Happy

_________________
PROGRAMMA: Convertitore data in cifra in data nominale Tollmoderatoreev7

"...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)
Thalionwen
Thalionwen
Novizio
Novizio

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

http://thalionwen.altervista.org

Torna in alto Andare in basso

PROGRAMMA: Convertitore data in cifra in data nominale Empty 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!

_________________
PROGRAMMA: Convertitore data in cifra in data nominale Tollmoderatoreev7

"...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)
Thalionwen
Thalionwen
Novizio
Novizio

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

http://thalionwen.altervista.org

Torna in alto Andare in basso

PROGRAMMA: Convertitore data in cifra in data nominale Empty 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

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。
PROGRAMMA: Convertitore data in cifra in data nominale 841_Allen_Walker
What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee
PROGRAMMA: Convertitore data in cifra in data nominale BT*xJmx*PTEyMjMxMDgxNTY1MTUmcHQ9MTIyMzEwODE1OTI1MCZwPTY5MDgxJmQ9Jm49Jmc9MSZ*PSZvPWNjZTE1NjdiYjc2NDQ*Y2I5YjRjNmYwYThlM2FlZTBi
PROGRAMMA: Convertitore data in cifra in data nominale Admingn2
ab89
ab89
Admin
Admin

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

Scheda personaggio
PF:

Torna in alto Andare in basso

PROGRAMMA: Convertitore data in cifra in data nominale Empty Re: PROGRAMMA: Convertitore data in cifra in data nominale

Messaggio Da Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto


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