RISOLTO Esercizio età c++

Stato
Discussione chiusa ad ulteriori risposte.

Metallkros

Nuovo Utente
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

rodhellas

Utente Attivo
1,477
395
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
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).
Post automaticamente unito:

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:

Metallkros

Nuovo Utente
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ì?
Post automaticamente unito:

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).
Post automaticamente unito:

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:

DispatchCode

Utente Attivo
593
342
Hardware Utente
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Sistema Operativo
Windows 10 64bit
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ì?
Post automaticamente unito:


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 ;)
 
  • Mi piace
Reactions: Metallkros

Metallkros

Nuovo Utente
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.png
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.png
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?
Post automaticamente unito:

tipo int b;
b = y - (x - z);

?
 
Ultima modifica:

M1n021

Nuovo Utente
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";
    }
}
 
  • Mi piace
Reactions: Metallkros

Metallkros

Nuovo Utente
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.

Entra

oppure Accedi utilizzando