edutecnica

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: