Concetti Chiave
- Definizione della struttura dati: viene utilizzata una struttura "quadro" che contiene il nome, autore, prezzo e data di un dipinto.
- Dichiarazione della costante MAX_QUADRI: definisce il numero massimo di record nel vettore "pinacoteca", impostato a 20.
- Funzione ricorsiva ricBin: implementa la ricerca binaria su un array di strutture "quadro", restituendo l'indice del dipinto cercato o -1 se non trovato.
- Parametri della funzione: la funzione ricBin riceve un puntatore alla galleria, il nome del dipinto da cercare, e gli indici di inizio e fine del segmento di array.
- Inizializzazione delle variabili: "inizio" è impostato a 0, "fine" è impostato a numQuadri-1, e "dipinto" contiene il nome del dipinto da ricercare.
Scrivi una funzione C/C++ che esegue in modo ricorsivo la ricerca binaria in un vettore di record. Scrivi l’istruzione di chiamata. Dichiara, definisci la struttura dati e tutte le variabili coinvolte nella chiamata (con eventuali inizializzazioni (di variabili) che ritieni utili nella comprensione della funzione).
Definizione della struttura dati
#define MAX_QUADRI 20
struct quadro {
char nome[25]; //chiave primaria
char autore[30];
double prezzo;
char data[9];
};
struct quadro pinacoteca[MAX_QUADRI];
int inizio=0;
int fine=numQuadri-1;
char dipinto[25];
int posiz=ricBin(pinacoteca,dipinto,inizio,fine);
int ricBin(const struct quadro *galleria, const char *dipinto, int inizio, int fine)
{
if(inizio > fine)
return -1;
else
{
int centro;
centro = (inizio + fine)/2;
if(!strcmp(galleria[centro].nome,dipinto))
return centro;
else if(strcmp(galleria[centro].nome,dipinto) > 0)
return ricBin(galleria,dipinto,inizio,centro-1);
else
return ricBin(galleria,dipinto,centro+1,fine);
}
}
Domande da interrogazione
- Qual è la funzione principale della ricerca binaria ricorsiva nel contesto del codice fornito?
La funzione principale della ricerca binaria ricorsiva nel codice è trovare la posizione di un dipinto specifico all'interno di un vettore di strutture "quadro", ordinato per nome. Se il dipinto è presente, la funzione restituisce l'indice corrispondente; altrimenti, restituisce -1.