Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni11 pagine

Università Degli Studi Sannio Ding: Benevento

Il documento tratta il concetto di tipi strutturati nei linguaggi di programmazione, in particolare gli array. Vengono introdotti gli array come tipo strutturato generico e primitivo che aggrega valori dello stesso tipo in base ad una relazione d'ordine tra i componenti.

Caricato da

yannbouzan2005
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)
15 visualizzazioni11 pagine

Università Degli Studi Sannio Ding: Benevento

Il documento tratta il concetto di tipi strutturati nei linguaggi di programmazione, in particolare gli array. Vengono introdotti gli array come tipo strutturato generico e primitivo che aggrega valori dello stesso tipo in base ad una relazione d'ordine tra i componenti.

Caricato da

yannbouzan2005
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/ 11

05/12/2018

UNIVERSITÀ DEGLI STUDI Tipi strutturati


DEL SANNIO Benevento • L’informazione può essere decomposta in tipi più semplici
DING • Più informazioni possono essere aggregate fra loro in base
DIPARTIMENTO DI INGEGNERIA
ad una relazione per costituire un’informazione più
complessa
• Es:
CORSO DI "PROGRAMMAZIONE I" • data (giorno, mese, anno)
• numero complesso (parte reale, coefficiente immaginario)
• generalità anagrafiche (cognome, nome, data nascita,
Prof. Franco FRATTOLILLO indirizzo)
Dipartimento di Ingegneria • Un tipo strutturato è caratterizzato da:
Università degli Studi del Sannio • tipo componenti
• costruttore
• funzione d’accesso agli elementi
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 1
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 2

Tipi strutturati Array


• tipi componenti (… tipi base ...) • È praticamente presente in tutti i linguaggi come tipo
• modalità di aggregazione (operazioni di) strutturato generico e primitivo
• operazioni caratteristiche • Metodo di aggregazione: Cartesiano
• funzioni di accesso (sono operazioni esterne al tipo
strutturato che trasformano un oggetto del tipo in un suo
componente) tipo array = T1 × T2 × … × Tn
• altre operazioni ... T1= T2=...........= Tn = T
• nei linguaggi di programmazione
• tipi strutturati primitivi • ennuple ordinate di valori dello stesso tipo ...
• costruttori di tipo strutturato
• dichiarazioni di informazioni di tipo strutturato • quando usato, bisogna:
• costruttori di valori • definire T (il tipo dei componenti)
• definire n (dimensione o cardinalità)
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 3 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 4
05/12/2018

Funzione di Accesso … un modello interpretativo ...

• Il cartesiano introduce una relazione d’ordine fra i componente


componenti
• ogni componente è individuabile attraverso la definizione .. .
della POSIZIONE che occupa nell’ordinamento 3 4 ..
• modalità di accesso Casuale o Diretta V 12 posizione
componente
• le costanti, le informazioni, le espressioni usate per
definire la posizione dell’elemento di interesse in
operazioni di accesso ad un array vengono detti INDICI
nome array

Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 5 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 6

Array in C Array in C: funzione di accesso


• In C la dichiarazione di una variabile di tipo array è • Se un array ha dimensione N i suoi elementi sono
composta di quattro parti: indicizzati da 0 a N-1
• uno specificatore del tipo base
• un identificatore della variabile • Individuazione degli elementi dell’array:
• una coppia di parentesi quadre [ ], che racchiude la • nome_array[posizione]
dimensione (un valore costante) dell’array • Esempi:
• Dichiarazione: tipo_base nome_array[dimensione]; double vettore[10]; 0 1 2 3 4 5 6 7 8 9

Esempio: double vettore[10]; vettore[3] = 5;


x = vettore[4] * 2;
• Possibile inizializzare un array e dichiarare costanti …
vettore[3]
• Inizializzazione: int vettore[5] = {4, 6, 3, 7, 9};
• int vettcost[5] = {1, 3, 5, 7, 9};
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 7 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 8
05/12/2018

Array in C: Indice
funzione di accesso Assegnamento degli elementi di un array

• Appartiene ad un tipo ordinato e indica la posizione • Ad un elemento di un array è possibile assegnare un


di un elemento nello array valore tramite operazioni di:
• Può essere espresso tramite: • input
• Es.: scanf(“%d”, &A[3]);
• una costante (es. A[4], quarto elemento dello array)
• legge un valore che viene assegnato al terzo elemento dell’array
• una variabile (es. A[i], i-esimo elemento dello array) A
• un'espressione valutata intera (es. A[c+d*e] (elemento • Calcolo e assegnamento
dello array nella posizione corrispondente al valore di • Es.:
c+d*e) A[4] = C;
A[1] = 5;
A[3] = f * 9 + d;
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 9 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 10

Uso degli elementi di un array …


• Un elemento di un array può essere utilizzato in B=A[2] + A[4]; => B= 5 + 21 = 26
operazioni di: 0 18 printf(“%d --- %d\n”, A[1], A[5]); 22 --- 6
• stampa 1 22
• Es.: printf(“%d”, A[3]); 2 5
0 18
• stampa il valore dell’elemento nel terzo elemento dello array A A[1]= 22; => 1 22
3 8
• calcolo e assegnazione 2 5
• Es.: 4 21
3 8
C = A[4] ; 5 6
B= f *9 + d - A[i] ; 4 21
• per la valutazione di una condizione A 5 6
• Es.: if (A[i] > 7) ……
A
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 11 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 12
05/12/2018

Esempio: calcolo del punteggio medio Esempio di esecuzione


#include <stdio.h>
void main( ) {
for (i = 0; i < Ngiudici; i++) { Ngiudici = 5
double punteggio[5], totale, media; printf("Punteggio del giudice %d:", i);
int i; i
for (i = 0; i < 5; i++) { scanf (“%f”, &punteggio[i]); 0 9
printf("Punteggio del giudice %d:", i); Fase di lettura 0
scanf (“%f”, &punteggio[i]); dei dati } 1 8
1 2
}
7
2 3
totale = 0; 8
for (i = 0; i < 5; i++) Fase di elaborazione 3
4 10
totale = totale + punteggio[i]; dei risulati
4 punteggio
media = totale / 5;
printf("Il punteggio medio e' %f \n", media);
}
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 13 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 14

Esempio di esecuzione Cardinalità e riempimento

totale = 0; • In C è necessario dichiarare la dimensione dell’array


for (i = 0; i < Ngiudici; i++) totale = totale+punteggio[i]; (affinché il compilatore possa allocare la memoria
necessaria)
media = totale / Ngiudici;
• Per generalizzare i programmi ad array di dimensione
i punteggio totale variabile, bisogna definire una dimensione massima
0 9 9 max e, di volta in volta, utilizzare un numero di
1 8 17
media = 8.2 elementi n compreso tra 1 e max
2 7 24
3 8 32 • I valori max e n vengono detti rispettivamente
4 10 41 cardinalità e riempimento dell’array
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 15 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 16
05/12/2018

Esempio rivisto Somma dei numeri di indice dispari


#include <stdio.h>
void main( ) {
• Definizione del problema: inserire i valori degli elementi in
double punteggio[10], totale, media; un array monodimensionale di interi, composto da 50
int i, Ngiudici; elementi; visualizzare il contenuto dell’array così ottenuto;
do {
printf("Numero di giudici: "); scanf(“%d”, &Ngiudici);
calcolare la somma degli elementi di indice dispari
} while (Ngiudici < 1 || Ngiudici > 10) • Definizione dei dati del problema:
for (i = 0; i < Ngiudici; i++) {
printf("Punteggio del giudice %d:", i); scanf (“%f”, &punteggio[i]); • I: il valore di ciascun elemento dell’array di numeri interi
} • Precondizione: il numero degli elementi da inserire non può
totale = 0; essere maggiore della cardinalità dell’array
for (i = 0; i < Ngiudici; i++) totale = totale + punteggio[i];
media = totale / Ngiudici; • U: l’array "riempito" con i valori degli elementi, la somma degli
printf("Il punteggio medio e' %f \n", media); elementi di posto dispari
} • Postcondizione: nessuna
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 17 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 18

Somma dei numeri di indice dispari Il codice

• Descrizione del metodo di elaborazione: #include< stdio. h>


main( ) {
• Con un ciclo ripetitivo, si effettua la lettura del valore di int Vett[50], i, Sommadispari;
ciascun elemento dell’array for (i = 0; i < 50; i++) {
• Si visualizza, sempre usando un ciclo ripetitivo, il printf("Valore di Vett(%d)\ n", i); scanf("% d", &Vett[i]);
contenuto dell’array, stampando, ad ogni passo del ciclo, il }
valore di ciascun elemento immesso for (i = 0; i < 50; i++) printf("Vett(%d)=% d\ n", i, Vett[i]);
• Con un ciclo ripetitivo che parte dalla posizione 1 e con Sommadispari=0;
step di incremento pari a due si calcola la sommatoria dei for (i = 1; i < 50; i+=2) Sommadispari = Sommadispari+Vett[i];
valori nelle posizioni di indice dispari printf("Sommatoria valori elementi ");
• Si stampa il risultato ottenuto printf("in posti di indice dispari=%d\ n", Sommadispari);
}
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 19 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 20
05/12/2018

Ricerca del minimo Ricerca del minimo

• Trovare il valore minimo tra gli elementi di un array di • Descrizione del metodo di elaborazione:
interi, con cardinalità 50, ed indicarne la posizione • È indicato il numero di quanti elementi si vogliono
• Definizione dei dati del problema: inserire: tale numero deve essere minore della cardinalità
dell’array
• I: il riempimento; il valore di ciascun elemento
• Si legge il valore di ciascun elemento da immettere
• Pi: il numero degli elementi da inserire non può essere
maggiore della cardinalità dell’array • Si pone pari al minimo il primo elemento dell’array
• U: la posizione dell’elemento con valore minimo • Si verifica se ciascun altro elemento dell’array è inferiore
al minimo fissato; in tal caso, si aggiorna il valore del
• Pu: nessuna minimo e della posizione in cui esso si trova nell’array
• Si stampa il valore minimo e la posizione in cui esso si
trova
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 21 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 22

Ricerca del minimo Ricerca di un elemento


main( ) {
const int CARDINALITA = 50;
• Verificare se in un array monodimensionale di interi,
int VET[CARDINALITA], I, riemp, MIN, POS;
composto da 50 elementi, esiste un determinato valore
do { immesso in input. Se questo valore esiste, indicare la
printf (“Quanti elementi vuoi inserire? ”); scanf (“%d”, &riemp); posizione del primo elemento che lo contiene e terminare
} while ((riemp <= 0 ) || (riemp > CARDINALITA)); la ricerca
for (I = 0; I < riemp; I++) {
printf("Inserisci elemento di posto %d\n", I); scanf("% d", &VET[I]);
• Definizione dei dati del problema:
} • I: il valore di ciascun elemento; il valore da cercare; (eventuale)
MIN = VET[0]; POS=0; riempimento
for (I = 1; I < riemp; I++) • Pi: se usato un riempimento questo non può essere maggiore
if (VET[I] < MIN) { della cardinalità dell’array
MIN=VET[I]; POS=I;
• U: la posizione del primo elemento con valore pari a quello
}
printf(“Il valore minimo = %d si trova nella posizione numero %d\n” , MIN, POS);
cercato
}
• Pu: nessuna

Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 23 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 24
05/12/2018

Ricerca di un elemento Ricerca di un elemento


• Descrizione del metodo di elaborazione: #include<stdio.h>
main( ) {
• È indicato il numero di quanti elementi si vogliono const int cardinalita = 50;
inserire: tale numero deve essere minore della cardinalità int VET[cardinalita], I, riemp, VAL, POS, trovato;
dell’array do {
• Con un ciclo ripetitivo, si legge il valore di ciascun printf (“Quanti elementi vuoi inserire? ”);
elemento da immettere scanf (“%d”, &riemp);
• Si immette il valore da cercare nell’array } while ((riemp <= 0) || (riemp > cardinalita));
for (I = 0; I < riemp; I++){
• Con un ciclo iterativo, si verifica se tale valore esiste
printf("Inserisci l'elemento di posto %d\n", I);
nell’array: se esiste, viene visualizzata la posizione del scanf("%d", &VET[I]);
primo elemento che lo contiene }
• Se non esiste, viene visualizzata la scritta "il valore printf (“Immetti il valore da ricercare\n”);
indicato non esiste nello array" scanf (“%d”, &VAL); …………………….
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 25 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 26

… … un'altra soluzione
………………………………….. …………………………………
trovato=0; POS=0; I=0; POS=0;
do { I=0;
if (VET[I] == VAL) { while ((I < riemp) && (VET[I] != VAL)) I++;
trovato=1; POS=I; if (I < riemp) {
}
POS=I;
I++;
} while ((I < riemp) && (trovato != 1));
printf ("Valore immesso %d in posizione %d\n", VAL, POS);
if (trovato == 1) }
printf ("Valore immesso %d in posizione %d\n", VAL, POS); else
else printf("Il valore indicato %d non esiste nello array\n", VAL);
printf("Il valore indicato %d non esiste nello array\n", VAL); }
}
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 27 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 28
05/12/2018

… ancora un'altra soluzione Array multidimensionali


……………………………………. • Gli array multidimensionali vengono dichiarati
trovato=0; specificando il numero di elementi per ciascuna
I=0; dimensione
while ((I<riemp) && (trovato==0)) { • Un array bidimensionale con 6 elementi per ciascuna
trovato = (VET[I]==VAL); dimensione viene dichiarato come:
I++; • int alfa[2][6];
}
if (trovato==1)
• Per referenziare un singolo elemento è necessario
utilizzare due coppie di parentesi quadre:
printf("Il valore immesso %d in posizione %d\n", VAL, (I-1));
• alfa[1][2] = 1;
else
printf("Il valore indicato %d non esiste nello array\n", VAL); • In pratica, un array multidimensionale è una collezione di
} oggetti, ciascuno dei quali è un array
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 29 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 30

Esempio Array: inizializzazione

/* Tabelline dall’1 al 10 */ • Gli array non sono inizializzati a zero: all’atto della loro
main( ) { definizione contengono valori indefiniti
int tabelline[10][10]; • È possibile inizializzare esplicitamente un array
racchiudendo i valori tra parentesi graffe e
int i, j;
separandoli da virgole; in questo caso non è
for (i = 0 ; i < 10 ; i++) necessario specificare la dimensione dell’array
for(j = 0 ; j < 10 ; j++) • Per gli array multidimensionali è invece necessario
tabelline[i][j] = (i + 1) * (j + 1); specificare tutte le dimensioni meno la prima
}
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 31 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 32
05/12/2018

Esempio Operazioni sugli array


int array_1[ ] = {0,1,2,3,4,5,6,7,8,9}; • Per copiare elementi da un array all’altro bisogna
int array_2[ ][4] = {
{1,2,3,4},
copiare singolarmente ogni elemento
{5,6,7,8},
{122,144,678,908} int a[15], b[15], i;
}; for (i = 0 ; i < 15 ; i++) a[i] = b[i];
/* che è equivalente a */
int array_2[3][4] = {
{1,2,3,4}, • È illegale invece assegnare
{5,6,7,8}, a = b;
{122,144,678,908}
};
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 33 Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 34

Esempio: somma di matrici Array di caratteri

main( ) { • Una stringa è un array monodimensionale di caratteri


ASCII terminati da un carattere null pari a ‘\0’
int matrix1[ ][3] = { {1,2,3}, {4,5,6}, {7,8,9} };
• Ad esempio: "Questa è una stringa" è un array di 21
int matrix2[ ][3] = { {3,4,2}, {2,1,4}, {4,6,9} ; caratteri
int i, j, result[3][3]; • L’array è quindi il seguente:
for(i=0 ; i < 3 ; i++) elemento zero ‘Q’
primo elemento ‘u’
for(j=0 ; j < 3 ; j++)
secondo elemento ‘e’
result[i][j] = matrix1[i][j] + matrix2[i][j]; ............
} ventesimo elemento ‘a’
ventunesimo elemento ‘\0’
Franco FRATTOLILLO – Dipartimento di Ingegneria – Università degli Studi del Sannio Corso di "Programmazione I" – Corso di Laurea in Ingegneria Informatica / ExAT 35
05/12/2018

Esempio Esempio
/* Stampa i caratteri e la codifica ASCII */ /* Legge una stringa in input di max 100 caratteri*/
main( ) {
char stringa[ ] = { 'a', 'A', 'H', 'k' , '\0'}; char linea[101];
int c, i;
main( ) { for (i=0; (i<100) && ((c=getchar( )) != ‘\n’); i++)
int i = 0; linea[i] = c;
while ( stringa[i] != ‘\0’ ) { linea[i] = ‘\0’;
printf ( “%c = %d\n”, stringa[i], stringa[i] ); i = 0;
++i; while (linea[i] != ‘\0’)
} printf(“%c”, linea[i++]);
}
}

Esempi Esempio

int i; /* trasforma i caratteri maiuscoli in minuscoli */


char c;
char str[100];
/* Valuta se c è una cifra */ int i;
i = (c >= '0' && c <= '9') ? 1 : 0; … /* inizializzazione di str con una stringa */
for (i=0; str[i] != ‘\0’; i++)
/* Valuta se c è uno spazio */ if (( str[i] >= ‘A’) && ( str[i]) <= ‘Z’))
i = (c == ' ') ? 1 : 0; str[i] = str[i] + ‘a’ - ‘A’;
05/12/2018

Costanti stringa
• Una costante stringa è una sequenza di uno o più caratteri
racchiusi da doppi apici (“”)
• il compilatore aggiunge un carattere NULL (‘\0’) alla fine di
ogni stringa
• costanti stringa separate da spazi/ritorni a capo sono
concatenate
• il carattere " (doppio apice) in una stringa va preceduto da \

char a[ ]=“Ciao Mondo”;


char a[ ]= “Ciao” “ Mondo”;
char a[ ]= “Ciao”
“Mondo”;
char a[ ]=“Titolo libro: \"Divina Commedia\"”;

Potrebbero piacerti anche