L’esercizio proposto riguarda la creazione di un vettore di stringhe e della possibilità di ricercare all’interno dello stesso un valore stringa e restituire la posizione della prima occorrenza eventualmente individuata.
In caso contrario il programma restituisce un messaggio che informa l’utente che la stringa cercata non è stata individuata.
In particolare applcihiamo l’esercizio ad un elenco di cognomi di una classe di studenti, con l’uso della metodologia top.down ovvero della possibilità di scomporre il problema in sotto problemi per poi derivare dei sotto programmi in C++ di uso generale.
I sotto problemi che possiamo definire sono il caricamento del vettore e la funzione di ricerca che restituisce un intero positivo rappresentante la posizione dell’elemento eventualmente individuato.
La procedure di caricamento prevede due parametri il vettore passato per riferimento in modo adimensionale, e il numero degli elementi. La funzione di ricerca prevede tre parametri il vettore, la lunghezza e l’elemento incognito da cercare, e restituisce la posizione dell’elemento eventualmente cercato.
Nell’algoritmo principale sono richiamati i sotto algoritmi relativi al caricamento dati e alla ricerca,, che restiuisce la prima occorrenza presente o l’ultima a seconda se nel vettore sono presenti i duplicati. Per ora per semplicità ipotizziamo che il vetotre contenga delle stringhe distinte, e poi per raffinamento successivo risolviamo il problema del vettore con cognomi duplicati.
La tabella dei dati è:
Uso | Nome | Tipo | Descrizione |
Input | n | Intero | numero studenti della classe / elementi dell’array |
Input | cognomi | vettore di stringhe | vettore di stringhe contiene i cognomi degli studenti |
Input | incognito | stringa | valore elemento da cercare |
Output | pos | intero | posizione dell’elemento da cercare |
I digrammi di flusso sono realizzati con flowgoritm per provare gli algoritmi risolutivi.
L’algoritmo di caricamento risolutivo è molto semplice:
L’algoritmo di caricamento prevede come variabili locali solo l’indice k del vettore e del ciclo.
L’algoritmo di ricerca è invece:
L’algoritmo di ricerca a cui corrisponde una funzione in C++ restituisce la variabile p e utilizza solo k come indice del vettore come variabile locale.
L’algoritmo principale è:
La codifica in C++ è:
#include <iostream>
#include <string>
using namespace std;
void carica(string vet[], int l);
int ricerca(string vet[], int l, string x);
int main()
{
int n;
int pos;
string cognomi[100];
string incognito;
cout << "\n Quanti studenti sono in classe ?:";
cin >> n;
carica(cognomi,n);
cout << "\n Insrisci il cognome dello studente da ricercare:";
cin >> incognito;
pos=ricerca(cognomi,n,incognito);
if (pos>0)
{
cout << "\n Studente individuato in posizione :"<< pos << endl;
}
else
{
cout << "\n Studente non individuato nell'elenco"<< endl;
}
return 0;
}
void carica(string vet[], int l)
{
int k;
for (k=0;k<l;k++)
{
cout << "\n Inserisci cognome studente:";
cin >> vet[k];
}
}
int ricerca(string vet[], int l, string x)
{
int k;
int p=-1;
for (k=0;k<l;k++)
{
if (vet[k]==x)
{
p=k+1;
}
}
return p;
}