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

  • Schermata 2019-10-15 alle 01.00.57.png
    Schermata 2019-10-15 alle 01.00.57.png
    39.7 KB · Visualizzazioni: 125
  • Schermata 2019-10-15 alle 01.01.20.png
    Schermata 2019-10-15 alle 01.01.20.png
    18.6 KB · Visualizzazioni: 128

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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 unito automaticamente:

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 unito automaticamente:

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 unito automaticamente:

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

Moderatore
Staff Forum
Utente Èlite
2,220
1,852
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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 unito automaticamente:


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
Reazioni: 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 unito automaticamente:

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

?
 
Ultima modifica:

M1n021

Nuovo Utente
143
68
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
Reazioni: 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.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili