Problema con algoritmo di numeri pari e dispari

di il
3 risposte

Problema con algoritmo di numeri pari e dispari

Buona sera, oggi facendo questo esercizio ho riscontrato questo problema, in pratica il programma non funziona correttamente a seconda delle disposizione dei numeri inseriti (prima uno pari, poi uno dispari e così via...) e l'errore che si verifica quando non viene rispettato l'intervallo di inserimento funziona solamente per il primo valore di n. Vi lascio qui la consegna dell'esercizio:

Determinare la codifica in C++ di un algoritmo che permetta di visualizzare il minimo dispari e il massimo pari tra gli n numeri inseriti compresi tra 1000 e 10000. ll programma deve accettare sono numeri compresi tra 1000 e 10000 comunicando l'errato inserimento del numero.

Di seguito vi allego il mio codice:
//visualizza_max_min.cpp
#include <iostream>
using namespace std;

int main() {
	int N,n,i;//dati di input
	int max_p,min_d;//dati di lavoro
	int conta_p=0,conta_d=0;//dati di output
	do{ 
		cout<<"Quanti numeri vuoi inserire?: ";
		cin>>N;
	} while (N<=0);
	
	cout<<"Inserisci un numero compreso tra 1000 e 10000: ";
	cin>>n;
	while (n<1000 || n>10000){
		system ("CLS");
        system("COLOR C0");
		cout<<"ERRORE!!! IL NUMERO INSERITO NON E'COMPRESO TRA 1000 E 10000"<<endl;
		cout<<"Inserisci numeri maggiori di 1000 e minori di 10000 :";
        cin>>n;
    }    

	if(n%2==0) {
		max_p=n;
		conta_p=1;
		conta_d=0;
	}
	else {
		min_d=n;
		conta_d=1;
		conta_p=0;
	}
	
                for(i=0;i<N-1;i++) {
		cout<<"Inserisci un numero compreso tra 1000 e 10000: ";
		cin>>n;
		if(n%2==0 && conta_p==1) { 
			if(n>max_p)
				max_p=n;
		}
		else if(n%2==0 && conta_p==0) {
			max_p=n;
			conta_p=1;
		}
		else if (n%2!=0 && conta_d==0) {
				if(n<min_d) {
					min_d=n;
					conta_d=1;
				}
			}
		else
		n=min_d;}
		
		
		if(conta_p==1 && conta_d==1)
			cout<<"Pari\t"<<max_p<<endl<<"Dispari\t"<<min_d;
		else if (conta_p==1 && conta_d==0)
			cout<<"Pari\t"<<max_p<<endl<<"Non hai inserito dispari!";
		else
			cout<<"Non hai inserito numeri pari!"<<endl<<"Dispari\t"<<min_d;
	
	return 0;
        }
Spero siate in grado di aiutarmi, grazie mille in anticipo.

3 Risposte

  • Re: Problema con algoritmo di numeri pari e dispari

    Ma perché tutte queste linee di codice (che non servono e sono anche sbagliate)?

    Risolvilo più semplicemente.

    Il max_p inizialmente deve essere eguale a 1000 (non lo hai inizializzato)
    Il min_d inizialmente deve essere eguale a 9999 (anche questo non lo hai inizializzato)

    Il ciclo in cui prendi in input n e lo controlli deve essere UNO solo. Non devi chiedere più volte n ma devi usare una sola cin.

    Nel ciclo controlli se n è nei limiti altrimenti ripeti il ciclo; se è nei limiri continui con controllare se è dispari o pari, aggiorni min e max, decrementi N e ripeti il ciclo fino a quando N non va a zero. A che ti serve contare i dispari e i pari?
  • Re: Problema con algoritmo di numeri pari e dispari

    Grazie mille per i consigli, sono riuscito a dimezzare il numero di righe ed adesso funziona con qualsiasi disposizione dei numeri.
    Sfortunatamente non sono riuscito a risolvere due grossi problemi:
    [*]l'errore si verifica solamente per il primo numero che supera il limite
    [*]nel caso io non inserisca numeri pari/dispari risultano i dati di inizializzazione come risultati (naturalmente)
    Scusate la mia inesperienza ma sono al secondo anno...

    ecco il codice semplificato:
    //visualizza_max_min.cpp
    #include <iostream>
    using namespace std;
    
    int main() {
    	int N,n,i;//dati di input
    	int max_p=1000,min_d=9999;//dati di lavoro
    	cout<<"quanti numeri vuoi inserire?";
    	cin>>N;
    	
    	cout<<"Inserisci un numero compreso tra 1000 e 10000: ";
    	cin>>n;
    	while (n<1000 || n>10000){
    		system ("CLS");
            system("COLOR C0");
    		cout<<"ERRORE!!! IL NUMERO INSERITO NON E'COMPRESO TRA 1000 E 10000"<<endl;
    		cout<<"Inserisci numeri maggiori di 1000 e minori di 10000 :";
    		cin>>n;
        }    
    	if(n%2==0) {
    		max_p=n;
    	}
    	else {
    		min_d=n;
    	}	
    	for(i=0;i<N-1;i++) {
    		cout<<"Inserisci un numero compreso tra 1000 e 10000: ";
    		cin>>n;
    		if(n%2==0 && n>max_p) { 
    				max_p=n;
    			}
    		else if (n%2!=0 && n<min_d) {
    					min_d=n;
    				}}
    			cout<<"Pari\t"<<max_p<<endl<<"Dispari\t"<<min_d;
    			
    	return 0;
    }
    
    
    E qui l'allegato con l'errore:
    iprogrammatori.PNG
    iprogrammatori.PNG

  • Re: Problema con algoritmo di numeri pari e dispari

    Allora inizializza i pari con 998 e i dispari con 10001. Prima di visualizzare i risultati, se trovi questi valori visualizzi "Nessuno".

    Per il primo problema, ti avevo suggerito di usare UN solo ciclo in cui inserisci l'input e tutti i controlli ... un solo grande while, mentre tu i controlli li fai fuori dal while ...
Devi accedere o registrarti per scrivere nel forum
3 risposte