Corso di Esercitazioni di Programmazione



Documenti analoghi
INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Descrizione di un algoritmo

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Lezione 8. La macchina universale

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Appunti di Sistemi Elettronici

DAL PROBLEMA ALL'ALGORITMO AL PROGRAMMA SCRITTO IN Come. Scopo principale dell informatica è risolvere problemi con i calcolatori.

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

LINGUAGGI DI PROGRAMMAZIONE

La selezione binaria

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Introduzione alla programmazione in C

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Esempi di algoritmi. Lezione III

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Esercitazione 2. Espressioni booleane Il comando if-else

DAL DIAGRAMMA AL CODICE

Metodologie di programmazione in Fortran 90

Nozione di algoritmo. Gabriella Trucco

Introduzione. Informatica B. Daniele Loiacono

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Codifica: dal diagramma a blocchi al linguaggio C++

Linguaggi di programmazione

Funzioni in C. Violetta Lonati

ALGEBRA DELLE PROPOSIZIONI

Gli algoritmi: definizioni e proprietà

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Note su quicksort per ASD (DRAFT)

Linguaggi e Paradigmi di Programmazione

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

FORMULE: Operatori matematici

Corso di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Guida Compilazione Piani di Studio on-line

Informatica per le discipline umanistiche 2 lezione 14

Come ragiona il computer. Problemi e algoritmi

SCUOLA PRIMARIA Anno Scolastico 2014/2015 CURRICOLO DI TECNOLOGIA OBIETTIVI DI APPRENDIMENTO AL TERMINE DELLA CLASSE TERZA DELLA SCUOLA PRIMARIA

4 3 4 = 4 x x x 10 0 aaa

RISOLUTORE AUTOMATICO PER SUDOKU

Fasi di creazione di un programma

Arduino: Programmazione

Prova di Laboratorio di Programmazione

Corso di Informatica

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Programmazione in Java e gestione della grafica (I modulo) Lezione 1: Presentazione corso

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Laboratorio di Informatica

connessioni tra i singoli elementi Hanno caratteristiche diverse e sono presentati con modalità diverse Tali relazioni vengono rappresentate QUINDI

Dropbox di classe. É un servizio internet fornito gratuitamente (funzioni base).

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

INFORMATICA 1 L. Mezzalira

Introduzione al Linguaggio C

Esercizi su. Funzioni

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Algoritmi. Maurizio Palesi. Maurizio Palesi 1

RICERCA DI UN ELEMENTO

Algoritmi di Ricerca. Esempi di programmi Java

FONDAMENTI di INFORMATICA L. Mezzalira

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Testi di Esercizi e Quesiti 1

Esercizi di JavaScript

Strutturazione logica dei dati: i file

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Elementi di semantica operazionale

PROGETTO EM.MA PRESIDIO

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Matematica in laboratorio

MODELLO RELAZIONALE. Introduzione

Introduzione alla Programmazione

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

RICHIESTE INTERVENTO

per immagini guida avanzata Organizzazione e controllo dei dati Geometra Luigi Amato Guida Avanzata per immagini excel

Sistemi Web! per il turismo! - lezione 3 -

Ricapitoliamo. Ricapitoliamo

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

GESTIONE INFORMATICA DEI DATI AZIENDALI

Algoritmi, dati e programmi

FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira

- Algoritmi ed esecutori di algoritmi - ALGORITMI MACCHINA DI VON NEUMANN

Introduzione. Laboratorio di Calcolo Corso di Laurea in Fisica. Università degli Studi di Roma La Sapienza

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

Ing. Paolo Domenici PREFAZIONE

Transcript:

Corso di Esercitazioni di Programmazione Introduzione Dott.ssa Sabina Rossi

Informazioni Pagina web del corso: News Orari Mailing list Lezioni Esercitazioni Date esami Risultati esami.. http://www.dsi.unive.it/~prog1

Informazioni e spiegazioni Per ricevere gli avvisi relativi al corso ci si può iscrivere alla mailing list programmazione@listserver.dsi.unive.it usando la pagina web http://listserver.dsi.unive.it/wws/subrequest/programmazione oppure inviando direttamente una e-mail a sympa@listserver.dsi.unive.it mettendo nel body il testo subscribe programmazione

Ricevimento Martedì dalle 14.00 alle 15.00 oppure su appuntamento

Libri di Testo C Corso completo di programmazione H.M. Deitel, P.J. Deitel Apogeo The C Programming Language Kernighan, Ritchie Prentice Hall

Laboratorio Lunedì e Giovedì dalle 13.00 alle 14.00 Tutor Luca Leonardi

Laboratorio Richiesta dell account: In aula 3 c'è un PC su un carrello rosso dove le matricole DEVONO iscriversi (inserendo Cognome, Nome, Numero di matricola, e eventuale Email); Coloro che non sono ancora iscritti e quindi non hanno il numero di matricola, come matricola devono scrivere "TEMP07" per ottenere un account provvisorio valido fino al 31/12.

Esercitazioni settimanali Ogni settimana verranno assegnate delle esercitazioni da svolgere a casa Le esercitazioni devono essere consegnata via web (si veda la pagina web del corso)

Esame L'esame consiste in due prove distinte: - una prova teorica scritta; - una prova pratica in laboratorio. Per passare l'esame entrambe le prove devono essere sufficienti, e verranno registrati due voti che sono la media dei due esami + un bonus per le esercitazioni svolte e consegnate durante l'anno. Si tratta di due prove indipendenti, il cui voto rimane valido per tutto l'anno accademico.

Problemi, Algoritmi e Programmi Approfondiamo come progettare e scrivere nuovi algoritmi e programmi

Risolvere un problema es : riconoscere qualcuno fra la folla Dati di ingresso Elaborazione Dati di uscita Immagine della folla Ricerca nell immagine SI, NO, chi è la persona riconosciuta

Risolvere un problema es : torta di carote Dati di ingresso Elaborazione Dati di uscita Ingredienti Combinazione degli ingredienti secondo una opportuna ricetta La torta!

Risolvere un problema vogliamo essere capaci di specificare la strategia seguita dal passo di elaborazione in modo da farla eseguire automaticamente dal computer quindi dobbiamo : riuscire a descrivere accuratamente i vari passi della soluzione attraverso azioni che il calcolatore è in grado di effettuare e con un linguaggio che è in grado di comprendere

Risolvere un problema Dati di ingresso Elaborazione Dati di uscita Codificati opportunamente Trasformazione dei dati di ingresso seguendo i passi specificati da un opportuno algoritmo Ovvero la descrizione dell algoritmo secondo un linguaggio comprensibile al calcolatore Umano (che conosce l algoritmo) programma Calcolatore (che conosce alcune azioni elementari: es confrontare due numeri, eseguire semplici operazioni aritmetiche

Qual è il ruolo dei calcolatori? Nel loro impiego tradizionale, i calcolatori sono essenzialmente esecutori di soluzioni che esseri umani hanno previamente identificato e descritto Questo utilizzo è motivato dalla notevole velocità di esecuzione dei calcolatori e dalla loro capacità di eseguire molte volte la stessa operazione Un calcolatore è caratterizzato dal linguaggio che è in grado di interpretare e dalle istruzioni che è in grado di eseguire

Introduzione alla programmazione Prima di scrivere un programma: Avere una piena comprensione del problema Pianificare con cura un approccio per risolverlo Mentre si scrive un programma: Sapere quali mattoni per costruire sono disponibili Seguire buoni principi di programmazione

Algoritmi Problemi di elaborazione Possono essere risolti eseguendo, in un ordine specifico, una serie di azioni Algoritmo: procedura in termini di Azioni che devono essere eseguite L ordine in cui tali azioni devono essere eseguite

Algoritmi e Programmi Algoritmo (def) : una sequenza di azioni non ambigue che trasforma i dati iniziali nel risultato finale utilizzando un insieme di azioni elementari che possono essere eseguite da un opportuno esecutore. Programma (def) specifica di un algoritmo utilizzando un linguaggio non ambiguo e direttamente comprensibile dal computer

Pseudocodice Linguaggio artificiale e informale, che aiuta i programmatori a sviluppare gli algoritmi Simile all italiano di tutti i giorni Non realmente eseguito sui computer Aiuta il programmatore a riflettere sul programma, prima che provi a scriverlo Facilmente convertibile in un corrispondente programma C

Strutture di controllo Esecuzione sequenziale Le istruzioni sono eseguite, una dopo l altra, nell ordine in cui sono state scritte Trasferimento di controllo Quando la prossima istruzione ad essere eseguita non è la prossima nella sequenza Strutture di controllo Tutti i programmi possono essere scritti in termini di tre sole strutture di controllo: Struttura di sequenza: le istruzioni vengono eseguite sequenzialmente in modo implicito Struttura di selezione: Se, Se altrimenti Struttura di iterazione: Finché

Diagramma di flusso Sono grafici che permettono di esprimere un algoritmo in modo preciso ed intuitivo Si costruiscono a partire da un certo numero di blocchi base che rappresentano le operazioni elementari ed i costrutti di controllo

Diagramma di flusso I blocchi base: Inizio Sottoprog. Operazione I/0 Fine Si Cond. No Elaborazione

Il comando di selezione Se Struttura di selezione: Usata per scegliere tra percorsi di azione alternativi Pseudocodice: Se il voto dello studente è maggiore o uguale a 60 Visualizza Promosso Se la condizione è vera Sarà visualizzato Promosso ed eseguita l istruzione sucessiva Se falsa, la visualizzazione sarà ignorata e sarà eseguita l istruzione successiva I rientri rendono i programmi più semplici da leggere

Il comando di selezione Se Simbolo rombo (simbolo di decisione) Indica che dovrà essere eseguita una scelta Contiene un espressione che può essere vera o falsa Testa la condizione, segue il percorso appropriato

Il comando di selezione Se altrimenti Se Esegue l azione indicata solo quando la condizione è vera Se altrimenti Specifica che, nel caso in cui la condizione sia vera, dovrà essere eseguita una azione differente da quella che si dovrà eseguire qualora la condizione sia falsa Pseudocodice: Se il voto dello studente è maggiore o uguale a 60 Visualizza Promosso altrimenti Visualizza Bocciato Osservate le convenzioni di rientro e spaziatura

Il comando di selezione Se altrimenti Diagramma di flusso del comando di selezione

I comandi Se altrimenti nidificati Se il voto dello studente è maggiore o uguale a 90 Visualizza A altrimenti Se il voto dello studente è maggiore o uguale a 80 Visualizza B altrimenti Se il voto dello studente è maggiore o uguale a 70 Visualizza C altrimenti Se il voto dello studente è maggiore o uguale a 60 Visualizza D altrimenti Visualizza F

Diagramma di flusso I blocchi base vengono collegati tramite frecce che collegano un azione alla successiva all interno dell algoritmo Vediamo il diagramma di flusso del seguente algoritmo: Trovare il maggiore fra 2 numeri interi x e y

Il maggiore fra due numeri interi x, y Algoritmo max 1. Leggi i valori di x e y dall esterno 2. Calcola la differenza d fra x e y (d=x-y) 3. Se d è maggiore di 0 allora esegui il passo 4 altrimenti esegui il passo 5 4. Stampa il massimo è seguito dal valore di x e termina 5. Stampa il massimo è seguito dal valore di y e termina

DF di max Inizio Leggi x e y d = x - y Si Scrivi max è x d > 0? No Scrivi max è y Fine

DF di max Inizio Passo 1 Leggi x e y d = x - y Passo 2 Si Scrivi max è x Passo 3No d > 0? Scrivi max è y Passo 4 Passo 5 Fine

DF e programmi I DF sono un primo passo verso la formalizzazione di un algoritmo in modo non ambiguo Per ottenere una codifica interpretabile direttamente dalla macchina dobbiamo però specificare molti più dettagli : trasformare tutte le frasi in variabili e modifiche su di esse

Programmi Per ottenere una codifica interpretabile direttamente dalla macchina dobbiamo anche : decidere come codificare l informazione non banale in esempi più complessi del nostro, ad esempio se voglio codificare un immagine o un video scrivere il tutto con una codifica leggibile dalla macchina ma la macchina lavora molto a basso livello (linguaggio macchina, codificato con zeri e uni)!!!!

Programmi soluzione. usare linguaggi di livello più alto (linguaggi di programmazione ad alto livello) usare dei programmi appositi per far tradurre i nostri programmi in linguaggio macchina (i compilatori) importante. I tipici linguaggi (C, C++, Java, Fortran, Basic ) permettono di definire strutture del tutto analoghe ai diagrammi di flusso che abbiamo visto finora

Programma: max in C main() /* calcola max */ { int x, y, d; scanf ("%d %d, &x, &y) ; d = x - y ; if (d > 0) printf ( il max è %d, &x) ; else printf ( il max è %d, &y) ; return ; }

Comando: if-else La forma generale dell istruzione if-else è la seguente: if (espressione) istruzione; else istruzione; dove istruzione può essere una singola istruzione, un blocco di istruzioni o l istruzione nulla. La clausola else è opzionale. Se espressione fornisce un risultato vero, viene eseguita l istruzione o il blocco relativo alla parte if; Se espressione fornisce un risultato falso, verrà eseguita, se esiste, l istruzione o il blocco else.

Comando: if-else /* Scrivere un programma che legge due numeri e stampa il maggiore */ #include <stdio.h> int main ( ) { int x, y, max; printf ( Digita due numeri: ); scanf ( %d%d, &x, &y); if (x>y) max = x; else max = y; printf ( %d\n, max); }

Comando: if-else /* Scrivere un programma come prima che non usa la variabile max */ #include <stdio.h> int main ( ) { int x, y; printf ( Digita due numeri: ); scanf ( %d%d, &x, &y); if (x>y) printf ( %d\n, x); else printf ( %d\n, y); }

Comando: if-else /* Scrivere un programma che riceve un numero intero in input, determina se il numero e maggiore o minore di 100 e stampa a video un messaggio corrispondente */ #include <stdio.h> int main( ) { int i; /* dichiarazione di variabile */ printf ( Dammi un intero: ); scanf ( %d, &i); /* inizializzazione della variabile i */ if (i<100) printf ( il numero inserito è minore di 100\n ); else printf ( il numero inserito è maggiore o uguale a 100\n ); }

Espressioni booleane /* Utilizzo delle espressioni booleane */ #include <stdio.h> int main( ) { int a, i; printf ( Dammi un intero: ); scanf ( %d, &i); a = i<100; if (a!=0) /* equivale a if (i<100) */ printf ( il numero inserito è minore di 100\n ); else printf ( il numero inserito è maggiore o uguale a 100\n ); }

Espressioni booleane L assegnamento a=i<100 è del tutto lecito, perché viene valutata l espressione logica i<100, che può restituire 1 (true) o 0 (false). Il risultato e dunque un numero intero, che viene assegnato alla variabile, di tipo int, a. Valutare l espressione a!=0 significa chiedersi se il valore di a è diverso da 0. Ma questo equivale a chiedersi se il valore di a è true. Si può dunque modificare il programma precedente come segue.

Espressioni booleane /* Un altro esempio di utilizzo delle espressioni booleane */ #include <stdio.h> int main( ) { int a, i; printf ( Dammi un intero: ); scanf ( %d, &i); a = i<100; if (a) /* equivale a if (i<100) */ printf ( il numero inserito è minore di 100\n ); else printf ( il numero inserito è maggiore o uguale a 100\n ); }

Espressioni booleane Dato che le espressioni booleane restituiscono un risultato numerico, non esistono differenze tra le espressioni booleane e quelle aritmetiche. Un espressione può contenere una combinazione di operatori aritmetici, logici e relazionali. Esempio w = k + numero + (i < 100); l assegnamento viene effettuato alla fine, perché = ha la priorità più bassa.

Attenzione Essendo l operatore di assegnamento trattato alla stregua degli altri, sarà lecita anche la seguente espressione: i > n && (x=y) dove i > n è vera se il valore di i è maggiore di n; mentre x=y corrisponde all assegnamento di y alla variabile x: in questo caso, se il valore di y è diverso da zero l espressione (x=y) risulta vera altrimenti è falsa. Queste caratteristiche rendono il C un linguaggio flessibile che consente la scrittura di codice sintetico ed efficiente ma anche difficilmente interpretabile.

Esercizio Dire cosa stampano i seguenti programmi /* esempio di if-else */ #include <stdio.h> int main( ) { int x, y; x = 5; y= 4; if (x==y) printf( vero ); else printf ( falso ); } stampa falso /* altro esempio di if-else */ #include <stdio.h> int main( ) { int x, y; x = 5; y = 4; if (x=y) printf ( vero ); else printf ( falso ); } stampa vero

Esempio: Tenta l ambo /* Il gioco Tenta l ambo è una semplificazione del gioco del lotto. Il gioco consiste nell indovinare una coppia di numeri estratti casualmente nell intervallo [1,90]. Il programma genera una coppia di numeri usando la funzione rand(), che definisce un valore intero compreso tra 0 e 32767, e usando in seguito l operatore % per ottenere un numero nell intervallo desiderato. La funzione rand() richiede l uso del file header stdlib.h. Se il giocatore indovina la coppia di numeri allora il programma visualizza il messaggio ^^Ambo!^^ altrimenti visualizza il messaggio ^^Peccato^^. */

Esempio: Tenta l ambo #include <stdio.h> /* Programma per indovinare l ambo*/ #include <stdlib.h> int main ( ) { int estratto1, estratto2; /* numeri estratti */ int guess1, guess2; /* valori immessi dall utente */ estratto1 = rand( ) % 90 +1; /* estrae il primo numero */ estratto2 = rand( ) % 90 +1; /* estrae il secondo numero */ printf ( Tenta l ambo: ); scanf ( %d %d, &guess1, &guess2); if ( guess1 == estratto1 && guess2==estratto2 guess1 == estratto2 && guess2==estratto1 ) printf( ^^Ambo!^^ ); else printf ( ^^Peccato^^ ); }