Sei sulla pagina 1di 14

Laboratorio di Programmazione 1

Docente: dr Damiano Macedonio Lezione 10 10/12/2013

Gli Array: Cosa Sono

Un array un tipo di dato che rappresenta un insieme ordinato di elementi dello stesso tipo. Ciascun elemento dellinsieme identificato da un indice univoco.
x[i]

In un array di n elementi, gli indici vanno da 0 a n-1.


2

Gli Array:

ichiara!ione ed Utili!!o

"a dichiarazione di una varia#ile di tipo array richiede di specificare:


Il tipo degli elementi contenuti nellarray $es. tutti i tipi primitivi%. Il nome dellarray. Il numero massimo di elementi che saranno contenuti nellarray $tra parentesi &uadrate%.

int voti[10]; '' array di interi di dimensione massima ()

Ciascun elemento dellarray pu* essere recuperato indicando lindice corrispondente tra parentesi &uadrate.

Voti[3]; // quarto elemento dell'array voti.

+gni elemento di un array pu* essere utili!!ato come una &ualsiasi varia#ile del corrispondente tipo primitivo.

Assegnare ad una varia#ile il valore di un elemento dellarray:

int v = voti[3]; voti[3] = 26;

Assegnamento di un valore ad un elemento dellarray.

Gli Array: Gli Indici

Gli indici usati per recuperare il valore di un elemento dellarray possono essere:
Costanti

intere: voti[3]. ,spressioni con valori interi: voti[(i+5 /2].


dove i una varia#ile di tipo int.

Il compilatore C non controlla se gli indici specificati sono validi $cio appartengono ai limiti consentiti%.
"accesso

ad un elemento con indice non valido pu* non generare un errore, ma semplicemente un comportamento inaspettato.

Gli Array: Ini!iali!!a!ione

Un array pu* essere ini!iali!!ato direttamente durante la dichiara!ione:


int

!ounter"[5] = #1$2$3$%$5&
== == == == == 1; 2; 3; %; 5;

!ounter"[0] !ounter"[1] !ounter"[2] !ounter"[3] !ounter"[%]

-on necessario ini!iali!!are tutti gli elementi: gli elementi non specificati saranno posti a !ero:
int

!ounter"[5] = #1$2&
5

!ounter"[0] == 1; !ounter"[1] == 2; !ounter"[2]$ !ounter"[3]$ !ounter"[%] == 0;

Gli Array: Ini!iali!!a!ione

Se un array viene ini!iali!!ato nella dichiara!ione non necessario specificare il massimo numero di elementi che pu* contenere:
!'ar

(ord[] = #)*+$ )e+$ )l+$ )l+$ )o+&;

"a dimensione viene determinata direttamente dal numero di elementi ini!iali!!ati.


"array

(ord avr. dimensione massima /.


6

Gli Array 0ultidimensionali

Un array multidimensionale un array i cui elementi hanno a loro volta tipo array. Gli array multidimensionali pi1 utili!!ati sono &uelli #idimensionali: matrici. ichiara!ione di un array #idimensionale:
int

matrix[10][5];

Accesso ad un elemento:
int

value = matrix[5][3]; matrix[3][2] = 10;

Gli Array 0ultidimensionali

Anche gli array multidimensionali possono essere ini!iali!!ati direttamente durante la dichiara!ione.
-on

necessario specificare tutti gli elementi.

Gli elementi vengono specificati per riga:


int matrix[3][%] = ##1$2$3$%&$ #5$6$,$-&$ #.$10$11$12&&;
( / 8 2 5 () 3 6 (( 4 7 (2
8

,serci!io (
Scrivere un programma C che richiede allutente () valori e li memori!!a allinterno di un array, &uindi stampa tutti &uelli maggiori o uguali dell9ultimo valore inserito.

,serci!io 2
Scrivere un programma C che: :ichiede allutente di inserire i vettori a e # di lunghe!!a ():
"!an/(

01i$1i$1i$2220$ 3a[0]$3a[1]$3a[2]$222

:ichiede allutente di scegliere unopera!ione da eseguire su tali vettori:


;:

somma tra due vettori

Il risultato un vettore in cui ciascun elemento la somma dei corrispondenti elementi nei vettori di input.

<:

di=eren!a tra due vettori


Il risultato un vettore in cui ciascun elemento la di=eren!a dei corrispondenti elementi nei vettori di input.

>:

prodotto elemento per elemento


Il risultato un vettore in cui ciascun elemento il prodotto dei corrispondenti elementi nei vettori di input.

?:

prodotto scalare

Il risultato un numero ottenuto @acendo la somma dei prodotti aAiB>#AiB. ,sempi


$2, 3, 4% ; $4, /, 5% C $5, 7, ()% $2, 3, 4% D $4, /, 5% C $<2, <2, <2% $2, 3, 4% > $4, /, 5% C $7, (/, 24% $2, 3, 4% ? $4, /, 5% C 2>4 ; 3>/ ; 4>5 C 46

10

,serci!io 3
Scrivere un programma C che richiede allutente 2) voti $compresi tra (7 e 3)%. Eer ogni voto da (7 a 3) stampa il numero delle sue occorren!e e individua i voti che hanno pi1 occorren!e. Esempio: Se i voti immessi sono: (7 23 2( 2/ 28 3) (8 2( 23 24 23 3) 26 2( 28 24 2( 23 24 22 2( e 23 hanno 4 occorren!e e sono anche i voti col maggior numero di occorren!e. Il programma li deve individuare entram#i.

11

,serci!io 4
Scrivere un programma C che salva in ogni elemento di un array #idimensionale il valore $i;j% dove i il numero di riga e j il numero di colonna.
Scegliete

a piacere il numero di righe e colonne. FinchG lutente vuole continuare, il programma richiede allutente i valori i e j e stampa il corrispondente elemento a video, oppure un messaggio di errore se gli indici non sono validi.
12

,serci!io /
Scrivere un programma C che: :ichiede allutente di inserire due matrici &uadrate 3?3.
/or(

i = 0; i 4 3; i++ # "!an/( 01i$1i$1i0$ 3a[i][0]$ 3a[i][1]$ 3a[i][2]

&

,segue la moltiplica!ione tra le due matrici.


ate due matrici &uadrate a e #, lelemento cAiBAHB della matrice c risultato dato dal prodotto scalare della riga i di a per la colonna H di #. Eer il prodotto scalare si veda l9eserci!io 2.

Stampa a video il risultato.

13

,serci!io / < ,sempio


0atrice a:
3 1 4 2 0 1 5 4 3

0atrice #:
1 4 5 0 7 1 3 2 3

0atrice c:
36 21 23 19 4 10 28 15 23

c[ 1 ][ 1 ] = a[ 1 ][ 1 ]*b[ 1 ][ 1 ] + a[ 1 ][ 2 ]*b[ 2 ][ 1 ] + a[ 1 ][ 3 ]*b[ 3 ][ 1 ] c[ 1 ][ 2 ] = a[ 1 ][ 1 ]*b[ 1 ][ 2 ] + a[ 1 ][ 2 ]*b[ 2 ][ 2 ] + a[ 1 ][ 3 ]*b[ 3 ][ 2 ] c[ 1 ][ 3 ] = a[ 1 ][ 1 ]*b[ 1 ][ 3 ] + a[ 1 ][ 2 ]*b[ 2 ][ 3 ] + a[ 1 ][ 3 ]*b[ 3 ][ 3 ] c[ 2 ][ 1 ] = a[ 2 ][ 1 ]*b[ 1 ][ 1 ] + a[ 2 ][ 2 ]*b[ 2 ][ 1 ] + a[ 2 ][ 3 ]*b[ 3 ][ 1 ] c[ 2 ][ 2 ] = a[ 2 ][ 1 ]*b[ 1 ][ 2 ] + a[ 2 ][ 2 ]*b[ 2 ][ 2 ] + a[ 2 ][ 3 ]*b[ 3 ][ 2 ] .

c[ i ] [ j ] = a[ i ][ 1 ]*b[ 1 ][ j ] + a[ i ][ 2 ]*b[ 2 ][ j ] + a[ i ][ 3 ]*b[ 3 ][ j ]


14