Tecniche della Programmazione, lez.15
|
|
- Margherita Boni
- 5 anni fa
- Visualizzazioni
Transcript
1 Tecniche della Programmazione, lez.15 - Richiamo su (perche' serono molto da qui in poi) - scansione di ay con puntatori - Varie applicazioni dell uso di puntatori - Scansione e ricerca in ay - Riuso di una funzione su ay - Uso di puntatori per gestire parametri di output - Tecniche della Programmazione, M.Temperini, Lez uso di puntatori Cogito ergo sum: riflettere sulla differenza nell'uso dell'asterisco in int * pi; e *pi=3; nel primo caso si tratta di una definizione e l'asterisco e' usato per dire che stiamo definendo una ariabile puntatore; nel secondo caso stiamo usando una ariabile puntatore pi, per eseguire l'assegnazione di 3 nella locazione intera puntata da pi
2 Chiamata ed Attiazione di funzione 1/2 int mcd(int n, int m) { int risult; while (n!=m) if (m>n) m=m-n; else n-=m; risult = n; /* (o m ) */ return risult; #include <stdio.h> int main() { int primo, secondo; printf("numeri "); scanf("%d %d", &primo, &secondo); printf("mcd=%d\n", mcd(primo, secondo)); return 0; funzione mcd, PARAMETRI FORMALI: n, m VARIABILI LOCALI: risult VALORE RISULTATO di tipo int CHIAMATA di funzione, - PARAMETRI ATTUALI: primo, secondo ATTIVAZIONE 1) passaggio dei parametri: ATTUALI ---> FORMALI 2) esecuzione del codice della funzione 3) restituzione del risultato Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 2/20
3 Chiamata ed Attiazione di funzione 2/2 #include <stdio.h> int main() { int primo, secondo; printf("mcd=%d\n", mcd(primo, secondo)); return 0; CHIAMATA di funzione, - PARAMETRI ATTUALI: primo, secondo ATTIVAZIONE (alloc. ) 1) passaggio dei parametri: ATTUALI ---> FORMALI 2) esecuzione del codice della funzione nell' 3) restituzione del risultato e dealloc. int mcd(int n, int m) { int risult; return risult; primo secondo Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 3/20 5 Record di Attiazione: area di riserata per l'esecuzione di una chiamata mcd(primo, secondo) AREA PARAMETRI n RISULTATO 5 AREA VAR LOCALI risult m ALTRE AREE
4 Scansione ay in ari modi 1/ esercizio funzione che riceendo stampa #define N oid stampaarray1 (int [N]) { int i; for (i=0; i<n; i++) printf("componente %d = %d\n", i, [i]); return; int main() { int [N] = {; stampaarray1(); un ay () di N interi, (noto N come costante) stiamo passando un indirizzo stampaarray1() 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori /20 i PAR LOC
5 Scansione ay in ari modi 2/ come sopra, ma stampaarray2 e 3 hanno un parametro puntatore: dato che quel che si passa nella chiamata e' un puntatore, non c'e' problema. NB in stampaarray3 usiamo un puntatore come se fosse il nome di un ay oid stampaarray2 (int * ) { int i; for (i=0; i<n; i++) printf cosa? return; CHIAMATA: stampaarray2() [i] *(+i) stampaarray() PAR LOC i oid stampaarray3 (int * ) { int i; for (i=0; i<n; i++) [i] *(+i) printf notazione alternatia a quella sopra? return; CHIAMATA: stampaarray3() 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 5/20
6 Scansione ay in ari modi 2/ come sopra, ma stampaarray2 e 3 hanno un parametro puntatore: dato che quel che si passa nella chiamata e' un puntatore, non c'e' problema. NB in stampaarray3 usiamo un puntatore come se fosse il nome di un ay oid stampaarray2 (int * ) { int i; for (i=0; i<n; i++) printf("componente %d = %d\n", i, *(+i)); return; CHIAMATA: stampaarray2() stampaarray() PAR LOC i oid stampaarray3 (int * ) { int i; for (i=0; i<n; i++) printf("componente %d = %d\n", i, [i]); return; CHIAMATA: stampaarray3() [i] *(+i) 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori /20
7 Scansione ay in ari modi 3/ come sopra: ma stampaarray ricee un parametro di tipo ay e lo usa come se fosse un puntatore oid stampaarray (int [N]) { int i; stampaarray() PAR for (i=0; i<n; i++) printf("componente %d = %d\n", i, *(+i)); return; CHIAMATA: stampaarray() [i] *(+i) i LOC NB Le chiamate funzione() sembrano tutte uguali: prendono il medesimo parametro: A liello di tipi nei parametri delle funzioni int * e int [] sono equialenti 2 (discorso dierso se int * o int [N] fossero ariabili locali in una funzione ero? Perché??) Tecniche della Programmazione, M.Temperini, Lez uso di puntatori /20
8 Scansione ay in ari modi / come sopra: ora pero' la funzione usa un puntatore per scandire l'ay (e non piu' l'intero i) #define N oid stampaarraypunt (int *) { int *pi; pi punta dopo l ultima locazione stampaarraypunt() PAR for (pi= ; pi< ; pi++) printf(" - %d\n", *pi); return; pi punta sulla prima locazione pi LOC int main() { int [N] = {; stampaarraypunt(); 2 +N-1 +N Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 8/20
9 Scansione ay in ari modi / come sopra: ora pero' la funzione usa un puntatore per scandire l'ay (e non piu' l'intero i) #define N oid stampaarraypunt (int *) { int *pi; stampaarraypunt() PAR for (pi=; pi<+n; pi++) printf(" - %d\n", *pi); return; pi LOC int main() { int [N] = {; stampaarraypunt(); 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori /20 +N-1
10 Scansione ay in ari modi / come sopra: ora pero' la funzione usa un puntatore per scandire l'ay (e non piu' l'intero i) #define N oid stampaarraypunt (int *) { int *pi; for (pi=; pi<+n; pi++) printf(" - %d\n", *pi); return; &[N] stampaarraypunt() PAR LOC pi int main() { int [N] = {; stampaarraypunt(); 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 10/20 +N-1
11 Uso di Puntatori per scandire ay 1/2 esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (m) restituisca la somma dei primi m elementi di (o tutti se m>=n) /* 1a fase: ambiente di calcolo */ #define DIM (**) int main() { int [DIM]={; int quanti, sommaelem; quanti = ; sommaelem = sommaprimi(, DIM, quanti); printf(" %d ", sommaelem); return 0; /* scanf( %d, &quanti); */ /* 2a fase: PROTOTIPO (dichiarazione) (**) */ int sommaprimi (int *, int, int);, DIM, quanti sommaprimi(,, ); 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 11/20 n m ? +??
12 Uso di Puntatori per scandire ay 1/2 esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (m) restituisca la somma dei primi m elementi di (o tutti se m>=n) /* 1a fase: ambiente di calcolo */ #define DIM (**) int main() { int [DIM]={; int quanti, sommaelem; quanti = ; sommaelem = sommaprimi(, DIM, quanti); printf(" %d ", sommaelem); return 0; /* scanf( %d, &quanti); */ /* 2a fase: PROTOTIPO (dichiarazione) (**) */ int sommaprimi (int *, int, int);, DIM, quanti sommaprimi(,, ); 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 12/20 n m
13 Uso di Puntatori per scandire ay 2/2 Il prototipo sere a DICHIARARE la funzione, in modo che il codice successio la conosca (cioè il compilatore sappia come preparare la chimata, conoscendo 1) il tipo del risultato della funzione, 2) il nome della funzione, e 3) i nomi e tipi dei parametri). Se la funzione e dichiarata, la sua effettia DEFINIZIONE puo essere ritardata a dopo quella della funzione chiamante. /* 3a fase: definizione funzione */ int sommaprimi (int *, int n, int m) { int i, somma=0; for (i=0; i<m; i++) somma += *(+i); return somma; if (m>n) m=n; a fase? Test m < n / m == n m > n / m < 0, DIM, quanti sommaprimi(,, ); Tecniche della Programmazione, M.Temperini, Lez uso di puntatori /20 n m ? +??
14 Riuso di un modulo e gioco di puntatori esercizio dato un ay di elementi interi, stampare la somma A) dei primi 5 B) di quelli dal 2 o al 5 o /* 1a fase: ambiente di calcolo */ #define DIM int sommaprimi(int *, int, int); int main() { int [DIM]={; /* A) */ printf("somma primi 5: %d\n", sommaprimi(, DIM, 5)); sottoay di elem /* B) nell'ay di indirizzo iniziale +1 e lunghezza (DIM-1) sommare i primi (5-1) */ printf("somma da sec a quinto: %d\n", sommaprimi(+1, DIM-1, 5-1)); return 0; Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 1/20
15 Ricerca in ay, mediante puntatori 1/3 esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (chi) restituisca il puntatore al 1 o elemento di che e' uguale a chi /* definizione della funzione */ int * troaelemento(int *, int n, int chi) { int *pi = ; /* NB init in def; sarebbe equi. fare while (pi!= +n) if (*pi == chi) return pi; else pi++; return NULL; int *pi; pi=; */ - quando pi == +n (+n), uol dire che poco prima pi puntaa sull'ultimo elem. e ora punta fuori dell'ay; - se si scopre che chi==*pi, pi e' l'ind. cercato e si esce restituendo pi; - se nessun elemento e' == chi, iati fuori dell'ay si rest. NULL Test - chi e' in ay (in mezzo)? - chi non c'e'? - chi c'e' al primo posto? - chi c'e' all'ultimo posto? troaelemento(,, ) n-2 + n-1 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 15/20 PAR n chi 2 RISULT. LOC pi
16 Ricerca in ay, mediante puntatori 2/3 esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (chi) restituisca il puntatore alla ultima occorrenza di chi in (opp. NULL) /* 1a fase: ambiente di calcolo */ #define DIM int * troaultima (int *, int, int) int main() { int datroare=, [DIM]; int *pris; /* risultato */ /* lettura ay */ RISULT. troaultima(,, ) n chi pris = troaultima(, DIM, datroare); if (pris!= NULL) printf("troato %d\n", *pris); else printf("tsk tsk \n"); return 0; risultato e non n-2 + n-1 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 1/20
17 Ricerca in ay, mediante puntatori 3/3 esercizio ultima occorrenza /* definizione funzione */ int * troaultima (int *, int n, int chi) int *pr = NULL, /* risultato (se non cambia mai restituiremo NULL) */ *pi = ; /* per scandire ay */ while( pi < +n) { if (*pi == chi) pr = pi; pi++; return pr; un po' dierso dal caso precedente: qui quando troiamo "chi" (cioe' quando *pi == chi) dobbiamo -segnarci che all'indirizzo pi c'e' chi; -ma poi continuare a cercare chi (e quindi non si finisce qui, ma si incrementa comunque pi, in modo che alla prossima scansione si controllera' il prossimo elemento) -a meno che non sia finito l'ay (pi==+n) troaultima(,, ) Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 1/20 n chi n-2 + n-1 RISULT. pr pi
18 Uso di puntatori per PARAMETRI DI OUTPUT 1/ esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (chi) restituisca 1) puntatore alla ultima occorrenza di chi in (opp. NULL) due cose 2) numero di occorrenze di chi in (restituisce 2 risultati?!) un risultato (il primo) iene restituito dalla chiamata tramite return(come nell'esercizio precedente; l'altro risultato iene gestito come parametro di output: una ariabile passata alla funzione nella chiamata, che subisce modifiche (side effect - effetti collaterali) durante l'esecuzione della chiamata. ma non è esattamente così: iiamoci Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 18/20
19 Uso di puntatori per PARAMETRI DI OUTPUT 2/ esercizio Primo risultato: funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (chi) restituisca - puntatore alla ultima occorrenza di chi in (opp. NULL) - numero di occorrenze di chi in int main() { int datroare =, [DIM], numeroocc, *pris; pris = troaeconta(, DIM, datroare); /* modifica numeroocc)*/ pris?? numeroocc al momento della chiamata 2 troaeconta(, DIM, datroare) n chi Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 1/20
20 Uso di puntatori per PARAMETRI DI OUTPUT 2/ esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (chi) restituisca - puntatore alla ultima occorrenza di chi in (opp. NULL) - numero di occorrenze di chi in Primo risultato: oiamente OK what about the second? int main() { int datroare =, [DIM], numeroocc, *pris; pris = troaeconta(, DIM, datroare); /* modifica numeroocc)*/ pris? numeroocc al momento della chiamata 2 troaeconta(, DIM, datroare) n chi Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 20/20
21 Uso di puntatori per PARAMETRI DI OUTPUT 3/ esercizio funzione che riceendo un ay () di interi, la dimensione (n) di, e un intero (chi) restituisca - puntatore alla ultima occorrenza di chi in (opp. NULL) - numero di occorrenze di chi in Secondo risultato: int main() { int datroare =, [DIM], numeroocc, *pris; pris = troaeconta(, DIM, datroare); /* modifica numeroocc)*/ ariabili di proprietà della funzione chiamante - main() pris Tentatio ingenuo?? numeroocc al momento della chiamata 2 (tsk) una istruzione della funzione, che modifichi numeroocc e' illegale (la funzione non "ede" numeroocc). troaeconta(, DIM, datroare) n chi numeroocc = 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 21/20
22 Uso di puntatori per PARAMETRI DI OUTPUT / In qualche modo ci dee essere un parametro, collegato a numeroocc, che permetta di modificare numeroocc dall interno della funzione. int * troaeconta (int *, int n, int chi, int occorrenze) { (tsk, tsk ) int main() { int datroare =, [DIM], numeroocc, *pris; pris = troaeconta(, DIM, datroare, numeroocc); al momento della chiamata pris 2 troaeconta(, DIM, datroare, numeroocc) n? numeroocc chi occorrenze? 2 occorrenze = 2 Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 22/20
23 Uso di puntatori per PARAMETRI DI OUTPUT / In qualche modo ci dee essere un parametro, collegato a numeroocc, che permetta di modificare numeroocc dall interno della funzione. int * troaeconta (int *, int n, int chi, int occorrenze) { (tsk, tsk ) int main() { int datroare =, [DIM], numeroocc, *pris; pris = troaeconta(, DIM, datroare, numeroocc); dopo la chiamata pris 2? numeroocc Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 23/20
24 Uso di puntatori per PARAMETRI DI OUTPUT / In qualche modo ci dee essere un parametro, collegato a numeroocc, che permetta di modificare numeroocc dall interno della funzione. int main() { int datroare =, [DIM], numeroocc, *pris; pris = troaeconta(, DIM, datroare, numeroocc); al momento della chiamata (tsk, tsk ) pris? 2 troaeconta(, DIM, datroare, numeroocc) n pris? numeroocc? numeroocc 2 DOPO la chiamata Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 2/20 chi occorrenze = 2 ma occorrenze? 2 1) il parametro occorrenze corrisponde ad una locazione interna al (DIVERSA DALLA numeroocc della main() 2) il passaggio di un parametro e' "per alore" (QUI alore non definito!!) 3) occorrenze (parametro formale) iene modificata. La numeroocc della main() NO.
25 Uso di puntatori per PARAMETRI DI OUTPUT 5/! La soluzione, per gestire PARAMETRI DI OUTPUT, e' nell'uso della tecnica del PASSAGGIO DI INDIRIZZO: un escamotage per riuscire a ottenere effetti collaterali (indiretti ma effettii) con le funzioni C - non a passato numeroocc (cioe' il suo alore) - a passato &numeroocc, cioe' l'indirizzo della locazione - la funzione ricee l'indirizzo e usandolo riesce a modificare la ariabile esterna numeroocc al momento della chiamata pris? 2 troaeconta(, DIM, datroare, &numeroocc) n? numeroocc chi pocc *pocc = 2 con questa istruzione, eseguita nell'ambiente della funzione, iene modificata una locazione che appartiene ad un ambiente dierso Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 25/20
26 Uso di puntatori per PARAMETRI DI OUTPUT /!! /* definizione funzione */ int * troaeconta (int *, int n, int chi, int *pocc) int *pr = NULL, /* risultato (se non cambia mai restituiremo NULL */ *pi = ; /* per scandire ay */ *pocc = 0; /* contatore occorrenze NB da inizializzare!*/ while( pi < +n) { if (*pi == chi) { pr = pi; *pocc += 1; pi++; return pr; risultato pris Tecniche della Programmazione, M.Temperini, Lez uso di puntatori 2/20? datroare? numeroocc 2 troaeconta(, DIM, datroare, &numeroocc) n chi pocc *pocc += 1 Dopo il passaggio indietro del risultato deallocazione del
- tipo - costruttori di tipo - typedef: alias per i nuovi tipi
Tecniche della Programmazione, lez.16 variazioni sul tema dei puntatori... typedef, struct e definizione di tipi strutturati... - tipo - costruttori di tipo - typedef: alias per i nuovi tipi - struct (Record),
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
DettagliTecniche della Programmazione, M.Temperini, Liste Concatenate 3 1/18
Tecniche della Programmazione, M.Temperini, Liste Concatenate 3 1/18 Eliminazione di un elemento da una typedef int TipoElem; int main() { TipoLista ; TipoElem ; /* costruzione */ /* l'el. da eliminare
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 4 Operatori e introduzione a funzioni Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Soluzioni ad alcuni esercizi Alcuni commenti sugli
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;
DettagliAmbienti di Programmazione per il Software di Base
Ambienti di Programmazione per il Software di Base Le Funzioni in C Esercizi sulle Funzioni svolti Esercizi sulle Funzioni da svolgere A.A. 2011/2012 Ambienti di Programmazione per il Software di Base
DettagliPreviously on TDP. LISTA rappresentata mediante "struct e puntatori" Cosa e aux? Di che tipo e e cosa contiene?
Previously on TDP lis ^ ^ 7 21 ** ** 14 *** memoria 9 NULL LISTA rappresentata mediante "struct e puntatori" *** lis->info == cosa? lis->next == ^^; /*cosa e ^^?*/ che cosa e' (*lis)? Cosa e aux? Di che
DettagliPreviously on TDP. LISTA rappresentata mediante "struct e puntatori" TipoLista lis. Dichiarare DISEGNARE e. DISEGNARE aux.
Previously on TDP lis 7 21 ** ** 14 *** *** memoria 9 LISTA rappresentata mediante "struct e puntatori" TipoLista lis lis->info == cosa? lis->next == ; /*cosa e?*/ che cosa e' (*lis)? Dichiarare DISEGNARE
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 2017
DettagliEsercizio (o esempio?)
Esercizio (o esempio?) programma che legge un intero n e n double; li memorizza in un array dinamico esatto calcola e stampa minimo, massimo e media dei double #include 1) Lettura e memorizzazione
DettagliTecniche della Programmazione, lez.9
Tecniche della Programmazione, lez.9 Funzioni e programmazione modulare 1/73 What s Modulo? Sappiamo gia che il programma e composto da una collezione di oggetti #include int main () { int n=4;
DettagliCompito A. Compito A Sintesi (main(
a) chieda all utente il numero di giorni G del mese preso in esame e che controlli che G abbia valore tra 28 e 31 compresi b) chieda all utente di inserire G temperature in ordine dal primo all ultimo
DettagliLezione 23 - ADT LISTA
Lezione 23 - ADT LISTA Rappresentazione concreta del Tipo di Dati Astratto LISTA. - Cenni sulla rappresentazione mediante array (puah!) - Rappresentazione concreta mediante struct e puntatori. - concetto
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci
DettagliFUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice
Funzioni FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvono parti specifiche di un problema Una funzione permette di attribuire un nome ad un insieme di istruzioni
DettagliLezione 6: Array e puntatori
Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci
DettagliPassaggio dei parametri
Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment
DettagliTecniche della Programmazione, lez.15
Tecniche della Programmazione, lez.15 Uso dell'allocazione dinamica; gestione di stringhe; gestione di una struttura dati per una collezione di stringhe - impostazione esercizio arraydouble (vedi video
DettagliPuntatori e array. Violetta Lonati
Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array
DettagliIntroduzione al C. Lez. 2. Funzioni e Puntatori
Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se è solo
DettagliIntroduzione al C. Lez. 2 Funzioni e Puntatori
Introduzione al C Lez 2 Funzioni e Puntatori Esercizio 1: test primalità Scrivere un programma che prenda in input un intero n, e stampa SI se n è primo, NO altrimenti (NB: un intero n è primo se e solo
DettagliIntroduzione al linguaggio C Funzioni
Introduzione al linguaggio C Funzioni Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati
DettagliE12 Esercizi su Strutture dati dinamiche in C
E12 Esercizi su Strutture dati dinamiche in C Esercizio 1. Si vuole realizzare una lista caratteri in C utilizzando una rappresentazione semplicemente collegata. Scrivere una struttura nodo che contiene
DettagliCapitolo 11. Puntatori
1 Capitolo 11 Puntatori 2 Variabili puntatore Cerchiamo di capire come le informazioni sono memorizzate nella memoria del computer La memoria è un sequenza di byte Ogni byte è composto da 8 bit: Ogni byte
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
DettagliManualistica 3 Le strutture di controllo
Programmazione e Laboratorio di Programmazione Manualistica 3 Le strutture di controllo Programmazione e Laboratorio di Programmazione: Le strutture di controllo 1 Le strutture di controllo Strutture di
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
DettagliCapitolo 12. Puntatori ed array
1 Capitolo 12 Puntatori ed array Introduzione 2 Il C permette di eseguire addizioni e sottrazioni con i puntatori Pertanto possiamo gestire gli array usando i puntatori al posto degli indici L interconnessione
DettagliProf. G. Ascia. I puntatori. Fondamenti di Informatica
I puntatori 1 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
DettagliLE FUNZIONI PARTE II. Manuale linguaggio C
LE FUNZIONI PARTE II Manuale linguaggio C Principio di funzionamento int main(void) int x,y; /* leggi un numero compreso tra 50 e 100 e memorizzalo in x */ /* leggi un numero compreso tra 1 e 10 e memorizzalo
Dettaglicons: L E L (...), e (e,...) Operatori tradizionali sulle liste car: (e,...) cdr: What s LISTE? null: () TRUE (...) FALSE Una lista e' una
What s LISTE? Una lista e' una ( es. λ = {4, 9, 1 E = dominio degli elementi di lista (persone, voli, interi, lettere...) L = {λ / λ e' una lista di elementi in E Bool = {TRUE, FALSE cons: L E L (...),
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
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
DettagliProf. G. Ascia. Le funzioni. Fondamenti di Informatica
Le funzioni 1 La Forma Generale di Funzione La forma generale di funzione è la seguente: SpecificatoreTipo NomeFunzione(ElencoParametri) { CorpoDellaFunzione; Lo SpecificareTipo specifica il tipo dei dati
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
DettagliIntroduzione al C. Lez. 1 Elementi. Rossano Venturini
Introduzione al C Lez. 1 Elementi Rossano Venturini rossano@di.unipi.it Pagine del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start http://algoritmica.spox.spoj.pl/alglab2013 Lezioni
DettagliPassaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet
Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment esterno Per riferimento
DettagliIntroduzione al C. Unità 6 Puntatori. S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 6 Puntatori S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi Sommario
DettagliESERCIZIO: Analisi di un programma. Dato il seguente programma C:
: Analisi di un programma Dato il seguente programma C: #include #define D 4 float A(float V[], int k) {int i; float s=0.0; for(i=0;i
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
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;
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliEsercitazione 5. Procedure e Funzioni Il comando condizionale: switch
Esercitazione 5 Procedure e Funzioni Il comando condizionale: switch Comando: switch-case switch (espressione) { /* espressione deve essere case costante1: istruzione1 di tipo int o char */ [break]; case
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
DettagliTipi di dato STRUTTURATI
Tipi di dato STRUTTURATI I tipi di dato si differenziano in scalari e strutturati In C si possono definire tipi strutturati: array e strutture [ ] (array) Un array è una collezione finita di N variabili
DettagliPuntatori. Fondamenti di Programmazione
Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale
DettagliLe Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia
Le Funzioni in C Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2010/2011 docente: prof. Michele Salvemini 1/24 Sommario Le funzioni Il
DettagliManualistica 3 Le strutture di controllo
Programmazione e Laboratorio di Programmazione Manualistica 3 Le strutture di controllo Programmazione e Laboratorio di Programmazione: Le strutture di controllo 1 Le strutture di controllo Strutture di
DettagliLa funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre
La funzione main() La funzione main(), presente in tutti i programmi C, è una funzione come tutte le altre Unica particolarità: viene chiamata dal Sistema Operativo, appena il programma viene avviato Non
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
DettagliPassaggio dei parametri. Passaggio dei parametri
Per valore Il valore viene copiato dal mondo esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sul mondo esterno rimangono circoscritti all environment
DettagliFunzioni e. Alessandra Giordani Mercoledì 16 maggio 2012
Funzioni e passaggio parametri Alessandra Giordani agiordani@disi.unitn.it Mercoledì 16 maggio 2012 http://disi.unitn.it/~agiordani/ Cosa vedremo oggi Le funzioni Il passaggio dei parametri Le dichiarazioni
Dettagliint main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;
Problema: CALCOLARE LA SOMMA DEI FATTORIALI DEI PRIMI 100 NUMERI NATURALI 0!+1!+2! + 99! #include int fattoriale(int); Calcolo fattoriale int main(){ int numero; /* numero di cui voglio calcolare
DettagliIntroduzione al C. Lez. 1 Elementi. Rossano Venturini
Introduzione al C Lez. 1 Elementi Rossano Venturini rossano.venturini@isti.cnr.it URL del corso http://www.cli.di.unipi.it/doku/doku.php/informatica/all-b/start Lezioni - Lunedì 16-18 Aula M - Martedì
DettagliDefinizione Allocazione e deallocazione di variabili Allocazione e deallocazione di vettori
Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Meccanica, Elettrica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011
DettagliUn programma deve essere scritto come collezione di tante piccole funzioni perché:
Un programma deve essere scritto come collezione di tante piccole funzioni perché: ƒè più facile scrivere correttamente una funzione breve che abbia un unico compito: in questo modo sia la scrittura che
DettagliLaboratorio di informatica Ingegneria meccanica
C: costanti introdotte con #define Laboratorio di informatica Ingegneria meccanica Lezione 4 22 ottobre 2007 Forma: #define nome valore Effetto: ogni occorrenza successiva di nome sarà rimpiazzata con
DettagliIstruzioni di controllo
Istruzioni di controllo Le istruzioni in C Assegnazione Sequenza I/O Test Cicli Controllo = che cosa è la prossima cosa da fare La prossima cosa da fare è quella che segue La prossima cosa da fare dipende
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliI puntatori. DD Cap.7 pp KP Cap.6 pp
I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un
DettagliAnche se due variabili vettore sono dello stesso tipo, NON è possibile l assegnamento diretto:
ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti
Dettaglipassaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in
I Parametri di tipo vettore I Il meccanismo del passaggio per valore di un indirizzo consente il passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad
Dettagli5. Quinta esercitazione autoguidata: liste semplici
22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto
DettagliStrutture Dati Dinamiche
Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti
DettagliCorso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)
Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Strutture e Unioni DD Cap. 10, pp. 379-391, 405-406 KP Cap. 9, pp. 361-379 Strutture Strutture Collezioni di variabili correlate (aggregati)
DettagliFunzioni in C. Informatica Generale - Funzioni in C Versione 1.0, aa p.1/25
Funzioni in C Informatica Generale - Funzioni in C Versione 1.0, aa 2005-2006 p.1/25 Definizione di funzione () è
DettagliLe funzioni. La Forma Generale di Funzione
Le funzioni 1 La Forma Generale di Funzione La forma generale di funzione è la seguente: SpecificatoreTipo NomeFunzione(ElencoParametri) { CorpoDellaFunzione; Lo SpecificareTipo specifica il tipo dei dati
DettagliLe funzioni. La Forma Generale di Funzione
Le funzioni 1 La Forma Generale di Funzione La forma generale di funzione è la seguente: SpecificatoreTipo NomeFunzione(ElencoParametri) { CorpoDellaFunzione; Lo SpecificareTipo specifica il tipo dei dati
DettagliEsercitazione 7. Soluzione:
Esercitazione 7 Esercizio 1: Scrivere una funzione ricorsiva che calcoli il MCD di due numeri interi positivi. Ricordare che la funzione MCD(N,M) termina quando N == M e si ritorna N. int MCD(int N, int
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
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
DettagliLaboratorio di informatica Ingegneria meccanica
Laboratorio di informatica Ingegneria meccanica Esercitazione 8 21 Novembre 2007 Funzioni in C Un programma C si compone di funzioni E' disponibile una collezione predefinita di funzioni che possono essere
DettagliPUNTATORI. Introduzione. puntatore. L operatore
PUNTATORI Introduzione Dichiarazione ed inizializzazione delle variabili di tipo puntatore L operatore puntatore Chiamata di funzioni per indirizzo Espressioni ed aritmetica dei puntatori Puntatori ed
DettagliESERCIZIO: Lettura/Scrittura Array
ESERCIZIO: Lettura/Scrittura Array Non è possibile leggere/scrivere un intero vettore con un unica operazione (a parte il caso particolare delle stringhe); occorre leggere/scrivere ognuno dei suoi componenti
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
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
DettagliEsercizi C su array e matrici
Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza,, ordinamento, ricerca e merge, matrice simmetrica, puntatori Array Array o vettore Composto da una serie di celle int vett[4]
DettagliOttenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
DettagliFunzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri
Funzioni (Passaggio dei parametri per riferimento) Passaggio dei parametri Per passaggio dei parametri si intende l associazione fra parametri attuali e parametri formali che avviene al momento della chiamata
DettagliLaboratorio di informatica Ingegneria meccanica
Laboratorio di informatica Ingegneria meccanica Lezione 7 19 novembre 2007 Concetto di modulo di un programma (1) Lo sviluppo di programmi complessi avviene tipicamente per composizione di moduli, ognuno
DettagliLezione X Definizione di vettori a run-time
Programmazione e Laboratorio di Programmazione Lezione X Definizione di vettori a run-time Programmazione e Laboratorio di Programmazione: Definizione di vettori a run-time 1 Definizione statica di vettori
DettagliLezione 8: Stringhe ed array multidimensionali
Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si
DettagliIntroduzione al C++ (continua)
Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 4 23/10/2018
Esercitazioni di Fondamenti di Informatica - Lez. 4 2/0/20 Esercizi sui tipi in C I codici e le soluzioni degli esercizi sono nella cartella parte. Dato il seguente codice, trovare gli errori, correggerli
DettagliIl linguaggio C Strutture
Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Copyright Mirko Viroli Copyright 2017, 2018 Moreno
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliEsercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
DettagliStringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10
Stringhe in C Luca Abeni Informatica Luca Abeni 1 / 10 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe
DettagliI puntatori e l allocazione dinamica di memoria
I puntatori e l allocazione dinamica di memoria Vettore = puntatore Vettore come parametro a funzione Puntatori e stringhe Vettori di puntatori 2 2006 Politecnico di Torino 1 Vettore = puntatore Data una
DettagliFunzioni con numero variabile di parametri: Funzioni Variadiche in C. Massimo Benerecetti Laboratorio di Algoritmi e Strutture Dati
Funzioni con numero variabile di parametri: Funzioni Variadiche in C Massimo Benerecetti Laboratorio di Algoritmi e Strutture Dati Funzioni «variadiche» Le funzioni che ricevono un numero variabile di
DettagliT = { D, {F 1,...,F n }, {P 1,...,P m } }
TIPI DI DATO Un tipo di dato T è definito come: un dominio di valori, D un insieme di funzioni F 1,..,F n sul dominio D un insieme i di predicati P 1,..,P m sul ldominio i D T = { D, {F 1,...,F n }, {P
DettagliIl linguaggio C. Breve panoramica su stdio.h
Il linguaggio C Breve panoramica su stdio.h 1 Input/Output: stdio.h Contiene definizioni di costanti legate all I/O es. EOF (end of file) #define EOF (-1) valore restituito alla fine di un file Contiene
DettagliIntroduzione al C. Lez. 1 Elementi
Introduzione al C Lez. 1 Elementi Introduzione al C Strumento che adotteremo in queste esercitazioni per implementare e testare gli algoritmi visti a lezione Configurazione minimale suggerita: Editing
Dettagli