Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 15 e 16 Programmazione strutturata A) progettazione del.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Funzioni e procedure Ogni linguaggio di programmazione ad alto livello mette a disposizione del programmatore questi strumenti, ed il C non è da meno!
Uso avanzato di C.
Introduzione al linguaggio C
PUNTATORI Introduzione
Algoritmi e Programmazione
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Funzioni definite dall’utente
Corso di Fondamenti di programmazione a.a.2009/2010
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
APPUNTI SUL LINGUAGGIO C
Esercizi su pile Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Federica Dispenza matr Carmela Pecoraro matr
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Algebra Lineare Esercizi assegnati.
I File.
Le funzioni.
Espressioni condizionali
EXCEL FORMATTAZIONE DATI.
Equazione di secondo grado.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Unità Didattica 3 Linguaggio C
Programmazione di Calcolatori
Esercizi su File.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Gestione dei file di testo, matrici e struct
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
1 Esempi domande di esame. 2 Dato il seguente programma #include int main(){ int *p,j=9,i=5; p=&j; *p=i; printf("%d %d %d\n", i,j,*p); scanf("%d",p);/*
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Microsoft Word Interfaccia grafica
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Prof. Giuseppe Boncoddo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 19 e 20 Crittografia I A) Tabella dei bigrammi B) Riconoscimento.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Fabio Scotti – Università degli Studi di Milano 1 Lezione 1 e 2 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 11 e 12 FUNZIONI E PASSAGGIO PARAMETRI A) Funzioni e prototipi.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Conio.h contiene la dichiarazione di funzioni usate per richiamare alcune routine DOS di gestione del video e della tastiera. NECESSARIA PER system(‘’cls’’)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array n-dimensionali e tipi di dati strutturati Marco D. Santambrogio – Ver. aggiornata.
Planet HT – Genova - Elisa Delvai
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi su stringhe e file 15 Stringhe e file.
Linguaggio C: Funzioni e Puntatori Laboratorio di Programmazione Gruppo 1.
Transcript della presentazione:

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 15 e 16 Programmazione strutturata A) progettazione del codice di un programma complesso Fabio Scotti Laboratorio di programmazione per la sicurezza

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 2 Obiettivi Comprendere che la corretta progettazione dei tipi di dato e delle funzioni è il cuore delle programmazione strutturata. Approfondire la stesura in modalità top-down del programma (dalla scrittura delle intestazioni delle funzioni alla loro definizione). Essere in grado di scrivere un programma che simuli l’evoluzione di una colonia di microbi in un ambiente.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 3 Life: le caratteristiche Si sviluppa in un “universo” bidimensionale popolato da cellule che nascono, si riproducono e muoiono secondo determinate regole. In letteratura questo tipo di simulazione è noto con il nome di automi cellulari. Sono simulazioni molto conosciute: sul motore digitare " automi cellulari 2D " e scorrere le pagine dei risultati.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 4 Life : l’ideatore Ideato da John Horton Conway, uno dei più noti matematici contemporanei. Conway è attivo in molteplici campi: teoria dei codici correttori d'errore, teoria dei gruppi, teoria dei giochi, ecc.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 5 Life: le regole del gioco (1) La vita di ogni cellula è determinata dalla presenza di altre cellule negli 8 quadretti che la circondano: Regola della nascita: se 3 cellule attive sono adiacenti ad un quadretto vuoto, in quel quadretto nascerà una nuova cellula nella successiva generazione

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 6 Life: le regole del gioco (2) Regola di sopravvivenza: una cellula viva continua a vivere anche nella successiva generazione se intorno ad essa ci sono 2 o 3 cellule vive. Regola d’inedia (o sovrapopolazione ): se una cellula viva ha meno di 2 cellule adiacenti vive o più di 3 vive, essa morirà per inedia o sovrapopolazione. una grandissima varietà di situazioni e di comportamenti è racchiusa in queste (semplici) regole.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 7 Life: un esempio Attiva Morirà Nascerà Inattiva Stato cellula: Epoca 1 Epoca 2 Epoca 3 Stato intermedio 1 Stato intermedio 2

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 8 Primo passo: progettazione del codice Chiedersi chi sono gli attori e le azioni. Attori/oggetti/variabili: – non singole cellule o batteri ma una matrice che descrive il vetrino; – un contatore delle epoche. Azioni/metodi/funzioni: – funzione per inizializzare la matrice; – funzione per modificarla; – funzioni per stamparla. Utilizzare una libreria strangelife.h contenente tutte le funzioni ed i prototipi.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 9 Stesura main #include #include "strangeLife.h" // usare " " per il vostro file #define MAX_EPOCHE 400 int main() { int epoche; // le epoche segnano il tempo che passa int a[N_MAX][N_MAX]; // ecco la matrice dei microbi riempiMatrice(a); // la PROCEDURA riempie la matrice stampa_Matrice(a); // la PROCEDURA stampa la matrice for (epoche=1; epoche < MAX_EPOCHE; epoche++) { aggiorna_Matrice(a); // la PROCEDURA modifica la matrice stampa_Matrice(a); // la PROCEDURA stampa la matrice getchar(); } exit(0); } File life.c

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 10 // StrangeLife.h #include #define N_MAX 30 // lato della matrice #define ELEM_RANGE2 2 // concentrazione in matrice di cellule File strangelife.h Include e definizioni utili

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 11 Prototipi I prototipi delle funzioni che servono nel main : // prototipi void riempi_Matrice(int a[][N_MAX]); void stampa_Matrice(int a[][N_MAX]); void aggiorna_Matrice(int a[][N_MAX]); ` File strangelife.h

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 12 RiempiMatrice void riempiMatrice(int a[][N_MAX]) { int i, j, num_random; float temp; int n = N_MAX; // per comodita' chiamo n N_MAX // Genero una sequenza casuale per riempire la matrice srand(time(NULL)); for(i=0;i < n;i=i+1) { for (j=0;j < n;j=j+1) { // qui genero un numero casuale num_random = rand(); // ora scalo il numero casuale fra 0 e 1 temp = (num_random * ELEM_RANGE2) / RAND_MAX ; // non invertire l'ordine dei fattori!!!! a[i][j]= (int)floor( temp ); // il float ritorna ad essere un intero if ( a[i][j] ) a[i][j]=1; } File strangelife.h

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 13 StampaMatrice (1) void stampa_Matrice(int a[][N_MAX]) // notare che qui non si usa il ; { int i; int j; int n = N_MAX; // per comodita' chiamo n N_MAX //stampo una matrice facendo anche i "bordini" // Quindi una riga (1) // | |Un carattere "|" all'inizio ed un "|" alla fine (2)e(3) // | |idem // Una riga per chiudere (4) for(i=0;i < n+2;i=i+1) printf("_"); // (1) una riga lunga quanto una matrice File strangelife.h

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 14 StampaMatrice (2) for(i=0;i < n;i=i+1) { printf("\n"); // andiamo a capo printf("|"); // "|" all'inizio e (2) for (j=0;j < n;j=j+1) { if (a[i][j]==1) { } else { printf(" "); } printf("|"); // "|" alla fine e (3) } printf("\n"); // andiamo a capo for(i=0;i < n+2;i=i+1) printf("_"); // (4) una riga lunga quanto una matrice printf("\n\n"); } File strangelife.h

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 15 AggiornaMatrice (1) void aggiorna_Matrice (int a[][N_MAX]) { int i, j, ki, kj,tot; int n = N_MAX; // per comodita' chiamo n N_MAX int stato[N_MAX][N_MAX]; for(i=1;i < n-1;i=i+1) { for (j=1;j < n-1;j=j+1) { // ispeziono le 9 celle della matrice 3x3 // e sottraggo la cella centrale tot = 0; for (ki=i-1; ki < =i;ki=ki+1) { for (kj=j-1; kj < =j+1;kj=kj+1) { tot = tot + a[ki][kj]; } tot = tot - a[i][j] ; // guardo solo l'intorno File strangelife.h

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 16 AggiornaMatrice (2) // applico le regole di Conway, (ma sono giuste?) if ((a[i][j] == 0) & (tot == 3)) { stato[i][j] =1; }else if ((a[i][j] == 1) & ( (tot == 3) | (tot == 2)) ) { stato[i][j] =1; }else{ stato[i][j] =0; } // copio lo stato sulla matrice a for(i=1;i < n-1;i=i+1) { for (j=1;j < n-1;j=j+1) { a[i][j] = stato[i][j]; } File strangelife.h

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 17 Nota sull’uso dello stato E’ necessario notare che a viene solo letta mentre stato viene solo scritta. Solo alla fine la matrice stato viene INTERAMENTE copiata in a allo scopo di modificare la situazione delle cellule in parallelo. Non si vuole infatti leggere la situazione di una cellula e cambiare il suo stato prima che anche tutte le altre cellule siano state a loro volta esaminate.

Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 18 Piccolo errore Solo dalla simulazione è possibile notare che vi è un errore nella gestione dei bordi della matrice (errata applicazione delle regole per effetto dei bordi): Anche dopo moltissime epoche