Ho usato i vostri consigli, ecco 3 codici di cui vorrei un parere:
1) usando una variabile globale come suggeriva @nippolo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 10
#define KEY 7
int ricerca_lineare(const int vett[], int size);
int main()
{
int vettore[DIM], i, key, elemento;
srand(time(NULL));
printf("\nVETTORE CASUALE : ");
for(i = 0; i < DIM; i++)
printf("%d ", vettore[i] = 1 + rand() % 10);
elemento = ricerca_lineare(vettore, DIM -1);
if(elemento < 0)
printf("\n%d elemento non trovato\n\n", elemento);
else
printf("\nPOSIZIONE : %d\n\n", elemento);
return 0;
}
int ricerca_lineare(const int vett[], int size)
{
if(vett[size] == KEY)
return size;
if(size == 0)
return -1;
return ricerca_lineare(vett, size - 1);
}
2) sostituendo 0 alla chiave e cercando 0 (come costante) nella funzione ricorsiva come suggeriva @StandardOil:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 10
int ricerca_lineare(const int vett[], int size);
int main()
{
int vettore[DIM], i, key, elemento;
srand(time(NULL));
printf("\nVETTORE CASUALE : ");
for(i = 0; i < DIM; i++)
printf("%d ", vettore[i] = 1 + rand() % 50);
printf("\n\ninserisci l'elemento da cercare : ");
scanf("%d", &key);
for(i = 0; i < DIM; i++)
if(vettore[i] == key)
vettore[i] = 0;
elemento = ricerca_lineare(vettore, DIM -1);
if(elemento < 0)
printf("\n%d elemento non trovato\n\n", elemento);
else
printf("\nPOSIZIONE : %d\n\n", elemento);
return 0;
}
int ricerca_lineare(const int vett[], int size)
{
if(vett[size] == 0)
return size;
return ricerca_lineare(vett, size - 1);
}
3) con la mia idea di partenza :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM 10
int ricerca_lineare(const int vett[], int size);
int main()
{
int vettore[DIM], i, elemento;
srand(time(NULL));
printf("\ngenero vettore casuale : ");
for(i = 0; i < DIM - 1; i++)
printf("%d ", vettore[i] = 1 + rand() % 50);
printf("\n\ninserisci l'elemento da cercare : ");
scanf("%d", &vettore[i]);
elemento = ricerca_lineare(vettore, i - 1); // dimensine del vettore senza la chiave
if(elemento >= 0)
printf("\nposizione : %d\n\n", elemento);
else
printf("\n%d elemento non trovato\n\n", elemento);
return 0;
}
int ricerca_lineare(const int vett[], int size)
{
if(vett[size] == vett[DIM - 1])
return size;
if(size == 0)
return -1;
return ricerca_lineare(vett, size - 1);
}
Quello che mi interessa sapere è se possono andare come possibili soluzioni (nel senso che rispettano la traccia e il concetto di ricorsione)
Grazie