Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] ricerca duplicati in un array

    Salve gente,
    ho un quesito da porvi per il linguaggio C, dovrei risolvere questo esercizio, ma ormai sono due giorni che butto sangue
    Ho un array A di interi e devo creare un nuovo array B composto da elementi di A che non siano ripetuti appunto in A. Es. se A= 1,3,2,3,1,5 allora B= 2,5.
    Io ho ho scritto una cosa del genere ma il risultato prodotto non è quello che mi aspetto. Dateci un occhio, credo di esserci vicino.

    codice:
    #include <stdio.h>
    
    int main() { 
    
    int a[6]= { 1,3,2,3,1,5 };
    int b[6];
    int i,j,k,x;
    int flag=0;
    
    for(k=0; k<6; k++) {   // azzero il vettore B
       a[k]=0;
       }
    
    for(i=1; i<6; i++) {   //Confronto ogni elemento con il resto dell'array
    
        for(j=0; j<6; j++) {
    
           if( a[i] == a[j]) {
              flag=1;
              }
        }
    if(flag == 0) {
        b[i]=a[i];
        }
    }
    
     for(x=0; x<6; x++){   //stampo a video l'array ottenuto
     printf("%d ," , b[x]);
     }
     return 0;
    }
    magari qualcuno puo' aiutarmi .. buonagiornata daniele

  2. #2
    Premetto che non sono molto esperto;
    secondo me il problema è semplice: con
    if( a[i] == a[j]) {
    flag=1;
    }
    confronti ognin volta l stesso valore con se stesso (se ad esempio i=2, quando nel ciclo j diventerà 2 avrai if( a[2] == a[2]) {flag=1;}, il risultato sarà per forza flag=1), flag per questo è sempre 1 il valore non viene mai passato a b[].
    Inoltre devi specificare all'inizio del ciclo iniziale che flag=0, oppure appena diventerà 1 lo resterà per tutti i cicli successivi e qualunque sia il risultato del paragone flag sarà sempre 1.

    Ecco come scriverei io il codice:

    codice:
    #include <cstdlib>
    #include <stdio.h>
    
    int main() { 
    
    int a[6]= { 1,3,2,3,1,5 };
    int b[6];
    int i,j,k,x;
    int flag=0;
    
    for(k=0; k<6; k++) {   // azzero il vettore B
       b[k]=0;
       }
    
    for(i=1; i<6; i++) {   //Confronto ogni elemento con il resto dell'array
    flag=0;//ogni volta devi riportare flag a 0
        for(j=0; j<6; j++) {
    if (i!=j){
           if( a[i] == a[j]) {
              flag=1;
              }
       }
       }
    if(flag == 0) {
        b[i]=a[i];
        }
    }
     printf("%d " , b[0]);//eviti la virgola finale
     for(x=1; x<6; x++){   //stampo a video l'array ottenuto
     printf(",%d " , b[x]);
     }
     return 0;
    }
    Spero di esserti stato d'aiuto!
    Fammi sapere!

  3. #3
    Grazie molte .. era proprio quello che cercavo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.