Piccolo problema... Grazie.

di il
2 risposte

Piccolo problema... Grazie.

Salve ho un problema: tutto bene nell'esecuzione del codice come si vede in questo printscreen:
http://prntscr.com/fxp51
ma con date dal 20 al 31 Luglio o Agosto (perchè la data odierna è 19 Luglio ma è lo stesso se fosse 19 Agosto ...) il programma non termina in modo completo, come si vede in questo printscreen:
https://prnt.sc/fxp3b
Ecco il codice:

// PROVE SUL CAMPO: 3.47 - CALCOLARE LA FREQUENZA CARDIACA NORMALE.

// Mentre fate esercizi fisici, potete usare un monitor della frequenza cardiaca, per vedere se la vostra frequenza cardiaca stia entro un intervallo di sicurezza indicato dai vostri istruttori e medici. Secondo l' America Heart Association ( AHA ), la formula per clcolare la vostra massima frequenza cardiaca in battiti al minuto è 220 meno la vostra età. La vostra frequenza cardiaca normale è un intervallo che è il 50 - 80 % della vostra massima frequenza cardiaca. [Nota: queste formule sono stime fornite dall'AHA. La massima e la normale frequenza cardiaca possono variare a seconda della salute, del benessere e del sesso dell'individuo. Consultate sempre un medico o un professionista qualificato per l'assistenza sanitaria prima di cominciare o modificare il programma di un esercizio.] 
// Create un programma che legga la data di nascita dell'utente ed il giorno corrente ( mese, giorno ed anno ). Il vostro programma deve calcolare e mostrare l'età della persona, la sua massima frequenza cardiaca ed il suo intervallo di frequenza cardiaca normale.

// Scrittura del programma:

// - lettura dell'età dell'utente:

#include <stdio.h>
int main( void )
{
    // Presentazione del programma    
    puts( "Questo è un programma per il calcolo della frequenza cardiaca massima e che indicherà l'intervallo della frequenza cardiaca normale da tenere sotto controllo in momenti di non attività fisica ( fonte AHA - American Heart Association ).\n" );
    // Definizione della variabile Giorno Data Odierna
    unsigned int giornoOdierno;
    // Definizione della variabile Mese Data Odierna
    unsigned int meseOdierno;
    // Definizione della variabile Anno Data Odierna
    unsigned int annoOdierno;
    // Richesta inserimento della data odierna: giorno
    printf( "%s", "Si prega di inserire la data odierna in forma numerica:\n\nGiorno:\t" );
    // Acquisizione Giorno Data Odierna
    scanf( "%u", &giornoOdierno );
    // Richesta inserimento della data odierna: mese
    printf( "%s", "Mese:\t" );   
    // Acquisizione Mese Data Odierna
    scanf( "%u", &meseOdierno );    
    // Richesta inserimento della data odierna: anno
    printf( "%s", "Anno:\t" );        
    // Acquisizione Anno Data Odierna
    scanf( "%u", &annoOdierno ); 
    
    // Definizione della variabile Giorno Data di Nascita
    unsigned int giornoDiNascita;
    // Definizione della variabile Mese Data di Nascita
    unsigned int meseDiNascita;
    // Definizione della variabile Anno Data di Nascita
    unsigned int annoDiNascita;
    // Richesta inserimento della data di nascita: giorno
    printf( "%s", "\nSi prega di inserire la data di nascita del paziente in forma numerica:\n\nGiorno:\t" );
    // Acquisizione Giorno Data di Nascita
    scanf( "%u", &giornoDiNascita );
    // Richesta inserimento della data di nascita: mese
    printf( "%s", "Mese:\t" );   
    // Acquisizione Mese Data di Nascita
    scanf( "%u", &meseDiNascita );    
    // Richesta inserimento della data di nascita: anno
    printf( "%s", "Anno:\t" );        
    // Acquisizione Anno Data di Nascita
    scanf( "%u", &annoDiNascita );   
    
    // Definizione delle variabili dei mesi
    unsigned int gennaio = 1;
    unsigned int febbraio = 2;
    unsigned int marzo = 3;
    unsigned int aprile = 4;
    unsigned int maggio = 5;
    unsigned int giugno = 6;
    unsigned int luglio = 7;
    unsigned int agosto = 8;
    unsigned int settembre = 9;
    unsigned int ottobre = 10;
    unsigned int novembre = 11;
    unsigned int dicembre = 12;
    
    // Stampa del mese di nascita dell'utente in forma letteraria   
    if ( meseDiNascita == 1 ) {
        printf( "\nL'utente è nato a Gennaio." );
    }
    if ( meseDiNascita == 2 ) {
        printf( "\nIl paziente è nato a Febbraio." );
    }
    if ( meseDiNascita == 3 ) {
        printf( "\nIl paziente è nato a Marzo." );
    }
    if ( meseDiNascita == 4 ) {
        printf( "\nIl paziente è nato a Aprile." );
    }
    if ( meseDiNascita == 5 ) {
        printf( "\nIl paziente è nato a Maggio." );
    }
    if ( meseDiNascita == 6 ) {
        printf( "\nIl paziente è nato a Giugno." );
    }
    if ( meseDiNascita == 7 ) {
        printf( "\nIl paziente è nato a Luglio." );
    }
    if ( meseDiNascita == 8 ) {
        printf( "\nIl paziente è nato a Agosto." );
    }
    if ( meseDiNascita == 9 ) {
        printf( "\nIl paziente è nato a Settembre." );
    }
    if ( meseDiNascita == 10 ) {
        printf( "\nIl paziente è nato a Ottobre." );
    }
    if ( meseDiNascita == 11 ) {
        printf( "\nIl paziente è nato a Novembre." );
    }
    if ( meseDiNascita == 12 ) {
        printf( "\nIl paziente è nato a Dicembre." );
    }
    // Definizione variabile anni del paziente
    int anniPaziente = annoOdierno - annoDiNascita;
    // Definizione variabile frequenza massima
    int frequenzaCardiaMax = 220 - anniPaziente; 
    // Definizione variabile 50 % della frequnza cardiaca massima per compleanno non compito
    int frequenzaCardiaCinquPCnonCompiuto = ( frequenzaCardiaMax - 1 ) * 50 / 100;
    // Definizione variabile 50 % della frequnza cardiaca massima per compleanno compito
    int frequenzaCardiaCinquPCcompiuto = frequenzaCardiaMax * 50 / 100;
    // Definizione variabile 80 % della frequnza cardiaca massima per compleanno non compito
    int frequenzaCardiaOttanPCnonCompiuto = ( frequenzaCardiaMax - 1 ) * 80 / 100;
    // Definizione variabile 80 % della frequnza cardiaca massima per compleanno compito
    int frequenzaCardiaOttanPCcompiuto = frequenzaCardiaMax * 80 / 100;

    // Verifica che il compleanno sia compiuto o meno e stampa della frequenza cardiaca massima
    if ( meseDiNascita <= meseOdierno ) {
        if ( giornoDiNascita <= giornoOdierno ) {
            printf( "\nIl paziente ha %d anni.\n", anniPaziente );
            frequenzaCardiaMax = 220 - anniPaziente;
            printf( "\nLa frequenza cardiaca massima è %d battiti al minuto.", frequenzaCardiaMax );
            printf( "\nE' consigliabile tenere la frequenza cardiaca normale nell'intervallo tra %d e %d battiti al minuto\n", frequenzaCardiaCinquPCcompiuto, frequenzaCardiaOttanPCcompiuto );
        }
    } else { 
        printf( "\nIl paziente ha %d anni.\n", anniPaziente -1 );
        printf( "\nLa frequenza cardiaca massima è %d battiti al minuto.\n", frequenzaCardiaMax - 1 );
        printf( "\nE' consigliabile tenere la frequenza cardiaca normale nell'intervallo tra %d e %d battiti al minuto.\n", frequenzaCardiaCinquPCnonCompiuto, frequenzaCardiaOttanPCnonCompiuto );
    }
} 
Grazie. Ciao.

2 Risposte

  • Re: Piccolo problema... Grazie.

    Alla fine del programma viene eseguita questa if perché vera

    if (meseDiNascita <= meseOdierno) {

    ma non la if che segue perché falsa

    if (giornoDiNascita <= giornoOdierno) {

    per cui non succede più nulla perché, in questo caso, non c'è alcun codice.

    Rifletti ... in questa condizione, cosa dovresti fare?


    P.S. Usa un titolo migliore per le discussioni, almeno si capisce qualcosa ...
    P.P.S. Usa uno switch ... case al posto di tutte quelle if per i mesi ! Oppure, se sai come fare, un vettore.
  • Re: Piccolo problema... Grazie.

    Ok, grazie. Dunque il mio è un errore concettuale perchè pensavo che avrebbe eseguito l'else dopo l'if ( anche se il primo if è vero ed il secondo è falso ) ma giustamente non c'è nessun codice dunque andavano inserite delle info in più ... oppure mettere altri if come ho fatto in questo caso.
    Printscreen:
    https://prnt.sc/fxqlc
    https://prnt.sc/fxqln
    https://prnt.sc/fxqlw
    Codice:
    
    // PROVE SUL CAMPO: 3.47 - CALCOLARE LA FREQUENZA CARDIACA NORMALE.
    
    // Mentre fate esercizi fisici, potete usare un monitor della frequenza cardiaca, per vedere se la vostra frequenza cardiaca stia entro un intervallo di sicurezza indicato dai vostri istruttori e medici. Secondo l' America Heart Association ( AHA ), la formula per clcolare la vostra massima frequenza cardiaca in battiti al minuto è 220 meno la vostra età. La vostra frequenza cardiaca normale è un intervallo che è il 50 - 80 % della vostra massima frequenza cardiaca. [Nota: queste formule sono stime fornite dall'AHA. La massima e la normale frequenza cardiaca possono variare a seconda della salute, del benessere e del sesso dell'individuo. Consultate sempre un medico o un professionista qualificato per l'assistenza sanitaria prima di cominciare o modificare il programma di un esercizio.] 
    // Create un programma che legga la data di nascita dell'utente ed il giorno corrente ( mese, giorno ed anno ). Il vostro programma deve calcolare e mostrare l'età della persona, la sua massima frequenza cardiaca ed il suo intervallo di frequenza cardiaca normale.
    
    // Scrittura del programma:
    
    // - lettura dell'età dell'utente:
    
    #include <stdio.h>
    int main( void )
    {
        // Presentazione del programma    
        puts( "Questo è un programma per il calcolo della frequenza cardiaca massima e che indicherà l'intervallo della frequenza cardiaca normale da tenere sotto controllo in momenti di non attività fisica ( fonte AHA - American Heart Association ).\n" );
        // Definizione della variabile Giorno Data Odierna
        unsigned int giornoOdierno;
        // Definizione della variabile Mese Data Odierna
        unsigned int meseOdierno;
        // Definizione della variabile Anno Data Odierna
        unsigned int annoOdierno;
        // Richesta inserimento della data odierna: giorno
        printf( "%s", "Si prega di inserire la data odierna in forma numerica:\n\nGiorno:\t" );
        // Acquisizione Giorno Data Odierna
        scanf( "%u", &giornoOdierno );
        // Richesta inserimento della data odierna: mese
        printf( "%s", "Mese:\t" );   
        // Acquisizione Mese Data Odierna
        scanf( "%u", &meseOdierno );    
        // Richesta inserimento della data odierna: anno
        printf( "%s", "Anno:\t" );        
        // Acquisizione Anno Data Odierna
        scanf( "%u", &annoOdierno ); 
        
        // Definizione della variabile Giorno Data di Nascita
        unsigned int giornoDiNascita;
        // Definizione della variabile Mese Data di Nascita
        unsigned int meseDiNascita;
        // Definizione della variabile Anno Data di Nascita
        unsigned int annoDiNascita;
        // Richesta inserimento della data di nascita: giorno
        printf( "%s", "\nSi prega di inserire la data di nascita del paziente in forma numerica:\n\nGiorno:\t" );
        // Acquisizione Giorno Data di Nascita
        scanf( "%u", &giornoDiNascita );
        // Richesta inserimento della data di nascita: mese
        printf( "%s", "Mese:\t" );   
        // Acquisizione Mese Data di Nascita
        scanf( "%u", &meseDiNascita );    
        // Richesta inserimento della data di nascita: anno
        printf( "%s", "Anno:\t" );        
        // Acquisizione Anno Data di Nascita
        scanf( "%u", &annoDiNascita );   
        
        // Definizione delle variabili dei mesi
        unsigned int gennaio = 1;
        unsigned int febbraio = 2;
        unsigned int marzo = 3;
        unsigned int aprile = 4;
        unsigned int maggio = 5;
        unsigned int giugno = 6;
        unsigned int luglio = 7;
        unsigned int agosto = 8;
        unsigned int settembre = 9;
        unsigned int ottobre = 10;
        unsigned int novembre = 11;
        unsigned int dicembre = 12;
        
        // Stampa del mese di nascita dell'utente in forma letteraria   
        if ( meseDiNascita == 1 ) {
            printf( "\nL'utente è nato a Gennaio." );
        }
        if ( meseDiNascita == 2 ) {
            printf( "\nIl paziente è nato a Febbraio." );
        }
        if ( meseDiNascita == 3 ) {
            printf( "\nIl paziente è nato a Marzo." );
        }
        if ( meseDiNascita == 4 ) {
            printf( "\nIl paziente è nato a Aprile." );
        }
        if ( meseDiNascita == 5 ) {
            printf( "\nIl paziente è nato a Maggio." );
        }
        if ( meseDiNascita == 6 ) {
            printf( "\nIl paziente è nato a Giugno." );
        }
        if ( meseDiNascita == 7 ) {
            printf( "\nIl paziente è nato a Luglio." );
        }
        if ( meseDiNascita == 8 ) {
            printf( "\nIl paziente è nato a Agosto." );
        }
        if ( meseDiNascita == 9 ) {
            printf( "\nIl paziente è nato a Settembre." );
        }
        if ( meseDiNascita == 10 ) {
            printf( "\nIl paziente è nato a Ottobre." );
        }
        if ( meseDiNascita == 11 ) {
            printf( "\nIl paziente è nato a Novembre." );
        }
        if ( meseDiNascita == 12 ) {
            printf( "\nIl paziente è nato a Dicembre." );
        }
        // Definizione variabile anni del paziente
        int anniPaziente = annoOdierno - annoDiNascita;
        // Definizione variabile frequenza massima
        int frequenzaCardiaMax = 220 - anniPaziente; 
        // Definizione variabile 50 % della frequnza cardiaca massima per compleanno non compito
        int frequenzaCardiaCinquPCnonCompiuto = ( frequenzaCardiaMax - 1 ) * 50 / 100;
        // Definizione variabile 50 % della frequnza cardiaca massima per compleanno compito
        int frequenzaCardiaCinquPCcompiuto = frequenzaCardiaMax * 50 / 100;
        // Definizione variabile 80 % della frequnza cardiaca massima per compleanno non compito
        int frequenzaCardiaOttanPCnonCompiuto = ( frequenzaCardiaMax - 1 ) * 80 / 100;
        // Definizione variabile 80 % della frequnza cardiaca massima per compleanno compito
        int frequenzaCardiaOttanPCcompiuto = frequenzaCardiaMax * 80 / 100;
    
        // Verifica che il compleanno sia compiuto o meno e stampa della frequenza cardiaca massima
        if ( meseDiNascita <= meseOdierno ) {
            if ( giornoDiNascita <= giornoOdierno ) {
                printf( "\nIl paziente ha %d anni.\n", anniPaziente );
                frequenzaCardiaMax = 220 - anniPaziente;
                printf( "\nLa frequenza cardiaca massima è %d battiti al minuto.", frequenzaCardiaMax );
                printf( "\nE' consigliabile tenere la frequenza cardiaca normale nell'intervallo tra %d e %d battiti al minuto\n", frequenzaCardiaCinquPCcompiuto, frequenzaCardiaOttanPCcompiuto );
            }
        } 
        if ( meseDiNascita <= meseOdierno || meseDiNascita > meseOdierno ) {
            if ( giornoDiNascita > giornoOdierno ) {
                printf( "\nIl paziente ha %d anni.\n", anniPaziente -1 );
                printf( "\nLa frequenza cardiaca massima è %d battiti al minuto.\n", frequenzaCardiaMax - 1 );
                printf( "\nE' consigliabile tenere la frequenza cardiaca normale nell'intervallo tra %d e %d battiti al minuto.\n", frequenzaCardiaCinquPCnonCompiuto, frequenzaCardiaOttanPCnonCompiuto );
            }
        }
    } 
    
    Grazie!...
    p.s. la prossima volta cerco di farlo con lo switch (giustamente è comando di selezione multipla)... ;-D Ciao!!....
    p.p.s. Ma lo switch va inserito per forza in un ciclo while o for o do...while??? o no? Ciao.
Devi accedere o registrarti per scrivere nel forum
2 risposte