RISOLTO Esercizio età c++

Stato
Discussione chiusa ad ulteriori risposte.

Metallkros

Nuovo Utente
60
18
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 Èlite
1,506
422
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
Hard Disk
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Meshify C
Internet
Gigabit Fastweb
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
60
18
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
692
426
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
Internet
30Mbps/3Mbps con Eolo
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
60
18
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
33
11
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
60
18
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

Discussioni Simili

Hot del momento