Ricerca lineare

di il
4 risposte

Ricerca lineare

Salve ragazzi, ho riscontrato un problema di comprensione su alcune righe di codice nonostante abbia fatto dall'inizio il diagramma a blocchi corrispondente.

Devo cercare in quale indice/posizione si trova un elemento dell'array digitato dall'utente.
Il codice sorgente è questo:
//RICERCA LINEARE VUOL DIRE RICERCARE UN VALORE DETTO VALORE CHIAVE. SI PROCEDE CONFRONTANDO OGNI ELEMENTO
//DELL'ARRAY CON IL VALORE CHIAVE
//E' NECESSARIO UN CERTO NUMERO DI CONFRONTI CIRCA PARI ALLA META' DEL NUMERO DEGLI ELEMENTI DELL'ARRAY STESSO

#include<iostream>
using namespace std;

int RicercaLineare(const int Vettore[],int Chiave, int DimensioneVettore);

int main()
{

const int arraySize=100;//INFORMA IL COMPILATORE CHE LA DIMENSIONE DELL'ARRAY
//E' COSTANTE E NON DEVE ESSERE MODIFICATO DAL PROGRAMMATORE,
//CIOE UGUALE A 100


int a[arraySize] ; //DICHIARAZIONE DELL'ARRAY CHE HA UNA DIMENSIONE PARI

//ALL'ESPRESSIONE TRA [] CHE EQUIVALE A 100



int ChiaveDiRicerca;//DICHIARAZIONE VARIABILE CHIAVE DI RICERCA, OVVERO IL VALORE

//DELL'ELEMENTO QUALSIASI
//DEL VETTORE CONSIDERATO


int posizione; //DICHIARAZIONE VARIABILE POSIZIONE , SERVE A CAPIRE IN CHE

//POSIZIONE/INDICE E' PRESENTE L'ELEMENTO
//CERCATO




//COSTRUZIONE DELL'ARRAY
for(int i=0;i<arraySize;i++) //CONDIZIONE DEL CICLO FOR
a=2*i;

cout<<"Inserisci la chiave di ricerca:"<<endl; //INSERISCI IL VALORE DELL'ELEMENTO CHE VUOI

//TROVARE
//CIOE' VUOI SAPERE CHE INDICE OCCUPA

cin>>ChiaveDiRicerca;//INSERISCO VALORE RANDOM DA TASTIERA


posizione=RicercaLineare(a,ChiaveDiRicerca,arraySize); //LA POSIZIONE DELL'ELEMENTO E'

//DATA DA UNA FUNZIONE CHIAMATA


if(posizione!=-1) //SE LA POSIZIONE E' DIVERSA DA -1 , VALORE SENTINELLA
cout<<"Valore trovato in posizione"<<posizione<<endl; //VALORE TROVATO IN POSIZIONE ".."


else //ALTRIMENTI (CONDIZIONE FALSA)
cout<<"Valore in nessuna posizione o indice dell'array"<<endl;


return 0;

}

int RicercaLineare(const int Vettore[], int Chiave, int DimensioneVettore)
{
for(int n=0;n<DimensioneVettore;n++)


if(Vettore[n]==Chiave)


return n;



return -1;
}

Allora io ho interpretato in questo modo:
Costruisco il vettore che ha dimensione 100 e i rispettivi elementi occupano gli indici che vanno da: 0 a 99 in questo modo (valore elementi in ciascuna cella): 0,2,4,6,-----,198
Fin qui ci siamo.
Inserisco un valore ipotetico che può o non può far parte della cella del vettore.
Esempio:
Inserisco il valore 2, vedo che cella occupa o con che indice/posizione viene indicato.
Questo 2 è la chiave di ricerca ed è il parametro attuale della funzione chiamante .
Questo parametro viene passato per valore alla funzione chiamata che provvede ad un'alias chiamato parametro formale , quindi viene fatta una copia detto in modo spiccio.
Quindi la funzione chiamata opera sulla copia e non sulla variabile.

IL MIO DUBBIO: non riesco a comprendere cosa fa in questo caso la funzione chiamata.
Ovvero la funzione RicercaLineare. Non so come fa ad effettuare questa ricerca.

Odio il libro che riporta tale esempio perché è mancante di commenti.
Libro:Fondamento di c++ Deitel

Potreste aiutarmi?Vi ringrazio anticipatamente.

4 Risposte

  • Re: Ricerca lineare

    Cosa non capisci della funzione di ricerca? Sono poche linee ...
  • Re: Ricerca lineare

    Ti dico cosa ho compreso.
    Dopo aver ricevuto questa copia del parametro inserito, opera con il ciclo.
    Se il Vettore[n]==chiave allora restituisce n alla funzione chiamante.
    Cioè esempio:

    Mettiamo il caso che inserisco 2 , questo 2 viene copiato e passato nella funzione chiamata.
    La funzione chiamata deve svolgere un certo lavoro.
    n parte da 0, soddisfa la condizione n<100 perché 0<100 e dice che :
    Se il vettore[n]==Chiave allora restituisci n
    cioè se il vettore[0]==2 allora restituisci 0, in tal caso non è vero perché la cella vettore[0] corrisponde a 0 come elemento posto nella cella stessa. Quindi esce dal ciclo restituendo -1.

    Invece se inserisco da tastiera il numero 0 , rispetta la condizione quindi restituisce 0 alla funzione main chiamante.

    Ora non capisco il senso del ciclo. Tutto qui.
  • Re: Ricerca lineare

    Non è vero che esce dal ciclo con -1 perché è proprio il ciclo che permette di ripetere la ricerca con Vettore[1] e chiave ... e così via finché non viene trovato. SOLO se termina il ciclo senza avere trovato la chiave allora ritorna con -1

    Hai capito come funzionano i cicli for?
  • Re: Ricerca lineare

    Perfetto adesso si. Ti ringrazio.
Devi accedere o registrarti per scrivere nel forum
4 risposte