Oppure

Loading
21/11/20 19:08
enneZeta
dovrei fare questo programma che chiede l'inserimento di valore nei vettori ma questi non devono essere nè minori di 2, nè uguali tra loro, nè multipli tra loro. tutto ok se non fosse che inserisco sempre il primo valore ma dal secondo in poi mi dice sempre che sono multipli tra loro anche se non lo sono... grazie in anticipo per le risposte



using namespace std;

int main (){
	
	int vettore1[9]; int riemp1; bool ok=true;
	int vettore2[9]; int riemp2; int valore;
	
	do{
		cout<<&quot;Inserisci la dimensione del vettore 1&quot;<<endl;
		cin>>riemp1;
		if (riemp1<1 || riemp1>9)
		cout<<&quot;Dimensione non valida&quot;<<endl;
	} while (riemp1<1 || riemp1>9);
	
	do{
		cout<<&quot;Inserisci la dimensione del vettore 2&quot;<<endl;
		cin>>riemp2;
		if (riemp2<1 || riemp2>9)
		cout<<&quot;Dimensione non valida&quot;<<endl;
	} while (riemp2<1 || riemp2>9);
	
	for (int i=0; i<riemp1; i++){
		do{
			ok=true;
			cout<<&quot;Inserisci l'elemento in posizione &quot;<<i<<&quot;: &quot;<<endl;
			cin>>valore;
			
			if (valore<=1){
				cout<<&quot;Il valore deve essere maggiore di 1&quot;<<endl;
				ok=false;
			}
			
			for (int j=0; j<i &amp;&amp; ok==true; j++){
				if(vettore1[j]==valore){
					cout<<&quot;Non puoi immettere lo stesso elemento due volte&quot;<<endl;
					ok=false;
				}
			}
			for (int k=0; k<i &amp;&amp; ok==true; k++){
				if ((vettore1[k]%valore==0 || valore%vettore1[k]==0)){
					cout<<&quot;L'elemento e' un multiplo o un sottomultiplo di un elemento esistente: non va bene&quot;<<endl;
					ok=false;
				}
			}
		}while (ok==false);
	}
	return 0;
}
Ultima modifica effettuata da enneZeta 21/11/20 19:14
21/11/20 19:43
Basso Livello
Non memorizzi il valore nel vettore1, quindi vettore1[0]=0 e 0%n = 0 sempre. Credo il motivo sia questo. Poi non hai utilizzato il vettore2, a che ti serve chiederne la dimensione se non lo utilizzi?
Se ci fosse la Silicon Valley in Italia, sarebbe capitanata da Barbara D'Urso.
21/11/20 20:54
Carlo
Basso Livello ti ha già dato un primo input, importantissimo, i valori nel vettore una volta che hai deciso che sono validi li devi inserire.

Nel codice seguente non ho modificato la struttura da te impostata.
Codice corretto e funzionante per il vettore1, il vettore2 l'ho lasciato lì, non sò se serve per la continuazione dell'esercizio.
#include <iostream>

using namespace std;

int main (){

        int vettore1[9] ; int riemp1=0; bool ok=true;
        int vettore2[9] ; int riemp2=0; int valore=0;

        do{
                cout<<"Inserisci la dimensione del vettore 1: ";
                cin>>riemp1;
                if (riemp1<1 || riemp1>9)
                cout<<"Dimensione non valida"<<endl;
        } while (riemp1<1 || riemp1>9);

        do{
                cout<<"Inserisci la dimensione del vettore 2: ";
                cin>>riemp2;
                if (riemp2<1 || riemp2>9)
                cout<<"Dimensione non valida"<<endl;
        } while (riemp2<1 || riemp2>9);

        for (int i=0; i<riemp1; i++){
                do{
                        ok=true;
                        cout<<"Inserisci l'elemento in posizione "<<i<<": ";
                        cin>>valore;

                        if (valore<=1){
                                cout<<"Il valore deve essere maggiore di 1"<<endl;
                                ok=false;
                        }

                        for (int j=0; j<i && ok==true; j++){
                                if(vettore1[j]==valore){
                                        cout<<"Non puoi immettere lo stesso elemento due volte"<<endl;
                                        ok=false;
                                }
                        }
                        for (int k=0; k<i && ok==true; k++){
                                if ((vettore1[k]%valore==0 || valore%vettore1[k]==0)){
                                        cout<<"L'elemento e' un multiplo o un sottomultiplo di un elemento esistente: non va bene"<<endl;
                                        ok=false;
                                }
                        }
                }while (ok==false);
                vettore1[i] = valore;
        }

        for (int i=0; i<riemp1; i++){
                cout<<"vettore1["<<i<<"]="<<vettore1[i]<<endl;
        }
        return 0;
}

Due cicli for per verificare doppione e multiplo/sottomultiplo sono inutili.
Altro si potrebbe fare per compattare il codice, ma la prima cosa che conta è che deve funzionare.
Ultima modifica effettuata da Carlo 22/11/20 13:57
in programmazione tutto è permesso
21/11/20 21:14
enneZeta
Postato originariamente da enneZeta:
dovrei fare questo programma che chiede l'inserimento di valore nei vettori ma questi non devono essere n&amp;Atilde;&amp;uml; minori di 2, n&amp;Atilde;&amp;uml; uguali tra loro, n&amp;Atilde;&amp;uml; multipli tra loro. tutto ok se non fosse che inserisco sempre il primo valore ma dal secondo in poi mi dice sempre che sono multipli tra loro anche se non lo sono... grazie in anticipo per le risposte



using namespace std;

int main (){
	
	int vettore1[9]; int riemp1; bool ok=true;
	int vettore2[9]; int riemp2; int valore;
	
	do{
		cout<<&amp;amp;quot;Inserisci la dimensione del vettore 1&amp;amp;quot;<<endl;
		cin>>riemp1;
		if (riemp1<1 || riemp1>9)
		cout<<&amp;amp;quot;Dimensione non valida&amp;amp;quot;<<endl;
	} while (riemp1<1 || riemp1>9);
	
	do{
		cout<<&amp;amp;quot;Inserisci la dimensione del vettore 2&amp;amp;quot;<<endl;
		cin>>riemp2;
		if (riemp2<1 || riemp2>9)
		cout<<&amp;amp;quot;Dimensione non valida&amp;amp;quot;<<endl;
	} while (riemp2<1 || riemp2>9);
	
	for (int i=0; i<riemp1; i++){
		do{
			ok=true;
			cout<<&amp;amp;quot;Inserisci l'elemento in posizione &amp;amp;quot;<<i<<&amp;amp;quot;: &amp;amp;quot;<<endl;
			cin>>valore;
			
			if (valore<=1){
				cout<<&amp;amp;quot;Il valore deve essere maggiore di 1&amp;amp;quot;<<endl;
				ok=false;
			}
			
			for (int j=0; j<i &amp;amp;amp;&amp;amp;amp; ok==true; j++){
				if(vettore1[j]==valore){
					cout<<&amp;amp;quot;Non puoi immettere lo stesso elemento due volte&amp;amp;quot;<<endl;
					ok=false;
				}
			}
			for (int k=0; k<i &amp;amp;amp;&amp;amp;amp; ok==true; k++){
				if ((vettore1[k]%valore==0 || valore%vettore1[k]==0)){
					cout<<&amp;amp;quot;L'elemento e' un multiplo o un sottomultiplo di un elemento esistente: non va bene&amp;amp;quot;<<endl;
					ok=false;
				}
			}
		}while (ok==false);
	}
	return 0;
}


Grazie mille a Carlo e Basso livello per la risposta! Errore stupido e grave da parte mia di non memorizzare i valori inseriti nell'array... Comunque si, il vettore2 serve per la continuzione dell'esercizio. Grazie ancora per le risposte esaustive :)
Ultima modifica effettuata da enneZeta 21/11/20 21:16
21/11/20 21:22
Carlo
OK :heehee:
Ultima modifica effettuata da Carlo 21/11/20 21:27
in programmazione tutto è permesso
22/11/20 8:59
AldoBaldo
Una persona "a modo"! C'è ancora speranza, dunque.
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
22/11/20 13:50
AldoBaldo
Non so se comprenda argomenti che enneZeta non ha ancora affrontato, però potrebbe essere una soluzione anche quella di basare il programma su cicli che possano operare su quantità di vettori e di elementi per vettori più semplicemente modificabili.

Ad esempio, in questo caso basterebbe modificare g_qVett, g_qMinVal e g_qMaxVal per adattare il programma a una gamma di vettori più flessibile...

#include <iostream>
using namespace std;

// costanti globali (volendo si potrebbero anche usare dei #define)
const int g_qVett   = 2; // quantita' dei vettori da trattare
const int g_qMinVal = 1; // quantita' minima dei valori ammessi in ogni vettore
const int g_qMaxVal = 9; // quantita' massima dei valori ammessi in ogni vettore

// prototipi
bool richiesta_dimensioni_vettore( int idVett, int *qEl );
bool richiesta_dati_vettore( int idVett, int *v, int qEl );
bool visualizzazione_dati_vettore( int idVett, const int *v, int qEl );

int main (){
    int v[g_qVett][g_qMaxVal]; // i vettori
    int qEl[g_qVett]={0};      // la quantita' degli elementi nei vettori
    int i;

    for( i=0; i<g_qVett; ++i )
        if( !richiesta_dimensioni_vettore(i+1,qEl+i) )
            return 0; // errore gia' segnalato dalla funzione

    for( i=0; i<g_qVett; ++i )
        if( !richiesta_dati_vettore(i+1,v[i],qEl[i]) )
            return 0; // errore gia' segnalato dalla funzione

    for( i=0; i<g_qVett; ++i )
        if( !visualizzazione_dati_vettore(i+1,v[i],qEl[i]) )
            return 0; // errore gia' segnalato dalla funzione

    return 0;
}

bool richiesta_dimensioni_vettore( int idVett, int *qEl ) {
    if( idVett<1 || NULL==qEl ) { // verifica parametri
        cout<<"Errore in richiesta_dimensioni_vettore():"<<endl;
        // verifica i parametri, segnalando gli errori se qualcosa non va
        return false; // parametri non validi
    }

    // chiede le dimensioni del vettori, insistendo
    // finche' non viene fornita una risposta adeguata

    return true;
}

bool richiesta_dati_vettore( int idVett, int *v, int qEl ) {
    if( idVett<1 || NULL==v || qEl<1 ) { // verifica parametri
        cout<<"Errore in richiesta_dati_vettore():"<<endl;
        // verifica i parametri, segnalando gli errori se qualcosa non va
        return false; // parametri non validi
    }
    
    // in un ciclo che si ripete qEl volte, riceve i valori
    // da inserire nell'array, ripetendo le richieste ogni
    // volta che viene inserito un valore non accettabile

    return true;
}

bool visualizzazione_dati_vettore( int idVett, const int *v, int qEl ) {
    if( idVett<1 || NULL==v || qEl<1 ) { // verifica parametri
        cout<<"Errore in visualizzazione_dati_vettore():"<<endl;
        // verifica i parametri, segnalando gli errori se qualcosa non va
        return false; // parametri non validi
    }

    cout<<"Valori immessi nel vettore n. "<<idVett<<":"<<endl;

    // in un ciclo che si ripete qEl volte, mostra il
    // valore contenuto in ogni elemento dell'array v

    return true;
}


Ricorrere all'allocazione dinamica dei vettori sarebbe ancora più flessibile, ma dal tipo di esercizio proposto dubito che enneZeta abbia già studiato quel che serve.

P.S.
Lo so, quel che ho proposto è più vicino al C che al C++. Pignoli.
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
22/11/20 15:26
Carlo
Postato originariamente da AldoBaldo:
Lo so, quel che ho proposto è più vicino al C che al C++. Pignoli.

bool è un'istruzione C++?
in C bool non c'è? si usa 1 e 0, o no? oppure te lo definisci...

Il programma così è riutilizzabile ed usabile in applicazioni diverse, un codice pensato non per rispondere ad una situazione specifica, ma a molte :rofl::asd:
in programmazione tutto è permesso