Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
PROCEDUREE
Teresa Mallardo
CARATTERISTICHE
Nome
DELLE VARIABILI
(1/2)
Tipo
Dimensione Indirizzo
Valore
CARATTERISTICHE
DELLE VARIABILI
(1/2)
int i = 5;
SOTTOPROGRAMMI
#define dim 10
main(){ int V[dim], i,j, max, tmp; /* lettura dei dati */ for (i=0; i<dim; i++) { printf("valore n. %d: ",i); scanf("%d", &V[i]); } /* ordinamento */ for(i=dim-1; i>1; i--) { max=i; for( j=0; j<i; j++) if (V[j]>V[max]) max=j; if (max!=i) /* scambio */ { tmp=V[i]; V[i]=V[max]; V[max]=tmp; } } /* stampa */ for (i=0; i<dim; i++) printf("\n%d", V[i]); }
Soluzione
si pu assegnare un nome ad ogni parte del programma, racchiudendone le istruzioni che la definiscono all'interno di un componente software riutilizzabile
il sottoprogramma
sono nomi di sottoprogrammi, ognuno dei quali rappresenta una parte del programma (nella prima versione)
RIUSABILIT
Mediante i sottoprogrammi possibile eseguire pi volte lo stesso insieme di operazioni senza doverlo riscrivere Esempio: ordinamento di due vettori
#include <stdio.h> #define dim 10 #define dim2 25 main() { int V1[dim], V2[dim2]; leggi(V1, dim); leggi(V2, dim2); ordina(V1, dim); ordina(V2, dim2); stampa(V1,dim); stampa(V2, dim2); }
SOTTOPROGRAMMI: FUNZIONI E
PROCEDURE
Un sottoprogramma una nuova istruzione, o un nuovo operatore definito dal programmatore per sintetizzare una sequenza di istruzioni In particolare:
procedura: un sottoprogramma che rappresenta unistruzione non primitiva funzione: un sottoprogramma che rappresenta un operatore non primitivo
Tutti i linguaggi di alto livello offrono la possibilit di definire funzioni e/o procedure
FUNZIONI
molti possibili ingressi (che non vengono modificati) una sola uscita (il risultato) riceve dati di ingresso attraverso i parametri esegue una espressione, la cui valutazione fornisce un risultato denota un valore in corrispondenza al suo nome
Una funzione
10
11
Listruzione return <espressione> provoca la terminazione dellattivazione della funzione e la restituzione del controllo al chiamante unitamente al valore dellespressione che la segue Eventuali istruzioni successive alla return non saranno mai eseguite Esempio: int max() { int x, y, max; scanf(%d, &x); scanf(%d, &y); if (x > y) max = x; else max = y; return max; printf(ciao!); /* mai eseguita! */ }
12
E le procedure?
13
PROCEDURE IN C
possibile costruire delle particolari funzioni che non restituiscono alcun valore:
void proc () { ... }
la definizione di una funzione proc che non restituisce alcun valore NB: void un identificatore di tipo per classificare dati il cui dominio linsieme vuoto
14
15
ESEMPIO
INIZIO
LEGGI A
INS_DATI
RICHIEDI B LEGGI B
CALCOLA_PERIM
P = A + B + IPOT
VISUALIZZA P FINE
STAMPA
16
FINE
ESEMPIO
INS_DATI CALCOLA_PERIM STAMPA
INIZIO
INIZIO
INIZIO
RICHIEDI A
VISUALIZZA P LEGGI A P = A + B + IPOT RICHIEDI B FINE LEGGI B FINE
FINE
17
18
PARAMETRI
Parametri formali
sono specificati nellinterfaccia della funzione indicano cosa la funzione si aspetta quando viene chiamata
19
20
0x40000002
0x40000004 0x40000006 0x40000008 0x4000000A 0x4000000C 0x4000000E
21
3
2
0x40000000
0x40000002
0x40000004 0x40000006 0x40000008 0x4000000A 0x4000000C 0x4000000E
22
3
2
0x40000000
0x40000002
0x40000004
c
somma_a somma_b 3 2
23
3
2
0x40000000
0x40000002
0x40000004
c
somma_a somma_b 3 2
24
3
2
0x40000000
0x40000002
0x40000004
c
somma_a somma_b 3 2 5
25
3
2 5 3 2 5
0x40000000
0x40000002
0x40000004 0x40000006 0x40000008 0x4000000A 0x4000000C 0x4000000E
c
somma_a somma_b somma_c
26
0x40000002
0x40000004 0x40000006 0x40000008 0x4000000A 0x4000000C 0x4000000E
27
3
2
0x40000000
0x40000002
0x40000004 0x40000006 0x40000008 0x4000000A 0x4000000C 0x4000000E
}
void main() { int a, b, c; a = 3; b = 2; c = somma(&a,&b); printf (%d + %d = %d\n,a,b,c); }
28
3
2
0x40000000
0x40000002
0x40000004
0x40000000
0x40000002
29
3
2
0x40000000
0x40000002
0x40000004
0x40000000
0x40000002
30
3
2
0x40000000
0x40000002
0x40000004
0x40000000
0x40000002
31
3
2 5
0x40000000
0x40000000
0x40000002
0x40000004 0x40000006 0x40000008 0x4000000A 0x4000000C 0x4000000E
0x40000002
32
Indicano al compilatore
il tipo di dato restituito dalla funzione il numero dei parametri che si aspetta di ricevere il tipo dei parametri lordine in cui i parametri sono attesi
33
RIFERIMENTI
H.M. Deitel, P.J. Deitel. C: Corso completo di programmazione, 2 ed., 2004, Apogeo A. Kelley, I. Pohl. C: Didattica e Programmazione, Pearson Education Italia, 2004 A. Bellini, A. Guidi. Linguaggio C: Guida alla programmazione, 2 ed., McGraw Hill, 2003 Alcuni esempi trovati sul web
35