I puntatori. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "I puntatori. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata."

Transcript

1 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 usualmente rappresentato in notazione esadecimale. Il C ci permette di conoscere tale indirizzo, ovvero di determinare dove la variabile sia stata effettivamente memorizzata. Questo significa che per leggere/scrivere il valore di una variabile possiamo usare due metodi: usare il nome della variabile int var1; var1 = 8; usare l'indirizzo della variabile int var1; int *ptvar1; ptvar1 = &var1; *ptvar1 = 8; Esercizio: a. Rendiamo disponibili al codice delle celle di memoria (ovvero dichiariamo delle variabili), in modo tale che sia legale (->autorizzato) l'accesso da parte del programma a tali aree della memoria. b. Determiniamo quale sia l'indirizzo di tali aree e visualizziamolo c. d. Memorizziamo un valore nelle celle di memoria, ovvero inizializziamo le variabili. Effettuiamo tale operazione sia utilizzando il nome delle variabili che il corrispondente indirizzo. Ora che sappiamo determinare l'indirizzo di una variabile, verifichiamo che gli elementi di un array si trovano, all'interno della memoria del calcolatore, uno adiacente all'altro.

2 Nello svolgere l'esercizio ricordiamo che: La dichiarazione di una variabile equivale automaticamente a riservare un'area di memoria. Le dimensioni di tali area sono pari a quelle richieste per memorizzare il tipo di variabile considerato; l'area di memoria possiede un indirizzo. Quindi dichiarare una variabile implica automaticamente che sia possibile utilizzare l'indirizzo di tale variabile per accedere ad una parte della memoria. La dichiarazione di una variabile di tipo puntatore implica che venga riservato dello spazio in memoria per tale variabile ma NON IMPLICA che all'indirizzo contenuto in tale variabile sia presente un'area di memoria cui il programma è autorizzato ad accedere. Riassumendo: utilizzare una variabile non inizializzata non è una cosa dannosa, usare un puntatore non inizializzato è una cosa MOLTO pericolosa. /* Inizio dell'esercizio */ #include <stdio.h> int main() { /* dichiaro le variabili -> rendo disponibili delle aree di memoria */ int intero; double doppiodecimale; char vettore[10]; /* dichiaro i puntatori */ int *PtInt; double *PtDouble; char *PtChar; /* PRIMA inizializzo il puntatore e POI lo utilizzo per assegnare un valore alla variabile cui esso fa riferimento */

3 PtDouble = & doppiodecimale; *(PtDouble) = 4.5; *(PtInt) = 34; /* ERRORE! memorizzo un valore in un'area di memoria senza essere stato autorizzato ad accedervi. Il puntatore PtInt, infatti, non è stato ancora inizializzato */ PtInt = & intero; /* ok! */ *(PtInt) = 34; /* Visualizziamo i valori delle variabili ed i loro indirizzi */ printf("\n Il valore dell'intero e\' %d", *PtInt ); printf("\n Il valore del double e\' %f", *PtDouble ); printf("\n L'indirizzo della cella di memoria dell'intero e\' %p", PtInt ); printf("\n L'indirizzo della cella di memoria del double e\' %p", PtDouble ); /* Il valore dell'intero è rappresentato in modo diverso dal valore del double? L'indirizzo della variabile di tipo intero è rappresentato in modo diverso dal valore dell'indirizzo della variabile di tipo double? */ /* visualizzo la dimensione in byte delle aree occupate dalle variabili per fare questo uso l'operatore sizeof() che restituisce la dimensione, in byte, della variabile o del tipo che viene inserito tra le parentesi dell'operatore stesso. */ /* in questo caso il parametro è un "tipo di variabile" */ printf("\nla dimensione in byte di un int e\' %d",sizeof(int)); /* in questo caso il parametro è il nome di una variabile */ printf("\nla dimensione in byte di un int e\' %d",sizeof(intero)); /* il risultato è il medesimo, 4 */ printf("la dimensione in byte di un double e\' %d",sizeof(double)); printf("la dimensione in byte di un double e\' %d",sizeof(doppiodecimale)); /* E per i puntatori? Osservo delle differenze? */ printf("le dimensioni dei due puntatori sono %d e %d",sizeof(ptint),sizeof(ptdouble)); printf("\n Visualizziamo gli indirizzi degli elementi dell'array di char");

4 for( intero = 0; intero < 10; intero ++) {PtChar = & ( vettore[intero] ) ; printf("\n L'indirizzo dell'elemento con indice %d e\' %p",intero,ptchar);} return 0;} /* Attenzione: nell'esempio precedente con una variabile di tipo puntatore sono stati visualizzati gli indirizzi di TUTTI gli elementi dell'array. Quindi, la variabile di tipo puntatore è del tutto indipendente dalla variabile di cui contiene l'indirizzo. */ /* Fine dell'esercizio */ Ecco l'output del programma: Il valore dell'intero e' 34 Il valore del double e' L'indirizzo della cella di memoria dell'intero e' 0022FF74 L'indirizzo della cella di memoria del double e' 0022FF68 La dimensione in byte di un int e' 4 La dimensione in byte di un int e' 4 La dimensione in byte di un double e' 8 La dimensione in byte di un double e' 8 Le dimensioni dei due puntatori sono 4 e 4 Visualizziamo gli indirizzi degli elementi dell'array di char L'indirizzo dell'elemento con indice 0 e' 0022FF51 L'indirizzo dell'elemento con indice 1 e' 0022FF52 L'indirizzo dell'elemento con indice 2 e' 0022FF53 L'indirizzo dell'elemento con indice 3 e' 0022FF54 L'indirizzo dell'elemento con indice 4 e' 0022FF55 L'indirizzo dell'elemento con indice 5 e' 0022FF56 L'indirizzo dell'elemento con indice 6 e' 0022FF57 L'indirizzo dell'elemento con indice 7 e' 0022FF58 L'indirizzo dell'elemento con indice 8 e' 0022FF59 L'indirizzo dell'elemento con indice 9 e' 0022FF5A

5 Nell'esercizio, il valore di una variabile è stato modificato grazie alla conoscenza dell'indirizzo di tale variable. Questa metodologia viene sfruttata per gestire l'input da tastiera da gran parte delle funzioni della libreria standard (-> stdio.h). int scanf("stringa di formato",...) La funzione scanf() permette di gestire l'input l'input da tastiera in modo più flessibile rispetto alla funzione getchar(). Infatti, mentre con quest'ultima funzione potevamo passare al programma solo dei caratteri, con la funzione scanf() è possibile passare al programma un valore appartenente ad uno qualsiasi dei quattro tipi fondamentali. Come nel caso di getchar(), anche scanf() fa uso del buffer per gestire l'input della tastiera (-> dobbiamo premere il tasto ENTER per poter passare al programma il valore scritto sulla tastiera). La dichiarazione è molto simile a quella adottata per printf(): nella stringa di formato compaiono gli specificatori di formato che indicano al programma come effettuare la conversione dei caratteri inseriti nel buffer di input. Dopo la stringa di formato non compaiono i nomi delle variabili in cui intendiamo memorizzare il valore ma i corrispondenti indirizzi. Facciamo un esempio: supponiamo di voler leggere un float dalla tastiera. float numero; printf("inserisci un numero decimale :"); scanf("%f", & numero ); /* supponiamo che l'utente inserisca 3.5 e poi schiacci invio */ numero = numero + 4.; /* ora numero vale 7.5 */ ATTENZIONE: per la lettura dei double usare lo specificatore %lf, non %f double prova; printf("inserisci un numero decimale :"); scanf("%lf", & prova ); Perché serve inserire uno specificatore di formato? Per capirlo dobbiamo ricordarci una cosa: il buffer di input è costituito da CARATTERI!!

6 Supponiamo che all'utente sia stato richiesto di inserire un numero intero: int intero=0; printf("inserisci un numero intero"); scanf("%d",& intero); /* a questo punto il buffer viene riempito dall'utente il quale inserisce */ '1' '2' '3' '4' '5' 'LF' Quando il programma va a leggere dal buffer, tenta di interpretare quei caratteri come se fossero quelli che compongono un numero intero; nel caso specifico, la sequenza di caratteri viene convertita nel numero intero Una cosa simile succede se tentiamo di inserire un double double numero=0.0; printf("inserisci un numero decimale in doppia precisione "); scanf("%lf",& numero); /* a questo punto il buffer viene riempito dall'utente il quale inserisce */ '3' '4' '.' '2' '5' '4' '4' 'LF' La sequenza di caratteri è la seguente: 34, poi c'è il punto, e poi Il programma interpreta i due raggruppamenti di cifre separati dal punto come la parte intera e quella decimale di un numero decimale. Quindi ciò che sta nel buffer di imput viene preso e convertito nel numero DA EVITARE: attenzione, mai fare una cosa di questo tipo:

7 int valore; scanf("inserisci il valore %d",& valore); Se scrivete un'istruzione di questo tipo e volete passare il valore 32 allora, quando la funzione scanf() aspetta che voi inseriate l'input, dovete scrivere inserisci il valore 32 in quanto deve esserci una esatta corrispondenza tra i caratteri della stringa di scanf() e quelli inseriti dall'utente. Se viceversa inserite solo 32, la variabile valore non viene inizializzata in modo corretto. E' meglio quindi usare due istruzioni: int valore printf("inserisci il valore :"); scanf("%d",& valore); Esempio di utilizzo di scanf(): a. b. c. d. dichiarare un array di 30 elementi di tipo float usando la funzione scanf(), inizializzare il generatore di numeri casuali (srand()) chiedere all'utente quanti sono gli elementi dell'array che verranno inizializzati "manualmente" (ovvero inserendo dei valori dalla tastiera con la funzione scanf()) Inizializzare i rimanenti elementi dell'array con numeri casuali /* inizio codice */ #include <stdio.h> #include <stdlib.h> int main() { float vettore[30]; int i, inizializza; int *PtInt; float *PtFloat; float temp; /* assegno alla variabile inizializza il valore con cui inizializzare rand() */ printf("inserisci un numero intero per inizializzare rand():"); scanf("%d",& inizializza); srand( inizializza ) ;

8 /* assegno al puntatore l'indirizzo della variabile inizializza */ PtInt = & inizializza; printf("quanti elementi vuoi inizializzare a mano?"); scanf("%d", PtInt ); /* assegno al puntatore l'indirizzo della variabile temp*/ PtFloat = & temp; for(i=0; i< inizializza ;i++) {printf("\n Inserisci un valore decimale: "); scanf("%f",ptfloat); /* altero il valore di temp usando il puntatore */ vettore[i] = temp; /* assegno il valore di temp all'elemento dell'array */ } for(i = inizializza; i < 30 ; i++) vettore[i] = 300.0*rand() / RAND_MAX ; /* visualizzo i valori inseriti */ } for(i = 0; i< 30; i++) printf("\n Il valore nella posizione %d e\' pari a %f",i,vettore[i]); /* fine codice */ Riscriviamo il ciclo in cui ciascun elemento dell'array viene inizializzato a mano: Versione iniziale: PtFloat = & temp; for(i=0; i< inizializza ;i++) {printf("\n Inserisci un valore decimale: "); scanf("%f",ptfloat); /* altero il valore di temp usando il puntatore */ vettore[i] = temp; /* assegno il valore di temp all'elemento dell'array */ } Nuova versione for(i=0; i< inizializza ;i++) {PtFloat = & (vettore[i]) ; /* ogni elemento dell'array ha il suo indirizzo */ printf("\n Inserisci un valore decimale: ");

9 scanf("%f",ptfloat); /* altero il valore di vettore[i] usando il puntatore */ } Esercizio. Prendendo spunto da quanto visto nell'esercizio dellezione 8, scrivere un programma in cui: 1. venga chiesto all'utente di inserire un numero intero per inizializzare il generatore di numeri casuali (srand()). Tale valore va memorizzato usando una variabile di tipo puntatore ad intero. Una volta memorizzato il valore, esso va passato alla funzione srand() (utilizzando sempre una variabile di tipo puntatore ad intero) 2. si dichiari un array di elementi di tipo double (fissare la dimensione di tale array utilizzando la direttiva #define) 3. si inizializzino tutti gli elementi dell'array di valori di tipo double generando numeri casuali compresi tra 0 e 100. L'inizializzazione va fatta assegnando il valore ad una variabile di tipo puntatore a double. 4. si implementi un costrutto iterativo (while() o for()) per effettuare le seguenti operazioni a. b. Chiedere all'utente se vuole inserire un valore decimale. Se l'utente inserisce il carattere 's' allora continuare con gli altri punti; se l'utente inserisce il carattere 'n' allora uscire dal ciclo. Confrontare tale numero con TUTTI i valori contenuti nell'array. Se il numero inserito coincide con uno dei valori presenti nell'array, allora visualizzare un messaggio per informare l'utente della cosa e poi terminare il ciclo. Se, viceversa, il numero inserito non è uguale a nessun numero presente nell'array, allora ripartire dal punto a. NOTA: utilizzando la funzione scanf(), il valore inserito dall'utente deve essere memorizzato servendosi di una variabile di tipo puntatore a double. Allo stesso modo, i confronti tra i valori degli elementi dell'array di double ed il valore inserito dall'utente devono essere gestiti mediante variabili di tipo puntatore a double.

Le 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? 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

Dettagli

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int

Gli 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

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

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

Dettagli

Il buffer di input. In questo modo, tutte le chiamate alla funzione permetteranno all'utente di inserire caratteri.

Il buffer di input. In questo modo, tutte le chiamate alla funzione permetteranno all'utente di inserire caratteri. Il buffer di input In C, l'input fornito dall'utente viene gestito mediante un buffer; nel buffer vengono inseriti i caratteri premuti dall'utente sulla tastiera e, a chiusura del buffer, viene aggiunto

Dettagli

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria. 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

Dettagli

Lettura da tastiera e scrittura su monitor

Lettura 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

Dettagli

I puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;}

I puntatori /2. Ad esempio. // inizio codice. #include <stdio.h> void mostra(int); int main() {int a = 10; mostra(a); return 0;} I puntatori /2 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 il parametro stesso nel

Dettagli

Prof. G. Ascia. I puntatori. Fondamenti di Informatica

Prof. 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

Dettagli

Array. Aggragati di variabili omogenee...

Array. Aggragati di variabili omogenee... Array Aggragati di variabili omogenee... Cosa è un array È un insieme di variabili omogenee identificato da un indice, ad esempio Se devo leggere 1 numeri dallo standard input e memorizzarli all'interno

Dettagli

Tipi derivati: Array

Tipi derivati: Array Tipi derivati: Array Array Gli array (o vettori) sono composti da elementi omogenei (cioè hanno tutti lo stesso tipo base) ogni elemento è identificato all'interno dell'array da un numero d ordine detto

Dettagli

Associazione Variabile-Indirizzo

Associazione 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

Dettagli

Rappresentazione binaria delle variabili (int e char)

Rappresentazione 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

Dettagli

Costruiamo un programma per crittografare del testo

Costruiamo un programma per crittografare del testo Costruiamo un programma per crittografare del testo Per codificare un messaggio in modo tale che il suo testo non risulti leggibile a persone che non siano in possesso dell'opportuna procedura di decodifica,

Dettagli

da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra */

da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra */ Precisazione: int da_costruire = 0; da_costruire = da_costruire ^ 1; /* inserisco un bit nella prima posizione a destra -> 0000000000000001 (da_costruire vale 1) da_costruire = 0; da_costruire = da_costruire

Dettagli

i Vettori Alessandra Giordani Lunedì 15 aprile

i Vettori Alessandra Giordani Lunedì 15 aprile i Vettori Alessandra Giordani agiordani@disi.unitn.it Lunedì 15 aprile 2013 http://disi.unitn.it/~agiordani/ Dichiarazione di un Array La dichiarazione di un array di n elementi di tipo T causa l'allocazione

Dettagli

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine) La copia di un file Nell'esercizio di oggi cerchiamo di implementare un programma che permetta di effettuare la copia di un file di testo. L'operazione di copia, oltre a permettere di creare un nuovo file

Dettagli

Introduzione al C. Lez. 2 Funzioni e Puntatori

Introduzione 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

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 9 Lezione 9 1 Il linguaggio C Istruzioni di input/output Arrays La funzione printf() La funzione printf() consente di mostrare sullo standard output (normalmente

Dettagli

Esercitazione 6. Array

Esercitazione 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

Dettagli

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Università 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

Dettagli

INPUT E OUTPUT DI VALORI NUMERICI

INPUT E OUTPUT DI VALORI NUMERICI INPUT E OUTPUT DI VALORI NUMERICI FUNZIONI DI I/O PER NUMERI Per utilizzare le funzioni di Input/Output bisogna includere il file di intestazione (header file) denominato contiene la

Dettagli

Indovina la lettera...

Indovina 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

Dettagli

T = { D, {F 1,...,F n }, {P 1,...,P m } }

T = { 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

Dettagli

IEIM Esercitazione II Elementi di programmazione C. Alessandro A. Nacci -

IEIM Esercitazione II Elementi di programmazione C. Alessandro A. Nacci - IEIM 2017-2018 Esercitazione II Elementi di programmazione C Alessandro A. Nacci alessandro.nacci@polimi.it - www.alessandronacci.it 1 Esercizio 4 Dati un numero, stampare il primo numero successivo pari

Dettagli

I PUNTATORI PARTE I. Manuale linguaggio C

I PUNTATORI PARTE I. Manuale linguaggio C I PUNTATORI PARTE I Manuale linguaggio C I puntatori Una variabile è un'area di memoria alla quale è associato un nome simbolico, scelto dal programmatore. Tale area di memoria è grande quanto basta per

Dettagli

Introduzione al C. Lez. 2. Funzioni e Puntatori

Introduzione 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

Dettagli

Puntatori e array. Tipo puntatore Vettori

Puntatori e array. Tipo puntatore Vettori Puntatori e array Tipo puntatore Vettori I puntatori un puntatore si definisce scrivendo il tipo cui si punta, l'asterisco e il nome della variabile esempi di dichiarazione: int *ptr1, *ptr2; un puntatore

Dettagli

Gli Array. Dichiarazione di un array

Gli 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

Dettagli

Variabili e input/ Alessandra Giordani Lunedì 18 marzo

Variabili e input/ Alessandra Giordani Lunedì 18 marzo Variabili e input/ output da tastiera Alessandra Giordani agiordani@disi.unitn.it Lunedì 18 marzo 2013 http://disi.unitn.it/~agiordani/ Es. compilazione helloworld.c 2 Variabili e valori Una variabile

Dettagli

TIPI DI DATO. T = { D, {F 1,...,F n }, {P 1,...,P m } } Un tipo di dato T è definito come:

TIPI DI DATO. T = { D, {F 1,...,F n }, {P 1,...,P m } } Un tipo di dato T è definito come: 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 di predicati P 1,..,P m sul dominio D T = { D, {F 1,...,F n }, {P 1,...,P

Dettagli

I CARATTERI E LE STRINGHE

I 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

Dettagli

Variabili intere, funzioni e input/ Alessandra Giordani Lunedì 19 marzo

Variabili intere, funzioni e input/ Alessandra Giordani Lunedì 19 marzo Variabili intere, funzioni e input/ output da tastiera Alessandra Giordani agiordani@disi.unitn.it Lunedì 19 marzo 2012 http://disi.unitn.it/~agiordani/ Variabili e valori Una variabile è un nome logico

Dettagli

Università degli Studi di Ferrara

Università degli Studi di Ferrara Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2018 2019 Programmazione Lezione 8 Esercizi in C Docente: Michele Ferrari - michele.ferrari@unife.it Informazioni Docente di supporto

Dettagli

Concetti chiave. Gli Array o Vettori. Array Elementi dell array Indici e lunghezza dell array Inizializzazione di vettori Array multidimensionali

Concetti chiave. Gli Array o Vettori. Array Elementi dell array Indici e lunghezza dell array Inizializzazione di vettori Array multidimensionali Concetti chiave Gli Array o Vettori Array Elementi dell array Indici e lunghezza dell array Inizializzazione di vettori Array multidimensionali Fino ad ora abbiamo utilizzato variabili scalari, ossia riferite

Dettagli

Esercizio 1: media di numeri reali (uso funzioni e struct)

Esercizio 1: media di numeri reali (uso funzioni e struct) Esercitazione Fondamenti di Informatica B Corso di Laurea in Ingegneria Meccanica 5 Esercitazione: 2 novembre 2005 Esercizi sulle funzioni Esercizio 1: media di numeri reali (uso funzioni e struct) Le

Dettagli

Input/Output di numeri

Input/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

Dettagli

IL PRIMO PROGRAMMA IN C

IL 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

Dettagli

Cosa serve per cominciare?

Cosa serve per cominciare? Cosa serve per cominciare? La linea di comando Il notepad (o equivalente) Saper scrivere qualcosa a video da programma risultato dell elaborazione elaborazione Ma come si fa?! 1 Input / Output L'immissione

Dettagli

Struttura dei programmi C

Struttura 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

Dettagli

Variabili e Istruzioni

Variabili 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

Dettagli

Riepilogo della puntata precedente

Riepilogo della puntata precedente Riepilogo della puntata precedente Da quanto detto la volta scorsa, la scelta di passare un array mediante un puntatore è giustificata solo dal risparmio, in termini di memoria, che tale scelta comporta.

Dettagli

Input/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. 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

Dettagli

Fondamenti di Informatica T. Linguaggio C: i puntatori

Fondamenti di Informatica T. Linguaggio C: i puntatori Linguaggio C: i puntatori Il puntatore E` un tipo di dato, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un insieme

Dettagli

Gli array Libro cap. 6 Moreno Marzol a Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Gli array Libro cap. 6 Moreno Marzol a Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna Gli array Libro cap. 6 Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Array 2 Ringraziamenti prof. Stefano Mizzaro, Università

Dettagli

Breve riepilogo della puntata precedente:

Breve 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

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 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

Dettagli

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri.

Le strutture /3. Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri. Le strutture /3 Riprendiamo ora la struttura definita alcune lezioni fa e completiamo il set di funzioni che servono per gestire un elenco di libri. typedef struct {char titolo[200]; char autore[100];

Dettagli

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

Applicando 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

Dettagli

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) { JAVA C import javautil*; public static class test { private int variable; public void main (String[] args) { variable = 0; Systemoutprintln( Variable is: + variable); #include int variable; int

Dettagli

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti Funzioni di I/O per numeri 2 Input e output di valori numerici Ver. 2.4.2 2012 - Claudio Fornaro - Corso di programmazione in C Per utilizzare le funzioni di Input/Output bisogna includere il file di intestazione

Dettagli

Dichiarazioni e tipi predefiniti nel linguaggio C

Dichiarazioni e tipi predefiniti nel linguaggio C Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:

Dettagli

Il generatore di numeri casuali

Il 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

Dettagli

PUNTATORI. Introduzione. puntatore. L operatore

PUNTATORI. 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

Dettagli

Ingresso ed Uscita in C. Informatica 1 / 15

Ingresso ed Uscita in C. Informatica 1 / 15 Ingresso ed Uscita in C Informatica 1 / 15 Input e Output in C Linguaggio C: progettato per essere semplice e con poche istruzioni Non esistono istruzioni di ingresso / uscita (I/O)!!! Ingresso ed uscita

Dettagli

Esercitazione di Reti degli elaboratori

Esercitazione di Reti degli elaboratori Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione

Dettagli

Compito A. Compito A Sintesi (main(

Compito 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

Dettagli

Corso sul linguaggio C

Corso sul linguaggio C Corso sul linguaggio C Modulo 1 1.1 Istruzioni semplici 1 Prerequisiti Saper progettare algoritmi Saper descrivere algoritmi (NLS, ddf) Conoscere il concetto di espressione 2 1 Introduzione In questa lezione

Dettagli

ESERCIZIO: SHIFT ARRAY (1)

ESERCIZIO: SHIFT ARRAY (1) ARRAY E STRINGHE ARRAY ESERCIZIO: SHIFT ARRAY (1) Utilizzando le funzioni scrivere un programma che: genera una sequenza di N = 20 numeri interi e li memorizza in un array ( riempi_array( )) visualizza

Dettagli

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Stringhe 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

Dettagli

Alla variabile pi verrà assegnato come valore l'indirizzo di una variabile di tipo int:

Alla variabile pi verrà assegnato come valore l'indirizzo di una variabile di tipo int: I puntatori Le variabili di tipo puntatore sono variabili che hanno come valore l'indirizzo di altre variabili. Consideriamo le seguenti dichiarazioni di variabili di tipo puntatore: char* pc; double*

Dettagli

Corso di Informatica A.A

Corso 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

Dettagli

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione Primi esempi di programmi Il tipo int Le variabili Altri tipi interi Operatori di assegnazione Il tipo int Un int permette di trattare numeri interi 4 byte (32 bit) con la tecnica del complemento a 2 (ma

Dettagli

Linguaggio C: Array Valeria Cardellini

Linguaggio C: Array Valeria Cardellini Linguaggio C: Array Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Array in C q Dichiarazione

Dettagli

Stringhe in C. Emilio Di Giacomo

Stringhe in C. Emilio Di Giacomo Stringhe in C Emilio Di Giacomo Stringhe Una stringa è una sequenza finita di caratteri Le stringhe sono un tipo di dati talmente importante e utile che fanno parte di quasi tutti i linguaggi di programmazione

Dettagli

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. Esercizio 1 Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media. #include Esercizio 1 - Soluzione int main() int num1, num2, num3, somma; float

Dettagli

Input/Output su disco

Input/Output su disco Input/Output su disco In C, la gestione dei dispositivi di lettura (tastiera, file su disco,...) e scrittura (monitor, file su disco, stampante,...) viene effettuata mediante canali di comunicazione. Tali

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione 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ì

Dettagli

Puntatori : idea di base

Puntatori : idea di base Puntatori 2 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo dell'area di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50; /* una var intera */ Puntatori

Dettagli

Linguaggio 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 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

Dettagli

La gestione dei caratteri in C

La 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

Dettagli

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio

RICORSIONE, PUNTATORI E ARRAY. Quarto Laboratorio RICORSIONE, PUNTATORI E ARRAY Quarto Laboratorio 16 DICEMBRE 2011 SCADENZA TERZA ESERCITAZIONE FUNZIONI RICORSIVE ESERCIZIO Scrivere una funzione ricorsiva che, assegnati due interi N1 ed N2, restituisca

Dettagli

Struttura dei programmi e Variabili

Struttura dei programmi e Variabili Linguaggio C Struttura dei programmi e Variabili 1 La struttura generale dei programmi! Struttura del programma: Direttive Funzioni Dichiarazioni Istruzioni Di assegnamento direttive Di ingresso e uscita

Dettagli

Introduzione al C. Esercitazione 3. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica

Introduzione al C. Esercitazione 3. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria Clinica Corso di Fondamenti di Informatica Ingegneria Clinica Domenico Daniele Bloisi Informazioni Generali ing. Domenico Daniele Bloisi Dipartimento di Informatica e Sistemistica Stanza B213, secondo piano Via

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Università degli Studi di Ferrara

Università degli Studi di Ferrara Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2018-2019 Programmazione Lezione 10 Esercizi in C Docente: Michele Ferrari - michele.ferrari@unife.it Nelle lezioni precedenti Abbiamo

Dettagli

Esercizi. La funzione swapint() primo tentativo

Esercizi. 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

Dettagli

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main() Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione 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

Dettagli

Introduzione ai puntatori in C Definizione

Introduzione 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

Dettagli

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio I/O da tastiera + costrutti while e if Alessandra Giordani agiordani@disi.unitn.it Lunedì 2 maggio 2011 http://disi.unitn.it/~agiordani/ Ripasso funzione printf() Usata per stampare il contenuto di una

Dettagli

Corso di Laboratorio di Sistemi Operativi A.A

Corso di Laboratorio di Sistemi Operativi A.A Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 9 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche e

Dettagli

Lezione di Laboratorio di Prgrammazione: /04/2019 a.a. 2018/2019 R.Prevete

Lezione di Laboratorio di Prgrammazione: /04/2019 a.a. 2018/2019 R.Prevete Lezione di Laboratorio di Prgrammazione: 15 09/04/2019 a.a. 2018/2019 R.Prevete Dati aggregati: struct Dicharazione di struttura con identificatore: struct { ;

Dettagli

Puntatori (in C) Emilio Di Giacomo

Puntatori (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

Dettagli

Lo scopo. Il primo esperimento. Soluzione informale. Le variabili

Lo scopo. Il primo esperimento. Soluzione informale. Le variabili Lo scopo 2 Il primo esperimento 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 Ver. 2.4

Dettagli

I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni I Vettori (Array) Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Variabili I tipi di variabili che abbiamo usato finora hanno la caratteristica comune di non essere strutturate: ogni

Dettagli

Introduzione al linguaggio C

Introduzione al linguaggio C Linguaggio C Introduzione al linguaggio C Sistemi di sviluppo integrati Noti anche come IDE: Integrated Development Environment Un pacchetto software che permette di scrivere, preprocessare, compilare,

Dettagli

puntatori Lab. Calc. AA 2006/07 1

puntatori Lab. Calc. AA 2006/07 1 puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:

Dettagli

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine

Dettagli

Esercizio 1: calcolo insieme intersezione

Esercizio 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

Stringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14

Stringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14 Stringhe in C Nicu Sebe Informatica Nicu Sebe 1 / 14 Stringhe in C Stringhe: tipo di dato strutturato Sequenze di caratteri Linguaggio C: progettato per la semplicità No supporto nativo per le stringhe

Dettagli

Introduzione al C. Lez. 1 Elementi

Introduzione 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

I 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 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

Dettagli