1 Automi Cellulari (Rev )

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "1 Automi Cellulari (Rev. 2.0.3)"

Transcript

1 1 Automi Cellulari (Rev ) Gli automi cellulari sono una classe di modelli introdotti originariamente da von Neumann e Ulam nel 1948 come una semplice idealizzazione dell evoluzione delle cellule a livello cellulare. Un automa cellulare può essere pensato come un insieme di cellette il cui stato può assumere un numero finito di stati discreti. Nell ipotesi più semplice la celletta può trovarsi in soli due stati: 1 celletta viva o 0 celletta morta. Lo stato delle singole cellette cambia nel tempo a seconda dello stato delle cellette vicine. Ad esempio se ci sono troppe cellette vicine vive, la celletta muore. Questi modelli sono un tipico esempio del processo di riduzione utilizzato in fisica nell analisi di sistemi complessi. Il punto di partenza è che fenomeni complicati possano essere originati da poche leggi semplici. Sotto questa ipotesi, si cercano quindi modelli semplici che basati su queste leggi riproducano il comportamento dei sistemi più complicati. Al di là della loro rilevanza fisica e/o biologica, questi modelli sono un esempio di un sistema dinamico discreto che può essere simulato esattamente su un computer. Più in dettaglio un automa cellulare è un sistema dinamico in cui: Lo spazio è discretizzato, ossia il sistema è definito su un reticolo; Le variabili di interesse sono definite solo sui siti del reticolo e possono assumere solo una sequenza discreta di valori; Il tempo è discreto per cui l evoluzione avviene ad intervalli regolari; Lo stato delle variabili su ogni sito cambia ad ogni intervallo di tempo con una regola locale che dipende solo dallo stato del sito e dei suoi vicini. L evoluzione è parallela, ossia il valore delle variabili viene cambiato simultaneamente in tutti i siti. A causa della sua origine biologica spesso i siti di un automa cellulare sono chiamati celle, noi useremo indifferentemente il nome cella o sito. Gli automi cellulari trovano una vasta applicazioni in molti campi della fisica che vanno dalla fluidodinamica alle galassie. Automi Cellulari Unidimensionali L esempio più semplice di automa cellulare sono gli automi cellulari Booleani Unidimensionali in cui i vicini di un sito sono il sito immediatamente a sinistra e quello immediatamente a destra. Le variabili definite su ogni sito possono assumere solo due valori (automa Booleano) che per comodità, e senza perdere di generalità, vengono indicati con 0 e 1. L automa di evolve nel tempo con una regola di evoluzione definita associando ad ogni configurazione di un sito e dei suoi due primi vicini il nuovo stato del sito: 1

2 i 1 i i+1 t rule t+1 La regola di evoluzione può essere facilmente espressa mediante una tavola che riporti nella prima riga le possibili configurazioni dei tre siti al tempo t e nella seconda il corrispondente lo stato del sito centrale al tempo successivo t + 1, come mostra il seguente esempio t t I tre siti possono trovarsi in 8 configurazioni differenti per cui vi sono 2 8 = 256 regole diverse. Le differenti regole sono usualmente indicate con un codice numerico ottenuto scrivendo nella prima riga della tavola della regola i possibili stati dei tre siti ordinati da sinistra a destra in modo che corrispondano alla rappresentazione binaria dei numeri 7, 6, 5, 4, 3, 2, 1, 0 e leggendo la seconda riga come rappresentazione binaria di un numero decimale. Il numero cosìottenuto rappresenta il codice numerico della regola. Ad esempio nel caso della regola espressa dalla tavola precedente si ha = 90 per cui questa regola viene indicata come la regola 90. Dalla tavola si vede facilmente che questa regola equivale a prendere la somma modulo 2 dei siti vicini per cui questa è anche nota come la regola modulo 2, o regola xor perchè lo stato dello spin al tempo t + 1 è 1 solo e lo stato di uno solo dei suoi primi vicini è 1. Il seguente programma simula un automa cellulare Booleano unidimensionale. Il programma prende come input il codice numerico della regola, il numero di passi che si vuole effettuare ed informazioni sulla configurazione iniziale. Quest ultima può essere sia random che data. Programma: cell aut-1d.c /**************************************************************** - Descrizione : Simulazione di un Automa Cellulare Booleano unidimensionale con condizioni periodiche al bordo. - Input : Numeri di siti dell automa Codice numerico regola Passi di evoluzione temporale 2

3 Configurazione iniziale random: seed e probabilita stato 1 Configurazione iniziale data posizioni siti con stato 1 - Output : Sul file OUT_F siti con stato 1 versus tempo - Parametri : OUT_F -> File output - $Id: cell_aut -1d.c v AC *****************************************************************/ #include <s t d i o. h> # include <math. h> #include <s t d l i b. h> /* Macros */ #define OUT F "cell_aut.dat" /* sito automa cellulare */ typedef unsigned short int cell_t ; /* automa cellulare */ typedef struct unsigned int size ; /* numero sito automa */ cell_t site ; /* puntatore al primo sito */ cellular_t ; /* Prototipi */ cell_t create_site ( int n ) ; void table_rule ( cell_t rule, cell_t rule_code ) ; void bit_to_str ( char str, int nchar, int n ) ; void init_state ( cellular_t aut, unsigned long seed ) ; void update_state ( cellular_t aut, cell_t rule ) ; int main ( void ) int i ; /* indice sito automa */ int n_step ; /* # intervalli temporali */ int step ; /* contatore passi temp */ cellular_t automata ; /* automa cellulare */ cell_t rule [ 8 ] ; /* tavola regola */ cell_t rule_code ; /* codice numerico regola */ unsigned long seed ; /* seme generatore n. r. */ char line [ 8 1 ] ; /* input buffer */ FILE fp ; /* puntatore file out */ /* Automa */ automata = ( cellular_t ) malloc ( sizeof ( cellular_t ) ) ; 3

4 if ( automata == NULL ) fprintf ( stderr, " Non enough space for automata\n" ) ; return 1 ; /* Parametri Automa */ printf ( "Numero siti automa : " ) ; sscanf ( line, "%ud", &automata >size ) ; printf ( " Codice numerico regola : " ) ; sscanf ( line, "%hu", &rule_code ) ; printf ( "Passi temporali : " ) ; sscanf ( line, "%d", &n_step ) ; printf ( " Seed condizione iniziale (== 0 fissa) : " ) ; sscanf ( line, "%lu", &seed ) ; /* Tavola della regola */ table_rule ( rule, rule_code ) ; /* Variabili sul reticolo */ automata >site = create_site ( automata >size ) ; /* Inizializzazione Automa */ init_state ( automata, seed ) ; /* File di output */ fp = fopen ( OUT_F, "w" ) ; if ( fp == NULL ) fprintf ( stderr, " File open failure\n" ) ; return 1 ; /* Configurazione iniziale */ for ( i = 0 ; i < automata >size ; ++i ) if ( automata >site [ i ] ) fprintf ( fp, "%d %d\n", 0, i + 1 ) ; /* Evoluzione */ for ( step = 1 ; step <= n_step ; ++step ) update_state ( automata, rule ) ; for ( i = 0 ; i < automata >size ; ++i ) if ( automata >site [ i ] ) fprintf ( fp, "%d %d\n", step, i +1); fclose ( fp ) ; 4

5 return 0 ; /* ---- * create_site() * */ cell_t create_site ( int n ) cell_t c ; c = ( cell_t ) malloc ( n sizeof ( cell_t ) ) ; if ( c == NULL ) fprintf ( stderr, " Memory allocation failure\n" ) ; exit ( 1 ) ; return c ; /* ---- * table_rule() * */ void table_rule ( cell_t rule, cell_t rule_code ) int i ; char str [ 4 ] ; /* stampa le configurazioni */ fprintf ( stdout, "tavola regola " ) ; for ( i = 7 ; i >= 0 ; i ) bit_to_str ( str, 3, i ) ; printf ( "%s ", str ) ; printf ( "\n" ) ; fprintf ( stdout, " codice %3d ", rule_code ) ; /* Tavola */ for ( i = 0 ; i <= 7 ; ++i ) rule [ i ] = rule_code & 1 ; rule_code >>= 1 ; /* stampa la tavola */ for ( i = 7 ; i >= 0 ; i ) printf ( " %1d ", rule [ i ] ) ; printf ( "\n" ) ; return ; 5

6 /* ---- * bit_to_str() * */ void bit_to_str ( char str, int nchar, int n ) int i ; unsigned int mask ; mask = 1 << ( nchar 1 ) ; for ( i = 0 ; i < nchar ; ++i ) str [ i ] = ( ( n & mask )!= 0)? 1 : 0 ; mask >>= 1 ; str [ nchar ] = \0 ; return ; /* ---- * init_state() * */ void init_state ( cellular_t aut, unsigned long int seed ) int i ; double r ; double p_one ; char line [ 8 1 ] ; if ( seed > 0) /* configurazione random */ printf ( " Configurazione random: %d siti\n", aut >size ) ; printf ( " Probabilita valore 1: " ) ; sscanf ( line, "%lf", &p_one ) ; srand ( seed ) ; for ( i = 0 ; i < aut >size ; ++i ) r = ( double ) rand ( ) / ( RAND_MAX ) ; aut >site [ i ] = ( r < p_one )? 1 : 0 ; else /* configurazione data */ for ( i = 0 ; i < aut >size ; ++i ) aut >site [ i ] = 0 ; printf ( " Configurazione data: %d siti\n", aut >size ) ; 6

7 printf ( " Specificare posizione siti 1\ n" ) ; while ( 1 ) printf ( "Posizione ( =< 0 fine): " ) ; sscanf ( line, "%d", &i ) ; if ( i < 1 i > aut >size ) break ; if (! aut >site [ i 1]) aut >site [ i 1] = 1 ; else printf ( "Sito non valido, gia scelto\n" ) ; return ; /* ---- * update_state() * */ void update_state ( cellular_t aut, cell_t rule ) int i ; /* indice sito */ int im1, ip1 ; /* indice sito a sx e dx */ int conf_index ; /* codice num conf 3 siti */ cell_t new_site ; /* nuova configurazione aut */ /* configurazione temporanea per evoluzione parallela */ new_site = create_site ( aut >size ) ; /* Usiamo condizioni periodiche al bordo */ /* Vicino a sinistra di 0 e N-1 */ /* Vicino a destra di N-1 e 0 */ for ( i = 0 ; i < aut >size ; ++i ) im1 = ( i 1 + aut >size ) % aut >size ; ip1 = ( i+1) % aut >size ; conf_index = 4 aut >site [ im1 ] + 2 aut >site [ i ] + aut >site [ ip1 ] ; new_site [ i ] = rule [ conf_index ] ; for ( i = 0 ; i < aut >size ; ++i ) aut >site [ i ] = new_site [ i ] ; free ( new_site ) ; return ; 7

8 Il programma utilizza per l automa cellulare l oggetto automata di tipo cellular t che contiene la sia il numero di celle dell automa, campo size, che il puntatore alla prima cella dell automa, campo site. Da momento che ciascuna cella può assumere solo il valore 0 o 1 le celle sono di tipo cell t definito come unsigned short int. Le celle dell automa sono create con la funzione create site() automata >site = create_site ( automata >size ) ; che alloca lo spazio di memoria per le automata->size celle dell automa e ritorna il puntatore alla prima cella. Tavola: funzione table rule() Il programma utilizza direttamente la tavola della regola che associa a ciascuna delle 8 configurazioni di tre siti consecutivi il nuovo valore del sito centrale. Questa scelta non è necessariamente la più efficiente ma sicuramente è la più flessibile. La tavola della regola è costruita dalla funzione table rule() che trasforma il codice numerico della regola nella tavola corrispondente. Interpretando lo stato di tre celle consecutive come la rappresentazione binaria di un numero intero le 8 configurazioni possibili sono identificate univocamente dal valore di un indice i = 0,..., 7 cosicchè la tavola della regola può essere facilmente codificata con l ausilio dell array di 8 elementi rule assegnando all elemento i-esimo di rule il nuovo valore del sito centrale per la configurazione dei tre siti identificata dal valore dell indice i. for ( i = 0 ; i <= 7 ; ++i ) rule [ i ] = rule_code & 1 ; rule_code >>= 1 ; Per trasformare il codice numerico della regola nella tavola si utilizza l espressione rule_code & 1 il cui valore è 0 o 1 a seconda che il primo bit a destra, quello meno significativo, di rule code sia un bit 0 o un bit 1. Gli 8 bits della rappresentazione numerica della regola vengono letti spostando successivamente a destra i bits di rule code, rule_code >>= 1 ; Dal momento che si leggono solo i primi 8 bits non ha importanza se lo shift a destra sia logico od aritmetico. Tuttavia sebbene rule code sia un tipo intero senza segno se il codice della regola viene dato in input con un segno negativo il risultato di queste operazioni dipende dalla rappresentazione utilizzata dal computer per i numeri negativi. Ad esempio nella rappresentazione in complemento a due i primi otto bits di rule code conterranno la rappresentazione in complemento a due del codice della regola mentre nella rappresentazione in true magnitude i primi otto bits conterranno la rappresentazione binaria del modulo del codice della regola. Il fatto che rule code sia letto con la direttiva di conversione %hu sscanf ( line, "%hu", &rule_code ) ; 8

9 non vuol dire infatti che un valore negativo è convertito nell equivalente valore positivo ma solo che la rappresentazione binaria del valore negativo è interpretata come la rappresentazione binaria di un valore positivo. Di conseguenza se si vuole essere certi che per il codice della regola vengano utilizzati solo valori positivi bisogna aggiungere un controllo esplicito nel programma. In alternativa agli operatori bit-a-bit si può utilizzare for ( i = 0 ; i <= 7 ; ++i ) rule [ i ] = rule_code % 2 ; rule_code /= 2 ; Anche in questo caso valgono ovviamente considerazioni analoghe alle precedenti se il codice della regola viene dato in input con un segno negativo. Per controllare che la tavola generata corrisponda alla regola voluta la funzione table rule() ne stampa il contenuto utilizzando la funzione void bit_to_str ( char str, int nchar, int n ) che converte i primi nchar bits della rappresentazione binaria del numero intero n nella stringa puntata da str. Configurazione Iniziale: funzione init state() Il programma permette di scegliere tra una configurazione iniziale random o specificata nel caso il valore del seme seed sia uguale a zero. Nel caso di configurazione random alle celle viene assegnato il valore 1 con probabilità p one for ( i = 0 ; i < aut >size ; ++i ) r = ( double ) rand ( ) / ( RAND_MAX ) ; aut >site [ i ] = ( r < p_one )? 1 : 0 ; Se il valore di seed è 0 la configurazione iniziale deve essere data specificando la posizione delle celle con valore 1. while ( 1 ) printf ( "Posizione ( =< 0 fine): " ) ; sscanf ( line, "%d", &i ) ; if ( i < 1 i > aut >size ) break ; if (! aut >site [ i 1]) aut >site [ i 1] = 1 ; else printf ( "Sito non valido, gia scelto\n" ) ; Le celle vengono inserite utilizzando un ciclo infinito 9

10 while ( 1 )... interrotto dall istruzione break quando viene inserita una posizione non valida. viene anche controllato che le posizioni non vengano inserite più volte if (! aut >site [ i 1]) aut >site [ i 1] = 1 ; else printf ( "Sito non valido, gia scelto\n" ) ; Nel ciclo Evoluzione: funzione update state() Lo stato delle cellette deve essere aggiornato simultaneamente, in altre parole il nuovo valore delle cellette al tempo t + 1 deve essere determinato usando per tutte le cellette il valore al tempo t. Questo tipo di evoluzione viene chiamata sincrona o parallela. Il modo più semplice di realizzare una evoluzione sincrona è utilizzando un array temporaneo su cui viene memorizzato il nuovo valore delle cellette generato a partire dai valori vecchi. La funzione update state() usa a questo scopo l array temporaneo new site. cell_t new_site ;... new_site = create_site ( aut >size ) ; Quando lo stato di tutte le cellette è stato cambiato l array temporanea viene copiata su quella che contiene la configurazione dell automa for ( i = 0 ; i < aut >size ; ++i ) aut >site [ i ] = new_site [ i ] ; e lo spazio utilizzato dall array temporaneo restituito al sistema free ( new_site ) ; L uso di un array ausiliario non è efficiente da un punto di vista dell utilizzo della memoria, ed in effetti l evoluzione sincrona dell automa può essere realizzata utilizzando solo due variabili temporanee ausiliarie. La scrittura dell algoritmo diventa però più complessa e meno trasparente, e viene lasciato come esercizio. Il nuovo valore di ogni cella i viene determinato dalla la tavola della regola rule calcolando il valore dell indice della configurazione dei tre siti adiacenti: conf_index = 4 aut >site [ im1 ] + 2 aut >site [ i ] + aut >site [ ip1 ] ; dove im1 e ip1 individuano il vicino si sinistra e di destra del sito i, ed assegnando al sito i il valore ottenuto dalla tavola new_site [ i ] = rule [ conf_index ] ; 10

11 Condizioni al bordo L automa cellulare vive in uno spazio finito di L siti di conseguenza il primo ed l ultimo sito hanno un vicino in meno. Per ovviare a questo inconveniente si usano le Condizioni Periodiche al Bordo associando come vicino di sinistra del primo sito l ultimo sito, e come vicino di destra dell ultimo sito il primo sito. Geometricamente questo vuol dire che l automa cellulare vive su un anello: L 2 L 1 Nel programma questo è realizzato con le istruzioni im1 = ( i 1 + aut >size ) % aut >size ; ip1 = ( i+1) % aut >size ; come è facile convincersi considerando, ad esempio, i casi i=0, i=1 e i=aut->size-1. Questo non è l unico modo di realizzare le condizioni periodiche al bordo. Ad esempio si potrebbe eseguire il ciclo partendo dalla seconda cella sino fino alla penultima e scrivere esplicitamente la regola per la prima e l ultima cella. Questo metodo è chiaramente più efficiente di quello che richiede le operazioni di modulo, ma ha lo svantaggio che se la regola di evoluzione è piuttosto complicata, non come in questo caso, è più facile fare errori in quanto questa va replicata tre volte: una volta per le celle a ciascun estremo ed una volta per tutte le altre celle. Il numero di repliche inoltre aumenta con il numero di dimensioni del sistema, per cui se sono tre in una dimensione saranno nove in due e cosìvia. Un altro metodo è quello di utilizzare tavole dei vicini che per ogni sito contengano gli indici dei siti primi vicini, come fatto ad esempio per il Random Walk in due dimensioni. Questo metodo è piuttosto flessibile e per questo viene utilizzato quando il sistema è definito su geometrie particolari o se il numero di vicini può variare nel tempo come ad esempio nelle simulazioni di dimanica molecolare. c AC

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

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Simulazione del Questionario a Risposte Multiple.

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Simulazione del Questionario a Risposte Multiple. Domanda n. 1 Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Simulazione del Questionario a Risposte Multiple 8-Nov-2004 Argomento: Rappresentazione dell'informazione

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

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file. IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni

Dettagli

1 Operatori bit-a-bit (Rev )

1 Operatori bit-a-bit (Rev ) 1 Operatori bit-a-bit (Rev. 2.0.2) La più piccola quantità di informazione memorizzabile nella memoria di un computer è il bit. Il bit può assumere sono due valori di solito indicati con 1 e 0 anche se,

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Record Laboratorio di Informatica Ingegneria Meccanica Lezione 9, 6 dicembre 2007 versione 18 dicembre 2007 Renato Menicocci Array: collezione di dati omogenei

Dettagli

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,

Dettagli

Precisazione sui tipi in ANSi C

Precisazione sui tipi in ANSi C Precisazione sui tipi in ANSi C Tipi primitivi del C Un tipo è costituito da un insieme di valori ed un insieme di operazioni su questi valori. Classificazione dei tipi primitivi del C scalari aritmetici:

Dettagli

Il linguaggio C. Notate che...

Il 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

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI 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

Dettagli

File binari e file di testo

File 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

Dettagli

Il linguaggio C. Breve panoramica su stdio.h

Il 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

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione 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

Dettagli

Scrittura formattata - printf

Scrittura formattata - printf Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri

Dettagli

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso Introduzione al C Lezione 1 Elementi Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso C Mercoledì 19 Giovedì

Dettagli

ELEMENTI DI INFORMATICA. Linguaggio C

ELEMENTI DI INFORMATICA. Linguaggio C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica ELEMENTI DI INFORMATICA http://agile.diee.unica.it A.A. 2015/2016 Ing. Marco Ortu Diee, secondo piano Tel. 070-6755774 mail:

Dettagli

Puntatori e array. Violetta Lonati

Puntatori 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

Dettagli

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Lezione 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

Dettagli

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii Sommario PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 1.1 Introduzione...

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica Prima prova intermedia - 11 Novembre 2009 Si risolvano i seguenti esercizi. Il compitino prevede un punteggio massimo di 15/14-esimi, cui andranno sommati i punti ottenuti nel

Dettagli

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010 Tipi di dati scalari (casting e puntatori) Alessandra Giordani agiordani@disi.unitn.it Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi

Dettagli

I puntatori. DD Cap.7 pp KP Cap.6 pp

I 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

Dettagli

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012

Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Informatica per Statistica Riassunto della lezioni del 14/11/2012 e 16/11/2012 Igor Melatti Cenni sui puntatori in C Per ogni variabile normale dichiarata, il compilatore riserva una precisa quantità di

Dettagli

Introduzione al C Lez. 4

Introduzione al C Lez. 4 Introduzione al C Lez. 4 Allocazione Dinamica della memoria http://www.di.unipi.it/~rossano/algo1/lez4.pdf Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018

Esercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018 Esercitazioni di Fondamenti di Informatica - Lez. 9 /1/018 Esercizi sulla gestione dei file in C Il codice degli esercizi e contenuto nella cartella parte1 1. Creare una funzione C che legga tutto cio

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

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande/ VERSIONE 1 1) Nell uso dei puntatori in C++ la scrittura -> vuol dire: a) riferimento b) dereferenziazione e

Dettagli

Introduzione al linguaggio C Primi programmi

Introduzione al linguaggio C Primi programmi Introduzione al linguaggio C Primi programmi Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Gestione dei file in C

Gestione dei file in C Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente

Dettagli

Caratteri e stringhe

Caratteri 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

Dettagli

Streams e disk files

Streams e disk files Streams e disk files Streams Un canale è una sequenza di byte di dati Sorgente o destinazione di dati che possono essere associati ad un disco o ad altre periferiche Due tipi di stream: Testo: sequenza

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista

Dettagli

Esercitazione n. 7. Gestione dei file (seconda parte)

Esercitazione n. 7. Gestione dei file (seconda parte) Esercitazione n. 7 Gestione dei file (seconda parte) dott. Carlo Todeschini tode@cremona.polimi.it Politecnico di Milano A.A. 2010/2011 Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non

Dettagli

C: panoramica. Violetta Lonati

C: 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

Dettagli

Lezione 11: Liste a Puntatori e Input/Output

Lezione 11: Liste a Puntatori e Input/Output Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)

Dettagli

Laboratorio di informatica Ingegneria meccanica

Laboratorio di informatica Ingegneria meccanica Rappresentazione ed interpretazione Laboratorio di informatica Ingegneria meccanica Insieme dei valori da rappresentare interpretazione rappresentazione Insieme delle sequenze di K bit Lezione 2 8 ottobre

Dettagli

Input/output in C e in C++

Input/output in C e in C++ FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni

Dettagli

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A

Laboratorio di Algoritmi e Strutture Dati Ingegneria e Scienze Informatiche - Cesena A.A Ingegneria e Scienze Informatiche - Cesena A.A. 2014-2015 pietro.dilena@unibo.it MergeSort MergeSort MergeSort: esempio MergeSort: pseudocodice Algoritmo di ordinamento ricorsivo basato sulla tecnica Divide

Dettagli

NB: sono richieste almeno 4 risposte esatte per la correzione delle domande aperte

NB: sono richieste almeno 4 risposte esatte per la correzione delle domande aperte 7 Lug 17 MATRICOLA COGNOME NOME PUNTEGGI PER LE VARIE DOMANDE: Domande aperte: A: 6, B: 9, C: 9 Scelta multipla: 1.5 punti per ogni risposta esatta DURANTE IL COMPITO E AMMESSO SOLO L USO DI STRUMENTI

Dettagli

Caratteri e stringhe

Caratteri 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

Dettagli

Gestione dei file in C

Gestione dei file in C Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente

Dettagli

Codifica dell informazione

Codifica dell informazione Codifica dell informazione Informatica B Come memorizzo l informazione nel calcolatore? 1 bit di informazione 1 bit di informazione La memoria del calcolatore L informazione nel calcolatore q Il calcolatore

Dettagli

Operazioni su file di caratteri

Operazioni su file di caratteri Operazioni su file di caratteri Apertura fopen Chiusura fclose Scrittura fprintf Lettura fscanf Controllo fine file feof Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Apertura di un file: Si

Dettagli

File. Molto astratta: file ha un nome (ex. Pippo.c), ed altre caratteristiche (dimensione, tipo, etc). Operazioni: copiare, cancellare, eseguire..

File. Molto astratta: file ha un nome (ex. Pippo.c), ed altre caratteristiche (dimensione, tipo, etc). Operazioni: copiare, cancellare, eseguire.. File I file sono una illusione creata dal Sistema Operativo(SO) Il SO usa opportune strutture dati per implementare tale astrazione (ad esempio: File Control Block, FCB) Sono usati per memorizzare in modo

Dettagli

Il linguaggio C. Puntatori e dintorni

Il 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;

Dettagli

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi lisi@di.uniba.it Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti

Dettagli

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011 Tipi di dato, memoria e conversioni Alessandra Giordani agiordani@disi.unitn.it Lunedì 7 maggio 2011 http://disi.unitn.it/~agiordani/ Il linguaggio C è esplicitamente tipato: occorre esplicitamente associare

Dettagli

PROGRAMMA = ALGORITMO

PROGRAMMA = ALGORITMO Corso di Laurea Scienze Prof. San. Tec., Area Tecnico-Assistenziale SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI Anno Accademico 2005-2006 Prof. Fausto Passariello Corso Integrato Metodologia della Ricerca

Dettagli

Gestione dei File. Credits Prof. Campi

Gestione dei File. Credits Prof. Campi Gestione dei File Credits Prof. Campi 1 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi Si usano dall'interno dei programmi Realizzano la persistenza dei dati cioè

Dettagli

Introduzione al C Lez. 4. Allocazione Dinamica della memoria

Introduzione 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

Dettagli

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami. Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli

Dettagli

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI SULL USO DEI CARATTERI Ricordiamo che: int x; si legge con ( %d,&x) e si stampa con ( %d,x) float x; si legge con ( %f,&x) e si stampa con ( %f,x) double x;si legge con ( %lf,&x) e si stampa con ( %f,x)

Dettagli

Il linguaggio C. Notate che...

Il 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

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'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

Dettagli

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

Dettagli

Linguaggio C: Espressioni

Linguaggio C: Espressioni Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università

Dettagli

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

GESTIONE 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

Dettagli

Esercizi. Filtraggio

Esercizi. Filtraggio Politecnico di Milano Esercizi Preparazione alla prima prova intermedia Filtraggio L utente inserisce un array di numeri reali non negativi (un numero negativo indica la fine della fase di inserimento)

Dettagli

Lezione 6: Array e puntatori

Lezione 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

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

Introduzione al C. Stream e disk file

Introduzione al C. Stream e disk file Introduzione al C Stream e disk file Stream Un canale è una sequenza di byte di dati Sorgente o destinazione di dati che possono essere associati ad un disco o ad altre periferiche Due tipi di stream:

Dettagli

file fisico file logico

file fisico file logico I files Un file è una struttura di dati residente su una memoria di massa (file fisico) Un programma vede un file come una sequenza di bytes (file logico) Generalizzando, un file può comprendere qualsiasi

Dettagli

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori Formattazione avanzata Modificatori di o in output Modificatori di o in input Stream predefiniti I/O Avanzato e File 2 Formattazione dell output Formattazione avanzata L output (su schermo o su file) viene

Dettagli

I/O Avanzato in C: scheda riassuntiva

I/O Avanzato in C: scheda riassuntiva Funzione sscanf r = sscanf(str, "formato", &variabili ) ; str Stringa da cui acquisire i dati "formato" Sequenza dei campi da leggere ("%d", "%s",... ) &variabili Variabili nelle quali depositare i valori

Dettagli

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 19 febbraio 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande/ VERSIONE 1 1) Nell uso dei puntatori in C++ la scrittura -> vuol dire: a) riferimento

Dettagli

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

Dettagli

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati) Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare

Dettagli

LABORATORIO 12 CLASSE LIFE

LABORATORIO 12 CLASSE LIFE CLASSE LIFE LABORATORIO 12 Life (vita, in inglese) è un automa cellulare inventato dal matematico John Conway per studiare un'emulazione elementare dei processi vitali. Life è diventato famoso dopo la

Dettagli

I files (archivi) Il C definisce in stdio.h tre file aperti automaticamente: stdin, stdout e stderr.! Sono ad accesso sequenziale diretto

I files (archivi) Il C definisce in stdio.h tre file aperti automaticamente: stdin, stdout e stderr.! Sono ad accesso sequenziale diretto C I files di dati I files (archivi) Files di programmi sono solo gestiti dal compilatore C Files di dati Possono essere creati, aggiornati, letti, scritti da programmi C Servono per conservare dati su

Dettagli

Laboratorio di Informatica I

Laboratorio 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

Dettagli

Lezione 22: Input/Output e Files

Lezione 22: Input/Output e Files Lezione 22: Input/Output e Files Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università di Salerno Struttura della lezione Esami: date e modalità Funzioni di libreria standard

Dettagli

Informatica B Prof. Di Nitto, Morzenti Prova del 18 novembre 2004 Cognome e Nome... Numero Matricola... (in stampatello)

Informatica B Prof. Di Nitto, Morzenti Prova del 18 novembre 2004 Cognome e Nome... Numero Matricola... (in stampatello) Informatica B Prof. Di Nitto, Morzenti Prova del 18 novembre 2004 Cognome e Nome... Numero Matricola... (in stampatello) Risolvere i seguenti esercizi, scrivendo le risposte ed eventuali tracce di soluzione

Dettagli

Introduzione al C++ (continua)

Introduzione 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

Dettagli

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Le strutture Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune. Dichiarazione di una struttura: struct point { int x; int y; }; La dichiarazione di una struttura

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica -- Conversione di tipo in C (V) -- Laboratorio di Informatica Ingegneria Meccanica Lezione 7, 22 novembre 2007 versione 24 novembre 2007 Renato Menicocci

Dettagli

C: primi elementi. Lezione 4

C: primi elementi. Lezione 4 C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX

Dettagli

Qualsiasi programma in C++ segue lo schema:

Qualsiasi programma in C++ segue lo schema: Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni

Dettagli

Formattazione avanzata. Modificatori di formato in output Modificatori di formato in input Stream predefiniti

Formattazione avanzata. Modificatori di formato in output Modificatori di formato in input Stream predefiniti I/O Avanzato e File Formattazione avanzata Modificatori di formato in output Modificatori di formato in input Stream predefiniti 2 Formattazione avanzata Formattazione dell output L output (su schermo

Dettagli

Puntatore. Ritorniamo sul problema dell accesso alle variabili

Puntatore. Ritorniamo sul problema dell accesso alle variabili Puntatori Puntatore Ritorniamo sul problema dell accesso alle variabili Nel linguaggio di von Neumann attraverso il loro indirizzo Nei linguaggi di alto livello attraverso il loro nome Però in taluni casi

Dettagli

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

Dettagli

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere

Dettagli

Esercizi Programmazione I

Esercizi Programmazione I Esercizi Programmazione I 0 Ottobre 016 Esercizio 1 Funzione valore assoluto Il file.c di questo esercizio deve contenere nell ordine, il prototipo (dichiarazione) di una una funzione abs, che prende in

Dettagli

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard Stdio.h Input / Output Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard Sia i file che i dispositivi (tastiera, schermo...) sono visti come

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 2: Elementi lessicali, casting e while Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Soluzione agli esercizi

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

Lezione 12: Allocazione Dinamica della Memoria

Lezione 12: Allocazione Dinamica della Memoria Lezione 12: Allocazione Dinamica della Memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 17 Aprile 2013 Puntatori e vettori Puntatori ed indirizzi Semplificando, la memoria di un computer

Dettagli

Settimana n.12. Obiettivi File!di!testo. Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e!

Settimana n.12. Obiettivi File!di!testo. Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e! Settimana n.12 Obiettivi File!di!testo Contenuti Concetto!di!file!e!funzioni! fopen/fclose Funzioni!fgets+sscanf Approfondimenti!su!printf! e!scanf 437 Files Vista d insieme dei formati di file File File

Dettagli

Char. Parte 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Char. Parte 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Laboratorio di Algoritmi

Laboratorio di Algoritmi Laboratorio di Algoritmi Corso di Laurea in Matematica Roberto Cordone DI - Università degli Studi di Milano Lezioni: Martedì 8.30-10.30 in aula 3 Mercoledì 10.30-12.30 in Aula 2 Giovedì 8.30-10.30 in

Dettagli

Tipi definiti dall'utente

Tipi definiti dall'utente Tipi definiti dall'utente Tipi definiti Il C mette a disposizione un insieme di tipi di dato predefiniti (tipi built-in) e dei meccanismi per denire nuovi tipi (tipi user-defined) Possiamo: Ridenominare

Dettagli

Laboratorio di Programmazione

Laboratorio di Programmazione Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 26 Sommario: Gestione dei file in C. File ad accesso sequenziale: apertura, chiusura, lettura e scrittura. File binari. Gestione files

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Parte 1: tipi primitivi e istruzioni C

Parte 1: tipi primitivi e istruzioni C Parte 1: tipi primitivi e istruzioni C Esercizio 1 Scrivere un programma che stampa la somma di una sequenza di N numeri inseriti dall utente. Esercizio 2 Scrivere un programma che stampa la somma di una

Dettagli