Ricerca con sentinella

di il
10 risposte

Ricerca con sentinella

Raga sapete cosa c'è di sbagliato su questo codice?



int ricercas(int vet[],int size,int x){
    int i=0;
    vet[size-1]=x;
    for(i=0;i<size;i++)
        if((vet[i]==x)&&(i<size)){return i;}
        else return-1;
  
    }
grazieee

10 Risposte

  • Re: Ricerca con sentinella

    Ciao,
    che errore ti dà? Compila e si comporta in modo "strano" o non compila neanche?
    Non ho ben capito cosa vuoi fare

    Così a occhio mi puzza il fatto che tu stia assegnando il valore x all'elemento di posto size-1esimo e poi lo vai a cercare... Attendo spiegazioni di ciò che ti serve (oppure qualcuno più esperto di me che ha capito )
  • Re: Ricerca con sentinella

    Sto cercando di usare la ricerca a sentinella praticamente ti dichiari un vettore di n elementi lo fai riempire fino ad n-1 elementi poi fai una ricerca prima di ricercare "piazzi" nella posizione n il tuo numero x che hai chiesto nella ricerca nel "tentativo " di trovare il tuo elemento, logicamente lo troverai, ma il trucco si basa nel fatto che se lo trovi prima della posizione n il tuo elemento è presente nel vettore, se invece viene trovato nella locazione n il tuo elemento non è presente.

    Con questa tecnica a differenza della ricerca ingenua ti risparmi un controllo visto che non devi controllare se è uscito perchè ha trovato l'elemento oppure perché ha finito lo scorrimento del vettore...
  • Re: Ricerca con sentinella

    Mi daresti tutto il programma?
  • Re: Ricerca con sentinella

    frankekko98 ha scritto:


    Mi daresti tutto il programma?
    la parte interessante è praticamente solo questa il programma principale è una semplice chiamata al sottoprogramma che riempie il vettore e al sottoprogramma per la ricerca e la stampa finale
  • Re: Ricerca con sentinella

    int ricercas(int vet[],int size,int x){
        int i=0;
        vet[size-1]=x;
        for(i=0;i<size;i++)
            if( vet[i]==x && i<size )
            return i;
            else 
            return 1;
        }
    
    hai provato così?
  • Re: Ricerca con sentinella

    Viene controllato solo v[0] in quanto entra in potere l'else che fa terminare la funzione se il primo elemento non è = x.
  • Re: Ricerca con sentinella

    Non cambia nulla da sempre come risultato che è in posizione 1 probabilmente perchè va direttamente nella parte dell'else...
  • Re: Ricerca con sentinella

    int ricercas(int vet[],int size,int x){
        int i=0;
        vet[size-1]=x;
        for(i=0;i<size;i++) {
            if( vet[i]==x && i<=size )
            return i;
            else
            return 1;
      
        }
    
    Mi è venuto in mente di mettere al posto di i<size, i<=size. Perchè se io do a size 10 allora x sarà uguale a v[9]. quindi quando al ciclo for arriva a 9, if( vet[9]== x && i <=size) , in questo modo si avvera.

    Non so se sbaglio
  • Re: Ricerca con sentinella

    Sbagliate tutti e due. Togli quel else e metti fuori dal for return -1.
  • Re: Ricerca con sentinella

    skynet ha scritto:


    Sbagliate tutti e due. Togli quel else e metti fuori dal for return -1.

    sei un grande.... cercherò di essere più attento in futuro...
Devi accedere o registrarti per scrivere nel forum
10 risposte