1 Automi Cellulari (Rev )
|
|
- Costantino Contini
- 7 anni fa
- Visualizzazioni
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
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
DettagliCorso: 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
DettagliI/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
DettagliIL 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
Dettagli1 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,
DettagliLaboratorio di Informatica
Record Laboratorio di Informatica Ingegneria Meccanica Lezione 9, 6 dicembre 2007 versione 18 dicembre 2007 Renato Menicocci Array: collezione di dati omogenei
DettagliInformatica 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,
DettagliPrecisazione 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:
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli
ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del
DettagliFile binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
DettagliIl linguaggio C. Breve panoramica su stdio.h
Il linguaggio C Breve panoramica su stdio.h 1 Input/Output: stdio.h Contiene definizioni di costanti legate all I/O es. EOF (end of file) #define EOF (-1) valore restituito alla fine di un file Contiene
DettagliIntroduzione al 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
DettagliScrittura 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
DettagliIntroduzione 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ì
DettagliELEMENTI 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:
DettagliPuntatori e array. Violetta Lonati
Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array
DettagliLezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit
Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione
DettagliPREFAZIONE... 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...
DettagliFondamenti 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
DettagliTipi 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
DettagliI puntatori. DD Cap.7 pp KP Cap.6 pp
I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un
DettagliInformatica 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
DettagliIntroduzione 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
DettagliEsercitazioni 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
DettagliEsercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
DettagliInformatica/ 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
DettagliIntroduzione 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
DettagliGestione 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
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliStreams 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
DettagliEsercitazioni 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
DettagliEsercitazione 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
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliLezione 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)
DettagliLaboratorio 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
DettagliInput/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
DettagliLaboratorio 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
DettagliNB: 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
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliGestione 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
DettagliCodifica 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
DettagliOperazioni 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
DettagliFile. 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
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliI 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
DettagliTipi 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
DettagliPROGRAMMA = 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
DettagliGestione 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è
DettagliIntroduzione al C Lez. 4. Allocazione Dinamica della memoria
Introduzione al C Lez. 4 Allocazione Dinamica della memoria Allocazione dinamica memoria In C la memoria può essere anche gestita in modo dinamico, attraverso l allocazione esplicita di blocchi di memoria
DettagliStrutture. 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
DettagliSULL 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)
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliINTRODUZIONE 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
DettagliL'Allocazione Dinamica della Memoria nel linguaggio C
L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria
DettagliOgni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.
Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono
DettagliLinguaggio 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à
DettagliGESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009
Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria per l Ambiente ed il Territorio Corso di Laurea Specialistica in Ingegneria Civile - Strutture FONDAMENTI DI INFORMATICA 2
DettagliEsercizi. 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)
DettagliLezione 6: Array e puntatori
Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci
DettagliInput/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari
Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del
DettagliIntroduzione 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:
Dettaglifile 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
DettagliFormattazione 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
DettagliI/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
DettagliInput/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
DettagliSistemi 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
DettagliInformatica/ 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
DettagliTipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.
Tipi di dati fondamentali Tipi di dati fondamentali Linguaggi di Programmazione I Ferdinando Cicalese caratteri: char signed char unsigned char interi short int long interi unsigned short unsigned unsigned
DettagliSistemi 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
DettagliLABORATORIO 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
DettagliI 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
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci
DettagliLezione 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
DettagliInformatica 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
DettagliIntroduzione al C++ (continua)
Introduzione al C++ (continua) I puntatori Un puntatore è una variabile che contiene un indirizzo di memoria pi_greco 3.141592 pi_greco_ptr indirizzo di 3.141592 & DEREFERENZIAZIONE RIFERIMENTO * se x
DettagliLe 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
DettagliLaboratorio di Informatica
-- Conversione di tipo in C (V) -- Laboratorio di Informatica Ingegneria Meccanica Lezione 7, 22 novembre 2007 versione 24 novembre 2007 Renato Menicocci
DettagliC: 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
DettagliQualsiasi 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
DettagliFormattazione 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
DettagliPuntatore. 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
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliNon ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di
ARRAY DI PUNTATORI Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di puntatori Ad esempio: char * stringhe[4]; definisce un vettore di 4 puntatori a carattere
DettagliEsercizi 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
DettagliInput / 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
DettagliINTRODUZIONE 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
DettagliINTRODUZIONE 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
DettagliLaboratorio 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
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliLezione 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
DettagliSettimana 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
DettagliChar. 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
DettagliLaboratorio 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
DettagliTipi 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
DettagliLaboratorio 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
DettagliVariabili 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:
DettagliParte 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