Aiuto programma con vettori

di il
6 risposte

Aiuto programma con vettori

Buongiorno a tutti, devo creare un programma che risolva la seguente traccia:
In un array vengono memorizzati i numeri di gara dei piloti che hanno portato a termine la priva prova, in un secondo array i numeri dei piloti che hanno portato a termine la seconda prova della stessa gara. Il programma riceve in input i valori da inserire nei due array e inserisce in tre nuovi array i numeri dei piloti che:
- Hanno portato a termine entrambe le prove
- Hanno portato a termine solo la prima prova
- Hanno portato a termine la prima prova
Fin'ora sono riuscito a fare solo la prima parte (ovvero i numeri di chi ha fatto entrambe le prove)
Sto cercando di fare la funzione che calcola chi ha fatto solo la prima prova ma quando faccio la stampa del vettore noto che non è stato caricato correttamente e non riesco a capire dove sbaglio, incollo qui il codice e spero in un vostro aiuto
#include "stdio.h"
#include "stdlib.h"
#define N 5
void numeri_prima_prova(int[]);
void numeri_seconda_prova (int []);
int entrambe_prove (int [], int [], int []);
void prima_gara (int [], int [], int []);
void stampa_vettore (int, int []);
int main()
{   
    int cellevet3, cellevet4;
    int vettore1[N], vettore2[N], vettore3[N], vettore4[N], vettore5[N];
    numeri_prima_prova(vettore1);
    printf("\n\n");
    numeri_seconda_prova(vettore2);
    cellevet3=entrambe_prove (vettore1, vettore2, vettore3);
    printf("\n\nPiloti che hanno completato entrambe le gare: ");
    stampa_vettore (cellevet3, vettore3);
    prima_gara (vettore1, vettore2, vettore4);
    printf("\n\nPiloti che hanno completato la prima gara ma non la seconda: ");
   // stampa_vettore (cellevet4, vettore4);
    printf("\n");
    system("PAUSE");
    
}

void numeri_prima_prova(int vet1[])
{
    int cont, i;
    printf("Inserisci i numeri dei piloti che hanno portato a termine la prima gara\n");
    printf("\n");
    for (i=0, cont=1;i<N; i++,cont++)
        {
            printf("Inserisci %d^ numero: ", cont);
            scanf("%d",&vet1[i]);
        }
}

void numeri_seconda_prova (int vet2 [])
{
    int  i, cont;
    printf("Inserisci i numeri dei piloti che hanno portato a termine la seconda gara\n");
    printf("\n");
    for (i=0, cont=1;i<N; i++, cont++)
        {
            printf("Inserisci %d^ numero: ",cont);
            scanf("%d",&vet2[i]);
        }
}
int entrambe_prove (int vet1[], int vet2[], int vet3[])
{
    int i, j, n;
    n=0;
    for (i=0; i<N; i++)
        {
            for (j=0; j<N; j++)
                {
                    if (vet1[i]==vet2[j])
                    {
                        vet3[n]=vet1[i];
                        n++;
                    }
                }
        }
        return n;
}            

void stampa_vettore (int x, int vet[])
{
     int i;
     
     for (i=0; i<x; i++)
         {
               printf("%d ",vet[i]);
         }
     printf("\n\n");
}

void prima_gara (int vet1[], int vet2[], int vet4[])
{
     int i, n, j, cont, x;
     n=0;
     for (i=0, cont=0; i<N; i++)
     {
         for (j=0; j<N; j++)
             {
                   if (vet1[i]!=vet2[j])
                      {
                             cont++;
                             if (cont==N)
                              {  vet4[n]=vet1[i];           
                                n++;}
                      }
             }
         }       
}

6 Risposte

  • Re: Aiuto programma con vettori

    Il problema e' che il main non conosce la grandezza di vet4 quando chiama la funzione per stamparlo.
    devi ritornarlo dalla funzione "prima_gara()" come fai con la funzione "entrambe_prove()"


    Ti ho reso un po' più efficiente "prima_gara()"
    #include "stdio.h"
    #include "stdlib.h"
    #define N 5
    void numeri_prima_prova(int[]);
    void numeri_seconda_prova (int []);
    int entrambe_prove (int [], int [], int []);
    int prima_gara (int [], int [], int []);
    void stampa_vettore (int, int []);
    int main()
    {
        int cellevet3, cellevet4;
        int vettore1[N], vettore2[N], vettore3[N], vettore4[N], vettore5[N];
        numeri_prima_prova(vettore1);
        printf("\n\n");
        numeri_seconda_prova(vettore2);
        cellevet3=entrambe_prove (vettore1, vettore2, vettore3);
        printf("\n\nPiloti che hanno completato entrambe le gare: ");
        stampa_vettore (cellevet3, vettore3);
        cellevet4=prima_gara (vettore1, vettore2, vettore4);
        printf("\n\nPiloti che hanno completato la prima gara ma non la seconda: ");
        stampa_vettore (cellevet4, vettore4);
        printf("\n");
        system("PAUSE");
    
    }
    
    void numeri_prima_prova(int vet1[])
    {
        int cont, i;
        printf("Inserisci i numeri dei piloti che hanno portato a termine la prima gara\n");
        printf("\n");
        for (i=0, cont=1; i<N; i++,cont++)
        {
            printf("Inserisci %d^ numero: ", cont);
            scanf("%d",&vet1[i]);
        }
    }
    
    void numeri_seconda_prova (int vet2 [])
    {
        int  i, cont;
        printf("Inserisci i numeri dei piloti che hanno portato a termine la seconda gara\n");
        printf("\n");
        for (i=0, cont=1; i<N; i++, cont++)
        {
            printf("Inserisci %d^ numero: ",cont);
            scanf("%d",&vet2[i]);
        }
    }
    int entrambe_prove (int vet1[], int vet2[], int vet3[])
    {
        int i, j, n;
        n=0;
        for (i=0; i<N; i++)
        {
            for (j=0; j<N; j++)
            {
                if (vet1[i]==vet2[j])
                {
                    vet3[n]=vet1[i];
                    n++;
                }
            }
        }
        return n;
    }
    
    void stampa_vettore (int x, int vet[])
    {
        int i;
    
        for (i=0; i<x; i++)
        {
            printf("%d ",vet[i]);
        }
        printf("\n\n");
    }
    
    int prima_gara (int vet1[], int vet2[], int vet4[])
    {
        int i, n, j, cont, x;
        int t=0;
    
        n=0;
        for (i=0 ; i<N; i++, t=0)
        {
            for (j=0; j<N; j++)
            {
                if (vet1[i]==vet2[j])
                {
                    t=1;
                    break;
                }
            }
    
            if(t==0){
                vet4[n]=vet1[i];
                n++;
            }
        }
    
        return n;
    }
    
  • Re: Aiuto programma con vettori

    @Ale99 ti ringrazio molto Una sola cosa, qui dentro
    if (vet1[i]==vet2[j])
                {
                    t=1;
                    break;
                }
    a cosa serve il break? Non l'ho ancora studiato
  • Re: Aiuto programma con vettori

    Esce dal ciclo più interno

    Quello che ho messo serve per uscire dal for in cui è contenuto
  • Re: Aiuto programma con vettori

    "continue" invece ritorna all'inizio del ciclo
  • Re: Aiuto programma con vettori

    Ok grazie, ma se non lo metto il programma funziona correttamente giusto? Ho fatto una prova e sembra non ci siano problemi
  • Re: Aiuto programma con vettori

    Funziona correttamente ma fa sempre tutti i cicli. Mentre così non cicla più appena trova due elementi uguali

    Se tu avessi un numero molto grande di elementi avresti una notevole variazione di prestazioni
Devi accedere o registrarti per scrivere nel forum
6 risposte