Programma che funziona male

di il
4 risposte

Programma che funziona male

Ciao sono 2 giorni che cerco di capire perchè questo programma anche se il compilatore non da errori in output a volte mi restituisce lo stesso risultato 2 volte questo è il programma
#include<iostream>
using namespace std;
class data
{
private:
int giorno;
int mese;
int anno;
public:
data();
~data();
void leggi(int,int,int);
};
data::data()
{
cout<<"Questo programma verifica se una data e' valida o non valida\n";
}
void data::leggi(int gg, int m, int aaaa)
{

do
{
cout<<"Inserire il giorno:";
cin>>gg;
}
while(gg<1 or gg>31);
do
{
cout<<"Inserire il mese:";
cin>>m;
}
while(m<01 or m>12);
do
{
cout<<"Inserire l'anno:";
cin>>aaaa;
}
while(aaaa<1700 or aaaa>2050);
if(aaaa%4==0 or aaaa%400==0 or aaaa%100!=0 and m==2 and gg<=29)cout<<"Data valida\n";
if(m==1 and gg>31)cout<<"data non valida\n";
if(m==3 and gg>31)cout<<"data non valida\n";
if(m==5 and gg>31)cout<< "data non valida\n";
if(m==7 and gg>31)cout<< "data non valida\n";
if(m==8 and gg>31)cout<< "data non valida\n";
if(m==9 and gg>31)cout<< "data non valida\n";
if(m==12 and gg>31)cout<< "data non valida\n";
if(m==2 and gg<28)cout<<"data valida\n";
if(m==1 and gg<31)cout<<"data valida\n";
if(m==3 and gg<31)cout<<"data valida\n";
if(m==5 and gg<31)cout<<"data valida\n";
if(m==7 and gg<31)cout<<"data valida\n";
if(m==8 and gg<31)cout<<"data valida\n";
if(m==9 and gg<31)cout<<"data valida\n";
if(m==12 and gg<31)cout<<"data valida\n";
if(m==11 and gg>30)cout<<"data non valida\n";
if(m==4 and gg>30)cout<<"data non valida\n";
if(m==6 and gg>30)cout<<"data non valida\n";
if(m==7 and gg>30)cout<<"data non valida\n";
if(aaaa%4!=0 and m==2 and gg>28)cout<<"data non valida\n";
gg=giorno;
m=mese;
aaaa=anno;
}
data::~data()
{
cout<<"fine";
}
main()
{
data DATA;
int GIORNO;
int MESE;
int ANNO;
DATA.leggi(GIORNO,MESE,ANNO);
}

4 Risposte

  • Re: Programma che funziona male

    Domandona: ma tu scrivi il codice in questo modo?

    SENZA FORMATTAZIONE ??????

    Visto che e' il tuo PRIMO messaggio

    LEGGI il regolamento e

    FORMATTA il codice con il tasto </>

    !!!!

    PERCHE' controlli SOLO se il giorno e' maggiore/minoreOuguale di 28/29/30/31 MA NON minore/maggioreOuguale di UNO???
    Se uno mette come giorno il -2 NON E' VALIDO!

    E DA DOVE SALTA FUORI quel "and" e "or" ???

    Questa e' nuova
    A quanto sembra hanno aggiunto "and", "or" "not" come keword del linguaggio EUREKA!
  • Re: Programma che funziona male

    Usa i tag CODE e scrivi il codice in C++ senza and e or

    Io comunque farei un bello switch sul mese, poi vedi tu
  • Re: Programma che funziona male

    Ponendo sia giusta la logica con la quale hai impostato il programma, c'è un richiamo errato delle funzioni logiche "AND, OR". Inoltre un consiglio: in un "if" con così tanti controlli, per non andare in errore, ti conviene utilizzare le parentesi distinguendo i vari controlli tra di loro.

    Un codice improvvisato sul funzionamento dell' "AND, OR" e su una corretta scrittura di esse, o almeno secondo me (l'ho scritto in C e non in C++, tanto il ragionamento alla base rimane invariato):
    
    
    #include <stdio.h>
    
    int main(){
    	
    	int valore = 0;
    	int peso = 0;
    	
    	printf("Inserire peso -> \n");
    	scanf("%d", &peso);
    	printf("\nInserire valore -> \n");
    	scanf("%d", &valore);
    	
    	if((valore == 30) && (peso > 30)){
    		
    		//situazione verificata quando ENTRAMBE le condizioni sono rispettate
    		printf("\nAND");
    			
    	}
    	else if((valore < 20) || (peso == 0)){
    		
    		//situazione verificata quando ALMENO UNA delle condizioni è rispettata
    		printf("\nOR");
    		
    	}
    	else if(((valore == 20) || (valore == 21)) && (peso <= 30)){
    		
    		//controllo verificato quando valore assume O un valore di 20 O un valore di 21, E quando il peso è minore o uguale a 30
    		printf("\nOR e AND");
    		
    	}
    }
    
    
    Prova a fare queste migliorie sul tuo programma forse l'errore si risolve.
  • Re: Programma che funziona male

    migliorabile ha scritto:


    E DA DOVE SALTA FUORI quel "and" e "or" ???

    Questa e' nuova
    A quanto sembra hanno aggiunto "and", "or" "not" come keword del linguaggio EUREKA!
    Nah sono vecchie keyword per chi non poteva digitare simboli, sono rimaste tutt’oggi.

    Comunque il costruttore di un classe non dovrebbe scrivere a schermo se non necessario, soprattutto informazioni che andrebbero scritte dal main (tipo "Questo programma fa") perché ciò verrebbe scritto ad ogni creazione di oggetto. Soprattutto nel distruttore…

    Poi fammi capire, in leggi chiedi tre argomenti interi, te ne freghi assolutamente del loro contenuto (e questo li rende già inutili), leggi da tastiera (cosa che non dovresti fare se non esplicitamente segnalato dalla funzione), fai check e infine invece di assegnare alle variabili di istanza gli argomenti, assegni agli argomenti le variabili d’istanza. Ok…
Devi accedere o registrarti per scrivere nel forum
4 risposte