prof. Nunzio Brugaletta Programmazione e linguaggio C

EnneBi - Programmazione
Avanti Indietro Inizio


4.10 Un'applicazione del paradigma procedurale

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:

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.





Avanti Indietro Inizio

http://ennebi.solira.org ennebi@solira.org