Controllo dati già presenti in un array

di il
9 risposte

Controllo dati già presenti in un array

Come si fa?
Praticamente sto riempendo un array con dei numeri ma devo fare in modo che uno stesso numero non venga inserito per due volte.. quindi devo controllare ogni volta che inserisco un numero se questo non è già presente nell'intero array... come faccio?
In teoria lo so fare, ma in C non ci riesco o.o Non funziona, è assurdo

9 Risposte

  • Re: Controllo dati già presenti in un array

    Ogni volta che devi inserire un valore chiami una funzione di tipo bool la quale restituisce true se l' elemento esiste nell' array e false se non esiste e quindi in base a cosa restituisce la funzione inserisci o meno l' elemento nell' array.
  • Re: Controllo dati già presenti in un array

    Non basterebbe fare un controllo diretto? Perchè due if?
    Il mio codice è questo, praticamente:
    A è l'array, num è il numero da esaminare e quindi inserire...
    for (i=0; i<14; i++) {
    for (j=0; j<14; j++) {
    if (A[j] == num) {printf("\nNumero gia' uscito!\n"); goto A;}
    A[i] = num; }}
  • Re: Controllo dati già presenti in un array

    Basta creare una variabile temporale che scandisce l'array e dice se il numero è già presente!, se è già presente passa al prossimo, se non è già presente lo inserisce nello spazio!
    il codice che hai fatto tu scandisce l'array , io metterei un else dopo la condizione del numero già uscito in modo che se non è già presente lo inserisce..ma poi perchè due cicli? te ne basta uno di for e magari invece del primo for mettici un while in modo che scandisca numeri finchè non inserisci 0 magari....
    potrebbe essere così magari
    while (num == 0) {
          scanf ("%d",&num);
          
          for (i=0;i<MAX;i++) {
              if (VET[i]==num) printf ("numero già inserito");
              else VET[i]=num;}
  • Re: Controllo dati già presenti in un array

    Non ha senso mettere l'else dopo quell'If perchè si riporta indietro... attualmente questo è il mio codice intero:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    //Dichiarazione array
    int CB[15];
    //Dichiarazione variabili
    int i,j,rnd,ok;

    void main()
    {
    srand(time(NULL));
    for (i=0; i<=14; ++i) {CB=0;}
    printf("Benvenuto nel gioco della Tombola!\nPremere un tasto per iniziare...");
    getch();
    system("cls");
    genera();
    system("PAUSE");
    }

    void genera()
    {
    rnd = 1+rand()%90;
    for (i=0; i<=14;++i) {
    for (j=0; j<=14;++j) {
    if (CB[j]==rnd) genera();
    CB = rnd;}
    stamp();
    getch();
    }
    }

    void stamp()
    {
    for (i=0; i<=14; ++i) {
    printf("%d ",CB);}
    printf("\n");
    }


    Dovrebbe funzionare, solo che ripete la cosa solo una volta... come mai?
  • Re: Controllo dati già presenti in un array

    Joysurrender sinceramete io odio il goto e non lo utilizzerò mai poichè un programma deve essere:
    - iterativo
    - sequenziale
    - selezione

    e il goto non lo rende sequenziale. Comunque io non ho mai parlato di due if .
    
    bool verifica ( int * p , int num ) {
          for ( int i = 0 ; i < 14 ; i ++ )
                  if ( p[i] == num )
                            return true;
          return false;
    }
    
    int main () { 
         int riemp=0,A[14],num;
         for ( int i = 0 ; i < 14 ; i++ )
         {
             scanf("%d",&num);
             if ( !verifica(A,num) )
             {
                      A[riemp] = num;
                      riemp++;
             }
         }
    ... 
    
    Questo intendo per una funzione booleana
  • Re: Controllo dati già presenti in un array

    Per applicarlo al mio codice come faccio? O.o
  • Re: Controllo dati già presenti in un array

    
    bool verifica ( ) {
          for ( int i = 0 ; i < 14 ; i ++ )
                  if ( CB[i] == rnd )
                            return true;
          return false;
    }
    
    void genera() {
          srand(time(NULL));
         riemp=0;
         for ( int i = 0 ; i < 14 ; i++ )
         {
             rnd=1+rand()%90;
             if ( !verifica() )
             {
                      CB[riemp] = rnd;
                      riemp++;
             }
         }
    
    Modificato, non capivo l' array da dove lo prendevi , poi ho visto che utilizzi variabili globali , altra cosa che non mi piace utilizzare XD

    Edit: riemp devi metterla come variabile globale e corrisponde al riemp del tuo array ( non è detto che su 14 cicli riuscirà ad inserire tutte e 14 le volte poichè può capitare che il valore sia uguale ad uno inserito
  • Re: Controllo dati già presenti in un array

    E' come immaginavo allora!
    Grazie mille, ora però sto andando nel pallone, lo provo domani.
    Ne riparliamo domani xD
  • Re: Controllo dati già presenti in un array

    Come vuoi ^^
Devi accedere o registrarti per scrivere nel forum
9 risposte