Esercizio confronto (array) in C

di il
4 risposte

Esercizio confronto (array) in C

Ciao ragazzi, l'esercizio su cui vorrei un aiuto e' analogo a quello del precedente post.
Ho un vettore A di n elementi, devo inserire nel vettore B --> ogni numero che compare ripetuto nel primo vettore, deve comparire una sola volta nel secondo.
Esempio:
A = [1 ,2, 3, 4, 1, 2] B = [ 3, 4, 1, 2]
#include <stdio.h>
#define size 100

int array (int a[]) {
                      int i;
                      int n = 0;

                      printf("Inserisci i valori del tuo array, -1 per fermarti:\n");

                      for ( i = 0; i <= size-1; i++)
                         {
                            scanf ("%d",& a[i]);
                            n++;
                              if (a[i]==-1)
                                {
                                  n--;
                                  break;
                                }
                         }

                      return n;    
}

void stampa ( int a[], int n) {
                                int i;

                                for ( i = 0; i<=n-1; i++)
                                   {
                                     printf ("Posizione: %d, Valore: %d\n", i, a[i]);
                                   }
}

int confronto ( int a[], int b[], int n)  {
                                            int i = 0;
                                            int j = 0;
                                            int k = 0;
                                            int w = 0;
                                            int trovato = 0;

                                            while ( i < n)
                                                 {
                                                     while ( k < n && trovato == 0)
                                                          {
                                                            if (a[i]!=a[k+1])
                                                              {
                                                                b[j] = a[i];
                                                                j++;
                                                                w++;
                                                                trovato = 1;
                                                              }
                                                            else k++;  
                                                          }
                                                     k = 0;
                                                     trovato = 0;
                                                     i++;
                                                 }
                                            return w;     
}

int main ()  {
               int A[size];
               int B[size];
               
               int N = 0;
               int M = 0;
               int W = 0;

               N = array(A);
               stampa (A, N);

               printf("Nuovo vettore:\n");
               W = confronto(A, B, N);
               stampa(B, W);

               return 0; 
}
Mi stampa tutti i valori copiati del vettore A senza nessuna modifica Il problema penso sia nell' if della funzione confronto, se qualcuno sa darmi una mano ve ne sarei grato.
Sto da un bel po' a capire cosa sbaglio, percio' sto chiedendo a voi
Vi ringrazio in anticipo!!

4 Risposte

  • Re: Esercizio confronto (array) in C

    Ciao, ma se

    pixxx ha scritto:


    Ho un vettore A di n elementi, devo inserire nel vettore B --> ogni numero che compare ripetuto nel primo vettore, deve comparire una sola volta nel secondo.
    Esempio:
    A = [1 ,2, 3, 4, 1, 2] B = [ 3, 4, 1, 2]
    allora B non dovrebbe essere [1, 2]?
  • Re: Esercizio confronto (array) in C

    Non devi inserire i valori uguali ma tutti i valori tranne quelli che si inseriscono due volte
  • Re: Esercizio confronto (array) in C

    pixxx ha scritto:


    Non devi inserire i valori uguali ma tutti i valori tranne quelli che si inseriscono due volte
    Ma sono esercizi che stai inventando tu al momento o li hai trovati da qualche parte? In tal caso potresti postare la traccia originale?
    Chiedo perché sinceramente sia

    pixxx ha scritto:


    Ho un vettore A di n elementi, devo inserire nel vettore B --> ogni numero che compare ripetuto nel primo vettore, deve comparire una sola volta nel secondo.
    Esempio:
    A = [1 ,2, 3, 4, 1, 2] B = [ 3, 4, 1, 2]
    sia

    pixxx ha scritto:


    Non devi inserire i valori uguali ma tutti i valori tranne quelli che si inseriscono due volte
    non mi sembrano tanto chiare come spiegazioni...
  • Re: Esercizio confronto (array) in C

    Ha ragione Nippolo: il primo esempio non è coerente con quello che sostieni di volere e il secondo è una cosa diversa.
    Se l'esercizio è il solito sull'eliminazione dei doppioni, la correzione è questa
    
    int confronto (int a[], int b[], int n)  {
        int i, j, trovato, w = 0;
        
        for(i = 0; i < n; i++){
            for(j = trovato = 0; j < w; j++)
                if(a[i] == b[j]){
                    trovato = 1;
                    break;
                }
            if(!trovato)  
                b[w++] = a[j];
        }
        
        return w;     
    }
    
    
Devi accedere o registrarti per scrivere nel forum
4 risposte