Introduzione alla programmazione ll

Slides:



Advertisements
Presentazioni simili
Gli algoritmi L’elaboratore come macchina universale
Advertisements

Linguaggi algoritmici
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Type Checking (1° parte)
Algoritmi e Programmazione
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
Dr. Francesco Fabozzi Corso di Informatica
Sommario Gli algoritmi I linguaggi per la formalizzazione di algoritmi
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Iterazione enumerativa (for)
Informatica Problema Algoritmo Programma
Introduzione alla programmazione
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione lll
Introduzione alla programmazione l
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
ALGORITMI E PROGRAMMAZIONE STRUTTURATA
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
Unità Didattica 1 Algoritmi
Unità Didattica 2 I Linguaggi di Programmazione
Strutture di controllo in C -- Flow Chart --
Fondamenti di Informatica Algoritmi
Il Linguaggio C.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Gli algoritmi.
Analisi e programmazione
Biologia Computazionale - Algoritmi
Dall’algoritmo al programma.
ELEMENTI DI PROGRAMMAZIONE
Algoritmi e Programmazione strutturata
INFORMATICA MATTEO CRISTANI.
PROGRAMMAZIONE: linguaggi
CODIFICA Da flow-chart a C++.
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Lezione 6 Strutture di controllo Il condizionale
PROBLEMA ALGORITMO PROGRAMMA LINGUAGGI di PROGRAMMAZIONE
INFORMATICA MATTEO CRISTANI. INDICE CICLO DELLE LEZIONI LEZ. 1 INTRODUZIONE AL CORSO LEZ. 2 I CALCOLATORI ELETTRONICI LEZ. 3 ELEMENTI DI TEORIA DELL INFORMAZIONE.
Elementi di Informatica di base Dott.ssa Elisa Tiezzi
Programmazione di Calcolatori
Programmazione di Calcolatori
ECDL Patente europea del computer
Programmazione Strutturata
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
ELETTRONICA GEORGE BOOLE FUNZIONI LOGICHE Lezione N° 1
Programmazione imperativa
Linguaggi algoritmici
Introduzione a Javascript
Rappresentazione degli algoritmi
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
1 Parte 2 Fondamenti di programmazione. 2 Definizione intuitiva di algoritmo Elenco finito di istruzioni che specificano una serie di operazioni, eseguendo.
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
PRIMI ELEMENTI DI PROGRAMMAZIONE
Rappresentazione dell'informazione
Algoritmi.
Realizzazione software
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Diagrammi a blocchi.
Informatica e Informatica di Base
Problemi, algoritmi e programmazione
ALGORITMI Dal problema al programma Definizione di algoritmo
La logica degli enunciati interamente realizzata da GIANNUZZI SILVIA
Il computer ragiona? Problemi e algoritmi. Paola Pianegonda2 Cos’è un problema?  Problema è qualsiasi situazione della quale non conosciamo la soluzione.
Programmazione dei Calcolatori Elettronici
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Informatica Problemi e algoritmi. una situazione che pone delle domande cui si devono dare risposte. Col termine problema o situazione problematica s’indica.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Istruzioni e algoritmi. Istruzioni Operative I passi elementari che compongono l’algoritmo sono le istruzioni. Distinguiamo: Istruzioni di input Istruzioni.
Unità di apprendimento 6
Transcript della presentazione:

Introduzione alla programmazione ll Seconda Lezione Introduzione alla programmazione ll

C.1. Contenitori di dati Un algoritmo deve tener traccia degli ingressi, dei risultati e dei valori intermedi che produce durante il calcolo. Allo scopo, usa dei contenitori di dati. Un contenitore di dati, detto anche variabile, è un’astrazione della nozione di area di memoria contenente dei dati. I dati contenuti hanno un tipo, che caratterizza un insieme di elementi e le operazioni possibili su di essi.

C.1. Contenitori di dati (segue) Tipo dei contenitori TIPO DI DATO = insieme di elementi rappresentabili in modo finito, dotato di operazioni primitive su di esso. ESEMPIO: il tipo degli interi è l’insieme degli interi, sono successioni finite di cifre con eventuale segno dotato delle seguenti operazioni primitive (e calcolabili): +, -, *, divisione intera, resto. pippo: intero 54 Nome contenitore e tipo Contenuto = dato appartenente al tipo di dati associato al nome

C.1. Contenitori di dati (segue) I contenitori di dati utilizzati per i risultati intermedi dipendono dall’algoritmo: quindi, a meno di casi assai elementari, è necessario avere già un’idea ben delineata dell’algoritmo per determinarli difficilmente sono TUTTI prevedibili sin dall’inizio; man mano che l’algoritmo prende forma, si possono aggiungere al volo nuovi contenitori

Esempio di outline dell’algoritmo Contenitori di dati usati da RADICI. Di quali contenitori abbiamo bisogno per RADICI? Sicuramente di quelli per contenere i dati di ingresso ed il risultato: 3 contenitori per a,b,c (ingressi) e r1, r2. Eventuali contenitori per i risultati intermedi (es. delta) ed eventualmente quello finale. Tutti i contenitori saranno di tipo float.

C.2. Diagrammi di flusso Diagramma di flusso: è un formalismo visuale per rappresentare in modo semplice e intuitivo un algoritmo. Un algoritmo compie due tipi fondamentali di operazioni: calcoli primitivi: ottenibili mediante le operazioni primitive dei tipi di dati (sostanzialmente, valutando espressioni); azioni: consistono nel modificare il contenuto dei contenitori di memoria, eventualmente eseguendo calcoli primitivi.

Costanti e variabili I dati nei contenitori possono essere costanti o variabili I dati costanti sono dati che rimangono inalterati durante l’esecuzione dell’algoritmo da quando ha inizio a quando termina Es. Variamo leggermente l’ Algoritmo delle RADICI prendendo come equazione di partenza ax2+bx+1=0, ove il termine noto c è determinato a priori. In questo caso dunque il termine noto è una costante

Variabili I dati variabili o semplicemente variabili sono coppie <nome, valore> Possono essere immaginati come scatole che hanno come etichetta il nome e come contenuto il valore Alle variabili deve essere assegnato esplicitamente un valore Al momento di inizio dell’algoritmo le variabili hanno un valore indeterminato Es. Nell’Algoritmo delle RADICI sono variabili a,b,c, x1 e x2

Calcoli primitivi Sono valutazioni di espressioni in cui compaiono i nomi dei contenitori di dati utilizzati e solo operazioni primitive disponibili sui relativi tipi di dati Il valore dell’espressione è riferito allo STATO di memoria dell’algoritmo, cioè al contenuto attuale dei suoi contenitori di dati Es. b * b – 4 * a * c = 0 è un’espressione valutabile perché contiene operazioni primitive disponibili nel tipo float a : float 2 b : float 4 c : float 2 Stato della memoria

Calcoli primitivi: espressioni booleane Fra le espressioni valutabili assumono particolare importanza quelle di tipo booleano Il tipo booleano contiene due valori vero, falso Esempi di espressioni booleane disponibili nei tipi numerici x<y (x+5)=y ecc.

Azioni Modificano lo stato di memoria, cioè i valori dei contenitori dei dati Le azioni più semplici sono gli assegnamenti, della forma: metti ESPRESSIONE in CONTENITORE valuta ESPRESSIONE e metti il risultato in CONTENITORE, sostituendone il valore precedente Altre azioni sono: leggi da input scrivi su output Es. Metti b * b – 4 * a * c in delta Stato della memoria a : float 2 b : float 4 c : float 2 delta : float

Assegnazione L’istruzione di assegnazione è quella particolare istruzione che permette di definire il valore attuale di una variabile Il valore rimane inalterato fino a una nuova assegnazione alla variabile Forma generale: Nome = espressione L’assegnazione viene eseguita nei seguenti passi: si valuta l’espressione di destra si attribuisce il valore determinato alla variabile

Assegnazione Regola Es. Ogni volta che una variabile appare a destra dell’istruzione di assegnazione =, è necessario che un valore sia già stato assegnato a quella variabile Es. nel caso a=2, b=3, c=a+b, allora si ha c=5 nel caso x=2, x=x+3, allora si ha x=5

Istruzioni Le istruzioni possono essere divise in 5 categorie Istruzioni operative Istruzioni di controllo Istruzioni di salto Istruzioni di inizio/fine esecuzione Istruzioni di ingresso/uscita

Istruzioni operative Istruzioni che producono un risultato se eseguite Ne fanno parte le operazioni aritmetiche e le assegnazioni

Istruzioni di controllo Istruzioni che controllano il verificarsi di condizioni specificate e che in base al risultato determinano quale istruzione eseguire Es. se… allora… altrimenti (if… then… else)

Istruzioni di salto Istruzioni che alterano il normale ordine di esecuzione delle istruzioni di un algoritmo, specificando esplicitamente quale sia la successiva istruzione da eseguire Si distinguono istruzioni di salto condizionato o incondizionato Per quelle condizionate il salto è subordinato al verificarsi di una condizione specificata, per quelle incondizionate il salto è eseguito ogni volta che l’istruzione viene eseguita Sono sconsigliate nella programmazione strutturata

Istruzioni di inizio/fine Indicano quale istruzione dell’algoritmo debba essere eseguita inizialmente e quale determini la fine dell’esecuzione

Istruzioni di ingresso/uscita Istruzioni che indicano una trasmissione di dati o messaggi fra l’algoritmo e tutto ciò che è esterno all’algoritmo Si dicono di ingresso o lettura quando l’algoritmo riceve dati dall’esterno Si dicono di uscita o scrittura quando i dati sono comunicati dall’algoritmo all’esterno

Esempio Nell’Algoritmo delle RADICI Le istruzioni 1,8 sono di inizio/fine Le istruzioni 2,7 sono di ingresso/uscita La istruzione 3 è operativa La istruzione 4 è di salto condizionato Le istruzioni 5,6 sono condizionali

Proposizioni Una proposizione è un costrutto linguistico del quale si può dire se è vero o falso Il valore di verità di una proposizione è l’essere vera o falsa della proposizione Es. “3 è un numero pari” è una proposizione “incrementa x di 10” non è una proposizione

Predicati È un predicato una proposizione contenente delle variabili e in cui il valore delle variabili determina il valore di verità del predicato Es. “x è un numero pari” è un predicato

Predicati La valutazione di un predicato avviene tramite i seguenti operatori relazionali = uguale, ≠ diverso > maggiore, ≥ maggiore o uguale < minore, ≤ minore o uguale

Predicati semplici e composti Un predicato che contiene un solo operatore relazionale è detto predicato semplice Gli operatori relazionali possono essere combinati con i seguenti operatori logici NOT AND OR Un predicato che contiene più operatori relazionali combinati tramite uno o più operatori logici è detto composto

Operatori logici NOT: dato un predicato p, NOT p è vero quando p è falso e viceversa AND: dati due predicati p e q, p AND q è vero solo quando entrambi p e q sono veri e falso altrimenti OR: dati due predicati p e q, p OR q è falso solo quando entrambi p e q sono falsi e vero altrimenti

Tavole di verità p NOT p V F

Tavole di verità p q p AND q V F

Tavole di verità p q p OR q V F

Vettori Le variabili considerate fino ad adesso sono dette variabili scalari Una variabile vettore (array) è una coppia <nome, insieme di valori> Può essere immaginata come una scatola che ha un nome e che è divisa in tanti comparti ognuno dei quali è numerato e può contenere un valore

Vettori Ogni valore è individuato dal nome della variabile seguito dal numero del comparto detto indice La notazione usata è: A(i) La dimensione di un vettore è il numero dei suoi elementi

Vettori Gli indici vanno da 1 (0 in VBA) ad un numero massimo rappresentato dalla dimensione del vettore (dimensione – 1 in VBA) In fase di dichiarazione di una variabile vettore si specifica la sua dimensione che non è più modificabile successivamente

Matrici È l’estensione del concetto di vettore Una matrice è un insieme di valori che sono indicizzati facendo ricorso a due o più indici La notazione usata è M(i,j) Per una matrice a 2 dimensioni i è detto indice riga e j indice colonna

Diagrammi di flusso Sono noti anche come Diagrammi a blocchi Costituiscono un linguaggio formale di tipo grafico per rappresentare gli algoritmi Attraverso il diagramma a blocchi (o flow chart) si può indicare la logica e l’ordine di esecuzione delle istruzioni Un particolare simbolo grafico detto blocco elementare è associato ad ogni tipo di istruzione elementare I blocchi sono collegati tra loro tramite frecce che indicano il susseguirsi delle istruzioni

Diagrammi di flusso Blocco computazionale Blocco decisionale (o blocco azione) Blocco decisionale (o blocco di controllo) X = 0 metti x+y in y; metti x-1 in x; vero falso Contengono una condizione Booleana: se è vera, si segue la freccia etichettata “vero” se è false si segue la freccia etichettata “falso” Contengono sequenze di azioni

Diagrammi di flusso Gli altri blocchi elementari sono: Leggi Sub x Blocco iniziale Blocco di lettura End Sub Scrivi x Blocco finale Blocco di scrittura

Strutture di controllo modulari Un diagramma di flusso si ottiene collegando le frecce uscenti dai blocchi di elaborazione e decisionali Una buona norma è attenersi a diagrammi con strutture predefinite, con una sola freccia entrante e una uscente Tali strutture sono dette strutture di controllo e sono alla base della programmazione strutturata Ciò consente di modularizzare (cioè dividere in parti o moduli) il diagramma; è utile perché spesso i moduli corrispondono a sottoproblemi (sottoprogrammi)

Sottoprogrammi Con il blocco si indica un sottoprogramma di cui è nota la rappresentazione in diagramma a blocchi A sottoprogramma

Proprietà dei diagrammi di flusso Un diagramma a blocchi descrive un algoritmo se: ha un blocco iniziale e uno finale è costituito da un numero finito di blocchi azione e/o blocchi lettura/scrittura e/o blocchi di controllo ciascun blocco elementare soddisfa le condizioni di validità

Proprietà dei diagrammi di flusso Condizioni di validità Ciascun blocco azione, lettura/scrittura ha una sola freccia entrante e una sola freccia uscente Ciascun blocco di controllo ha una sola freccia entrante e due uscenti Ciascuna freccia entra in un blocco o si innesta su un’altra freccia Ciascun blocco è raggiungibile dal blocco iniziale Il blocco finale è raggiungibile da qualsiasi altro blocco

Esercizio Scrivere un algoritmo e rappresentarlo tramite un diagramma a blocchi per i seguenti problemi: attraversare la strada ritirare i soldi al bancomat calcolare l’area del triangolo

Analisi strutturata È l’analisi volta alla stesura di descrizioni di algoritmi tramite diagrammi a blocchi di tipo strutturato Un diagramma a blocchi strutturato è più facilmente comprensibile e modificabile In un diagramma strutturato non apparirà mai una istruzione di salto incondizionato

Analisi strutturata Teorema di Böhm-Jacopini Ogni diagramma a blocchi non strutturato è sempre trasformabile in un diagramma a blocchi strutturato ad esso equivalente dove due diagrammi si dicono equivalenti se partendo dagli stessi dati iniziali producono gli stessi risultati

Analisi strutturata Una descrizione è di tipo strutturato se i blocchi sono collegati tramite gli schemi di flusso corrispondenti alle strutture di controllo principali: schema di sequenza schema di selezione schema di iterazione

Strutture di controllo principali - Sequenza - Iterazione falso vero - Selezione vero falso

Schema di sequenza Schema di sequenza Nota: Due o più schemi di flusso sono eseguiti in successione Nota: lo schema di sequenza è strutturato se e solo se lo sono i blocchi S1 e S2 Sub() S1 S2 End Sub

Schema di selezione Schema di selezione Sub() Schema di selezione Esiste un blocco di controllo che permette di scegliere quale schema di flusso debba essere eseguito tra due schemi, in funzione del valore di verità del controllo falso vero C S1 End Sub Sub() falso vero C S2 S1 End Sub