Esercizio 5
Progettare per una società immobiliare una struttura di dati che descriva
in modo adeguato le caratteristiche di un generico appartamento di abitazione
civile.
Creare un vettore di dimensione n di tale struttura. Scrivere una procedura
di ricerca (diagramma di flusso + codice) in questo vettore per individuare
tutti gli appartamenti che hanno certe caratteristiche richieste.
Per semplificare al massimo il problema pensiamo di definire un record
di soli due record:
char pro[2];//campo provincia stringa
di 2 soli caratteri
int loc;//campo numero di locali (intero)
Poi pensiamo di predisporre una funzione void che stampi a video tutti i
record che hanno il numero di locali cercati.
Il listato finale sarà dunque il seguente:
#include<iostream>
#include<stdio.h>
using namespace std;
const int n=10;
struct rec{
char pro[2];
int loc;
};
void cerca(struct rec X[n],int nloc);
main(){
struct rec T[n];//dichiarazione vettore di record=struttura
int i;
//caricamento vettore
for(i=0;i < n;i++){
cout << "pro:";
fflush(stdin);
gets(T[i].pro);
cout << "loc:";cin >> T[i].loc;
} //stampa del vettore per verificarne la memorizzazione
for(i=0;i < n;i++)cout << T[i].pro << " " << T[i].loc << endl;
//richiesta del numero dei locali
cout << "\n no.loc.:";cin >> i;
cerca(T,i);//invocazione della funzione
}//fine main
void cerca(struct rec X[n],int nloc){
int i; for(i=0;i < n;i++)
if(X[i].loc==nloc)cout << X[i].pro << " " << X[i].loc << endl;
}//fine cerca
Notiamo che in questo caso oltre alla costante n,
anche la definizione del record deve essere dichiarato globalmente: se fosse
dichiarato solo localmente al main() la funzione
cerca() non saprebbe di quali campi è costituito
il record rec. Durante il caricamento del vettore
la stringa T[i].pro viene acquisita tramite l'istruzione
gets() preceduta da fflush(stdin)
(svuotamento buffer tastiera) ;operazioni standard per l'acquisizione di
stringhe.
La variabile i esaurito il suo ruolo di contatore dei cicli for viene usata
per passare il numero di locali cercati alla funzione cerca().
Di seguito lo schema a blocchi della funzione: