Controllo dati già presenti in un array

di Anonimizzato9860 il
9 risposte
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

  • 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.
  • 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; }}
  • 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;}
  • 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?
  • 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
  • Per applicarlo al mio codice come faccio? O.o
  • 
    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
  • E' come immaginavo allora!
    Grazie mille, ora però sto andando nel pallone, lo provo domani.
    Ne riparliamo domani xD
  • Come vuoi ^^
Devi accedere o registrarti per scrivere nel forum
9 risposte