Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - mi serve un aiuto in c++
Forum - C/C++ - mi serve un aiuto in c++

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
enneZeta (Normal User)
Newbie


Messaggi: 4
Iscritto: 21/11/2020

Segnala al moderatore
Postato alle 20:08
Sabato, 21/11/2020
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



Codice sorgente - presumibilmente C#

  1. using namespace std;
  2.  
  3. int main (){
  4.        
  5.         int vettore1[9]; int riemp1; bool ok=true;
  6.         int vettore2[9]; int riemp2; int valore;
  7.        
  8.         do{
  9.                 cout<<"Inserisci la dimensione del vettore 1"<<endl;
  10.                 cin>>riemp1;
  11.                 if (riemp1<1 || riemp1>9)
  12.                 cout<<"Dimensione non valida"<<endl;
  13.         } while (riemp1<1 || riemp1>9);
  14.        
  15.         do{
  16.                 cout<<"Inserisci la dimensione del vettore 2"<<endl;
  17.                 cin>>riemp2;
  18.                 if (riemp2<1 || riemp2>9)
  19.                 cout<<"Dimensione non valida"<<endl;
  20.         } while (riemp2<1 || riemp2>9);
  21.        
  22.         for (int i=0; i<riemp1; i++){
  23.                 do{
  24.                         ok=true;
  25.                         cout<<"Inserisci l'elemento in posizione "<<i<<": "<<endl;
  26.                         cin>>valore;
  27.                        
  28.                         if (valore<=1){
  29.                                 cout<<"Il valore deve essere maggiore di 1"<<endl;
  30.                                 ok=false;
  31.                         }
  32.                        
  33.                         for (int j=0; j<i && ok==true; j++){
  34.                                 if(vettore1[j]==valore){
  35.                                         cout<<"Non puoi immettere lo stesso elemento due volte"<<endl;
  36.                                         ok=false;
  37.                                 }
  38.                         }
  39.                         for (int k=0; k<i && ok==true; k++){
  40.                                 if ((vettore1[k]%valore==0 || valore%vettore1[k]==0)){
  41.                                         cout<<"L'elemento e' un multiplo o un sottomultiplo di un elemento esistente: non va bene"<<endl;
  42.                                         ok=false;
  43.                                 }
  44.                         }
  45.                 }while (ok==false);
  46.         }
  47.         return 0;
  48. }


Ultima modifica effettuata da enneZeta il 21/11/2020 alle 20:14
PM Quote
Avatar
Basso Livello (Normal User)
Newbie


Messaggi: 16
Iscritto: 14/11/2020

Segnala al moderatore
Postato alle 20:43
Sabato, 21/11/2020
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.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 767
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:54
Sabato, 21/11/2020
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.
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main (){
  6.  
  7.         int vettore1[9] ; int riemp1=0; bool ok=true;
  8.         int vettore2[9] ; int riemp2=0; int valore=0;
  9.  
  10.         do{
  11.                 cout<<"Inserisci la dimensione del vettore 1: ";
  12.                 cin>>riemp1;
  13.                 if (riemp1<1 || riemp1>9)
  14.                 cout<<"Dimensione non valida"<<endl;
  15.         } while (riemp1<1 || riemp1>9);
  16.  
  17.         do{
  18.                 cout<<"Inserisci la dimensione del vettore 2: ";
  19.                 cin>>riemp2;
  20.                 if (riemp2<1 || riemp2>9)
  21.                 cout<<"Dimensione non valida"<<endl;
  22.         } while (riemp2<1 || riemp2>9);
  23.  
  24.         for (int i=0; i<riemp1; i++){
  25.                 do{
  26.                         ok=true;
  27.                         cout<<"Inserisci l'elemento in posizione "<<i<<": ";
  28.                         cin>>valore;
  29.  
  30.                         if (valore<=1){
  31.                                 cout<<"Il valore deve essere maggiore di 1"<<endl;
  32.                                 ok=false;
  33.                         }
  34.  
  35.                         for (int j=0; j<i && ok==true; j++){
  36.                                 if(vettore1[j]==valore){
  37.                                         cout<<"Non puoi immettere lo stesso elemento due volte"<<endl;
  38.                                         ok=false;
  39.                                 }
  40.                         }
  41.                         for (int k=0; k<i && ok==true; k++){
  42.                                 if ((vettore1[k]%valore==0 || valore%vettore1[k]==0)){
  43.                                         cout<<"L'elemento e' un multiplo o un sottomultiplo di un elemento esistente: non va bene"<<endl;
  44.                                         ok=false;
  45.                                 }
  46.                         }
  47.                 }while (ok==false);
  48.                 vettore1[i] = valore;
  49.         }
  50.  
  51.         for (int i=0; i<riemp1; i++){
  52.                 cout<<"vettore1["<<i<<"]="<<vettore1[i]<<endl;
  53.         }
  54.         return 0;
  55. }


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 il 22/11/2020 alle 14:57


in programmazione tutto è permesso
PM Quote
Avatar
enneZeta (Normal User)
Newbie


Messaggi: 4
Iscritto: 21/11/2020

Segnala al moderatore
Postato alle 22:14
Sabato, 21/11/2020
Testo quotato

Postato originariamente da enneZeta:
dovrei fare questo programma che chiede l'inserimento di valore nei vettori ma questi non devono essere n&Atilde;&uml; minori di 2, n&Atilde;&uml; uguali tra loro, n&Atilde;&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



Codice sorgente - presumibilmente C#

  1. using namespace std;
  2.  
  3. int main (){
  4.        
  5.         int vettore1[9]; int riemp1; bool ok=true;
  6.         int vettore2[9]; int riemp2; int valore;
  7.        
  8.         do{
  9.                 cout<<&amp;quot;Inserisci la dimensione del vettore 1&amp;quot;<<endl;
  10.                 cin>>riemp1;
  11.                 if (riemp1<1 || riemp1>9)
  12.                 cout<<&amp;quot;Dimensione non valida&amp;quot;<<endl;
  13.         } while (riemp1<1 || riemp1>9);
  14.        
  15.         do{
  16.                 cout<<&amp;quot;Inserisci la dimensione del vettore 2&amp;quot;<<endl;
  17.                 cin>>riemp2;
  18.                 if (riemp2<1 || riemp2>9)
  19.                 cout<<&amp;quot;Dimensione non valida&amp;quot;<<endl;
  20.         } while (riemp2<1 || riemp2>9);
  21.        
  22.         for (int i=0; i<riemp1; i++){
  23.                 do{
  24.                         ok=true;
  25.                         cout<<&amp;quot;Inserisci l'elemento in posizione &amp;quot;<<i<<&amp;quot;: &amp;quot;<<endl;
  26.                         cin>>valore;
  27.                        
  28.                         if (valore<=1){
  29.                                 cout<<&amp;quot;Il valore deve essere maggiore di 1&amp;quot;<<endl;
  30.                                 ok=false;
  31.                         }
  32.                        
  33.                         for (int j=0; j<i &amp;amp;&amp;amp; ok==true; j++){
  34.                                 if(vettore1[j]==valore){
  35.                                         cout<<&amp;quot;Non puoi immettere lo stesso elemento due volte&amp;quot;<<endl;
  36.                                         ok=false;
  37.                                 }
  38.                         }
  39.                         for (int k=0; k<i &amp;amp;&amp;amp; ok==true; k++){
  40.                                 if ((vettore1[k]%valore==0 || valore%vettore1[k]==0)){
  41.                                         cout<<&amp;quot;L'elemento e' un multiplo o un sottomultiplo di un elemento esistente: non va bene&amp;quot;<<endl;
  42.                                         ok=false;
  43.                                 }
  44.                         }
  45.                 }while (ok==false);
  46.         }
  47.         return 0;
  48. }





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 il 21/11/2020 alle 22:16
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 767
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 22:22
Sabato, 21/11/2020
OK :heehee:

Ultima modifica effettuata da Carlo il 21/11/2020 alle 22:27


in programmazione tutto è permesso
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 577
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 9:59
Domenica, 22/11/2020
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.
PM Quote
Avatar
AldoBaldo (Member)
Expert


Messaggi: 577
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 14:50
Domenica, 22/11/2020
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...

Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // costanti globali (volendo si potrebbero anche usare dei #define)
  5. const int g_qVett   = 2; // quantita' dei vettori da trattare
  6. const int g_qMinVal = 1; // quantita' minima dei valori ammessi in ogni vettore
  7. const int g_qMaxVal = 9; // quantita' massima dei valori ammessi in ogni vettore
  8.  
  9. // prototipi
  10. bool richiesta_dimensioni_vettore( int idVett, int *qEl );
  11. bool richiesta_dati_vettore( int idVett, int *v, int qEl );
  12. bool visualizzazione_dati_vettore( int idVett, const int *v, int qEl );
  13.  
  14. int main (){
  15.     int v[g_qVett][g_qMaxVal]; // i vettori
  16.     int qEl[g_qVett]={0};      // la quantita' degli elementi nei vettori
  17.     int i;
  18.  
  19.     for( i=0; i<g_qVett; ++i )
  20.         if( !richiesta_dimensioni_vettore(i+1,qEl+i) )
  21.             return 0; // errore gia' segnalato dalla funzione
  22.  
  23.     for( i=0; i<g_qVett; ++i )
  24.         if( !richiesta_dati_vettore(i+1,v[i],qEl[i]) )
  25.             return 0; // errore gia' segnalato dalla funzione
  26.  
  27.     for( i=0; i<g_qVett; ++i )
  28.         if( !visualizzazione_dati_vettore(i+1,v[i],qEl[i]) )
  29.             return 0; // errore gia' segnalato dalla funzione
  30.  
  31.     return 0;
  32. }
  33.  
  34. bool richiesta_dimensioni_vettore( int idVett, int *qEl ) {
  35.     if( idVett<1 || NULL==qEl ) { // verifica parametri
  36.         cout<<"Errore in richiesta_dimensioni_vettore():"<<endl;
  37.         // verifica i parametri, segnalando gli errori se qualcosa non va
  38.         return false; // parametri non validi
  39.     }
  40.  
  41.     // chiede le dimensioni del vettori, insistendo
  42.     // finche' non viene fornita una risposta adeguata
  43.  
  44.     return true;
  45. }
  46.  
  47. bool richiesta_dati_vettore( int idVett, int *v, int qEl ) {
  48.     if( idVett<1 || NULL==v || qEl<1 ) { // verifica parametri
  49.         cout<<"Errore in richiesta_dati_vettore():"<<endl;
  50.         // verifica i parametri, segnalando gli errori se qualcosa non va
  51.         return false; // parametri non validi
  52.     }
  53.    
  54.     // in un ciclo che si ripete qEl volte, riceve i valori
  55.     // da inserire nell'array, ripetendo le richieste ogni
  56.     // volta che viene inserito un valore non accettabile
  57.  
  58.     return true;
  59. }
  60.  
  61. bool visualizzazione_dati_vettore( int idVett, const int *v, int qEl ) {
  62.     if( idVett<1 || NULL==v || qEl<1 ) { // verifica parametri
  63.         cout<<"Errore in visualizzazione_dati_vettore():"<<endl;
  64.         // verifica i parametri, segnalando gli errori se qualcosa non va
  65.         return false; // parametri non validi
  66.     }
  67.  
  68.     cout<<"Valori immessi nel vettore n. "<<idVett<<":"<<endl;
  69.  
  70.     // in un ciclo che si ripete qEl volte, mostra il
  71.     // valore contenuto in ogni elemento dell'array v
  72.  
  73.     return true;
  74. }



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.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 767
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:26
Domenica, 22/11/2020
Testo quotato

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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6108
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:07
Domenica, 22/11/2020
bool è un nuovo tipo introdotto dal C++ insieme alla parole chiave true e false che rappresentano le corrispondenti costanti di tipo bool


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo