Algoritmi, linguaggi e programmi. Emilio Di Giacomo e Walter Didimo

Documenti analoghi
Introduzione alla programmazione. Walter Didimo

Introduzione a Java. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

LINGUAGGI DI ALTO LIVELLO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Il linguaggio di programmazione Python

LINGUAGGI DI PROGRAMMAZIONE E CODIFICA PROGRAMMI

Linguaggi di Programmazione

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Linguaggi di programmazione

Unità di apprendimento 6. Il software: dal linguaggio alla applicazione

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

la traduzione dei programmi ed introduzione a Java

Linguaggi di programmazione

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Programmazione C Massimo Callisto De Donato

Concetti Introduttivi. Il Computer

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

PROGRAMMAZIONE STRUTTURATA

Corso di Informatica di Base

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Programmazione: Sommario

Linguaggi di alto livello, compilatori e interpreti

Traduzione ed Interpretazione

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Algoritmi e Linguaggi

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Programmazione. Andrea Passerini Informatica. Programmazione

Formalismi per la descrizione di algoritmi

La Programmazione. Programmare Macchine Astratte Compilazione / Interpretazione Java. Laboratorio di Programmazione - Luca Tesei

CONCETTI FONDAMENTALI

Fondamenti di Algoritmi

Corso di Linguaggi di Programmazione + Laboratorio

Unità Didattica 2 I Linguaggi di Programmazione

Capitolo 3 L elaborazione e la strutturazione dell informazione

Algoritmi e soluzione di problemi

Linguaggi di Programmazione

Rappresentazione con i diagrammi di flusso (Flow - chart)

Cosa è l Informatica?

Informatica. Terzo anno Prof. A. Longheu

programmazione A.A Elementi di Informatica ( Lezione VI ) Linguaggi di programmazione Prof. Giovanni Gallo Dr.

Macchine astratte, linguaggi, interpretazione, compilazione

Sommario. Linguaggi per la rappresentazione di algoritmi. Linguaggi formali. Sintassi e semantica: esempio. Linguaggio naturale: sintassi

; programma MOV AX, DATO_1. ; somma al contenuto dell' accumulatore il contenuto del registro B

Introduzione alla Programmazione. Giselda De Vita

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

LABORATORIO DI INFORMATICA

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Linguaggi di programmazione e astrazione

Linguaggi di programmazione

Linguaggi, compilatori e interpreti

Informatica e Bioinformatica: Algoritmi

Marta Capiluppi Dipartimento di Informatica Università di Verona

Teoria dell Informazione

Primi passi col linguaggio C

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Struttura del calcolatore

Lezione 8. Soluzione di un problema Problema. Soluzione di un problema. Comprensione del Problema. Analisi. Introduzione agli algoritmi

Corso di Fondamenti di Informatica Linguaggi di Programmazione

PROBLEMI ALGORITMI E PROGRAMMAZIONE

Programmazione strutturata

Laboratorio di Programmazione

Corso Programmazione

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Il calcolatore. Architettura di un calcolatore (Hardware)

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione alla programmazione

Fondamenti VBA. Che cos è VBA

Informatica. Come si risolve un problema?

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Sorgenti di errore. Laboratorio di Informatica 1

Concetti di base dell ICT

FONDAMENTI DI INFORMATICA

Il software: dall algoritmo al linguaggio macchina

1 Esercizi in pseudocodice

INFORMATICA. Scienza degli elaboratori elettronici (Computer. informazione

COMPILAZIONE. Tarsformazione di linguaggi

Dall algoritmo al programma

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

10: I LINGUAGGI di PROGRAMMAZIONE PARTE 1

Algoritmi e Programmi

Sviluppo di programmi

EI è parte della nostra vita quotidiana: es. ricerca di un numero di telefono. Algoritmo. Esecutore. Elenco Telefonico

Sommario. Problema computazionale Sviluppo software Algoritmi. Istruzioni Sequenziali, Condizionali, Cicliche; Javascript

Elementi di programmazione Algoritmi Flow Chart, Fasi della programmazione Linguaggi Elementi di programmazione ad oggetti

Fondamenti di programmazione!! Parte 2!

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

Introduzione al funzionamento di un calcolatore elettronico

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

Informatica. Informatica. Problema - soluzione. Algoritmi, dati e programmi. Introduzione ai concetti di: Distinguiamo tra: problema

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Elementi di informatica

LA CODIFICA DELLE INFORMAZIONI

Transcript:

Algoritmi, linguaggi e programmi Emilio Di Giacomo e Walter Didimo

Risolvere i problemi Il calcolatore permette di risolvere molti problemi, ma sfortunatamente non tutti Il concetto di algoritmo consente di stabilire quali problemi sono risolvibili con un calcolatore nel seguito definiremo il concetto di algoritmo

Esecutore Supponiamo dato un qualche esecutore dispositivo in grado di eseguire un insieme predefinito di azioni elementari, dette istruzioni ogni istruzione è eseguita in un tempo finito Un algoritmo per tale esecutore è una sequenza finita di istruzioni del suo insieme: l algoritmo prende in ingresso alcuni dati iniziali, detti input dell algoritmo l algoritmo termina generando in uscita dei dati, detti output dell algoritmo

Schema di algoritmo esecutore input algoritmo output T iniziale T finale

Ancora sugli esecutori Il concetto di esecutore è generalizzabile ad esempio, l esecutore può essere un ginnasta che sa eseguire semplici esercizi Algoritmo: Esercizio-Ginnico input: <posizione iniziale> output: <posizione finale> 1. solleva braccio destro di 90 2. solleva braccio sinistro di 90 3. abbassa braccio destro di 90 4. abbassa braccio sinistro di 90 o ancora un cuoco, che sa eseguire un procedimento (algoritmo) per preparare una pietanza (input = ingredienti, output = pietanza)

Algoritmo: proprietà non ambiguità: ogni istruzione deve essere univocamente interpretabile dall esecutore eseguibilità: ogni istruzione deve essere effettivamente tra quelle eseguibili dall esecutore terminazione: l algoritmo deve terminare in un tempo finito univocità: il risultato finale dell algoritmo (output) deve essere univocamente determinabile (in funzione dell input)

Problemi e Algoritmi Indichiamo con P un problema esprimibile in termini di input ed output esempio: dato un intero positivo n (input), stabilire se n è un numero primo (l output è una risposta del tipo vero/falso) P è risolvibile tramite un esecutore E se esiste un algoritmo A per E in grado di fornire un output di P corretto per ogni possibile input di P input ed output di A coincidono con quelli di P

Il calcolatore come esecutore Un calcolatore è un esecutore che sa svolgere istruzioni molto elementari: scrivi un numero (binario) in una cella di memoria o in un registro; leggi un numero da una cella di memoria o da un registro; confronta due numeri; somma/sottrai/moltiplica/dividi due numeri; salta ad una certa istruzione, ecc.

Algoritmi per calcolatore Un algoritmo per un calcolatore è dunque una sequenza delle sue istruzioni elementari. il concetto di cella di memoria è rimpiazzato dal concetto più astratto di variabile, contenitore che può memorizzare un dato di un certo di tipo Il dato memorizzato da una variabile può variare nel tempo, proprio come il contenuto di una cella Un algoritmo può essere descritto tramite uno pseudo-codice, formalismo generale che non fa riferimento ad uno specifico linguaggio di programmazione (vedi oltre)

Esempio di algoritmo flow chart Algoritmo: Calcola-Media input: S = {x 1, x 2,, x n } R (sequenza di numeri) output: m s R (media aritmetica dei numeri di S) 1. m s x 1 2. n S 3. i 2 4. if (i > n) goto 8 5. m s m s + x i 6. i i + 1 7. goto 4 8. m s m s / n 9. halt pseudo-codice

Descrizioni semplificate Algoritmo: Massimo-Tra-Tre-Numeri input: a,b,c R output: m = max {a, b, c} 1. m max {a, b} 2. m max {m, c} 3. halt non sono istruzioni elementari, ma sappiamo che sono scomponibili in istruzioni elementari Algoritmo: Massimo-Tra-Due-Numeri input: a,b R output: m = max {a, b} 1. m a 2. if (a > b) goto 4 3. m b 4. halt

Efficienza di un algoritmo Il tempo di esecuzione effettivo di un algoritmo da parte di un calcolatore dipende fortemente dalle caratteristiche fisiche del calcolatore Il tempo di calcolo di un algoritmo si esprime attraverso il numero di istruzioni elementari richieste da una sua esecuzione questo numero va espresso come funzione della dimensione dell input il tempo di calcolo fornisce una stima teorica dell efficienza dell algoritmo

Problemi trattabili e non I problemi risolvibili tramite un calcolatore si classificano in: problemi trattabili: se è noto un algoritmo con tempo di calcolo polinomiale nella dimensione dell input problemi non trattabili: se sono noti solo algoritmi con tempo di calcolo esponenziale nella dimensione dell input funzione temporale polinomiale funzione temporale esponenziale

Linguaggi e programmi Per poter essere eseguito da un calcolatore, un algoritmo deve essere trascritto in una forma che sia ad esso comprensibile (direttamente o indirettamente): l insieme delle regole di trascrizione (cioè il linguaggio utilizzato a tal fine) si chiama linguaggio di programmazione Il risultato della trascrizione si chiama programma Il procedimento di trascrizione si chiama implementazione colui che scrive il programma si chiama programmatore

Linguaggi di programmazione Un linguaggio di programmazione definisce due tipi di regole: regole sintattiche: stabiliscono in che modo si possono scrivere programmi sintatticamente (cioè grammaticalmente ) corretti, ossia quali sono i costrutti sintatticamente validi regole semantiche: stabiliscono quale sia l effetto di un costrutto sintatticamente valido; permettono dunque di capire quale sarà il comportamento del calcolatore quando eseguirà un programma sintatticamente corretto.

Classificazione dei linguaggi Esistono molti linguaggi di programmazione, che è possibile classificare in tre categorie principali, in base al livello di astrazione dal calcolatore programmatore linguaggi di alto livello linguaggi assemblativi linguaggi macchina linguaggi di basso livello calcolatore

Linguaggi macchina I linguaggi macchina sono gli unici che permettono di realizzare programmi direttamente comprensibili da un calcolatore Ogni microprocessore dispone di un insieme ristretto di istruzioni macchina molto semplici, eseguibili direttamente in hardware le istruzioni macchina e gli eventuali parametri sono codificati con cifre binarie architetture CISC: relativamente alto numero di istruzioni di elevata complessità (es. intel x86) architetture RISC: insiemi ridotti di istruzioni di estrema semplicità (es. SPARC)

Linguaggi assemblativi I linguaggi assemblativi hanno un livello di astrazione simile a quello dei linguaggi macchina, ma sono linguaggi mnemonici ogni istruzione è codificata con un nome invece che con una sequenza di cifre binarie ciò aiuta il programmatore nel ricordare le tipologie di istruzioni Un programma realizzato con linguaggio assemblativo deve essere tradotto in linguaggio macchina prima di poter essere eseguito la traduzione avviene per opera di un software chiamato assemblatore (c è tipicamente un rapporto uno a uno tra una istruzione assemblativa e una istruzione macchina)

Linguaggi assemblativi: esempio Prog: Massimo-Tra-Due-Numeri ---------------------------- 1 LOAD R1, 1500 2 LOAD R2, 1501 3 STORE R1, 2000 4 SUB R1, R2 5 JGZERO R1, 7 6 STORE R2, 2000 7 HALT ---------------------------- indirizzo di un registro indirizzo di una cella di memoria etichetta istruzione I due numeri da confrontare (input) si trovano inizialmente nei registri 1500 e 1501; l output viene scritto nel registro 2000

Linguaggi di alto livello I linguaggi di alto livello permettono di scrivere programmi in modo molto più semplice ogni istruzione può corrispondere a molte istruzioni macchina sono più adatti alla scrittura di programmi complessi Un programma scritto con un linguaggio L di alto livello si chiama codice sorgente in L

Traduttori per linguaggi di alto livello Per poter essere eseguito, un codice sorgente in L deve essere tradotto in un equivalente codice macchina, detto appunto codice eseguibile Un traduttore per L è un software che genera automaticamente il codice eseguibile a partire dal codice sorgente in L Esistono due principali categorie di traduttori: compilatori interpreti

Compilatori I compilatori effettuano l intera traduzione del codice sorgente prima di iniziare l esecuzione: la fase di traduzione di chiama compilazione durante la compilazione vengono rilevati e segnalati eventuali errori sintattici il risultato della compilazione dipende dalla specifica piattaforma (linguaggio macchina + sistema operativo) Una volta tradotto, il programma può essere eseguito più e più volte (alle massime prestazioni possibili per lo specifico calcolatore)

Schema sulla compilazione

Interpreti Gli interpreti traducono una istruzione di alto livello alla volta e subito la eseguono la fase di traduzione e di esecuzione si alternano non occorre attendere per iniziare ad eseguire il programma, ma l esecuzione risulta complessivamente meno efficiente

Paradigmi di programmazione I linguaggio di alto livello possono basarsi su diverse logiche di definizione dei programmi, dette paradigmi di programmazione Principali tipi di paradigmi: imperativo (es: FORTAN, COBOL, C, Pascal, ): il programma è una sequenza di comandi per il calcolatore paradigmi di ispirazione matematica: funzionale (es: LISP) o logica (es: PROLOG) a oggetti (es. C++, C#, Delphi, Java, Python, ): il programma permette di definire oggetti virtuali e di farli interagire

Programmazione strutturata La programmazione strutturata è una metodologia di programmazione affermatasi a partire dagli anni 70: flusso di esecuzione più lineare possibile; evitare l uso di salti (goto) unico punto di ingresso e unico punto di uscita per ogni sotto-procedura che logicamente rappresenti l implementazione di un qualche algoritmo

Programmazione strutturata Tutti gli attuali linguaggi imperativi e ad oggetti supportano la programmazione strutturata, offrendo due tipologie di istruzioni di controllo: istruzioni condizionali: eseguono il test di una condizione, permettendo di scegliere la prossima sequenza di istruzioni da eseguire (tra due possibili), a seconda che la condizione sia vera o falsa; istruzioni iterative: ripetono una certa sequenza di istruzioni per un certo numero di volte (fissato a priori o dipendente dal perdurare o dal decadere di una condizione).

Programmazione strutturata: esempio Algoritmo: Massimo-Tra-Due-Numeri input: a, b R output: m = max{a,b} 1. if (a > b) then 2. m a 3. else 4. m b 5. halt istruzione condizionale

Programmazione strutturata: esempio Algoritmo: Calcola-Media input: S = {x 1, x 2,, x n } R (sequenza di numeri) output: m s R (media aritmetica dei numeri di S) 1. m s x 1 2. n S 3. i 2 4. while (i n) do { 5. m s m s + x i 6. i i + 1 7. } 8. m s m s / n 9. halt istruzione iterativa

Il linguaggio Java Java è un linguaggio orientato agli oggetti creato agli inizi degli anni 90 dalla Sun Microsystem presentato ufficialmente nel 1995 diffusosi rapidamente in ambito industriale e accademico Introduce la Java Virtual Machine (JVM): macchina virtuale che simula un calcolatore reale un codice sorgente in Java viene compilato nel codice macchina per la JVM (bytecode) il bytecode non dipende dalla piattaforma; il bytecode viene eseguito da un emulatore della JVM (che effettua la traduzione in linguaggio macchina)

Schema di traduzione Java