I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.
|
|
- Eugenia Martino
- 6 anni fa
- Visualizzazioni
Transcript
1 Puntatori I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. NOTA: quando un programma viene mandato in esecuzione, ad esso viene assegnata un area di memoria di lavoro (in cui vengono salvati i valori delle variabili, il codice, etc.); il programma è autorizzato ad accedere SOLO ad una porzione di quest area, NON a tutta la memoria. Gli indirizzi gestiti dall interno del programma sono RELATIVI; il sistema operativo poi li converte in assoluti. Prima cella riservata al programma: MEMORIA RAM (~ GB) Porzione riservata al programma / porzione della memoria in cui il programma è autorizzato ad effettuare accessi in lettura e scrittura. Gli accessi non autorizzati vengono bloccati ed il programma viene terminato.
2 Dichiarazione di un puntatore int *puntatore; Tipo di variabile di cui il puntatore potrà contenere l indirizzo. All indirizzo specificato si possono trovare una singola variabile o più variabili di quel tipo (ovvero un vettore); così come ad un certo indirizzo (via Saragat, 1) si possono trovare sia 1 singola casa che un gruppo di edifici. Tale informazione non è contenuta nel puntatore, è il programmatore che DEVE conoscere tale informazione. MAI usare un puntatore NON inizializzato! La cosa potrebbe portare ad un potenziale accesso non autorizzato alla memoria L accesso alla memoria viene consentito previa richiesta di autorizzazione ovvero se il programmatore richiede che parte della memoria venga resa disponibile per la scrittura di valori. Al momento, tale richiesta di autorizzazione viene effettuata mediante la dichiarazione di variabile double val; // la dichiarazione indica al compilatore che, nel codice eseguibile, debba essere inclusa la richiesta // di allocazione di un area di memoria di dimensione sufficiente a contenere un valore di tipo double
3 ESEMPIO {int numero; int *puntatore; numero=5; // inizializzo la variabile puntatore = & numero; // inizializzo il puntatore printf( Il valore che si trova all indirizzo %p e %d\n,puntatore, numero); printf( Il valore che si trova all indirizzo %p e %d\n,puntatore, *puntatore); printf( Il valore che si trova all indirizzo %p e %d\n,&numero, numero); numero=8; numero=numero+5; printf( Il valore che si trova all indirizzo %p e %d\n,puntatore, numero); numero=8; *puntatore=*puntatore+5; printf( Il valore che si trova all indirizzo %p e %d\n,puntatore, numero); numero rappresenta una variabile di tipo int; quando si trova a destra dell operatore di assegnazione esso identifica il valore della variabile, quando si trova a sinistra dell operatore di assegnazione esso identifica la variabile a cui viene assegnato un valore. *puntatore rappresenta una cella di memoria (ovvero una variabile) in cui possono essere collocati valori di tipo int; quando si trova a destra dell operatore di assegnazione esso identifica il valore memorizzato nella cella, quando si trova a sinistra dell operatore di assegnazione esso identifica la cella a cui viene assegnato un valore.
4 I puntatori contengono gli indirizzi delle aree di memoria; la dimensione di un puntatore risulta quindi INDIPENDENTE dal tipo di variabile di cui contiene l indirizzo. Verifichiamolo con l operatore sizeof Tale operatore restituisce il valore (unsigned long), in byte, dello spazio occupato in memoria da una variabile o da un tipo di dato {int a, *pint; char b,*pchar; float c,*pfloat; double d,*pdouble; void *p; //?? cosa significa?? printf( Memoria occupata da int: %ul, char: %ul, float: %ul, double: %ul\n,sizeof a,sizeof b,sizeof c,sizeof d); printf( Memoria occupata da int: %ul, char: %ul, float: %ul, double: %ul\n,sizeof int,sizeof char,sizeof float,sizeof double); printf( Memoria occupata da puntatori: %ul, %ul, %ul, %ul,%ul\n,sizeof pint,sizeof pchar,sizeof pfloat,sizeof pdouble,sizeof p); Visto che gli indirizzi sono dei valori di tipo unsigned long da 8 Byte (ovvero interi da 32 bit privi di segno), questo significa che se la cella di memoria di dimensione minima è di 1 Byte si possono al massimo indirizzare 4 GB di memoria.
5 Perché scomodare i puntatori? In C, il passaggio di parametri alle funzioni viene effettuato PER VALORE, ovvero il valore del parametro viene copiato in una variabile locale della funzione. Quindi NON e possibile modificare il valore di un parametro mediante una funzione. Come supero il problema? (1) dichiaro tutte le variabili come globali, di conseguenza tutte le funzioni possono alterare qualsiasi variabile. NO! in generale è molto pericoloso (2) sfrutto il fatto che le funzioni restituiscono un valore. non va sempre bene, le funzioni restituiscono UN SOLO valore (3) passo alla funzione l indirizzo della/e cella/e che voglio modificare, in questo modo la funzione ha accesso diretto alle aree di memoria e mi permette di alterare il loro valore -> PUNTATORI
6 Gestione dell input da tastiera: la funzione scanf() int scanf( stringa di formato,...); // definita in stdio.h Gestisce l input in modo FORMATTATO, non carattere per carattere come getchar() {int numero; printf( Inserisci un valore di tipo intero! ) scanf( %d,&numero); printf( Hai inserito il valore: %d,numero); Nota: il buffer di input termina sempre con il carattere avente codice ASCII 10 -> potrebbero sorgere problemi nel caso ci siano più chiamate a scanf(). Nel caso -> svuotare il buffer di input Attenzione!!! non scrivete scanf( inserisci il numero %d,&numero); Altrimenti, quando digitate il valore (ad es. 58), dovete scrivere inserisci il numero 58
7 Esempio: scriviamo un programma che visualizzi numeri casuali di tipo float compresi tra due estremi che devono essere scelti dall utente durante l esecuzione del programma stesso. #include funzioni.h {float min, max; int i; printf( Inserisci il valore minimo! ); scanf( %f,&min); printf( Inserisci il valore massimo! ); scanf( %f,&max); printf( quanti valori vuoi generare? ; scanf( %d,&i); #include <stdlib.h> /*... eventuali altre funzioni */ float FloatCasuale(float,float); float FloatCasuale(float min,float max) {float temp; temp = ((float) rand()/rand_max)*(max-min)+min; return temp; funzioni.h for( ; i ; i--) {printf( valore casuale: %f\n,floatcasuale(min,max));
8 Costruiamo una funzione che scambia tra loro due valori (ci servirà per l ordinamento degli array) a b a b temp temp a b {int a,b,temp; a=5; b=9; printf( valore di a: %d, valore di b: %d\n,a,b); temp=a; a=b; b=temp; printf( valore di a: %d, valore di b: %d\n,a,b); A seguito dell operazione di scambio, i valori di a e di b devono essere modificati; se voglio far svolgere tale compito ad una funzione, le variabili devono essere passate per RIFERIMENTO e NON per VALORE. ATTENZIONE Le variabili possono essere passate per VALORE o per RIFERIMENTO a seconda della modalità con cui viene dichiarata una funzione; in ogni caso, i parametri della funzione vengono SEMPRE passati per VALORE
9 Costruiamo una funzione che scambia tra loro due valori (ci servirà per l ordinamento degli array) a b a b temp Ora facciamo lo stesso esempio usando i puntatori temp a b {int a,b,temp; int *pa,*pb; pa=&a; pb=&b; *pa=5; *pb=9; printf( valore di a: %d, valore di b: %d\n,*pa,*pb); temp=*pa; *pa=*pb; *pb=temp; printf( valore di a: %d, valore di b: %d\n,*pa,*pb); A seguito dell operazione di scambio, i valori di a e di b devono essere modificati; se voglio far svolgere tale compito ad una funzione, le variabili devono essere passate per RIFERIMENTO e NON per VALORE. ATTENZIONE Le variabili possono essere passate per VALORE o per RIFERIMENTO a seconda della modalità con cui viene dichiarata una funzione; in ogni caso, i parametri della funzione vengono SEMPRE passati per VALORE
10 void scambia(int*,int*); {int a,b; a=5; b=9; printf( valore di a: %d, valore di b: %d\n,a,b); scambia(&a,&b); printf( valore di a: %d, valore di b: %d\n,a,b); void scambia(int *pa,int *pb) {int temp; temp =*pa; *pa = *pb; *pb=temp; Avere una funzione che permetta di scambiare tra loro i valori di due variabili può essere comodo nel caso in cui si voglia applicare ad un insieme di valori un criterio di ordinamento. Ad esempio, se voglio che due valori siano disposti in ordine crescente... int a,b;... codice... if(a<b) { ok! else {scambia(&a, &b); Domanda: Le variabili di tipo int e quelle di tipo float occupano 4 byte Visto questo, è possibile usare la funzione scambia() definita qui a lato per scambiare i valori di due variabili di tipo float?
11 Scriviamo un algoritmo che permetta di disporre dei valori casuali in ordine crescente #include funzioni.h #define NUM 50 {int vet[num],i,scambio; for(i=0;i<num;i++) {vet[i]=intcasuale(30,80); printf( Ecco il valore di vet[%d]: %d\n,i,vet[i]); scambio = 1; while(scambio) // se scambio vale 1 significa che {scambio = 0; // i valori di alcuni elementi sono stati for(i=0;i<(num-1);i++) // scambiati tra loro {if(vet[i]>vet[i+1]) // non è stato incluso il caso = {scambia(&vet[i],&vet[i+1]); scambio=1; #include <stdlib.h> /*... eventuali altre funzioni */ int IntCasuale(int,int); void scambia(int*,int*); int IntCasuale(int min,int max) {return rand()%(max-min+1)+min; void scambia(int *a,int *b) {int temp; temp=*a; *a =*b; *b =temp; funzioni.h for(i=0;i<num;i++) {printf( Ecco il valore di vet[%d]: %d\n,i,vet[i]);
12 Esercizi proposti/1 (1) Scrivere una funzione che accetti due parametri di tipo int* e che non restituisca alcun valore; la funzione deve permettere di scambiare tra loro i valori delle variabili cui fanno riferimento i puntatori che riceve come parametro. (2) Scrivere una funzione che accetti come parametro due valori di tipo int e che restituisca un valore di tipo int; se il primo valore ricevuto come parametro è maggiore del secondo la funzione deve restituire il valore 1, altrimenti 0. (3) Scrivere un programma in cui: (a) si dichiari un array formato da NUM elementi di tipo int (NUM è una macro che va definita usando una direttiva per il preprocessore) ed un array formato da NUM elementi di tipo char. (b) si chieda all utente di inserire due valori di tipo intero, min e max, i cui valori vanno salvati in due variabili (c) servendosi della funzione che genera numeri casuali di tipo intero compresi tra due valori (v. lezioni precedenti), si inizializzano gli elementi dell array usando come estremi dell intervallo di appartenenza dei numeri casuali i valori inseriti dall utente. (d) usando un ciclo while() si visualizzano i valori di tutti gli elementi dell array. Facoltativo: usando un unico ciclo while() fare in modo che vengano visualizzati prima quelli con indici dispari e poi quelli con indici pari. (e) si determini il massimo ed il minimo valore presenti nell array. Per fare questo, procedere in questo modo: all interno di un ciclo for() confrontare il valore del primo elemento dell array con quello dell elemento di indice i: se è minore il primo, non fare nulla, altrimenti scambiare il valore del primo elemento con quello dell elemento di indice i. All interno di un secondo ciclo for(), confrontare il valore dell elemento di indice i con il valore dell ultimo elemento dell array: se il primo valore è inferiore a quello del secondo, non fare nulla, altrimenti scambiare i due valori tra loro. NOTA: il confronto tra i valori e lo scambio dei valori vanno effettuati usando le funzioni definite al punto (1) e (2) (f) Si visualizzino il primo e l ultimo elemento dell array. Se la procedura è stata eseguita correttamente il primo rappresenta il minimo valore mentre l ultimo rappresenta il massimo valore. (g) facoltativo: provare ad iterare la procedura descritta al punto (e) per disporre in ordine crescente tutti gli elementi dell array
13 Esercizi proposti/2 (1) Scrivere una funzione che accetti due parametri di tipo char* e che non restituisca alcun valore; la funzione deve permettere di scambiare tra loro i valori delle variabili cui fanno riferimento i puntatori che riceve come parametro. Questa funzione può servire a scambiare tra loro due valori di tipo int? (2) Scrivere una funzione che accetti come parametro due valori di tipo int e che restituisca un valore di tipo int; se il primo valore ricevuto come parametro è maggiore del secondo la funzione deve restituire il valore 1, altrimenti 0. (3) Scrivere una funzione che accetti due parametri di tipo char e che restituisca un valore di tipo int; se, a prescindere dall essere maiuscola o minuscola, la posizione della prima lettera nell alfabeto viene prima della seconda, la funzione deve restituire 1, altrimenti 0. Ad es. (N, p) -> 1 / (f, B) -> 0 / (m,t) -> 1 (4) Scrivere una funzione che non accetti alcun parametro e che restituisca un valore di tipo char. La funzione, usando il generatore di numeri casuali della libreria standard, deve generare in modo casuale caratteri i cui codici ASCII appartengano al gruppo delle lettere minuscole o di quelle maiuscole. Ad es. : a,g,h,k,r,n,w,b,p,... (5) Scrivere un programma in cui si dichiari un array formato da NUM elementi (NUM è una macro che va definita usando una direttiva per il preprocessore) di tipo intero. Servendosi della funzione che genera numeri casuali di tipo intero compresi tra due valori min e max, inizializzare gli elementi dell array facendo scegliere min e max all utente. Fatto questo, usando un ciclo while() visualizzare i valori di tutti gli elementi dell array. Facoltativo: usando un unico ciclo while() fare in modo che vengano visualizzati prima quelli dispari e poi quelli pari. Mediante due cicli for() annidati, disporre gli elementi dell array in ordine crescente usando la funzione definita al punto (2); visualizzare gli elementi dell array dopo l ordinamento. (6) Scrivere un programma in cui si dichiari un array formato da NUM elementi (ove NUM sia una macro) di tipo char. Usando la funzione definita al punto (3) inizializzare gli elementi di tale array e visualizzarne poi il valore. Fatto questo, disporre gli elementi dell array in modo tale che le lettere siano disposte secondo l ordine alfabetico (a prescindere dal fatto che siano maiuscole o minuscole). Dopo quest operazione, visualizzare il contenuto dell array. Fatto questo, disporre gli elementi dell array in modo tale che le lettere maiuscole siano disposte in ordine alfabetico e le lettere minuscole siano disposte in ordine alfabetico, ovvero se l array è : RfueKhdsP bisogna ottenere KPRdefhsu.
ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }
ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il
DettagliIl generatore di numeri casuali
Il generatore di numeri casuali file di libreria: stdlib.h int rand(void) La funzione restituisce un numero casuale di tipo intero compreso tra 0 e RAND_MAX (estremi compresi) Esempio: scriviamo un programma
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;
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
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
DettagliRappresentazione binaria delle variabili (int e char)
Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati
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
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
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
Dettagliprova.c #include <stdio.h> char funzione(char); codice oggetto del main()
prova.c #include char funzione(char); {char c= a ; printf( Ecco il carattere: %c\n,c); c=funzione(c); printf( Ecco il carattere modificato: %c\n,c); char funzione(char tmp) {if(tmp
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
DettagliLa gestione dei caratteri in C
in C In C i caratteri sono gestiti mediante variabili di tipo char (interi a 8 bit) Ad ogni carattere corrisponde un codice numerico ASCII (American Standard Code for Information Interchange) Un esempio
DettagliInput/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari
Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del
DettagliLezione 8. Sottoprogrammi
Lezione 8 Il linguaggio C: Sottoprogrammi e Funzioni I puntatori Input/Output su file Sottoprogrammi Per risolvere un problema si può scomporlo in problemi più semplici e comporre le loro soluzioni in
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;
DettagliLezione 8 Struct e qsort
Lezione 8 Struct e qsort Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 3 QuickSort strambo Modificare il Quicksort
DettagliMini-dispensa sui puntatori in C
Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile
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
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
DettagliLezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit
Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione
DettagliQuicksort e qsort() Alessio Orlandi. 28 marzo 2010
Quicksort e qsort() Alessio Orlandi 28 marzo 2010 Intro Quicksort è l algoritmo di ordinamento più implementato, insieme con Mergesort. Tutte le librerie standard UNIX ne prevedono una implementazione.
DettagliPerché il linguaggio C?
Il linguaggio C 7 Perché il linguaggio C? Larga diffusione nel software applicativo Standard di fatto per lo sviluppo di software di sistema Visione a basso livello della memoria Capacità di manipolare
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
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
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
DettagliLettura da tastiera e scrittura su monitor
Lettura da tastiera e scrittura su monitor Per poter leggere UN SINGOLO CARATTERE dalla tastiera e visualizzare UN SINGOLO CARATTERE sul monitor si possono utilizzare le funzioni: int getchar (void) (per
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
DettagliTipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.
Tipi di dati fondamentali Tipi di dati fondamentali Linguaggi di Programmazione I Ferdinando Cicalese caratteri: char signed char unsigned char interi short int long interi unsigned short unsigned unsigned
DettagliLinguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin
Linguaggio C Tipi predefiniti Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Il concetto di tipo (reprise) Nome che indica
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 =
DettagliFile binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
DettagliL accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.
I file L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione. I canali, sono delle strutture dati che contengono informazioni sul dispositivo fisico,
DettagliEsercitazione 4. Comandi iterativi for, while, do-while
Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti
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
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
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
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
DettagliLa gestione della memoria dinamica Heap
Laboratorio di Algoritmi e Strutture Dati La gestione della memoria dinamica Heap Prof. Luigi Lamberti 2005 Cenni sui Processi Un Programma è un insieme di Istruzioni memorizzato in un file con le costanti
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
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
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]
DettagliFunzioni, puntatori, strutture. Lab. Calc. AA 2006/07
Funzioni, puntatori, strutture sommario In questa lezione integriamo le informazioni fornite su puntatori e funzioni approfondendo i seguenti punti Puntatori a puntatori Puntatori e array come parametri
DettagliIndovina la lettera...
Indovina la lettera... La lezione di oggi consiste nel preparare un programma che chiede all'utente di indovinare quale sia il carattere generato dal programma stesso in modo casuale. Il numero totale
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
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
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
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.
DettagliLezione 6 programmazione in Java
Lezione 6 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Le costanti I vettori Cos è un vettore Come si usa I vari tipi di vettori Esempi
DettagliInformatica 1. Prova di recupero 21 Settembre 2001
Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo
DettagliLABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice
LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2014 2015 18.III.2015 VINCENZO MARRA Indice Parte 1. L algoritmo euclideo 3 Esercizio 1 3 L algoritmo euclideo
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
DettagliLinguaggio C - le strutture di controllo: sequenza, selezione, iterazione
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione
DettagliLaboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014
Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014 Damiano Macedonio Esercizio 1 Scrivere una funzione che riceve in ingresso un puntatore ad un array di interi e modifica tale array
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
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
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
DettagliPrimi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
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
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti
DettagliLaboratorio di programmazione
Laboratorio di programmazione Lezione II Tatiana Zolo zolo@cs.unipr.it 1 IL PROGRAMMA C++ Istruzioni (espressioni terminate da ; ) istruzioni di dichiarazione (es. int x = 0;); istruzioni di assegnamento
DettagliFunzioni di libreria. KP pp , , , 589, DD pp , , ,
Funzioni di libreria KP pp.112-115, 471-474, 573-575, 589, 598-601 DD pp.144-153, 307-313, 563-565, 588-591 Funzioni matematiche (1) KP p. 112,573 Il linguaggio C non contiene funzioni matematiche predefinite.
DettagliInformatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi
Informatica 1 Corso di Laurea Triennale in Matematica Gianluca Rossi gianluca.rossi@uniroma2.it Dipartimento di Matematica Università di Roma Tor Vergata 11: Stringhe (www.informatica-uno.blogspot.com)
DettagliINFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan
INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg borg@unive.it Ricevimento lunedì, prima o dopo lezione 1 Le funzioni in C Le funzioni vengono utilizzate per 3 motivi: Riusabilità
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
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
DettagliEsercitazione 12. Esercizi di Ricapitolazione
Esercitazione 12 Esercizi di Ricapitolazione Esercizio Scrivere un programma che, dato un numero intero positivo, stampa la sua rappresentazione binaria. ALGORITMO Scriviamo una procedura stampa_bin che,
DettagliUnità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.
Unità Didattica 1 Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C UNIX (1969) - DEC PDP-7 Assembly Language BCPL - un OS facilmente accessibile che fornisce potenti strumenti
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
DettagliSintassi: Per la dichiarazione di variabili dei tipi fondamentali:
Sintassi: Per la dichiarazione di variabili dei tipi fondamentali: declaration ::= type declarator list ; declarator list ::= declarator {, declarator} opt declarator ::= identif ier identif ier = initializer
DettagliProgrammazione I - Laboratorio
Programmazione I - Laboratorio Esercitazione 3 - Array Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti di.unipi.it 2. Dipartimento
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ò
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
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
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
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
DettagliTipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.
Tipi di dato Le variabili in C KP Cap.3 pp.95-129 Cap.5 pp.190-193 DD Cap. 9 pp.352-355 Abbiamo già parlato delle variabili, ed abbiamo fin ora usato il tipo int, ma abbiamo molte altre possibiltà I tipi
DettagliEsercizi Programmazione I
Esercizi Programmazione I 9 Novembre 201 Esercizio 1 Valutare e dare il tipo delle seguenti espressioni condizionali. 1 char a= a, b= b ; // a ha v a l o r e decimale 97 2 i n t i= 1, j= 2 ; 3 double x=
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
DettagliNon 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
DettagliLIBRERIE STANDARD in C. LIBRERIE STANDARD in C
LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
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
DettagliTipi di dato semplici
Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma
DettagliALGORITMI E STRUTTURE DATI
ALGORITMI E STRUTTURE DATI Esercitazioni AndreA Orlandini http://www.dia.uniroma3.it/~orlandin/asd/ e-mail: orlandin@dia.uniroma3.it Orario di ricevimento: Martedì 14.00-16.00 Introduzione al C + Array
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
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi
Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147-00161 Roma Università degli Studi La Sapienza Fondamenti di
DettagliTempo di vita e scope delle variabili
Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 27 novembre 2007 In C una stringa è rappresentata da una sequenza di caratteri terminante con il carattere nullo \0 il cui valore è
DettagliImplementazione dell albero binario in linguaggio C++
Implementazione dell albero binario in linguaggio C++ Costruire il programma per gestire le operazioni su un albero binario. Ogni nodo dell albero contiene un codice e una descrizione; il programma deve
DettagliAPPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2013 2014 20.VI.2014
APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO 2013 2014 20.VI.2014 VINCENZO MARRA Indice Esercizio 1 1 Leggere stringhe e caratteri 1 Esercizio 2 2
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliCorso sul linguaggio C Modulo Tipi di dato
Corso sul linguaggio C Modulo 1 1.3 - Tipi di dato 1 Prerequisiti Concetto di espressione Cenni sulla struttura del calcolatore 2 1 Introduzione In questa lezione si esaminano i tipi di dato. I tipi di
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliBreve riepilogo della puntata precedente:
Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta
DettagliProgrammare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi
MASTER Information Technology Excellence Road (I.T.E.R.) Programmare in C Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di Dati Valori Un insieme
DettagliEsercizi di programmazione in C
Esercizi di programmazione in C Esercizio 1 Scrivere un programma in linguaggio C che legga da tastiera una sequenza di lunghezza ignota a priori di numeri interi positivi. Il programma, a partire dal
DettagliPuntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a
Puntatori in C Puntatori Variabili tradizionali indirizzo int a = 5; A00E... Proprietà della variabile a: nome: a A010 A012 5 tipo: int A014 valore: 5 indirizzo: A010 Finora abbiamo usato solo le prime
Dettagli<programma> ::= {<unità-di-traduzione>} <main> {<unità-di-traduzione>}
STRUTTURA DI UN PROGRAMMA C In prima battuta, la struttura di un programma C è definita nel modo seguente: ::= {} {} Intuitivamente un programma
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
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
DettagliUna procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi " non c#è tipo di ritorno!
Una procedura permette di#! dare un nome a una istruzione#! rendendola parametrica!! non denota un valore, quindi non c#è tipo di ritorno! void void p(int ) { = * 2; printf( %d, ); Una procedura è un componente
Dettagli