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



Documenti analoghi
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

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

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

Funzionalità di un Algoritmo

Fasi di creazione di un programma

Descrizione di un algoritmo

Nozione di algoritmo. Gabriella Trucco

Lezione 8. La macchina universale

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

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

Come ragiona il computer. Problemi e algoritmi

Algoritmi, dati e programmi

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

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

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

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

Introduzione al MATLAB c Parte 2

Introduzione alla programmazione in C

Appunti di Sistemi Elettronici

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

Algoritmi. Maurizio Palesi. Maurizio Palesi 1

Gli algoritmi: definizioni e proprietà

ALGORITMI e PROGRAMMI Programmazione: Lavoro che si fa per costruire sequenze di istruzioni (operazioni) adatte a svolgere un dato calcolo

Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi.

Metodologie di programmazione in Fortran 90

Algoritmi e diagrammi di flusso

Informatica. appunti dalle lezioni del 20/09/2011 e del 27/09/2011

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:

FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira

TECNOLOGIE INFORMATICHE DELLA COMUNICAZIONE ORE SETTIMANALI 2 TIPO DI PROVA PER GIUDIZIO SOSPESO PROVA DI LABORATORIO

Corso di Esercitazioni di Programmazione

Appunti sulla Macchina di Turing. Macchina di Turing

Introduzione. Informatica B. Daniele Loiacono

DAL PROBLEMA AL PROGRAMMA

Ricorsione. (da lucidi di Marco Benedetti)

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

1

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

Dispense del corso di Introduzione all Informatica della Facoltà Di Scienze Matematiche, Fisiche e Naturali dell Università della Calabria

DAL DIAGRAMMA AL CODICE

Corso di INFORMATICA 2 (Matematica e Applicazioni)

GESTIONE INFORMATICA DEI DATI AZIENDALI

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.

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

La programmazione. Sviluppo del software

Dimensione di uno Spazio vettoriale

INFORMATICA 1 L. Mezzalira

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

Laboratorio di Informatica

GUIDA BASE DI PASCAL

LEZIONE: Pensiero Computazionale. Tempo della lezione: Minuti. - Tempo di preparazione: 15 Minuti.

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

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo

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

Dispensa di Informatica I.1

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

INFORMATICA GENERALE. Prof Alberto Postiglione Dipartim. Scienze della Comunicazione Univ. Salerno. Università degli Studi di Salerno

MANUALE ESPERTI PON 2007/2013

E F G H I

FONDAMENTI di INFORMATICA L. Mezzalira

Codifiche a lunghezza variabile

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

Scienze della Comunicazione Università di Salerno. UD 3.2a: Introduzione alla Programmazione

+ / operatori di confronto (espressioni logiche/predicati) / = > < Pseudo codice. Pseudo codice

Formalismi per la descrizione di algoritmi

Ottimizzazione Multi Obiettivo

Automazione Industriale (scheduling+mms) scheduling+mms.

Trasformazione dei Processi in Progetti DIB 1

Strutture di controllo del flusso di esecuzione

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Informatica

Identificare le classi in un sistema

Informatica per le discipline umanistiche 2 lezione 14

Introduzione al corso

Concetto di Funzione e Procedura METODI in Java

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

u 1 u k che rappresenta formalmente la somma degli infiniti numeri (14.1), ordinati al crescere del loro indice. I numeri u k

Appunti del corso di Informatica 1 (IN1 Fondamenti) 2 Introduzione alla programmazione

Database. Si ringrazia Marco Bertini per le slides

LINGUAGGI DI PROGRAMMAZIONE

TRAGUARDI PER LO SVILUPPO DELLE COMPETENZE AL TERMINE DELLA SCUOLA PRIMARIA

Le equazioni. Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete.

Fondamenti di Informatica. Allievi Automatici A.A Nozioni di Base

Esercizio: numero primo

Al termine del lavoro ad uno dei componenti del gruppo verrà affidato l incarico di relazionare a nome di tutto il gruppo.

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

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Matematica generale CTF

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

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

Parte I. Prima Parte

Modellazione dei dati in UML

Informazione e dato. Gabriella Trucco

Programmazione I - Laboratorio

DFD DISPENSA DEL CORSO DI SISTEMI INFORMATIVI UNIVERSITÀ DEGLI STUDI DI VERONA FACOLTÀ DI MM.FF.NN LAUREA SPECIALISTICA IN INFORMATICA

Strumenti di modellazione. Gabriella Trucco

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

Linguaggi di programmazione

Corso di Informatica

Transcript:

DAL PROBLEMA ALL'ALGORITMO AL PROGRAMMA SCRITTO IN Come Scopo principale dell informatica è risolvere problemi con i calcolatori. Non tutti i problemi sono risolvibili con i calcolatori. Si può dimostrato che per alcuni problemi non esiste alcun metodo risolutivo automatizzabile. Alcuni problemi possono non essere risolvibili con i calcolatori perchè hanno infinite soluzioni che richiederebbero un tempo infinito per essere calcolate/stampate. Per altri problemi potrebbe invece non essere stato ancora trovato un metodo di calcolo risolutivo. Per risolvere un problema con i calcolatori occorre: - trovare un procedimento automatizzabile (algoritmo) per risolverlo - implementare l algoritmo in un linguaggio di programmazioneentare Una definizione esatta di algoritmo va oltre lo scopo di questo corso. Qui ci accontentiamo della seguente definizione. Un algoritmo è una sequenza di istruzioni perfettamente comprensibili ed eseguibili tali che, se eseguite in un ordine specificato e determinato, permettono la soluzione di un problema in un numero finito di passi. In questo senso anche una ricetta di cucina molto precisa o le istruzioni per far funzionare un elettrodomestico (se ben scritte e comprensibili) sono esempi di algoritmi. PROPRIETÀ FONDAMENTALI DI UN ALGORITMO 1. istruzioni non ambigue: ogni operazione prevista dall algoritmo deve essere univocamente interpretabile dall esecutore. Questo implica che i risultati ottenuti dall'esecuzione dell'algoritmo non cambiano al variare dell esecutore (macchina/persona); 2. istruzioni eseguibili: ogni operazione deve essere eseguibile con le risorse a disposizione dell'esecutore; 3. ordine di esecuzione delle istruzioni deterministico; 4. numero finito di passi di esecuzione: questo implica che il numero totale di istruzioni da eseguire, per ogni insieme di dati di ingresso, è finito e le operazioni da esse specificate devono essere eseguite un numero finito di volte. PROPRIETÀ AUSPICABILI 1. corretto; 2. efficiente: fa uso limitato di risorse (tempo di esecuzione e quantità di memoria utilizzata); 3. leggibile: facilmente comprensibile; 4. modificabie: l algoritmo deve essere facilmente modificabile, a fronte di (piccole) modifiche nelle specifiche del problema risolto dall algoritmo.

Problema: calcolare le radici di un'equazione di 2 o grado. Algoritmo: 1. Inizio dell algoritmo. 2. Acquisire i coefficienti a,b,c. 3. Calcolare il valore d = b^2-4ac. 4. Se d < 0, allora non esistono radici reali; eseguire l istruz. 8. 5. Se d = 0, allora esistono due radici reali coincidenti, x1 = x2 = -b/2a; eseguire l istruz. 7. 6. Se d > 0, allora esistono due radici reali distinte, x1 = (-b+ d )/2a, x2 = (-b- d)/2a. 7. Comunicare all esterno i valori x1 e x2. 8. Fine dell algoritmo. Le istruzioni eseguibili da un calcolatore moderno possono essere suddivise in 5 categorie: - istruzioni di inizio/fine esecuzione; - istruzioni di ingresso(lettura)/uscita(scrittura); trasmettono dati tra l'algoritmo ed il mondo esterno; - istruzioni operative; producono un risultato se eseguite; - istruzioni di salto; alterano il normale ordine sequenziale di esecuzione delle istruzioni; - istruzioni condizionali, o di controllo; controllano il verificarsi di determinate condizioni ed in base al risultato del controllo determinano quale istruzione va eseguita. Obiettivo: Rappresentare l'algoritmo in C Fase intermedia: Rappresentare l'algoritmo con diagrammi di flusso acquisire a, b, c calcolare d = b 2-4 a c si non ci sono radici reali d < 0? no si d = 0 no x1 = x2 = -b /2 a x1 = (-b+ d)/2a x2 = (-b- d)/2a stampare x1 e x2

Ecco l'algoritmo scritto in C: Es. Cosa specifica questo diagramma? i = 1 i 10 si stampa i i = i + 1 no Ecco come specificarlo in C in due modi diversi: per risolvere il prolema di stampare gli interi da 1 a 10 su righe distinte.

Diagrammi di flusso (flow chart / schemi a blocchi) Formalismo che consente di rappresentare graficamente gli algoritmi. Un diagramma di flusso descrive le istruzioni da eseguire ed il loro ordine di esecuzione. Le azioni che l'algoritmo deve compiere vengono descritte usando simboli grafici diversi detti blocchi (le convenzioni non sono universali), connessi da frecce dette linee del flusso di esecuzione delle azioni. I principali blocchi sono: Triangolo o rettangolo spuntato (ist. inizio/fine) Rettangolo (ist. operativa) Rombo (ist. condizionale ) Altri simboli possono essere: Un diagramma di flusso appare, quindi, come un insieme di blocchi di forme diverse che contengono le istruzioni da eseguire, collegati fra loro da linee orientate che specificano la sequenza in cui i blocchi devono essere eseguiti (flusso del controllo di esecuzione o sequenza di computazione). Ogni blocco ha uno o più rami in ingresso ma uno solo in uscita a meno che si tratti di un blocco condizionale che ne ha almeno due. Vi sembra chiaro questo flow-chart?

Struttura di controllo: è combinazione di blocchi, avente un solo ramo in entrata ed in uscita (single entry/single-exit), così il punto di uscita di una struttura di controllo diventa il punto di ingresso di una successiva. STRUTTURE DI CONTROLLO IN C Sequenza: Selezione: Iterazione: Il linguaggio C ha molte strutture per il controllo dell esecuzione: sequenziale (di default); tre di selezione (if, if/else, switch) tre di iterazione (while, do/while, for)

ESEMPIO DI USO DI IF int x, y, max; puts("scrivi due interi:"); scanf("%d%d", &x,&y); max = x; if (y > x) max = y; printf("il massimo e %d.\n",max); ESEMPIO DI USO DI IF/ELSE int x,y, max; puts("scrivi due interi:"); scanf("%d%d", &x,&y); if (y >= x) max = y; else max = x; printf("il massimo e' %d.\n",max); ESEMPIO DI USO DI SWITCH int giorno; printf( Dammi un intero: ); scanf( %d,&giorno); printf( Il giorno e' ); switch(giorno) case 1: puts( lunedi'. ); break; case 2: puts( martedi'."); break; case 3: puts( mercoledi'."); break; case 4: puts( giovedi'."); break; case 5: puts( venerdi'."); break; case 6: puts( sabato."); break; case 7: puts( domenica."); break; default: puts( non valido.");

ESEMPIO DI USO DI WHILE int i = 2; while (i <= 10) printf("i = %d\n",i); i = i*2; ESEMPIO DI USO DI DO int i = 2; do printf("i = %d\n",i); i *= 2; while(i <= 10); ESEMPIO DI USO DI FOR int i; for (i=2; i <= 10; i*=2) printf("i = %d\n",i); Regole da seguire per fare programmazione strutturata con il C: 1) Cominciare con la specifica del problema da risolvere, in pratica un rettangolo (azione). 2) Ogni rettangolo (azione) può essere rimpiazzato da due rettangoli (azioni) in sequenza (struttura di controllo sequenza). 3) Ogni rettangolo (azione) può essere una struttura di controllo if, if/else, switch, while, do/while o for. 4) Le regole 2 e 3 possono essere applicate in ogni ordine e più volte. Specificano raffinamenti successivi top-down.

PROGRAMMAZIONE STRUTTURATA Teorema di Böhm-Jacopini: Tutti gli algoritmi possono essere scritti usando solamente tre strutture di controllo: Una Sequenziale Una di Selezione Una di Ripetizione I linguaggi di programmazione tendono però a dotarsi di più strutture di controllo per realizzare programmi più leggibili, più comprensibili e più brevi. Questo teorema, il cui interesse è soprattutto teorico, ha contribuito alla critica dell'uso sconsiderato delle istruzioni go to ed alla definizione delle linee guida della programmazione strutturata, sviluppate negli anni '70. Nella programmazione strutturata potremmo assumere come strutture di controllo fondamentali le tre seguenti:

oppure le tre seguenti: Vi sembra strutturato questo diagramma?

Esempi di passaggio da uno schema a blocchi non strutturato ad uno strutturato: