Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.

Slides:



Advertisements
Presentazioni simili
Dalla scrittura all’esecuzione
Advertisements

I linguaggi di programmazione
Universita di Camerino
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
Generalità Linguaggio e Macchina Astratta
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)
Corso di Laurea in Biotecnologie corso di Informatica Paolo Mereghetti DISCo – Dipartimento di Informatica, Sistemistica e Comunicazione.
INFORMATICA Strutture iterative
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.
Introduzione alla programmazione
Iterazione enumerativa (for)
Informatica Problema Algoritmo Programma
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Lezione 11 (19 novembre 2008) Programmazione in Java: controllo del flusso (iterazione)
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Informatica (Programmazione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Introduzione alla programmazione lll
DAL PROBLEMA ALL'ALGORITMO Problemi e Programmi Paolo Amico
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Codifica di algoritmi linguaggio macchina vs programmazione strutturata Lab Programmazione - turno /2006.
Istruzioni di ripetizione in Java
Unità Didattica 1 Algoritmi
Unità Didattica 2 I Linguaggi di Programmazione
Strutture di controllo in C -- Flow Chart --
Fondamenti di Informatica Algoritmi
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Lezione 2 Programmare in ASP
Elementi di Informatica
Elementi di Informatica
2000 Prentice Hall, Inc. All rights reserved. Capitolo 3 (Deitel) Lo sviluppo di programmi strutturati Indice degli argomenti Introduzione 3.2 -
Algoritmi e Programmazione strutturata
INFORMATICA MATTEO CRISTANI.
PROGRAMMAZIONE: linguaggi
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
BIOINFO3 - Lezione 15 ISTRUZIONI
Programmazione Strutturata
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Dal problema all’ algoritmo
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Sottoprogrammi e funzioni
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.
Scrivere e compilare programmi
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Concetti Fondamentali sulla Programmazione
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Il software Claudia Raibulet
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
Strutture di controllo
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:

Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di progettare e realizzare un programma è detta programmazione

Cos’è un algoritmo Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia Eseguibile Priva di ambiguità Arrivi ad una conclusione in tempo finito

Un esempio di algoritmo Problema: avendo depositato 10000 euro in un conto bancario, che produce il 5% di interessi all’anno, capitalizzati annualmente,quanti anni occorrono affinchè il saldo del conto arrivi al doppio della cifra iniziale? Algoritmo L’anno attuale è 0; il saldo attuale è 10.000 Ripetere i passi 3 e 4 finchè il saldo è minore di 20.000, poi passare al passo 5 Aggiungere 1 al valore dell’anno attuale Il nuovo saldo attuale è il valore del saldo attuale moltiplicato per 1.05 Il risultato è il valore dell’anno attuale

Un esempio di algoritmo Il metodo di soluzione proposto: È non ambiguo, perché fornisce precise istruzioni su cosa bisogna fare ad ogni passo e su quale deve essere il passaggio successivo È eseguibile, perché ciascun passaggio può essere eseguito concretamente Arriva a conclusione in un tempo finito

A cosa servono gli algoritmi? L’identificazione di un algoritmo è requisito indispensabile per risolvere un problema con il computer La scrittura di un programma consiste nel tradurre un algoritmo in qualche linguaggio comprensibile al computer Prima di scrivere un programma è necessario conoscere l’algoritmo che risolve il problema!

Linguaggi assembly Programmazione con le istruzioni base della CPU (operazioni aritmetiche, trasferimento, confronto, salto, I/O) X: INT 38; Y: INT 8; LOAD R0 X; LOAD R1 Y; LOAD R2 X; ADD R2 R1; COMP R0 R1; BRGE maggiore; STORE R2 Y; STOP; maggiore: STORE R2 X;

Linguaggi di alto livello Scriviamo un programma in maniera quasi naturale: Bisogna tradurre questo programma in linguaggio macchina: compilazione X: INT 38; Y: INT 8; SE(x>y) y=x+y ALTRIMENTI x=x+y

Compilatore Il compilatore riceve in ingresso un programma specificato ad alto livello e restituisce lo stesso programma in linguaggio macchina La funzione calcolata dai due programmi deve essere la stessa

Compilatore Il programma originale (codice sorgente) è un file di testo Il compilatore procede attraverso le fasi: Analisi sintattica del codice sorgente (vengono individuati i costrutti) Analisi lessicale (vengono analizzate le istruzioni) Analisi semantica (rilevazioni errori semantici e traduzione di espressioni in sequenze elementari Generazione del codice oggetto

Linker Le funzioni nel codice oggetto non sono tutte conosciute dal compilatore Alcune possono essere riposte in una libreria di funzioni Una libreria è un catalogo di funzioni utilizzate dal programma

Linker Il linker aggiunge al codice oggetto le funzioni di libreria che vengono utilizzate dal programma Aggiunge delle fasi di preambolo e postambolo per caricare ed eseguire correttamente il programma Genera un programma eseguibile

Debugger Anche quando tutti gli errori sintattici sono stati corretti, non è detto che il programma funzioni! Errori “runtime” che interrompono il programma (schermata blu di Win) Errori che portano il programma a fornire risultati errati

Debugger Un errore in un programma è chiamato “bug” Il de-bugger serve a eliminare questi errori analizzando: Il valore delle variabili passo a passo Interrompendo l’esecuzione al verificarsi di alcuni eventi

Dal codice all’eseguibile Librerie Codice sorgente Compilatore Modulo oggetto Linker Programma eseguibile Correzione Debugger

Dal codice all’eseguibile Si scrive il programma in un editor e si salva sul disco Editor Preprocessor Il codice viene pre-elaborato Il compilatore crea un file oggetto e lo salva sul disco Compiler Il linker collega il modulo oggetto con le librerie, crea un file eseguibile e lo salva su disco Linker Loader Il loader carica il programma nella memoria principale CPU La CPU carica una istruzione alla volta e la esegue

Linguaggi interpretati Librerie Codice sorgente Interprete Macchina Correzione Debugger

Programmi e grafi Se associamo ad ogni istruzione un vertice di un grafo e colleghiamo ogni istruzione alla istruzione che la segue con un arco orientato otteniamo il grafo di flusso associato al programma Le istruzioni di salto condizionato sono caratterizzate da due archi in uscita che verranno percorsi in alternativa in funzione del verificarsi o meno della condizione di salto

Programmi e grafi A C B istruzioni in sequenza salto salto condizionato

La programmazione strutturata Negli anni ’60 fu dimostrato che qualsiasi grafo di flusso poteva essere trasformato in un grafo strutturato equivalente (dal punto di vista del risultato) composto solo da sequenze di istruzioni combinate con le due strutture fondamentali la scelta (if-then-else) e il ciclo (do-while)

Linguaggi strutturati Negli anni ’70 sono stati sviluppati linguaggi che non dispongono di istruzioni di salto e quindi consentono di scrivere solo programmi strutturati Matlab segue questa tendenza e dispone dei costrutti di scelta e ciclo (con qualche utile variante) Matlab non dispone dell’istruzione goto

Istruzioni di salto Le istruzioni che compongono un programma vengono eseguite in sequenza Istruzioni di salto (JUMP o goto) consentono di alterare l’ordine di esecuzione Le istruzioni di salto possono essere condizionate dal valore di un dato o di un’espressione Le istruzioni di salto condizionato consentono di scrivere programmi il cui comportamento dipende dai dati Un uso sconsiderato delle istruzioni di salto produce programmi di cui è difficile verificare la correttezza (detti programmi spaghettata)

L’istruzione if-then-else In Matlab, per far eseguire differenti percorsi al flusso di esecuzione, a seconda del risultato di una espressione logica, si usa: if (espressione booleana 1), istruzioni1: elseif (espressione booleana 2), istruzioni2; else, istruzioni3; end;

Semantica L’esecuzione di istruzioni1 avviene solo se l’espressione booleana 1 è vera, viene saltata se l’espressione è falsa L’esecuzione di istruzioni2 avviene solo se l’espressione booleana 1 è false, mentre l’espressione booleana 2 è vera In tutti gli altri casi viene eseguito il blocco di istruzioni istruzioni3, prima di proseguire il flusso di esecuzione

Flusso di esecuzione Flusso di esecuzione espressione 1 Falsa istruzioni 3 Falsa Vera Vera istruzioni 1 istruzioni 2 Flusso di esecuzione

I cicli while e for In Matlab, ci sono due costrutti per eseguire operazioni ripetute (iterate): while (espressione booleana), istruzioni; end; for ct = min_val:max_val, istruzioni; end;

Semantica del ciclo while All’esecuzione viene valutata l’espressione booleana, se è vera viene eseguite le istruzione scritte fra il while ed il corrispondente end. Si valuta poi di nuovo l’espressione booleana; se l’espressione è falsa si procede con l’esecuzione dell’istruzione che segue la fine (end) del ciclo Se le istruzioni non alterano il valore dell’espressione booleana il ciclo non terminerà mai

Semantica del ciclo for Data un valore iniziale val_min ed un valore finale val_max, il ciclo for prima inizializza la variabile ct al valore di val_min, quindi incrementa (aumenta il valore di) ct di una unità fino a che ct non diventa maggiore di val_max. Ad ogni icremento della variabile contatore ct vengono eseguite le istruzioni comprese fra l’inizio del ciclo for e la sua fine identificata da end

Flusso di esecuzione: while espressione 1 Falsa Vera istruzioni 1 Flusso di esecuzione

Flusso di esecuzione: for Contatore maggiore di val_max contatore Contatore minore di val_max istruzioni 1 Flusso di esecuzione