InformaticaC– CHI/MAThome.deib.polimi.it/agosta/old/infoC-2004/infoC-2004.5-6.pdfFunzioni 1....
Transcript of InformaticaC– CHI/MAThome.deib.polimi.it/agosta/old/infoC-2004/infoC-2004.5-6.pdfFunzioni 1....
InformaticaC – CHI/MATGiovanni Agosta
Informatica C – CHI/MAT – p.1/78
Funzioni1. Sottoprogrammi
2. Funzioni e Procedure
3. Parametri formali e attuali
4. Dichiarazione ed uso di funzioni
Informatica C – CHI/MAT – p.2/78
Sottoprogrammi
� Problemi:
� Come evitare di riscrivere ogni volta lestesse parti di codice?
� Come estendere l’operatore meccanico inmodo che possa comprendere nuovicomandi?
Informatica C – CHI/MAT – p.3/78
Sottoprogrammi
� Problemi:
� Come evitare di riscrivere ogni volta lestesse parti di codice?
� Come estendere l’operatore meccanico inmodo che possa comprendere nuovicomandi?
� Risposta: definendo e usando deisottoprogrammi!
Informatica C – CHI/MAT – p.4/78
Sottoprogrammi
� Cos’è un sottoprogramma?
� È una unità di elaborazione autonoma, comeun programma, che può essere usata in altriprogrammi
� Nota: un programma, in C, è un casoparticolare di sottoprogramma
� Il programma è il sottoprogramma di nome“main”
Informatica C – CHI/MAT – p.5/78
FunzionieProcedureSi distinguono due tipi di sottoprogrammi:
� Funzione (pura): come in una funzionematematica, calcola un risultato in funzione diuno o più parametri
� Procedura: come in un programma, eseguedei comandi che hanno un effetto sullo statodell’operatore meccanico
In C, entrambi i tipi sono rappresentati dallo
stesso costrutto, la funzione (non pura, rispetto
alla definizione)
Informatica C – CHI/MAT – p.6/78
Dichiarazionedi FunzioneSintassi:<tipo> <nome-funzione> (<parametri-formali> ){<corpo della funzione>}
Esempio:int somma( int a, int b, int c ){return a+b+c;}
Informatica C – CHI/MAT – p.7/78
Parametriformali
� Nella dichiarazione di funzione, i parametriformali sono delle variabili i cui valori nonsono definiti all’interno della funzione, maprovengono dal programma chiamante
� Nella chiamata di funzione, i parametri formalivengono “sostituiti” da valori chiamatiparametri attuali
� I parametri formali sono dichiarati comevariabili, con tipo e nome, ma fra le parentesitonde all’inizio della dichiarazione invece chenel corpo della funzione
Informatica C – CHI/MAT – p.8/78
Chiamatadi funzioneSintassi:<nome-funzione> (<parametri-attuali> );
Esempio:int main() {printf("%d", somma(1,2,3));}
Informatica C – CHI/MAT – p.9/78
Parametriformali edattuali
� Nella chiamata della funzione somma, iparametri attuali 1, 2, 3 sostituiscono iparametri formali a, b, c
� I parametri attuali possono essere costanti ovariabili
Informatica C – CHI/MAT – p.10/78
Esempidi Funzioni
� Vediamo ora un esempio di funzione pura edun esempio di procedura
� In entrambi i casi, l’obiettivo delsottoprogramma è calcolare il risultatodell’elevamento di un numero (base) ad unapotenza (esponente):
�� � �� �� � � � �� � � � � � � � �� � ��� �� � � � �
Informatica C – CHI/MAT – p.11/78
Esempio(1): Funzionepuraint pow(int base, int esponente){int risultato=1;int i;for ( i=0; i<esponente; i++)risultato = risultato * base;return risultato;}
Informatica C – CHI/MAT – p.12/78
Commento(1)
� In questo esempio, usiamo un ciclo acontatore per calcolare la potenza come seriedi prodotti
� Questa funzione restituisce un risultato, e nonha altri effetti: è una funzione pura
� Questa funzione restituisce un risultatosignificativo solo se l’esponente è positivo!
Informatica C – CHI/MAT – p.13/78
Esempio(2): Proceduraint power(int base, int esponente){if (esponente<0){printf("Errore: esponente
negativo");return -1;}else return pow(base, esponente);}
Informatica C – CHI/MAT – p.14/78
Commento(2)
� In questo esempio, usiamo una funzionedefinita in precedenza per calcolare� �� � ��� �� � � � �
� Questa funzione restituisce un risultato, mapuò avere un effetto collaterale
� Restituisce un risultato significativo sel’esponente è positivo
� Stampa un messaggio d’errore (effettocollaterale) altrimenti
� Si tratta di una procedura
Informatica C – CHI/MAT – p.15/78
Funzionidi libreria
� Alcune funzioni di uso molto comune sonorese disponibili in librerie
� Una libreria è una raccolta di funzioni di usocomune
� Un esempio di funzione di libreria è printf
Informatica C – CHI/MAT – p.16/78
Funzionidi libreria: printfprintf( <format-string>, <parametri>)
� <format-string> è una stringa cherappresenta la parte “costante” del testo dastampare, e le posizioni in cui inserire i valoridei parametri
� Gli altri parametri possono essere numeri oaltre stringhe
Informatica C – CHI/MAT – p.17/78
Funzionidi libreria: scanfscanf( <format-string>, <parametri>)
� Salva i valori letti dalla tastiera in variabilipassate come parametri
� La stringa di formato rappresenta il formatodella stringa da leggere
� I parametri in questo caso sono solo variabili(non costanti)
� I parametri sono preceduti da un carattere ’&’
� Vedremo il significato di questo ’&’ in seguito
Informatica C – CHI/MAT – p.18/78
Esempio:scanf & printf
int main(){int a, b;int res;printf("Base: ");scanf("%d
�
n", &a);printf("Esponente: ");scanf("%d", &b);res=power(a, b);if (res>=0)printf("Pow = %d
�
n", res);}
Informatica C – CHI/MAT – p.19/78
Includerele librerieRicordate di includere le librerie!#include <stdio.h>#include <math.h>#include "mylib.h"
� Alcuni compilatori includonoautomaticamente le librerie standard (adesempio stdio.h)
� La libreria stdio.h comprende le funzioniprintf e scanf
� La libreria math.h comprende funzioni di tipomatematico
Informatica C – CHI/MAT – p.20/78
Includerele librerieLa libreria math.h comprende funzioni di tipomatematico come:
� double pow(double x, double y):elevamento a potenza � �
� double log(double x): logaritmonaturale
� � � � �
� double sqrt(double x): radice quadrata�� double sin(double x): seno � � � � �
� double cos(double x): coseno �� � � �
Informatica C – CHI/MAT – p.21/78
Programmareconle funzioniIn questa seconda parte della lezione, svolgiamoalcuni esercizi sugli argomenti finora trattati:
� Strutture di controllo
� Array
� Funzioni
� Funzioni di libreria
Informatica C – CHI/MAT – p.22/78
Mediadi unvettore
� In primo luogo, torniamo su un esempio giàvisto
� Calcoliamo la media di un vettore dielementi, con costante
Informatica C – CHI/MAT – p.23/78
Esempio(1)
���� array-funzioni.c� Esempio di operazione su un array: calcolo della media�
� Esegue lo stesso insieme di operazioni di array2.c,� ma le suddivide in diverse funzioni� �
#define N 10
Informatica C – CHI/MAT – p.24/78
Esempio(2)int leggi(int vettore[ ], int n) {
int i;� � Legge dalla tastiera dieci numeri, e li salva in �
� ’vettore’; scanf una funzione di libreria � �
for (i=0; i �n-1; i++) {scanf("%d
�
n", &vettore[i]);}scanf("%d", &vettore[n-1]);return 0;
}
Informatica C – CHI/MAT – p.25/78
Esempio(3)int somma(int vettore[ ], int n) {
int i, somma=0;� � Calcola la somma dei 10 valori in ’vettore’ � �
for (i=0; i �n; i++)somma = somma + vettore[i];
return somma;}
float media(int vettore[ ], int n) {� � Calcola la media dei valori, dividendo per 10 � �
return ((float ) somma(vettore,n))
�
((float ) n);}
Informatica C – CHI/MAT – p.26/78
Esempio(4)int main(){ � � Dichiara un vettore di 10 interi, non inizializzato � �
int vettore[N];
� � Leggi i dieci valori dalla tastiera� �
leggi(vettore, N);
� � Stampa la media dei valori dell’array � �
printf("Media: %f
�
n", media(vettore, N));return 0;
}
Informatica C – CHI/MAT – p.27/78
Somma/differenzadi vettoriVogliamo costruire un programma che:
� Legge due vettori di elementi dalla tastiera
� Legge un operatore (’+’ o ’-’) dalla tastiera
� Calcoliamo e stampa la somma o ladifferenza fra i due vettori
Informatica C – CHI/MAT – p.28/78
Esempio(1)
���� array3.c� Somma e differenza di array�
� Richiede in input due array, e permette di eseguire� le operazioni di somma e differenza� �
#define N 10
Informatica C – CHI/MAT – p.29/78
Esempio(2)int leggi(int vettore[ ], int n) {
int i;� � Legge dalla tastiera N numeri, e li salva in �
� ’vettore’; scanf una funzione di libreria � �
printf("Inserisci un vettore di %delementi:
�
n", n);for (i=0; i �n-1; i++) {
scanf("%d
�
n", &vettore[i]);}scanf("%d", &vettore[n-1]);return 0;
}
Informatica C – CHI/MAT – p.30/78
Esempio(3)int somma(int v1[ ], int v2[ ], int n) {
int i, somma=0;� � Calcola la somma di v1 e v2 e la salva in v2 � �
for (i=0; i �n; i++)v1[i] = v1[i] + v2[i];
return somma;}
Informatica C – CHI/MAT – p.31/78
Esempio(4)int differenza(int v1[ ], int v2[ ], int n) {
int i, somma=0;� � Calcola la differenza di v1 e v2 e la salva in v1 � �
for (i=0; i �n; i++)v1[i] = v1[i] - v2[i];
return somma;}
Informatica C – CHI/MAT – p.32/78
Esempio(5)int main(){ � � Dichiara due vettori di 10 interi � �
int vett1[N];int vett2[N];char op[10];int i;
� � Leggi i dieci valori dalla tastiera� �
leggi(vett1, N);leggi(vett2, N);
Informatica C – CHI/MAT – p.33/78
Esempio(6)
� � Chiede una operazione da eseguire � �printf("Inserisci un operatore:
�n");
scanf("%s", op);
��� Chiamata di funzione, legge un �
� carattere dalla tastiera � �
Informatica C – CHI/MAT – p.34/78
Esempio(7)switc h (op[0]) {
��� Switch: variabile di test � �case ’ ’ : printf("v1 v2 � [ ");
somma(vett1, vett2, N);for (i=0; i �N-1; i++)
printf("%d, ", vett1[i]);printf("%d ]
�n", vett1[N-1]);
break ;
��� Case: espressione di confronto �
� e comando relativo � �
Informatica C – CHI/MAT – p.35/78
Esempio(8)case ’-’ : printf("v1-v2 � [ ");
differenza(vett1, vett2, N);for (i=0; i �N-1; i++)
printf("%d, ", vett1[i]);printf("%d ]
�
n", vett1[N-1]);break ;
��� Case: espressione di confronto �
� e comando relativo � �
Informatica C – CHI/MAT – p.36/78
Esempio(9)default : printf("Operatore non
accettato!
�
n");��� Default: esprime un caso che si�� applica quando nessuno dei �� precedenti applicabile � �
} � � Chiede una operazione da eseguire � �
return 0;}
Informatica C – CHI/MAT – p.37/78
Strutturedati complesse1. Tipi di dato elementari
2. Vettori
3. Matrici
4. Strutture o record
5. Costruzione di nuovi tipi
Informatica C – CHI/MAT – p.38/78
Vettori
� I vettori (o array) rappresentano insiemiordinati di elementi dello stesso tipo
� Possono rappresentare sequenze di numeri,vettori, e altri insiemi dello stesso tipo
� Possiamo rappresentare in qualche mododelle matrici?
Informatica C – CHI/MAT – p.39/78
Vettori
� I vettori (o array) rappresentano insiemiordinati di elementi dello stesso tipo
� Possono rappresentare sequenze di numeri,vettori, e altri insiemi dello stesso tipo
� Possiamo rappresentare in qualche mododelle matrici? Sì!
Informatica C – CHI/MAT – p.40/78
Matrici (1)
� Una matrice può essere considerata come uninsieme ordinato di vettori (ad esempio le suerighe):
�"!$# ! �!$# % & & & �"!$# '
� %# ! � %# % & & & � %# '... ... . . . ...
� � # ! � � # % & & & � � # '((( �
) �"!$# ! �!$# % & & & �"!$# ' *
) � %# ! � %# % & & & � %# ' *
) ... ... . . . ...
*
) � � # ! � � # % & & & � � # ' *
Informatica C – CHI/MAT – p.41/78
Matrici (2)
� Supponiamo allora di avere una matrice :
�
�+!$# ! �!$# % & & & �+!$# '
� %# ! � %# % & & & � %# '
... ... . . . ...
� � # ! � � # % & & & � � # '(((
Informatica C – CHI/MAT – p.42/78
Matrici (3)
� Rappresentiamo sotto forma di insieme divettori:
�,
-.-.--/-.-.0
! � ) �!$# ! �! # % & & & �+!$# ' *
! � ) � %# ! � %# % & & & � %# ' *
...
) ... ... . . . ...
*
� � ) � � # ! � � # % & & & � � # ' *
� Allora, possiamo dire che:� ) ! % & & & � * 1
Informatica C – CHI/MAT – p.43/78
Matrici (4)Vediamo come tutto questo si traduce in C:
� Ciascun 2 è un array (di float, ad esempio)
� è a sua volta un array, ma non un array dinumeri
� è un array di array, ovvero un arraymultidimensionale
Informatica C – CHI/MAT – p.44/78
Array Multidimensionali(1)Sintassi:<tipo> <nome-variabile> ’[’<dimensione1> ’]’ ...’[’<dimensioneN> ’]’
Esempi:int matrice[7][7];float floatcube[10][6][11];
Informatica C – CHI/MAT – p.45/78
Array Multidimensionali(2)
� Accedere ad un array multimensionali
int matrice[7][7];...a = matrice[2][1]; ...matrice[3][6] = ...
Informatica C – CHI/MAT – p.46/78
Lavorareconle matriciCosa possiamo fare con le matrici
� Input e output, naturalmente!
� L’input è simile a quello dei vettori
� L’output deve essere organizzato in mododa essere comprensibile
� Operazioni su matrici
� Somma, differenza
� Trasposizione
Informatica C – CHI/MAT – p.47/78
Esempio:Sommadi Matrici (1)
���� matrix.c� Esempio di operazione su matrici: calcolo della somma�
� Questo esercizio mostra non solo il meccanismo per� eseguire operazioni aritmetiche su matrici, ma anche la� lettura e la stampa di matrici.� �
#include
�
stdio.h
3
#define N 10#define OK 0
Informatica C – CHI/MAT – p.48/78
Esempio:Sommadi Matrici (2)int mprint(int matrix[N][N]) {
int i,j;for(i=0; i �N; i++) {
��� Ciclo esterno (righe) � �
for (j=0; j
�
N; j++)
��� Ciclo interno (colonne) � �
��� Stampa il numero considerato allineato a 3 �
� caratteri: ad esempio ’ 3’, ’ 12’, ’123’ � �
printf("%3d ", matrix[i][j]);��� A capo a fine riga (lascia una riga vuota) � �
printf("
�
n
�
n");4
return OK;
��� valore di ritorno convenzionale � �
4
Informatica C – CHI/MAT – p.49/78
Esempio:Sommadi Matrici (3)int mread(int matrix[N][N]) {
int i,j,c;printf("Inserire una matrice:
�n");
for(i=0; i �N; i++)for(j=0; j �N; j++){
scanf("%d", &c);matrix[i][j]=c;
}return OK;
}
Informatica C – CHI/MAT – p.50/78
Esempio:Sommadi Matrici (4)int somma(int d[N][N], int a[N][N], int b[N][N]) {
int i,j;� � Somma di matrici: �
� d ij � a ij b ij � �
for(i=0; i �N; i++)
��� righe � �for(j=0; j �N; j++)
��� colonne � �
d[i][j]= a[i][j]+b[i][j];� � valore di ritorno convenzionale � �
return OK;}
Informatica C – CHI/MAT – p.51/78
Esempio:Sommadi Matrici (5)int main() {
int in1[N][N];int in2[N][N];int out[N][N];
mread(in1);
��� lettura della 1a matrice � �
mprint(in1);
��� stampa della 1a matrice � �
mread(in2);
��� lettura della 2a matrice � �
mprint(in2);
��� stampa della 2a matrice � �
Informatica C – CHI/MAT – p.52/78
Esempio:Sommadi Matrici (6)somma(out, in1, in2);
��� calcolo della somma � �
printf("Somma:
�
n");mprint(out);
� � stampa del risultato � �return OK;
��� valore convenzionale � �}
Informatica C – CHI/MAT – p.53/78
Calcolodellamatricetrasposta
�
�5!$# ! �!$# % & & & �5!$# '
� %# ! � %# % & & & � %# '... ... . . . ...
� � # ! � � # % & & & � � # '(((
1 �
�! # ! � %# ! & & & � � # !
�! # % � %# % & & & � � # %
... ... . . . ...
�5!$# ' � %# ' & & & � '# �(((
Informatica C – CHI/MAT – p.54/78
Esempio:Trasposizione(1)
���� matrix2.c� Esempio di operazione su un matrici: trasposizione�
� �
#include
�
stdio.h
3#define N 10#define OK 0
Informatica C – CHI/MAT – p.55/78
Esempio:Trasposizione(2)int T(int ta[N][N], int a[N][N]) {
int i,j;� � Traspozione di matrici: �
� d ij � a ji � �
for(i=0; i �N; i++)
��� righe � �for(j=0; j �N; j++)
��� colonne � �
ta[i][j]= a[j][i];� � valore di ritorno convenzionale � �
return OK;}
Informatica C – CHI/MAT – p.56/78
Esempio:Trasposizione(3)int main() {
int in[N][N];int out[N][N];
mread(in);
��� lettura della matrice � �
mprint(in);
��� stampa della matrice � �
T(out, in);
� � calcolo della trasposta � �
printf("Trasposta:
�
n");mprint(out);
� � stampa del risultato � �
return OK;��� valore convenzionale � �
}
Informatica C – CHI/MAT – p.57/78
Strutturedati complesse1. Tipi di dato elementari
2. Vettori
3. Matrici
4. Strutture o record
5. Costruzione di nuovi tipi
Informatica C – CHI/MAT – p.58/78
Strutture
� Gli array (mono- o multi-dimensionali)permettono di rappresentare sequenze dielementi dello stesso tipo
� Come possiamo rappresentare insiemi dielementi di tipo diverso?
� Ma soprattutto, ci servono questi insiemi?
Informatica C – CHI/MAT – p.59/78
Strutture
� Gli array (mono- o multi-dimensionali)permettono di rappresentare sequenze dielementi dello stesso tipo
� Come possiamo rappresentare insiemi dielementi di tipo diverso? con le Strutture
� Ma soprattutto, ci servono questi insiemi?Sì
Informatica C – CHI/MAT – p.60/78
Insieminonomogenei
� A che cosa può servire un insieme nonomogeneo (ovvero con elementi di tipodiverso fra loro)?
A rappresentare oggetti complessi, adesempio:
� Una data: October 25, 2004
� L’anagrafica di una persona: <"Giovanni","Agosta", 28, "Dicembre", 1975>
� Coordinate:67 89 : ;
� . . .
Informatica C – CHI/MAT – p.61/78
Dichiarazionedi StruttureSintassi:struct ’{’<tipo1> <identificatore> ’;’...<tipoN> <identificatore> ’;’} <nome-variabile>
Esempi:struct {char[20] nome;int anno_di_nascita;} persona;
Informatica C – CHI/MAT – p.62/78
Accessoai campi
� A differenza degli array, i valori contenuti inuna struttura non sono individuati attraversoun numero
� Ogni valore (o campo) della struttura èindividato dall’identificatore associato:
persona.anno_di_nascita = 1975;...printf("%c", persona.nome[0]);
Informatica C – CHI/MAT – p.63/78
Esempio:DataVediamo un semplice esempio:
� Una data è rappresentata da tre interi
Usiamo comunque una struttura, perchè:
� I tre valori non sono realmente dello stessotipo
� Infatti si tratta di intervalli diversi sugli interi:� � < � � = )?> @ > *
� � � = )?> > 9 *
� � � = )BA *
Informatica C – CHI/MAT – p.64/78
Esempio:Data(1)int main(){
struct {unsigned shor t int giorno;unsigned shor t int mese;int anno;
} data;
int c;
Informatica C – CHI/MAT – p.65/78
Esempio:Data(2)printf("Giorno: ");scanf("%d",&c);data.giorno = c;printf("Mese: ");scanf("%d",&c);data.mese = c;printf("Anno: ");scanf("%d",&c);data.anno = c;printf("Data � %d/%d/%d �
n", data.giorno,data.mese, data.anno);}
Informatica C – CHI/MAT – p.66/78
Strutturedati complesse1. Tipi di dato elementari
2. Vettori
3. Matrici
4. Strutture o record
5. Costruzione di nuovi tipi
Informatica C – CHI/MAT – p.67/78
Definizionedi tipi
� Vediamo come possiamo definire un nuovotipo
Sintassi:typedef <definizione-di-tipo> <nome>
Esempi:typedef unsigned long int naturale;...naturale n = 10;
Informatica C – CHI/MAT – p.68/78
Tipi enumerativiSintassi:enum ’{’ <etichetta>, ...<etichetta>’}’
Esempi:typedef enum { FALSO, VERO }booleano;
Informatica C – CHI/MAT – p.69/78
Esempiocompleto:Datav.2
� In questa lezione, abbiamo visto:
� Come dichiarare nuovi tipi
� Come dichiarare tipi enumerativi
� Come usare il costruttore struct
� Riprendiamo l’esempio della data, alla luce diqueste nuove conoscenze
Informatica C – CHI/MAT – p.70/78
Esempio:Datav.2 (1)
���� struct.c� Esempio di uso di strutture, definizioni di tipo� e tipi enumerativi�
� Questo programma mostra come dichiarare ed usare� variabili appartenenti a tipi definiti dall’utente.� �
#include
�
stdio.h
3
��� Dichiarazione di un valore non valido per i giorni � �
#define NON_VALIDO 0
Informatica C – CHI/MAT – p.71/78
Esempio:Datav.2 (2)
��� typedef e’ la parola chiave per definire nuovi �� tipi, qui la usiamo per introdurre un nome piu’ �� breve per ’unsigned short int’. � �typedef unsigned shor t int t_giorno;
��� Definizione del nuovo tipo ’mesi’, in cui i mesi �� hanno valori di questo tipo: GEN � �1, FEB � �2, etc. �
� Notate che NONE, pari a 0, e’ inserito per fare si’�� che i mesi inizino da 1 piuttosto che da 0. � �
typedef enum { NONE, GEN, FEB, MAR, APR,MAG, GIU, LUG, AGO, SET, OTT, NOV, DIC }mesi;
Informatica C – CHI/MAT – p.72/78
Esempio:Datav.2 (3)
��� Definizione del nuovo tipo ’data’, in cui si puo’ �� salvare una data sotto forma di
�
giorno,mese,anno
3 �
� definiti in modo opportuno. � �
typedef struct _data {t_giorno giorno;mesi mese;int anno;
} data;
Informatica C – CHI/MAT – p.73/78
Esempio:Datav.2 (4)
��� Funzione che legge e restituisce una data. � �data leggi_data() {
int c;� � Dichiarazione di variabile di tipo ’data’ �� Inizializziamo tutti i campi con valori non �
� definiti (NON VALIDO; NONE), eccetto l’anno � �
data la_data = { NON_VALIDO, NONE, 0 };
Informatica C – CHI/MAT – p.74/78
Esempio:Datav.2 (5)
� � Continua a chiedere un valore finche’ non ne �
� viene inserito uno accettabile � �
while (la_data.giorno==NON_VALIDO) {printf("Giorno: ");scanf("%d",&c);��� verifiche di correttezza dei valori inseriti � �
if (c � 1 C C
c 3 31)la_data.giorno = NON_VALIDO;
elsela_data.giorno = c;
}
Informatica C – CHI/MAT – p.75/78
Esempio:Datav.2 (6)while (la_data.mese==NONE) {
printf("Mese: ");scanf("%d",&c);if (c � GEN
C C
c 3 DIC)la_data.mese = NONE;
elsela_data.mese = c;
}printf("Anno: ");scanf("%d",&c);la_data.anno = c;return la_data;
}Informatica C – CHI/MAT – p.76/78
Esempio:Datav.2 (7)int stampa_data(data la_data) {� � verifiche di correttezza dei valori dei parametri � �
if (la_data.giorno == NON_VALIDOC C
la_data.mese == NONE) {printf("Errore, data non valida!
�
n");return -1;
��� Valore convenzionale: ’errore’ � �
}else {
printf("Data � %d/%d/%d �
n",la_data.giorno, la_data.mese, la_data.anno);
return 0;��� Valore convenzionale: ’corretto’ � �
}
Informatica C – CHI/MAT – p.77/78
Esempio:Datav.2 (8)
��� Funzione principale: legge e stampa una data � �
int main(){data oggi;oggi = leggi_data();return stampa_data(oggi);
}
Informatica C – CHI/MAT – p.78/78