Programma vettori

di il
9 risposte

Programma vettori

Salve devo fare questo esercizio:

Seguendo i principi della programmazione strutturata e della modularità si sviluppi un programma in c++ che:
1. Richieda all' utente di inserire da tastiera 6 numeri interi compresi tra 1 e 90
2. Li memorizzi in un vettore denominato estratto
3.richieda all utente di inserire da tastiera altri 6 numeri interi compresi tra 1 e 90
4. Li memorizzi in un vettore denominato schedina
5. In un sottoprogramma si calcola il numero di coincidenze e i numeri coincidenti
6. Visualizzi a video i risultati

per il momento ho realizzato il main senza fare sotto programmi e seguire i principi della programmazione strutturata,ma non so perchè una volta inseriti i 12 numeri il programma si blocca
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int a,b,c,d,e,f;
    cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
    cin>>a;
    cin>>b;
    cin>>c;
    cin>>d;
    cin>>e;
    cin>>f;
    int estratto[6]={a,b,c,d,e,f};
    int g,h,i,l,m,n;
    cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
    cin>>g;
    cin>>h;
    cin>>i;
    cin>>l;
    cin>>m;
    cin>>n;
    int schedina[6]={g,h,i,l,m,n};
    int coincidenze=0;
    for (int i=0;i<=6;i++){
        for(int j=0;i<=6;j++){
                if (estratto[i]==schedina[j]) coincidenze++;}}
                
        cout<<"ricorrenze "<<endl<<coincidenze<<endl;
        int z=0;
        int numericoincidenti[12];
        for (int k=0;k<=6;k++){
        for(int t=0;t<=6;t++){
                if(estratto[k]==schedina[t]){
                numericoincidenti[z]=k;
                z++;}}
                
                
   
  
    cout<<"numeri coincidenti "<<endl<<numericoincidenti[z]<<endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}}
non so se il programma è corretto,ma non mi dà problemi di compilazione

9 Risposte

  • Re: Programma vettori

    I cicli sono sbagliati. Se scrivi

    for (int i=0;i<=6;i++){

    conterai da 0 a 6 ma gli elementi sono 6 quindi devi contare da 0 a 5

    E poi, perché usi tante variabili e non direttamente un vettore?
  • Re: Programma vettori

    oregon ha scritto:


    I cicli sono sbagliati. Se scrivi

    for (int i=0;i<=6;i++){

    conterai da 0 a 6 ma gli elementi sono 6 quindi devi contare da 0 a 5

    E poi, perché usi tante variabili e non direttamente un vettore?
    ho corretto 5 con 6 nei cicli,non ho utilizzato un vettore perchè non è chiaro nella traccia se lo vuole con o senza(molto probabilmente con);in ogni caso ora il programma non si blocca ma il numero di ricorrenze e i numeri coincidenti non sono esatti,probabilmente ho compiuto qualche errore di algoritmo,ma quali?
  • Re: Programma vettori

    Riposto il programma con i cicli corretti per comodità
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a,b,c,d,e,f;
        cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
        cin>>a;
        cin>>b;
        cin>>c;
        cin>>d;
        cin>>e;
        cin>>f;
        int estratto[6]={a,b,c,d,e,f};
        int g,h,i,l,m,n;
        cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
        cin>>g;
        cin>>h;
        cin>>i;
        cin>>l;
        cin>>m;
        cin>>n;
        int schedina[6]={g,h,i,l,m,n};
        int coincidenze=0;
        for (int i=0;i<=5;i++){
            for(int j=0;j<=5;j++){
                    if (estratto[i]==schedina[j]) coincidenze++;}}
                    
            cout<<"ricorrenze "<<endl<<coincidenze<<endl;
            int z=0;
            int numericoincidenti[12];
            for (int k=0;k<=5;k++){
            for(int t=0;t<=5;t++){
                    if(estratto[k]==schedina[t]){
                    numericoincidenti[z]=k;
                    z++;}}
                    
                    
       
      
        cout<<"numeri coincidenti "<<endl<<numericoincidenti[z]<<endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }}
    
  • Re: Programma vettori

    Scusa ... con questa linea

    cout<<"numeri coincidenti "<<endl<<numericoincidenti[z]<<endl;

    cosa pensi di fare?
  • Re: Programma vettori

    oregon ha scritto:


    Scusa ... con questa linea

    cout<<"numeri coincidenti "<<endl<<numericoincidenti[z]<<endl;

    cosa pensi di fare?
    stampare a video il vettore che contiene i numeri coincidenti,ma ora mi sono reso conto che questo metodo è errato.Come posso fare allora?
  • Re: Programma vettori

    demiurg ha scritto:


    stampare a video il vettore che contiene i numeri coincidenti,ma ora mi sono reso conto che questo metodo è errato.Come posso fare allora?
    Con un ciclo for scorri il vettore e stampi i suoi elementi uno per uno.

  • Re: Programma vettori

    minomic ha scritto:


    demiurg ha scritto:


    stampare a video il vettore che contiene i numeri coincidenti,ma ora mi sono reso conto che questo metodo è errato.Come posso fare allora?
    Con un ciclo for scorri il vettore e stampi i suoi elementi uno per uno.

    l'ho fatto ma non funziona,mi restituisce zero e nemmeno il ciclo per le coincidenze mi dà valori esatti
    riposto il codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a,b,c,d,e,f;
        cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
        cin>>a;
        cin>>b;
        cin>>c;
        cin>>d;
        cin>>e;
        cin>>f;
        int estratto[6]={a,b,c,d,e,f};
        int g,h,i,l,m,n;
        cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
        cin>>g;
        cin>>h;
        cin>>i;
        cin>>l;
        cin>>m;
        cin>>n;
        int schedina[6]={g,h,i,l,m,n};
        int coincidenze=0;
        for (int i=0;i<=5;i++){
            for(int j=0;j<=5;j++){
                    if (estratto[i]==schedina[j]) coincidenze++;}}
                    
            cout<<"coincidenze "<<endl<<coincidenze<<endl;
            int z=0;
            int numericoincidenti[12];
            for (int k=0;k<=5;k++){
            for(int t=0;t<=5;t++){
                    if(estratto[k]==schedina[t]){
                    numericoincidenti[z]=k;
                    z++;}}
                    
                    
       
      
       for(int i=0;i<z;i++){
               cout<<"i numeri coincidenti sono"<<endl<<numericoincidenti[i]<<endl;}
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }}
    
  • Re: Programma vettori

    Ora invece di usare tante variabili ho caricato direttamente due vettori
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    #define N 5
    int main(int argc, char *argv[])
    {int n;
    int estratto[N],schedina[N];
        do{
        cout<<"inserire il numero 5"<<endl;
        cin>>n;}
        while(n!=5);
        for(int i=0;i<=n;i++){
                cout<<"inserire 6 numeri interi compresi tra 1 e 90"<<endl;
                cin>>estratto[i];}
                
                for(int i=0;i<=n;i++){
                cout<<"inserire 6 numeri interi compresi tra 1 e 90"<<endl;
                cin>>schedina[i];}
        int coincidenze=0;
        for (int i=0;i<=5;i++){
            for(int j=0;j<=5;j++){
                    if (estratto[i]==schedina[j]) coincidenze++;}}
                    
            cout<<"coincidenze "<<endl<<coincidenze<<endl;
            int z=0;
            int numericoincidenti[12];
            for (int k=0;k<=5;k++){
            for(int t=0;t<=5;t++){
                    if(estratto[k]==schedina[t]){
                    numericoincidenti[z]=k;
                    z++;}}
                    
                    
       
      
       for(int i=0;i<z;i++){
               cout<<"i numeri coincidenti sono"<<endl<<numericoincidenti[i]<<endl;}
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }}
    
  • Re: Programma vettori

    demiurg ha scritto:


    minomic ha scritto:


    demiurg ha scritto:


    stampare a video il vettore che contiene i numeri coincidenti,ma ora mi sono reso conto che questo metodo è errato.Come posso fare allora?
    Con un ciclo for scorri il vettore e stampi i suoi elementi uno per uno.

    l'ho fatto ma non funziona,mi restituisce zero e nemmeno il ciclo per le coincidenze mi dà valori esatti
    riposto il codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int a,b,c,d,e,f;
        cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
        cin>>a;
        cin>>b;
        cin>>c;
        cin>>d;
        cin>>e;
        cin>>f;
        int estratto[6]={a,b,c,d,e,f};
        int g,h,i,l,m,n;
        cout<<"inserisci 6 numeri interi compresi tra 1 e 90 "<<endl;
        cin>>g;
        cin>>h;
        cin>>i;
        cin>>l;
        cin>>m;
        cin>>n;
        int schedina[6]={g,h,i,l,m,n};
        int coincidenze=0;
        for (int i=0;i<=5;i++){
            for(int j=0;j<=5;j++){
                    if (estratto[i]==schedina[j]) coincidenze++;}}
                    
            cout<<"coincidenze "<<endl<<coincidenze<<endl;
            int z=0;
            int numericoincidenti[12];
            for (int k=0;k<=5;k++){
            for(int t=0;t<=5;t++){
                    if(estratto[k]==schedina[t]){
                    numericoincidenti[z]=k;
                    z++;}}
                    
                    
       
      
       for(int i=0;i<z;i++){
               cout<<"i numeri coincidenti sono"<<endl<<numericoincidenti[i]<<endl;}
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }}
    

    sono riuscito a fare tutto e funzionante tranne trovare i numeri coincidenti
    #include <iostream>
    using namespace std;
    int numero_coincidenze(int const vet1[],int const vet2[],int n){
    int coincidenze=0;
    for (int i=0;i<n;i++){
    for (int j=0;j<n;j++){
        if(vet1[i]==vet2[j])
                coincidenze++;}}
                return coincidenze;}
    
    #define N 6
    typedef int estratto[N];
    
    
    
    int main(){
        estratto e,s,a;
        
    		for(int i=0;i<N;i++){
    			do{
    				cout<<"\n inserire valore  per  il primo vettore  per la posizione: "<<i+1<<" : ";
    			cin>> e[i];
    				
    			}while(e[i]<1 || e[i]>90);
    		}
    			for(int i=0;i<N;i++){
    			do{
    				cout<<"\n inserire valore per  il secondo vettore per  la posizione: "<<i+1<<" : ";
    			cin>> s[i];
    				
    			}while(s[i]<1 || s[i]>90);
    		}
    	int coincidenze=numero_coincidenze(e,s,N);
    
                cout<<"numero coincidenze = "<<endl<<coincidenze<<endl;
                for (int i=0;i<N;i++){
                    for(int j=0;j<N;j++){
                            for (int k=0;k<=coincidenze;k++){
                                if(e[i]==s[j]){
                                               e[i]==a[k];}}}}
                for (int k=0;k<=coincidenze;k++){
                    cout<<"numero coincidente"<<endl<<a[k]<<endl;}
    
    
    system("PAUSE");
        return EXIT_SUCCESS;
    }
    
Devi accedere o registrarti per scrivere nel forum
9 risposte