Il 0% ha trovato utile questo documento (0 voti)
8 visualizzazioni24 pagine

Lab08 Array

Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
8 visualizzazioni24 pagine

Lab08 Array

Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 24

LINGUAGGI E STRUMENTI

DI PROGRAMMAZIONE CON
LABORATORIO

ARRAY

1 Docente: Maurizio Boscaini (Matricole pari)

Lezioni 8 – a.a. 2023/2024


Original work Copyright © Sara Migliorini
University of Verona

Modifications Copyright © Damiano Macedonio, Maurizio Boscaini, Vincenzo Bonnici,


Elisa Quintarelli, Roberto Di Marco
University of Verona 2
Gli Array: Cosa Sono
 Un array è un tipo di dato che rappresenta una
sequenza di elementi dello stesso tipo.
 Sequenza = successione ordinata di elementi che
posso anche ripetersi (non è un insieme ordinato)

 Ciascun elemento della sequenza è identificato da


un indice univoco.
 x[i]

 Gli indici di un array iniziano da 0 e terminano


con il valore n pari alla lunghezza dell’array
meno 1. 3
0 <= i <= (lunghezza di x – 1)
Gli Array: Dichiarazione ed Utilizzo
 La dichiarazione di una variabile di tipo array richiede di specificare:
 Il tipo degli elementi contenuti nell’array (es. tutti i tipi primitivi).
 Il nome dell’array.
 Il numero massimo di elementi che saranno contenuti nell’array (tra
parentesi quadrate).
 int voti[10]; // array di interi di dimensione massima 10

 Ciascun elemento dell’array può essere recuperato indicando l’indice


corrispondente tra parentesi quadrate.
 voti[3]; // Quarto elemento dell'array voti.

 Ogni elemento di un array può essere utilizzato come una qualsiasi


variabile del corrispondente tipo primitivo.
 Assegnare ad una variabile il valore di un elemento dell’array:
 int v = voti[3];
 Assegnamento di un valore ad un elemento dell’array. 4
 voti[3] = 26;
Gli Array: Gli Indici
 Gli indici usati per recuperare il valore di un
elemento dell’array possono essere:
 Costanti intere: voti[3]
 Espressioni con valori interi: voti[(i+5)/2]
 dove i è una variabile di tipo int.

 Il compilatore C non controlla se gli indici


specificati sono validi (cioè appartengono ai limiti
consentiti).
 L’accesso ad un elemento con indice non valido
può non generare un errore, ma semplicemente
un comportamento inaspettato. 5
GLI ARRAY: ESEMPIO
int voti[10];
voti[0]
voti[1]
voti[2]
voti[3]
voti[4]
voti[5]
voti[6]
voti[7]
voti[8]
voti[9]

 Gli elementi dell’array sono memorizzati in celle di memoria 6


adiacenti.
GLI ARRAY: ESEMPIO
voti[0] 26
voti[1]
voti[2]
int voti[10]; voti[3] 28
voti[0] = 26; voti[4]
voti[3] = 28; voti[5]
voti[7] = (voti[0] + voti[3]) / 2; voti[6]
voti[7] 27
voti[8]
voti[9]

7
Gli Array: Inizializzazione
 I valori di un array non inizializzato sono non predicibili.
 Un array può essere inizializzato direttamente durante la
dichiarazione:
 int counters[5] = {1, 2, 3, 4, 5}
 counters[0] == 1;
 counters[1] == 2;
 counters[2] == 3;
 counters[3] == 4;
 counters[4] == 5;

 Non è necessario inizializzare tutti gli elementi: gli elementi non


specificati saranno posti a zero (questo vale solo se l’array è
inizializzato parzialmente):
 int counters[5] = {1, 2}
 counters[0] == 1;
 counters[1] == 2; 8
 counters[2], counters[3], counters[4] == 0;
Gli Array: Inizializzazione
#include <stdio.h>
int main(void){
int array_values1[5] = {0,1,4,9,16};
int array_values2[5];
int i;

for( i = 0; i< 5; i++ ){


array_values2[i] = i*i;
}
for( i = 0; i< 5; i++ ){
printf("array_values1[i]: %d\n", array_values1[i]);
printf("array_values2[i]: %d\n", array_values2[i]);
}
}
9
Gli Array: Inizializzazione
 Se un array viene inizializzato nella
dichiarazione non è necessario specificare il
massimo numero di elementi che può contenere:
 char word[] = {'H', 'e', 'l', 'l', 'o'};

 La dimensione viene determinata direttamente


dal numero di elementi inizializzati.
 L’array word avrà dimensione massima 5.

10
Gli Array Multidimensionali
 Un array multidimensionale è un array i cui
elementi sono a loro volta di tipo array.

 Gli array multidimensionali più utilizzati sono


quelli bidimensionali: matrici.

 Dichiarazione di un array bidimensionale:


 int matrix[10][5];

 Accesso ad un elemento:
 int value = matrix[5][3];
11
 matrix[3][2] = 10;
Gli Array Multidimensionali
 Anche gli array multidimensionali possono essere
inizializzati direttamente durante la dichiarazione.
 Non è necessario specificare tutti gli elementi.

 Gli elementi vengono specificati per riga:


int matrix[3][4] =
{{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
1 2 3 4
5 6 7 8
9 10 11 12 12
Esercizio 1

Scrivere un programma C che richiede all’utente 10


valori e li memorizza all’interno di un array, quindi
stampa tutti quelli maggiori o uguali dell'ultimo
valore inserito.

13
Esercizio 2
Scrivere un programma C che:
 Richiede all’utente di inserire i vettori a e b di lunghezza 3:
 scanf("%i,%i,%i", &a[0], &a[1], &a[2])
 Richiede all’utente di scegliere un’operazione 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.
 -: differenza tra due vettori
 Il risultato è un vettore in cui ciascun elemento è la differenza 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.
 x: prodotto scalare
 Il risultato è un numero ottenuto facendo la somma dei prodotti a[i] * b[i].
 Esempi
 (2, 3, 4) + (4, 5, 6) = (6, 8, 10)
 (2, 3, 4) – (4, 5, 6) = (-2, -2, -2)
 (2, 3, 4) * (4, 5, 6) = (8, 15, 24) 14
 (2, 3, 4) x (4, 5, 6) = 2*4 + 3*5 + 4*6 = 47
Esercizio 3
Scrivere un programma C che richiede all’utente 10
voti (compresi tra 18 e 30). Per ogni voto da 18 a 30
stampa il numero delle sue occorrenze e individua i
voti che hanno più occorrenze.

Esempio: Se i voti immessi sono:


18 23 21 25 29 30 19 21 23 24
21 e 23 hanno 2 occorrenze e sono anche i voti col
maggior numero di occorrenze. Il programma li
deve individuare entrambi.

15
Esercizio 4
Scrivere un programma C che salvi in ogni
elemento di un array bidimensionale 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.
 Finché l’utente vuole continuare, il programma
richiede all’utente i valori i e j e stampa il
corrispondente elemento a video, oppure un
messaggio di errore se gli indici non sono validi.
 Esempio di esecuzione
Vuoi iniziare? (s/n) s
Riga: 2
Colonna: 3
Valore in (2,3): 5 16
Vuoi continuare? (s/n)
Esercizio 5
Scrivere un programma C che:
 Richiede all’utente di inserire due matrici
quadrate 3x3.
 for( i = 0; i < 3; i++ ){
scanf( "%i,%i,%i",
&a[i][0], &a[i][1], &a[i][2] );

}
 Esegue la moltiplicazione tra le due matrici.
 Date due matrici quadrate a e b, l’elemento c[i][j]
della matrice c risultato è dato dal prodotto scalare
della riga i di a per la colonna j di b.
 Per il prodotto scalare si veda l'esercizio 2.
17
 Stampa a video il risultato.
Esercizio 5 [Esempio]
Matrice a: Matrice b: Matrice c:
3 2 5 1 0 3 36 19 28
1 0 4 4 7 2 21 4 15
4 1 3 5 1 3 23 10 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 ]

18
Esercizio 6
Scrivere un programma che dato un array di
caratteri lungo 8 (con i valori letti da standard
input) lo stampa, lo stampa invertito, sostituisce
ogni vocale minuscola con un '*'.
 Per esempio se dopo la lettura l’array è

p i c c i o n e

 Il programma lo trasforma in:


* n * * c c * p

19
Esercizio 7
(esercizio con array da tema di esame)
Scrivere un programma che dato un array di interi > 0
(sicuramente è così, non serve correggere errori)
inizializzato in fase di dichiarazione e che finisce con il
valore sentinella -1 (dichiarato come costante simbolica
STOP), verificare se l’array è in ordine:
1) Crescente
2) Decrescente
3) Nessun ordine
e stampare un opportuno messaggio. Ad esempio l’array
int values[] = {7, 4, 5, 4, 2, STOP}; non è in nessun ordine,
l’array int values[] = {7, 5, 3, 2, 1, STOP}; è in ordine
decrescente, mentre l’array int values[] = {1, 3, 4, 7, 9, 20
STOP}; è in ordine crescente.
Esercizio 8
(esercizio con array da tema di esame)
Scrivere un programma che dato un numero intero positivo
num inserito da tastiera (correggere eventuali errori in
inserimento) e un array di 5 interi di nome cifre
contenente tutti numeri maggiori o uguali a zero composti
da una sola cifra, verificare se tutte le cifre di num sono
presenti nell’array.
Ad esempio se num vale 353 e l’array è int cifre[]= {3, 3,0,
7, 4}, l’array non contiene tutte le cifre di num.

21
Esercizio 9
(esercizio con cicli da tema di esame)
Chiamiamo coppia di quadrati (CQ) una coppia <a,b> di
numeri interi che sono uno il quadrato dell’altro. Esempio
<9,3> oppure <-3,9> (infatti 9=3*3).
Si codifichi un programma C che legge da tastiera una
sequenza che termina con 99 (di lunghezza a priori
illimitata) di numeri interi e stampa a video quante coppie
di numeri consecutivi all’interno della sequenza
rappresentano una CQ.
Ad esempio: 2 4 16 0 3 9 99 contiene 3 CQ: <2,4> <4,16> e
<3,9>

22
Esercizio 10
Matermind
Scrivere un programma che realizzi il gioco Mastermind.
Il primo giocatore inserisce 4 caratteri che corrispondono
alle iniziali di 4 colori tra (r = rosso; g = giallo; v = verde, b
= blu, n = nero; si assuma che gli utenti inseriscano
sempre una lettera compresa in questo elenco).
Il secondo giocatore ha a disposizione 10 tentativi per
indovinare la combinazione, inserendo a sua volta quattro
caratteri ad ogni tentativo.
Dopo ogni tentativo il programma visualizza il numero di
colori corretti in posizione corretta (non vengono segnalati
i colori corretti in posizione sbagliata).
Terminati i tentativi, se il secondo giocatore non è riuscito
a indovinare la sequenza, vengono visualizzati i caratteri 23
corretti.
Esercizio 11
Massimo comun divisore e minimo
comune multiplo

Scrivere un programma che calcoli il massimo


comun divisore e il minimo comune multiplo di due
numeri inseriti dall’utente.
Entrambi i numeri inseriti devono essere maggiori
di zero.

24

Potrebbero piacerti anche