Sei sulla pagina 1di 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) Prof. F. Pitolli

Vettori e Matrici, Input/Output, Utilit` a


Ing. Andrea Nascetti Area di Geodesia e Geomatica Dipartimento di Ingegneria Civile Edile e Ambientale Universit` a di Roma La Sapienza andrea.nascetti@uniroma1.it

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 1 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Indice

1 Input/Output

2 Vettori

3 Matrici

4 Letture consigliate

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 2 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Indice

1 Input/Output

2 Vettori

3 Matrici

4 Letture consigliate

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 3 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Come immagazzinare dati e presentare i risultati


I ussi (stream) Input e Output (I/O) sono ussi di comunicazione (in ingresso e in uscita) del programma Tutto lI/O ` e eseguito attraverso i ussi (stream): sequenze di caratteri organizzate in righe Ogni riga consiste di zero o pi` u caratteri e termina con un newline (\n) Ogni programma, quando avviato, ` e automaticamente connesso a 3 ussi:
1 2 3

standard input (stdin), connesso alla tastiera standard error (stderr), connesso allo schermo standard output (stdout), connesso allo schermo

Il programmatore pu` o ridirigere questi ussi su altri dispositivi (stampa su le, . . . )


Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 4 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Formattare loutput
I ussi (stream) printf(stringa controllo formato, . . . ) (print format) dirige la stringa di controllo verso lo stdout La stringa di controllo del formato ` e composta di
1 2 3 4 5

indicatori di conversione (d, f, ld, lf, s, u, . . . ) ag (0, #, +, -) dimensioni di campo precisioni caratteri letterali

Uniti al segno di percentuale (%) questi formano la specica di conversione

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 5 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Visualizzare i numeri con printf()


Indicatore di conversione Descrizione Numeri interi d u hol Visualizza un intero decimale con segno (int) Visualizza un intero decimale senza segno (unsigned int) Posto davanti d o u indica il tipo short o long Numeri a virgola mobile eoE f g oG L Visualizza un valore in virgola mobile nella notazione esponenziale Visualizza (valore in virgola mobile) Sceglie una rappresentazione tra f e e Posto davanti a e o f indica il tipo long double

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 6 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Dimensioni di campo
printf() La dimensione di campo denisce la misura del campo di visualizzazione dei dati Lintero che stabilisce la dimensione del campo ` e inserito tra % e lindicatore di conversione (es. printf(%4d\n, 123);)
1 2 3 4 5 6 7

#i n c l u d e < s t d i o . h> i n t main ( ) { p r i n t f ( %d \ n , 1 2 3 ) ; p r i n t f ( %6d \ n , 1 2 3 ) ; p r i n t f ( %6d \ n , 1 2 3 4 5 6 9 ) ; 123 123 1234569

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 7 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Precisioni
printf() E possibile anche specicare la precisione con cui il dato deve essere visualizzato
per gli interi, indica il numero minimo di cifre da visualizzare per i valori in virgola mobile, indica il numero di cifre da visualizzare dopo la virgola
1 2 3

p r i n t f ( %6.6 d \ n , 1 2 3 ) ; p r i n t f ( %6.6 f \ n , 2 . 3 ) ; p r i n t f ( %6.6 e \ n , 2 . 3 ) ; 000123 2.300000 2 . 3 0 0 0 0 0 e+00

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 8 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Formattare linput I
Leggere i dati del problema Con scanf() ` e possibile formattare precisamente linput scanf(stringa controllo, altri argomenti) La stringa di controllo descrive il formato dei dati da prendere in input Gli altri argomenti associano i valori letti alle variabili Il carattere speciale & eettua lassociazione tra la variabile e il valore letto Regole di formattazione Valgono le regole per indicatori di conversione, precisioni, e dimensioni di campo gi` a denite per printf()

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 9 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Formattare linput II

1 2 3 4 5 6 7 8 9 10 11 12

#i n c l u d e < s t d i o . h> i n t main ( ) { int a = 0 , b = 0; p r i n t f ( I n s e r i r e due n u m e r i i n t e r i : ) ; s c a n f ( %d%d , &a , &b ) ; p r i n t f ( L u t e n t e ha i n s e r i t o i n u m e r i %d e %d \ n , a , b ) ; return 0; }

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 10 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

I les I

FILE *: un tipo speciale di dato (struttura) FILE *stream name; dichiara una struttura di tipo FILE e la chiama stream name Tutte le funzioni che operano sui le sono denite in stdio.h Per aprire i le si usa la funzione FILE * = fopen(<nome le >, modo apertura);
r per aprire un le in modalit` a lettura w per creare un nuovo le in modalit` a scrittura a per creare un nuovo le o per appendere il testo in coda ad un le esistente

I le si chiudono con la funzione fclose(FILE *stream name)

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 11 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

I les II
Scrivere su un le fprintf(FILE *stream name, formato, . . . ); Funzione che permette di ridirigere il testo di output su uno stream Esempio: fprintf(OUT, Hello World\n); scrive il testo Hello World sullo stream OUT
1 2 3 4 5 6 7 8 9 10 11

#i n c l u d e < s t d i o . h> i n t main ( ) { FILE OUT; OUT = f o p e n ( I l m i o f i l e , w ) ; f p r i n t f (OUT, H e l l o World \ n ) ; f c l o s e (OUT) ; return 0; } / main /

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 12 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

I les III

user@CALCOLO NUMERICO : file 1 .c user@CALCOLO NUMERICO : user@CALCOLO NUMERICO : file 1 .c f i l e 1 . out user@CALCOLO NUMERICO : user@CALCOLO NUMERICO : file 1 .c f i l e 1 . out user@CALCOLO NUMERICO : H e l l o World user@CALCOLO NUMERICO :

ls g c c o f i l e 1 . o u t f i l e 1 . c ls . / f i l e 1 . out ls Il mio file cat I l m i o f i l e

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 13 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

I les IV
Leggere da un le fscanf(FILE *stream, formato, . . . ); Funzione che permette di leggere linput da uno stream secondo il formato specicato e associarlo alle eventuali variabili Esempio: fscanf(IN, %d%d, &a, &b); legge due interi dallo stream IN e li associa alle variabili a e b
1 2 3 4 5 6 7 8 9 10

#i n c l u d e < s t d i o . h> i n t main ( ) { int a = 0 , b = 0; FILE IN ; IN = f o p e n ( i n p u t . d a t , r ) ; f s c a n f ( IN , %d%d , &a , &b ) ;

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 14 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

I les V

11

p r i n t f ( IL b) ; f c l o s e ( IN ) ; return 0; }

f i l e \ i n p u t . d a t \ c o n t i e n e i n u m e r i %d e %d \ n , a ,

12 13 14 15 16

user@CALCOLO NUMERICO : c a t i n p u t . d a t 54 87 user@CALCOLO NUMERICO : . / f s c a n f 1 I L f i l e i n p u t . d a t c o n t i e n e i n u m e r i 54 e 87 user@CALCOLO NUMERICO :

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 15 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Indice

1 Input/Output

2 Vettori

3 Matrici

4 Letture consigliate

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 16 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

I vettori
Un primo sguardo Insieme di variabili dello stesso tipo posizionate in celle di memoria contigue Per dichiarare e accedere i vettori si usano [] int a[n] dichiara a come un vettore di n numeri interi a[0] accede al primo elemento di a a[n-1] accede allultimo elemento di a ATTENZIONE Gli elementi sono accessibili singolarmente Non esiste la possibilit` a di controllare gli estremi del vettore Evitare laccesso agli elementi a[i], i / [0, n 1] ` e compito del programmatore
Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 17 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Dichiarare i vettori e accedere i loro elementi


Dichiarazioni int a[10]; dichiara un vettore di 10 interi int a[10] = {3}; dichiara un vettore di 10 interi e inizializza il primo elemento a 3
a[0] = 3 a[1] = 0 ... a[9] = 0

int a[] = {2, 3, 4, 50, 45}; dichiara un vettore di 5 interi inizializzati con i rispettivi valori int a[5] = {2, 3, 4}; dichiara un vettore di 5 interi ed inizializza
a[0] a[1] a[2] a[3] a[4]
Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 18 / 32

= = = = =

2 3 4 0 0

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Calcolo della media


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

/ C a l c o l o d e l l a media u t i l i z z a n d o i v e t t o r i Dopo a v e r i n s e r i t o 10 n u m e r i da t a s t i e r a , ne c a l c o l a l a media / #i n c l u d e < s t d i o . h> i n t main ( ) { i n t i =0 , n = 1 0 ; d o u b l e a [ n ] , media = 0 . 0 ; / L e t t u r a d a t i d i i n p u t / while ( i < n) { p r i n t f ( I n s e r i r e i l numero (%2d ) : , i ) ; s c a n f ( % l f , &a [ i ] ) ; i ++; } / w h i l e /

i l programma

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 19 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Calcolo della media

21 22 23 24 25 26 27 28 29 30 31 32

/ C a l c o l o d e l l a media / f o r ( i =0; i < 1 0 ; i ++) { p r i n t f ( a[%d ] = %10.4 l f \ n , i , a [ i ] ) ; media += a [ i ] ; } / f o r / p r i n t f ( La media d e i %d e l e m e n t i e : %9.5 l g \ n , n , media /n ) ; return 0; } / main /

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 20 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Vettori e funzioni

Passaggio alla funzione Per passare un vettore come argomento si utilizza il nome e si omettono le [] Bisogna passare anche le dimensioni del vettore Tecnicamente, ` e un passaggio per riferimento La funzione lavora con lindirizzo del vettore

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 21 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per il calcolo della media I


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

/ C a l c o l o d e l l a media u t i l i z z a n d o i v e t t o r i Dopo a v e r i n s e r i t o n n u m e r i da t a s t i e r a , i l programma ne c a l c o l a l a media / #i n c l u d e < s t d i o . h> d o u b l e CALCOLO MEDIA( i n t num , d o u b l e a [ num ] ) ; / PROTOTIPO / i n t main ( ) { i n t i =0 , n =0; p r i n t f ( I n s e r i r e la dimensione del vettore : ) ; s c a n f ( %d , &n ) ; double a [ n ] ; / L e t t u r a d a t i d i i n p u t / while ( i < n)

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 22 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per il calcolo della media II


20 21 22 23 24 25 26 27

{ p r i n t f ( I n s e r i r e i l numero (%2d ) : , i ) ; s c a n f ( % l f , &a [ i ] ) ; i ++; } / w h i l e / / C a l c o l o d e l l a media / p r i n t f ( La media d e i %d e l e m e n t i e : %9.5 l g \ n , n , CALCOLO MEDIA( n , a ) ) ; return 0; } / main / / DICHIARAZIONE DELLA FUNZIONE / d o u b l e CALCOLO MEDIA( i n t num , d o u b l e a [ num ] ) { int i ; d o u b l e media = 0 . 0 ; f o r ( i =0; i < num ; i ++)

28 29 30 31 32 33 34 35 36 37 38

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 23 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per il calcolo della media III

39 40 41 42

media += a [ i ] ; r e t u r n media /num ; }

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 24 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Indice

1 Input/Output

2 Vettori

3 Matrici

4 Letture consigliate

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 25 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Le Matrici
In realt` a, vettori di vettori Il C non prevede direttamente il concetto di matrice Per` o, i vettori possono essere multidimensionali int a[n][m]; dichiara un vettore di interi a due dimensioni (matrice) con n righe e m colonne int a[4][4]; dichiara un vettore di 4 interi, ognuno vettore di 4 interi a[0][0] a[1][0] a[2][0] a[3][0] Inizializzazione int a[2][2] = {{1, 2}, {3, 4}};
Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 26 / 32

a[0][1] a[1][1] a[2][1] a[3][1]

a[0][2] a[1][2] a[2][2] a[3][2]

a[0][3] a[1][3] a[2][3] a[3][3]

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per la stampa di una matrice I


1 2 3 4 5 6 7

/ F u n z i o n e p e r l a stampa d i una m a t r i c e / #i n c l u d e < s t d i o . h> v o i d STAMPA MATRICE( i n t r i g h e , i n t c o l o n n e , d o u b l e A [ r i g h e ] [ colonne ] ) ; d o u b l e MATR TRACCIA( i n t r i g h e , d o u b l e A [ r i g h e ] [ r i g h e ] ) ; i n t main ( ) { i n t i , j , righe , colonne ; printf ( I n s e r i s c i righe : ) ; s c a n f ( %d , &r i g h e ) ; p r i n t f ( I n s e r i s c i colonne : ) ; s c a n f ( %d , &c o l o n n e ) ;

8 9 10 11 12 13 14 15 16 17 18

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 27 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per la stampa di una matrice II


19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

d o u b l e A [ r i g h e ] [ c o l o n n e ] ; / a l l o c a z i o n e m a t r i c e / / I n i z i a l i z z a z i o n e d e l l a m a t r i c e / f o r ( i = 0 ; i < r i g h e ; i ++) { f o r ( j = 0 ; j < c o l o n n e ; j ++) { A [ i ] [ j ] = 1 . + i + j ; / V a l o r e i n i z i a l e / } } / STAMPA MATRICE / STAMPA MATRICE( r i g h e , c o l o n n e , A) ; / CALCOLO DELLA TRACCIA DELLA MATRICE / double t r a c c i a = 0 . ; t r a c c i a = MATR TRACCIA( r i g h e , A) ; p r i n t f ( La t r a c c i a d e l l a m a t r i c e A e % 8 . 3 l f \ n , t r a c c i a ) ; return 0;

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 28 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per la stampa di una matrice III


39 40 41 42 43

} / main / / DICHIARAZIONE DELLA FUNZIONE / v o i d STAMPA MATRICE( i n t r i g h e , i n t c o l o n n e , d o u b l e A [ r i g h e ] [ colonne ] ) { int i , j ; f o r ( i =0; i < r i g h e ; i ++) { f o r ( j = 0 ; j < c o l o n n e ; j ++) { p r i n t f ( % 8 . 3 l f , A [ i ] [ j ] ) ; } p r i n t f ( \n ) ; } } d o u b l e MATR TRACCIA( i n t r i g h e , d o u b l e A [ r i g h e ] [ r i g h e ] )

44 45 46 47 48 49 50 51 52 53 54 55 56 57

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 29 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Funzione per la stampa di una matrice IV

58 59 60 61 62 63 64 65 66

{ int i ; double t r a c c i a = 0 . ; for ( i = 0; i < righe ; t r a c c i a += A [ i ] [ i ] ; return traccia ; } i ++)

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 30 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Indice

1 Input/Output

2 Vettori

3 Matrici

4 Letture consigliate

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 31 / 32

Indice

Input/Output

Vettori

Matrici

Letture consigliate

Riferimenti Bibliograci

Daniele Giacomini, Appunti di informatica libera Introduzione al linguaggio C Deitel & Deitel, Corso completo di programmazione, Apogeo

Ing. Andrea Nascetti CALCOLO NUMERICO con ELEMENTI DI PROGRAMMAZIONE (BATR) - (A.A. 2012-2013) 32 / 32

Potrebbero piacerti anche