prof. Nunzio Brugaletta | Programmazione e linguaggio C |
Applicare un paradigma, in sostanza, vuol dire applicare una serie di regole ben determinate alla risoluzione di un problema. In definitiva significa vedere e affrontare la risoluzione del problema attraverso la lente delle regole del paradigma.
Applicare il paradigma procedurale alla programmazione vuol dire definire le procedure desiderate, concentrarsi sul processo, sull'algoritmo necessario per eseguire i calcoli. In questa parte si metterà in evidenza l'applicazione concreta del paradigma di programmazione procedurale a partire dalla ricerca dell'algoritmo risolutivo di un tipo di problemi.
Una tipologia di problemi ricorrenti nella gestione dei vettori è quella che richiede algoritmi di ricerca. Nell'esempio proposto si farà riferimento alla ricerca lineare o, come si chiama anche, scansione lineare. In pratica si tratta di esaminare tutti gli elementi del vettore, uno dopo l'altro, alla ricerca della posizione dell'elemento che soddisfa determinati requisiti.
Si abbia da risolvere, per esempio, il seguente problema:
Dato un insieme A di numeri interi, si vuole sapere in quale posizione, se c'è, è registrato un certo numero intero acquisito da input.
La risoluzione del problema può essere ricondotta alle seguenti fasi:
INIZIO Caricamento insieme A Acquisizione numero da cercare Ricerca del numero nell'insieme Se il numero è presente stamparne la posizione altrimenti stampare “numero non trovato” fine-se FINE
A parte la fase di caricamento dell'insieme che non ha bisogno di essere specificata ulteriormente visto che si tratta della funzione standard di inserimento dati in un vettore, occorre invece specificare meglio in cosa consista la ricerca del numero nell'insieme:
Ricerca del numero nell'insieme INIZIO Inizializza posizione con valore non vero Per ciascun elemento dell'insieme Se elemento è uguale al numero conserva in posizione la posizione dell'elemento trovato fine-se fine-per FINE
Per la codifica del programma si utilizzeranno, dunque, due funzioni:
una funzione per il caricamento dell'insieme in cui cercare. La funzione potrebbe chiamarsi carica. Tale funzione ha il compito di acquisire, da tastiera, i valori da mettere nell'insieme quindi non necessita di alcun input oltre alla dimensione del vettore e fornisce come output il vettore caricato
una funzione per la ricerca di un elemento nell'insieme. La funzione potrebbe chiamarsi cerca e ha bisogno di conoscere l'insieme in cui cercare e cosa cercare (i suoi input). Fornisce in output la posizione, all'interno dell'insieme, in cui si trova l'elemento o un valore non valido come posizione (per esempio -1) se non trova l'elemento nell'insieme.
La codifica del programma è proposta di seguito:
#include <stdio.h> #define ELEMENTI 10 void carica(int* v1); /*1*/ int cerca(int* v1, int num); /*1*/ main(){ int numeri[ELEMENTI]; int cosa, pos; printf("Ricerca di un elemento in un insieme\n"); /* caricamento insieme in cui cercare */ carica(numeri); /*2*/ /* numero da cercare */ printf("Quale numero cercare? "); scanf("%d",&cosa); /* ricerca posizione se numero esistente */ pos=cerca(numeri,cosa); /*2*/ /* stampa risultati */ if(pos>=0) printf("numero trovato in posizione %d\n",pos); else printf("numero non trovato\n"); } /* caricamento insieme */ void carica(int *v1){ int i; printf("Caricamento insieme\n"); for(i=0;i<ELEMENTI;i++){ printf("Elemento di posiione %d ",i); scanf("%d",&v1[i]); } } /* Ricerca posizione elemento cercato */ int cerca(int* v1, int num){ int i; int p=-1; for(i=0;i<ELEMENTI;i++){ if(num==v1[i]) p=i; } return p; }
Essendo il codice, anche per la presenza di commenti esplicativi, semplice da seguire vengono solo evidenziate le righe 1 in cui, in accordo con quanto osservato, vengono definiti la quantità e il tipo di parametri da passare, e le righe 2 in cui, in accordo alle 1, vengono effettuate le chiamate alle due funzioni.
http://ennebi.solira.org | ennebi@solira.org |