I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
|
|
- Lorenza Zamboni
- 6 anni fa
- Visualizzazioni
Transcript
1 I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
2 Variabili I tipi di variabili che abbiamo usato finora hanno la caratteristica comune di non essere strutturate: ogni variabile è una singola cella di memoria. Se il programma deve trattare collezioni di dati, anche se sono dello stesso tipo, a ognuno deve essere associato un identificatore. Supponendo di dover gestire le paghe in una ditta di 3000 dipendenti sarebbe necessario definire 3000 variabili diverse, del tipo: operaio1, operaio2,..., impiegato1, impiegato2,..., ecc. Appunti di Informatica Prof. Accarino 2
3 Vettori Il vettore è una collezione di variabili tutte dello stesso tipo di lunghezza prefissata. Ogni elemento del vettore è detto componente ed è individuato dal nome del vettore seguito da un indice posto tra parentesi quadre. L'indice può essere solo di tipo intero o enumerato e determina la posizione dell'elemento nel vettore. Il primo elemento del vettore ha sempre indice 0 Appunti di Informatica Prof. Accarino 3
4 Vettori nome Indirizzo 79 Scrivendo nome[3] facciamo riferimento al valore 82, perché in pratica il compilatore traduce la scrittura nome[3] mediante l'operazione di somma tra l'indirizzo associato a nome e l'indice 3 Ed è per questo motivo che l'indice parte sempre da 0. Indirizzo + 0 = prima cella + indice Appunti di Informatica Prof. Accarino 4
5 Vettori Un array viene dichiarato scrivendo, nell'ordine, il tipo degli elementi, il nome dell'array, e la sua dimensione. tipo nome [dimensione]; dove tipo è il tipo degli elementi ( int, float...) detto anche tipo base dell'array, nome è un identificatore e dimensione, che deve essere racchiuso tra parentesi quadre [ ], è la dimensione, ossia il numero di elementi, dell'array. La dimensione viene anche chiamata Numerosità e deve essere un valore costante in quanto gli array sono blocchi di memoria di dimensione prefissata Appunti di Informatica Prof. Accarino 5
6 Vettori Si noti che all'interno delle parentesi quadre non è possibile, in fase di dichiarazione dell'array, utilizzare nomi di variabili. E' possibile, per specificare le dimensioni di un array, usare delle costanti definite, come ad esempio: #define UNO_MAX 5 #define DUE_MAX 6.. int ar[uno_max]; char br[due_max]; ar br 0FFC C non 4 byte br[0] br[1] br[2] br[3] 1018 br[4] 1019 br[5] ar[0] ar[1] ar[2] ar[3] ar[4] Questo ritorna utile in fase di progettazione perchè si testa il programma con una numerosità piccola e solo quando funziona si imposta la numerosità effettiva cambiando solo il valore della costante nella define. Appunti di Informatica Prof. Accarino 6
7 Vettori Come per le variabili semplici, anche per gli array è possibile un valore iniziale. Ad esempio, con la dichiarazione: int pippo [5] = { 16, 2, 77, 40, }; l'array viene inizializzato come segue: pippo [0]=16; pippo [1]=2; pippo [2]=77; pippo [3]=40; pippo [4]=12071; specificare Il numero di valori usati per l'inizializzazione (quelli posti tra le parentesi grafe { }) deve essere esattamente uguale alla dimensione dell'array. In C++ è possibile anche usare la notazione: int pippo [ ] = { 16, 2, 77, 40, }; ed in questo caso viene assunto implicitamente come dimensione dell'array il numero di valori della lista di inizializzazione Appunti di Informatica Prof. Accarino 7
8 Vettori altri esempi di inizializzazione esplicita al momento della creazione: int numeri[3] = {12, 0, 4}; char vocali[5] = {'a','e','i','o','u'}; float decimali[2] = {1.329, 3.34}; Per inizializzare un array durante l'esecuzione del programma occorre accedere, generalmente con un ciclo, ad ogni elemento dell'array stesso ed assegnargli un valore. Appunti di Informatica Prof. Accarino 8
9 Vettori int a[10]; Int N; Leggi N for (i=0; i <= N; i++) scanf( %d,&a[i]); In C non è possibile assegnare un array ad un altro. int a[10],b[10]; a=b; /* ERRORE!!! */ Per trasferire il contenuto di un array in un altro è necessario assegnare individualmente ogni valore per esempio utilizzando un ciclo for. for (i=0; i <= 10; i++) a[i]=b[i] Appunti di Informatica Prof. Accarino 9
10 Passaggio di Arrays alle funzioni Il passaggio di un array ad una funzione avviene solo per indirizzo perché in questo modo si passa un solo dato, cioè l indirizzo e non tutta la collezione di dati contenuti nel vettore (ipotesi assurda) Quindi quando si passa un vettore come parametro ad una funzione, in realta` si sta passando l indirizzo dell elemento di indice 0. Questo indirizzo è rappresentato dal nome del vettore Il parametro formale deve essere di tipo puntatore al tipo degli elementi del vettore. Di solito si passa la dimensione del vettore in un ulteriore parametro. Appunti di Informatica Prof. Accarino 10
11 Esempio Void stampa(double *, int) int main(void) {... double vet[5] = {1.1, 2.2, 3.3, 4.4, 5.5}; stampa(vet, 5);... } void stampa(double *v, int dim) { int i; for (i = 0; i < dim; i++) printf( %lf: %g\n", i, *(v+i)); } Prototipo della funzione Dichiarazione ed inizializzazione Chiamata alla funzione Testata della funzione Corpo della funzione Appunti di Informatica Prof. Accarino 11
12 Esempio notazione esplicita Per evidenziare che il parametro formale e` in realtà un vettore (ovvero l indirizzo dell elemento di indice 0), di solito si usa la notazione: nome-parametro[] invece di *nome-parametro. Void stampa(double v[ ], int) Prototipo della funzione int main(void) {... double vet[5] = {1.1, 2.2, 3.3, 4.4, 5.5}; stampa(vet, 5);... } void stampa(double v[ ], int dim) { int i; for (i = 0; i < dim; i++) printf( %lf: %g\n", i, v[i]); } Dichiarazione ed inizializzazione Chiamata alla funzione Testata della funzione Corpo della funzione Appunti di Informatica Prof. Accarino 12
13 Notazione Esplicita Si può anche specificare la dimensione nel parametro, ma viene ignorata. Esempio: void stampa(int v[5], int dim) {... } Nel prototipo della funzione può anche mancare il nome del vettore. Esempio: void stampa(int [], int); Appunti di Informatica Prof. Accarino 13
14 Vettori bidimensionali (Matrici) Il concetto di vettore come collezione di elementi consecutivi, può essere esteso immaginando che gli elementi siano a loro volta dei vettori: si ottiene così un vettore bidimensionale o matrice. La definizione di matrice ricalca pienamente quella del vettore: tipo nome [dim1] [dim2]; tipo può essere un qualunque tipo semplice, dim1, dim2; racchiusi tra parentesi quadre, definiscono il numero di elementi di ogni dimensione. Appunti di Informatica Prof. Accarino 14
15 Vettori bidimensionali (Matrici) Esempio: matrice bidimensionale di numeri interi formata da tre righe e 4 colonne: int a[3][4]; a 0FFC C 1010 RAM A[0][0] A[0][1] A[0][2] A[0][3] A[1][0] A[1][1] offset A[2][2]=Indirizzo RAM=IndBase+[(indRig*NumCol)+indCol] 0FFC +[( 2 * 4 )+ 2= C A[1][2] A[1][3] A[2][0] A[2][1] A[2][2] A[2][3] Appunti di Informatica Prof. Accarino 15
16 Vettori bidimensionali (Matrici) Gli array a più dimensioni vengono inizializzati allo stesso modo di quelli monodimensionali, ad esempio: int quadrati[4][2] = { 1,1, 2,2, 3,9, 4,16 }; Inizializza un array chiamato quadrati con i numeri da 1 a 4 ed i loro quadrati. Appunti di Informatica Prof. Accarino 16
17 Vettori bidimensionali (Matrici) Inizializzazione int b[2][2]={1,2,3,4}; int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; Se non sono sufficienti, gli elementi non inizializzati sono posti a zero int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; Per riferirsi ad un elemento si specifica prima la riga, poi la colonna printf( "%d", b[ 0 ][ 1 ] ); Appunti di Informatica Prof. Accarino 17
18 Esempio: cosa produce il seguente codice? #include <stdio.h> int main() { int i,j,val[3][4]; for(i=0;i<3;i++) { for(j=0;j<4;j++) { val[i][j]=(i*4)+j+1; } } return 0; } [(indrig*numcol)+indcol]=offset * Appunti di Informatica Prof. Accarino 18
19 Passaggio di matrici come parametri Quando passiamo una matrice ad una funzione, In ogni caso viene passato l indirizzo dell elemento di indice 0, associato al nome della matrice perche anch essa è un vettore. Per poter calcolare l offset corretto, la funzione deve conoscere il numero di colonne della matrice. Ricordiamo che il calcolo svolto è: [(indrig*numcol)+indcol]=offset Non possiamo specificare il parametro nella forma mat[][], come per i vettori, ma dobbiamo specificare il numero di colonne. Esempio: void stampa(int mat[][5], int righe) {... } Appunti di Informatica Prof. Accarino 19
20 Esempio Void stampa(double v[ ] [2], int,int) int main(void) {... double vet[2][2] = { {1.1, 2.2}, {3.3, 4.4} }; stampa(vet, 2,2);... } void stampa(double v[ ][2], int r,int c) { int i,j; for (i = 0; i < r; i++) for (j = 0; j < c;j++) printf("%lf: %g\n", i, v[i][j]); } Prototipo della funzione Dichiarazione ed inizializzazione Chiamata alla funzione Testata della funzione Corpo della funzione Appunti di Informatica Prof. Accarino 20
21 Array multidimensionali In C è possibile utilizzare array anche a più di due dimensioni la sintassi di utilizzo è sempre la stessa: tipo nome [dim1] [dim2]...; Esempio di array a tre dimensioni: Appunti di Informatica Prof. Accarino 21
22 Vettori di caratteri: le stringhe Le variabili di tipo char possono contenere un solo carattere: per trattare sequenze di caratteri come nomi o, più in generale, testi il C prevede le stringhe. Differentemente dagli altri tipi di dato (intero, reale, ecc.) per le stringhe non è sempre possibile fissare a priori le dimensioni: la loro caratteristica peculiare è proprio la lunghezza variabile. Per gestire dati di questo tipo occorrerebbe l'allocazione dinamica della memoria, in modo da riservare tutta e solo la memoria che serve. Appunti di Informatica Prof. Accarino 22
23 Vettori di caratteri: le stringhe Il C prevede per le stringhe un vettore di caratteri, il quale deve quindi avere una lunghezza massima prefissata. All'interno di questo vettore, la lunghezza reale della stringa è determinata dalla presenza di un carattere delimitatore particolare, '\0', detto anche NULL. Come per i tipi base, anche per le stringhe è prevista una notazione particolare per indicarne i valori: la sequenza di caratteri deve essere delimitata da una coppia di doppi apici ("). Appunti di Informatica Prof. Accarino 23
24 Vettori di caratteri: le stringhe Esempio: char s[6] = "Ciao!"; 'C' 'i' 'a' 'o' '!' '\0' s[0] s[1] s[2] s[3] s[4] s[5] Il messaggio è lungo solo 5 caratteri, ma deve essere riservato un carattere in più per il terminatore di stringa, che deve essere sempre presente e viene forzato automaticamente dal linguaggio C. Il vettore può essere definito più lungo, con gli ultimi elementi indefiniti, ma non più corto: char nome[20]= "Francesco" 'F' ' r' 'a' 'n' 'c' 'e' 's' 'c' 'o' '\0' '?' '?' '?' '?' '?' NOTA: la stringa vuota non è un vettore vuoto! char s[ ] = " "; '\0' Appunti di Informatica Prof. Accarino 24
25 Vettori di caratteri: le stringhe Per la definizione di una stringa si può anche utilizzare la direttiva define: #define MESSAGGIO "Ciao!"; Attenzione infine a non confondere variabili di tipo carattere con stringhe: per esempio, 'C' rappresenta un unico carattere che è memorizzato in un'unica cella. "C" rappresenta invece una stringa che è memorizzata in due celle consecutive che contengono i caratteri 'C' e '\0'. Appunti di Informatica Prof. Accarino 25
26 Vettori di stringhe Un vettore di nomi si realizza mediante una matrice di tipo carattere dove ogni riga (vettore) contiene un nome. Ad esempio, per memorizzare i nomi dei giorni della settimana, si può procedere così: char giorni[7][10] = {"lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica"}; dove la dimensione dei singoli vettori (tutti i vettori!), cioè 10, è determinata sommando 1 alla lunghezza del nome più lungo (mercoledì). Pertanto un vettore di stringhe è in realtà una matrice di caratteri! Appunti di Informatica Prof. Accarino 26
27 Vettori di stringhe l u n e d ì \0 giorni[0] m a r t e d ì \0 m e r c o l e d ì \0 g i o v e d ì \0 v e n e r d ì \0 s a b a t o \0 d o m e n i c a \0 giorni[1] giorni[2] giorni[3] giorni[4] giorni[5] giorni[6] Appunti di Informatica Prof. Accarino 27
28 I/O di stringhe Le stringhe possono comparire come argomento di printf e scanf: per esse si utilizza lo specificatore di formato %s. In particolare la printf, quando trova nel format lo specificatore %s, interpreta i valori contenuti nella variabile corrispondente (che dev essere un vettore di caratteri!) come caratteri e li visualizza finché non trova un carattere '\0'. Se non è presente il carattere terminatore la printf continua l output oltre i confini del vettore fino a che non incontra un '\0 (ovvero una cella di memoria che contiene 0!). Appunti di Informatica Prof. Accarino 28
29 Esempio: Stampa dei giorni della settimana uno per riga #include <stdio.h> char giorni[7][10] ={ "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica"}; main() { int indice; printf ("\ni giorni della settimana sono:\n"); for (indice = 0; indice < 7; indice++) printf ( %s\n", giorni[indice]); } Notare come in questo caso la matrice viene utilizzata come se fosse un vettore dove ogni suo elemento è una stringa. Giorni[indice] rappresenta l indirizzo d inizio di ogni stringa Appunti di Informatica Prof. Accarino 29
30 Lettura di stringhe La scanf, quando trova nel format lo specificatore %s, attua un meccanismo di lettura simile a quello usato per i numeri: scarta tutti gli spazi neutri iniziali (spazio, <TAB>, <CR>, ecc.), legge i caratteri successivi scrivendoli in locazioni consecutive del vettore indicato e si ferma non appena incontra un altro carattere appartenente alla categoria degli spazi neutri, chiudendo la stringa appena generata nel vettore con il carattere NULL. E importante quindi che nella stringa non siano presenti spazi e che il vettore destinazione sia dimensionato opportunamente poiché, come sempre in C, non ci sono controlli sugli indici. Appunti di Informatica Prof. Accarino 30
31 Lettura di stringhe Il fatto che non ci siano controlli sul numero di caratteri introdotti, ad esempio da tastiera, può provocare danni collaterali non trascurabili: infatti la lettura prosegue fino al primo spazio neutro in ogni caso e i caratteri letti vengono memorizzati consecutivamente come se la stringa fosse stata dimensionata in modo corretto anche quando è più corta di quanto sarebbe necessario. I caratteri in eccesso e il NULL vengono comunque memorizzati e possono pertanto andare a ricoprire aree di memoria riservate ad altri dati sporcandoli irrimediabilmente. Poiché il nome della stringa è proprio l idirizzo del vettore di caratteri associato nella scanf non si deve usare il carattere & prima del nome. Appunti di Informatica Prof. Accarino 31
32 Array Paralleli Se si vogliono memorizzare più caratteristiche di tipo diverso per una stesso soggetto allora si utilizzano più array (uno per ogni tipo di dato e si scorrono in parallelo con lo stesso indice. Da qui il nome. Esempio nomi ed età di 4 persone: Array di stringhe per i nomi Array di Int per le età C A R L O \0 M A R T I N A \0 F I L I P P O \0 F R A N C E S C A \0 Indice La persona di indice 2 si Chiama Filippo e ha 18 anni Appunti di Informatica Prof. Accarino 32
33 Esempio di lettura in parallelo dei nomi e delle età di 4 persone #include <stdio.h> #define NUM_NOMI 4 #define L_NOME 10 main() { /* Dichiarazioni delle variabili */ char nome[num_nomi][l_nome]; int altezza[num_nomi]; int ind; printf ( \nintroduci il nome e l'altezza di 4 persone:\n"); for (ind = 0; ind < NUM_NOMI; ind++) { printf ( \ndammi il nome della Persona N. %d: ", ind + 1); /* indice a partire da 1 */ scanf ( %s, nome[ind]); printf ( \ndammi l età di: %s ", nome[ind] ); /* stampo il nome appena inserito*/ scanf ( %d, &altezza[ind]); } } Appunti di Informatica Prof. Accarino 33
34 Confronto tra stringhe Poiché le stringhe sono vettori, non è lecito assegnare una stringa ad un'altra. Pertanto il frammento di programma che segue è errato: char messaggio[16];... messaggio = "Errore nei dati";... Anche il confronto tra stringhe non può essere effettuato mediante un'unica istruzione, come invece avviene per i singoli caratteri, ma occorre confrontare col criterio opportuno i singoli elementi delle due stringhe. Appunti di Informatica Prof. Accarino 34
35 Confronto tra stringhe: esempio #include <stdio.h> main() { char parola1[21], parola2[21]; int ind, bool uguali; printf ( \nintroduci la prima parola: ); scanf ( %s, parola1); printf ( \nintroduci la seconda parola: ); scanf ( %s, parola2); /* verifica se sono uguali */ uguali = true; // ipotizza che siano uguali ind = 0; while (uguali && (ind < 20) && (parola1[ind]!= \0 )) { if (parola1[ind]!= parola2[ind]) uguali = FALSO; ind++; } if (uguali) printf ( \nle parole introdotte sono uguali ); else printf ( \nle parole introdotte sono diverse ); } Appunti di Informatica Prof. Accarino 35
36 String.h Per tutte le operazioni sulle stringhe fortunatamente esiste l libreria string.h con numerose funzioni già pronte da utilizzare. Per una rapida consultazione di esse consultare gli appunti a questo indirizzo Appunti di Informatica Prof. Accarino 36
Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliGli Array. Dichiarazione di un array
Gli Array Un array rappresenta una variabile indicizzata (ovvero contenente un indice) che viene utilizzata per contenere più elementi dello stesso tipo. Ogni array ha un nome al quale viene associato
DettagliUnità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.
Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;
DettagliArray multidimensionali e stringhe
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Array uni-dimensionali (richiami) Dichiarazione: int vet[100]; float x[50]; Gli elementi
DettagliEsercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
DettagliARRAY E TYPEDEF. A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C
A volte è utile definire un nuovo tipo di dato come array. Si usa la solita sintassi del linguaggio C Es typedef ; typedef char stringa[10]; dichiara che il tipo stringa è un array
DettagliElementi di Informatica A. A. 2016/2017
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 2
DettagliI CARATTERI E LE STRINGHE
I CARATTERI E LE STRINGHE IL CODICE ASCII Per memorizzare i simboli grafici corrispondenti ai caratteri bisogna associare un numero intero a ciascuno di essi Il codice ASCII / æski/ (American Standard
Dettagli4 GLI ARRAY E LE STRINGHE
13 4 GLI ARRAY E LE STRINGHE 4.1 Gli array monodimensionali Un array è un insieme di variabili dello stesso tipo, cui si fa riferimento mediante uno stesso nome. L accesso ad un determinato elemento si
DettagliIl linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali
DettagliArray k-dimensionali
Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Array. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Array Anno Accademico 2010/2011 Francesco Tortorella Gli array In alcuni casi, l informazione che bisogna elaborare consiste di un aggregazione di valori, piuttosto
DettagliI puntatori. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata.
I puntatori La memoria RAM del calcolatore è formata da un insieme di celle di memoria; per poter localizzare ciascuna cella, ad ognuna di esse è associato un numero, ovvero il suo indirizzo, che viene
DettagliAssociazione Variabile-Indirizzo
I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliL'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
DettagliArray. Parte 7. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliFondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliCicli annidati ed Array multidimensionali
Linguaggio C Cicli annidati ed Array multidimensionali Cicli Annidati In C abbiamo 3 tipi di cicli: while(exp) { do { while(exp); for(exp;exp;exp3) { Cicli annidati: un ciclo all interno del corpo di un
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliAritmetica dei puntatori
Aritmetica dei puntatori Sui puntatori si possono anche effettuare operazioni aritmetiche, con opportune limitazioni somma o sottrazione di un intero sottrazione di un puntatore da un altro Somma e sottrazione
Dettagli! Array. n Mondimensionali n Multidimesionali (Matrici)! Preprocessore! Commenti
Linguaggio C ! Array n Mondimensionali n Multidimesionali (Matrici)! Preprocessore! Commenti 2 ! Nel linguaggio C, un array è un insieme di variabili dello stesso tipo memorizzate consecutivamente! Ogni
DettagliIl linguaggio C Puntatori
Il linguaggio C Puntatori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - puntatori 2 Ringraziamenti Questi
DettagliParametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi
Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliStringhe in C. Alessandra Giordani Lunedì 23 aprile 2012
Stringhe in C Alessandra Giordani agiordani@disi.unitn.it Lunedì 23 aprile 2012 http://disi.unitn.it/~agiordani/ Stringhe Sono particolari array: Ogni elemento del vettore è di tipo char La stringa è terminata
DettagliArray Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione
Array Tipi di dato semplici e strutturati i tipi di dato visti finora erano tutti semplici: int, char, float,... i dati manipolati sono spesso complessi (o strutturati) con componenti elementari o strutturate
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliVariabili e Istruzioni
Exit Menù Variabili e Istruzioni 1 Le Variabili Una VARIABILE è un oggetto identificato da un NOME e da uno STATO, detto CONTENUTO o VALORE. Possiamo immaginarla come una scatola contenuto Pippo 11 nome
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
DettagliLezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
DettagliConcetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
DettagliINFORMATICA. Strutture iterative
INFORMATICA Strutture iterative Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale
DettagliLinguaggio C - Array. Array: tipo nome_array[num_elementi]
Linguaggio C - Array Array: Gli array o vettori sono delle strutture dati in grado di contenere un insieme di valori tutti dello stesso tipo. Un array lo possiamo immaginare come un contenitore suddiviso
DettagliProblema. Vettori e matrici. Vettori. Vettori
e matrici Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Problema Si vuole un programma che chieda 10 numeri dalla tastiera e li visualizzi dall ultimo al primo Soluzione attuale (con le
DettagliStruttura dei programmi C
Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte
DettagliIntroduzione al linguaggio C Gli array
Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome
DettagliArray. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali
MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono
DettagliLe strutture /2. Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare?
Le strutture /2 Iniziamo ora a progettare il codice per la gestione del database. Quali sono le funzionalità da implementare? Per ora è possibile gestire l'elenco dei libri (e quindi delle strutture) mediante
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
DettagliUniversità degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella
Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali
DettagliUniversità degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti
Linguaggio C 1! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti Oggetti dello stesso tipo Identificazione univoca degli oggetti! Il tipo più semplice ha una sola
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliIntroduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
DettagliFunzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)
Funzioni Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Strategie di programmazione Riuso di
DettagliErrori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.
Cicli e array Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione all ambiente
DettagliArray e puntatori in C
Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di
DettagliStrategie di programmazione
Funzioni Funzioni in C Il concetto di funzione Parametri formali e attuali Il valore di ritorno Definizione e chiamata di funzioni Passaggio dei parametri Corpo della funzione 2 Funzioni in C Strategie
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliPuntatori (in C) Emilio Di Giacomo
Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliLinguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.
Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili
DettagliAllocazione dinamica della memoria
Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori
DettagliRipasso R1. Dati strutturati. Esempi. Array. Dichiarazione di un array. Dichiarazione di un array in C
Ripasso R1 Dati strutturati Aggregazione di dati omogenei: gli array Spesso gli algoritmi lavorano su insiemi di dati omogenei. o l insieme dei valori reali che rappresentano le temperature medie delle
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliGli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int
Gli array Gli array rappresentano una modalità molto compatta per accedere ad un gruppo di variabili; tale gruppo è identificato dal nome dell'array; i tipi delle variabili appartenenti al gruppo devono
DettagliBreve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN
Breve Manuale di Riferimento sulla Sintassi Linguaggi e versione aggiornata al 05/02/2004 Sommario Elementi di Base... 2 Dati, Tipi e Dichiarazioni... 2 Tipi di Dato di Base... 2 Tipi di Dato Strutturati...
DettagliEsercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
Dettagli$QDOLVLGHOSURJUDPPDTXDGUDWR
$QDOLVLGHOSURJUDPPDTXDGUDWR /* */ calcolare l area del quadrato #include main(){ int lato, area; printf("lato "); scanf("%d", &lato); if(lato < 0) printf("errore nei dati \n"); else { area =
DettagliStrutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Tipi Strutturati Parte 1 Introduzione G. Mecca M. Samela Università della Basilicata Tipi Strutturati: Introduzione >> Sommario Sommario Panoramica Alcuni Esempi
DettagliESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliLinguaggio C Informatica Grafica
Linguaggio C Informatica Grafica Corsi di Informatica Grafica Prof. Manuel Roveri Dipartimento di Elettronica e Informazione roveri@elet.polimi.it Linguaggio C Breve storia Struttura di un programma Variabili
DettagliLinguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C tipi di dati definiti dall utente Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Tipi di dati in C Predefiniti
DettagliDati aggregati. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica - in breve: Definizione di tipi Array Stringhe Strutture
DettagliUn esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);
Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i
DettagliInput/Output di numeri
Input/Output di numeri I/O di numeri Per utilizzare le funzioni di I/O occorre include il file di intestazione (o file header) stdio.h utilizzando all inizio del sorgente la direttiva #include
DettagliVerso i puntatori: Cosa è una variabile?
Verso i puntatori: Cosa è una variabile? Quando si dichiara una variabile, ad es. int a; si rende noto il nome e il tipo della variabile. Il compilatore alloca l opportuno numero di byte di memoria per
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
Dettagli9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea
DettagliUna stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' a p e \0
STRINGHE: ARRAY DI CARATTERI Una stringa di caratteri in C è un array di caratteri terminato dal carattere '\0' s a p e \0 0 1 2 3 Un vettore di N caratteri può dunque ospitare stringhe lunghe al più N-1
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliEspressione di chiamata di funzione
Avvertenza Quanto segue NON è un libro, ma è una copia dei lucidi usati a lezione che NON sostituisce i libri di testo adottati e consigliati per l insegnamento di Informatica Generale. Questa copia è
DettagliFondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012
Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Introduzione alla sintassi C++ Array a una dimensione Array a due dimensioni Array multidimensionali Funzioni standard della libreria
DettagliI/O INTERATTIVO. scanf: quello che è indispensabile sapere printf: quello che è utile sapere
I/O INTERATTIVO scanf: quello che è indispensabile sapere printf: quello che è utile sapere Input da tastiera Funzioni disponibili (tra le altre): scanf getchar Schema di funzionamento Tastiera Sistema
DettagliLinguaggio C: introduzione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi
DettagliPOINTERS. Una variabile pointer è una variabile che ha come valore un indirizzo di memoria.
POINTERS Una variabile pointer è una variabile che ha come valore un indirizzo di memoria. Es. Sia y una variabile intera di valore e sia yptr una variabile pointer avente come valore l indirizzo di y.
DettagliApplicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:
Le tabelle In C, dato un tipo di variabile, è possibile costruire un array di variabili di tale tipo usando la dichiarazione (facendo l esempio per il tipo float): float vettore[100]; Applicando lo stesso
DettagliESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliInside C : Puntatori. Indirizzo: operatore & p = &v; x = a; Puntatori Referenziazione e Dereferenziazione Arrays
Pointers: Puntatori (I) Le variabili finora incontrate sono caratterizzate da un nome (o identificativo), un tipo, ed occupano un area di memoria di dimensione dipendente dal tipo. Per accedere ad una
DettagliVariabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER
Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico
DettagliI puntatori (richiamo)
I puntatori (richiamo) Puntatori Un puntatore è una variabile che assume come valore un indirizzo in memoria L uso dei puntatori permette di: mantenere riferimenti ad altre variabili (è un punto di accesso
DettagliGli array, le stringhe e le strutture
INFORMATICA B Ingegneria Elettrica Gli array, le stringhe e le strutture Limiti dei tipi di dato semplici Utilizzare solo i tipi di dato semplici può essere limitante e rendere il programma poco flessibile
DettagliPuntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata
Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione
DettagliIl sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.
Sistema C e organizzazione del codice Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto. Un programma C è costituito da un insieme
DettagliIL PRIMO PROGRAMMA IN C
IL PRIMO PROGRAMMA IN C LO SCOPO Si vuole scrivere un programma in linguaggio C che chieda all utente di introdurre da tastiera due numeri interi e visualizzi il valore della loro somma sul video SOLUZIONE
DettagliMultidimensionali. Array Multidimensionali. Tipi di array. Matrice: array bidimensionale. Array multidimensionale. Dichiarazione di una matrice
Tipi di array Array Multidimensionali Antonella Santone Monodimensionali (vettore) Multidimensionali Array multidimensionale Un array multidimensionale è un array, i cui elementi sono a loro volta degli
DettagliIl tipo char ha dimensione di un byte e contiene il numero di codice ASCII che gli corrisponde.
Il tipo char ha dimensione di un byte e contiene il numero di codice ASCII che gli corrisponde. Un letterale di tipo carattere deve essere sempre racchiuso tra virgolette semplici, ad esempio: a. Oltre
Dettaglistringhe array monodimensionali char. libreria < string.h>
Le stringhe Le stringhe sono array monodimensionali il cui tipo base è char. Il nucleo del linguaggio non prevede particolari istruzioni per il trattamento delle stringhe che potrebbero essere gestite
DettagliVettori di caratteri. Caratteri e stringhe. Stringhe in C. Vettori di caratteri. char saluto[10] ; B u o n g i o r n o 4. Esempio.
Vettori di caratteri Il tipo stringa Terminatore nullo Input/output di stringhe Caratteri e stringhe 2 Stringhe in C Vettori di caratteri Nel linguaggio C non è supportato esplicitamente alcun tipo di
DettagliCaratteri e stringhe
Caratteri e stringhe Vettori di caratteri Il tipo stringa Terminatore nullo Input/output di stringhe 2 Vettori di caratteri Stringhe in C Nel linguaggio C non è supportato esplicitamente alcun tipo di
DettagliLinguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin
Linguaggio C Vettori, Puntatori e Funzioni Stringhe Università degli Studi di Brescia Prof. Massimiliano Giacomin SCHEMA DELLA LEZIONE RELAZIONE TRA VETTORI E PUNTATORI (e le stringhe letterali come caso
DettagliEsercizio 1: funzione con valore di ritorno di tipo puntatore
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 7 Esercitazione: 14 dicembre 2005 Esercizi su ricorsione, manipolazione stringhe, strutture dinamiche Problema: Esercizio
DettagliLaboratorio di informatica Ingegneria meccanica
Interi in complemento a 2 () Laboratorio di informatica Ingegneria meccanica Lezione 5 29 ottobre 2007 Con N bit sono rappresentabili tutti gli interi nell'intervallo [-2^(N-), 2^(N-)-] Esempio: 6 bit,
DettagliEsercizio 1: calcolo insieme intersezione
Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 3 Esercitazione: 19 ottobre 2005 Esercizi su array e matrici Esercizio 1: calcolo insieme intersezione Problema: *******************************************************************
Dettagli