RISOLTO Esercizio età c++

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Metallkros

Nuovo Utente
Messaggi
60
Reazioni
18
Punteggio
24
Salve a tutti, Lunedì dovrò consegnare alcuni esercizi, oggi ho svolto il primo ma ho alcuni problemi .
In pratica devo scrivere un programma che calcola l'età basandomi su:
1) l'anno attuale
2) la mia età
3) l'anno che devo inserire per il calcolo
p.s. devo usare solo if , else e while

questo è il codice

C++:
#include <iostream>

using namespace std;

int main() {

int x , y , z;
int a , b , c;


cout << "Inserisci l'anno corrente" << endl;
cin >> x;
cout << "inserisci la tua eta'" << endl;
cin >> y;
cout << "inserisci l'anno per calcolare la tua eta'" << endl;
cin >> z;

if (x < z)
{  a = (z - x) + y;
cout << "la tua eta' nel " << z << " sara' " << a << endl;
}
if (x > z)
{   b = y - (x - z);
cout << "la tua eta' nel " << z << " era " << b << endl;    
}
else if (b <= 0)
{
cout << " nel " << z << " non eri ancora nato" << endl;
}
return 0;

il problema è che in alcuni output vengono visualizzate più risposte, mentre uno è completamente errato, linko le immagini degli output
 

Allegati

  • Schermata 2019-10-15 alle 01.00.57.webp
    Schermata 2019-10-15 alle 01.00.57.webp
    25.7 KB · Visualizzazioni: 125
  • Schermata 2019-10-15 alle 01.01.20.webp
    Schermata 2019-10-15 alle 01.01.20.webp
    13.6 KB · Visualizzazioni: 128
Se fai if (b <= 0), b lo devi calcolare prima. Sposta else if (b <= 0) dentro l'if (x > z), ovviamente dopo b = y - (x-z).
--- i due messaggi sono stati uniti ---
Consiglio: in esercizi piccoli come questi, senza stare ad usare gdb, stampati le variabili che utilizzi qual'ora il codice non funzionasse a dovere.
In questo caso vedresti che a b è assegnato 0 (dipende dal compilatore ma tant'è) :ok:
 
Ultima modifica:
Se fai if (b <= 0), b lo devi calcolare prima. Sposta else if (b <= 0) dentro l'if (x > z), ovviamente dopo b = y - (x-z).

C++:
if (x > z)
{   b = y - (x - z);
else if (b <= 0)
cout << " nel " << z << " non eri ancora nato" << endl;
cout << "la tua eta' nel " << z << " era " << b << endl;
}

così?
--- i due messaggi sono stati uniti ---
Se fai if (b <= 0), b lo devi calcolare prima. Sposta else if (b <= 0) dentro l'if (x > z), ovviamente dopo b = y - (x-z).
--- i due messaggi sono stati uniti ---
Consiglio: in esercizi piccoli come questi, senza stare ad usare gdb, stampati le variabili che utilizzi qual'ora il codice non funzionasse a dovere.
In questo caso vedresti che a b è assegnato 0 (dipende dal compilatore ma tant'è) :ok:
Scusa la mia ignoranza, ma potresti spiegarmi meglio cosa intendi per gdb? :sisi:
 
Ultima modifica:
C++:
if (x > z)
{   b = y - (x - z);
else if (b <= 0)
cout << " nel " << z << " non eri ancora nato" << endl;
cout << "la tua eta' nel " << z << " era " << b << endl;
}

così?
--- i due messaggi sono stati uniti ---

Scusa la mia ignoranza, ma potresti spiegarmi meglio cosa intendi per gdb? :sisi:

Non dovresti utilizzare un else if per valutare b, oppure calcolarlo prima.
Dovresti usare solo un if, ma ad ogni modo dovresti inizializzare prima la variabile.

gdb è un debugger ;)
 
Non dovresti utilizzare un else if per valutare b, oppure calcolarlo prima.
Dovresti usare solo un if, ma ad ogni modo dovresti inizializzare prima la variabile.

gdb è un debugger ;)
ok ho tolto l'else, però ho il solito problema in output
Schermata 2019-10-15 alle 02.39.55.webp
qui l'output che mi interessa è la tua età nel 2032 sarà ...
l'altro output non voglio che spunti
Schermata 2019-10-15 alle 02.40.30.webp
stessa cosa qui, mi interessa solo l'output nel 1980 non eri nato, come faccio a dire al programma di non visualizzarli?

inizializzare nel senso che devo dare un valore a b?
--- i due messaggi sono stati uniti ---
tipo int b;
b = y - (x - z);

?
 
Ultima modifica:
Ciao, innanzitutto al fine di rendere il codice più chiaro e leggibile ti consiglio di rispettare l'indentazione e di dare alle variabili dei nomi esplicativi.

Detto questo, io molto più semplicemente farei qualcosa del genere:
C++:
#include <iostream>

using namespace std;

int main()
{
    int anno_corr;
    int eta;
    int anno;
    cout << "ANNO CORRENTE: ";
    cin >> anno_corr;
    cout << "ETA': ";
    cin >> eta;
    cout << "ANNO: ";
    cin >> anno;
    eta += anno - anno_corr;
    if(eta >= 0)
    {
        cout << "ETA' NEL " << anno << " = " << eta << " ANNI";
    }
    else
    {
        cout << "NEL " << anno << " NON ERI ANCORA NATO";
    }
}
 
Ciao, innanzitutto al fine di rendere il codice più chiaro e leggibile ti consiglio di rispettare l'indentazione e di dare alle variabili dei nomi esplicativi.

Detto questo, io molto più semplicemente farei qualcosa del genere:
C++:
#include <iostream>

using namespace std;

int main()
{
    int anno_corr;
    int eta;
    int anno;
    cout << "ANNO CORRENTE: ";
    cin >> anno_corr;
    cout << "ETA': ";
    cin >> eta;
    cout << "ANNO: ";
    cin >> anno;
    eta += anno - anno_corr;
    if(eta >= 0)
    {
        cout << "ETA' NEL " << anno << " = " << eta << " ANNI";
    }
    else
    {
        cout << "NEL " << anno << " NON ERI ANCORA NATO";
    }
}
Grazie mille , ho riscritto il programma come hai detto tu , ho anche risolto il problema degli output .
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top