Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Slides:



Advertisements
Presentazioni simili
Selezione (=scelta) con “if-else”
Advertisements

Linguaggio C++ Fondamenti Un primo semplice esempio:
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
Unità di apprendimento 6 Dal problema al programma.
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica FONDAMENTI DI INFORMATICA Domenico Talia
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica PROBLEMI E ALGORITMI LINGUAGGIO MACCHINA.
© 2007 SEI-Società Editrice Internazionale, Apogeo
LA PROGRAMMAZIONE: Algoritmi e programmi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Esercizio fatture.
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Introduzione al linguaggio C
MASSIMO COMUNE DENOMINATORE (M.C.D)
Dal problema al processo risolutivo
Tutorato Elementi di Informatica 2013
7. Strutture di controllo Ing. Simona Colucci
(7x + 8x2 + 2) : (2x + 3) 8x2 + 7x + 2 2x + 3 8x2 + 7x + 2 2x + 3 4x
IL CONCETTO DI ALGORITMO
Dal problema al processo risolutivo
10. Programmazione Ricorsiva Ing. Simona Colucci
7. Strutture di controllo
Unità di apprendimento 7
Commenti Ogni riga che comincia con il simbolo # non viene letta dall’interprete per cui rappresenta un modo per commentare il listato # Questo è un esempio.
Le postcondizioni specificano l’output della funzione.
Approcci nella soluzione di un problema
I FILES AD ACCESSO SEQUENZIALE
Programmazione strutturata
Forme per rappresentare l’algoritmo:
FORMULE E FUNZIONI SU EXCEL
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
I MONOMI.
Dal problema al programma
TERNE PITAGORICHE Obiettivi dell’esercitazione
PON Docente: Maura Roberta Orlando I.C. Zingarelli, Bari
PON Docente: Maura Roberta Orlando I.C. Zingarelli, Bari
Programmazione e Laboratorio di Programmazione
IL CONCETTO DI ALGORITMO
Programmazione e Laboratorio di Programmazione
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Programmare.
Linguaggio C++ Selezione.
iterazione o ricorsione nel pensare per OGGETTI
© 2007 SEI-Società Editrice Internazionale, Apogeo
Dall’analisi del problema alla definizione dell’algoritmo
Strutture di Controllo
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Scrivere programmi corretti
A = InputBox("Immetti un numero")
Ricorsione 16/01/2019 package.
Alberi n-ary Lezioni di C.
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
APPUNTI SUL LINGUAGGIO C
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Astrazione e Concretizzazione
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Strategie di progetto Si possono utilizzare le strategie tipiche dello sviluppo di un processo di ingegnerizzazione (es. ingegneria del software). Strategie.
Informatica CdL Scienze e Tecniche Psicologiche a.a
UML Diagramma statico di una classe
La programmazione strutturata
Programmazione e Laboratorio di Programmazione
Ese 3 (del 3 Aprile 2003).
Corso di Fondamenti di Informatica
Transcript della presentazione:

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E03 Esempi di algoritmi e programmi A. Miola Novembre 2011 http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 Contenuti Progettazione di algoritmi Problemi di ingresso - uscita Lettura e somma di due numeri interi Verifica anno bisestile Il giorno dopo http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Progettazione di algoritmi . . . Scrivere un algoritmo è una attività complessa Una metodologia efficace nella progettazione degli algoritmi è basata sulla strategia top-down (dall’alto verso il basso) la strategia top-down consiste nel decomporre iterativamente un problema da risolvere in sotto-problemi, fino a quando ciascun sotto-problema non possa essere risolto in modo elementare la soluzione congiunta di tutti i sotto-problemi costituisce una soluzione per il problema iniziale http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

. . . Progettazione di algoritmi Progettazione di algoritmi per raffinamenti successivi scrivi una versione iniziale dell’algoritmo una sequenza di uno o più passi raffina ciascun passo dell’algoritmo, fintato che l’algoritmo non sia completo di tutti i dettagli il raffinamento di un passo consiste nella sostituzione del passo con una istruzione semplice o con una istruzione di controllo La progettazione di un algoritmo per raffinamenti successivi è una attività iterativa il raffinamento di un passo può richiedere ulteriori raffinamenti http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Problemi di ingresso-uscita . . . I problemi di ingresso-uscita sono una classe ristretta di problemi i dati di ingresso del problema vengono letti dalla tastiera i dati di uscita calcolati risolvendo il problema vengono visualizzati sullo schermo Un esempio di problema di ingresso-uscita si vuole leggere dalla tastiera una coppia di numeri A e B, calcolarne la somma e visualizzarla sullo schermo Problemi di questo tipo portano alla scrittura di applicazioni (piuttosto che di metodi) http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

. . . Problemi di ingresso-uscita Specifica di un problema di ingresso-uscita dati di ingresso i parametri del problema, che devono essere letti dalla tastiera pre-condizione condizione che descrive le proprietà dei dati di ingresso si assume che sia verificata, nel senso che si ipotizza che i dati di ingresso che vengono inseriti dalla tastiera soddisfano la pre-condizione dati di uscita i risultati del problema, che devono essere visualizzati sullo schermo post-condizione condizione che descrive le proprietà dei dati di uscita rispetto ai dati di ingresso http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Lettura e somma di due numeri interi Problema lettura e somma di due numeri interi Dati di ingresso una coppia di numeri interi, A e B Pre-condizione nessuna Dati di uscita un numero S Post-condizione S è la somma di A e B http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Lettura e somma di due numeri interi Si osservi la natura parametrica del problema della lettura e somma di due numeri interi risolvere questo problema vuol dire identificare e implementare un algoritmo in grado di leggere e calcolare la somma di due numeri interi A e B indipendentemente dagli specifici valori di A e B in generale, i problemi di interesse per l’informatica sono parametrici, nel senso che dipendono da dati i cui valori non sono noti al momento in cui si vuole affrontare e risolvere il problema http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Algoritmo per la lettura e somma di due numeri interi Algoritmo per il problema della lettura e somma di due numeri interi 1. leggi (dalla tastiera) i due numeri interi a e b 2. calcola la somma somma di a e b 3. visualizza somma (sullo schermo) Una sequenza di tre passi il procedimento non è ancora sufficientemente dettagliato – per il nostro esecutore - e quindi i tre passi devono essere ulteriormente raffinati http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Raffinamento del passo 1 Il passo 1 può essere raffinato usando una istruzione di controllo di sequenza 1. leggi (dalla tastiera) i due numeri interi a e b 1.1 leggi il numero intero a dalla tastiera 1.2 leggi il numero intero b dalla tastiera http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Raffinamento dei passi 1.1 e 1.2 I passi ottenuti dal raffinamento del passo 1 possono essere ulteriormente raffinati sulla base delle seguenti considerazioni per la lettura dalla tastiera è possibile usare l’oggetto Lettore.in per la lettura di un numero intero con l’oggetto Lettore.in va usato il metodo int leggiInt() 1. leggi (dalla tastiera) i due numeri interi a e b 1.1 leggi il numero intero a dalla tastiera a = Lettore.in.leggiInt(); 1.2 leggi il numero intero b dalla tastiera b = Lettore.in.leggiInt(); http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Raffinamento dei passi 2 e 3 Il passo 2 può essere raffinato usando una istruzione semplice di assegnazione 2. calcola la somma somma di a e b somma = a + b; Il passo 3 può essere raffinato usando una istruzione semplice di invio di un messaggio all’oggetto System.out 3. visualizza somma (sullo schermo) System.out.println(somma); http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Algoritmo per la lettura e somma di due numeri interi In sintesi, il problema della lettura e somma di due numeri interi può essere risolto dal seguente algoritmo 1. leggi (dalla tastiera) i due numeri interi a e b 1.1 leggi il numero intero a dalla tastiera a = Lettore.in.leggiInt(); 1.2 leggi il numero intero b dalla tastiera b = Lettore.in.leggiInt(); 2. calcola la somma somma di a e b somma = a + b; 3. visualizza somma (sullo schermo) System.out.println(somma); http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Variabili e oggetti per l’algoritmo L’algoritmo per la lettura e somma di due numeri interi fa uso delle seguenti variabili e oggetti la variabile intera a rappresenta il primo numero intero letto dalla tastiera la variabile intera b rappresenta il secondo numero intero letto dalla tastiera la variabile intera somma rappresenta la somma di a e b l’oggetto Lettore.in che rappresenta la tastiera, da cui vanno letti i dati per utilizzare questo oggetto non è necessaria nessuna variabile l’oggetto System.out che rappresenta lo schermo, su cui vanno visualizzati i risultati http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Programma per la lettura e somma di due numeri interi L’algoritmo per la lettura e somma di due numeri interi può essere codificato da una applicazione Java l’algoritmo viene implementato dal metodo main import fiji.io.*; /* Applicazione che legge dalla tastiera due numeri interi * e ne calcola e visualizza la somma. */ class SommaDueNumeri { public static void main(String[] args) { ... } http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Programma per la lettura e somma di due numeri interi public static void main(String[] args) { int a; // il primo numero intero int b; // il secondo numero intero int somma; // la somma di a e b /* leggi dalla tastiera i due numeri interi a e b */ System.out.println("Scrivi due numeri interi"); /* leggi il numero intero a dalla tastiera */ a = Lettore.in.leggiInt(); /* leggi il numero intero b dalla tastiera */ b = Lettore.in.leggiInt(); /* calcola la somma somma di a e b */ somma = a+b; /* visualizza somma (sullo schermo) */ System.out.print("La somma dei due numeri è "); System.out.println(somma); } http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempio: Verifica se un anno è bisestile Problema Scrivere un’applicazione che verifichi se un certo anno sia bisestile Dati di ingresso Anno Pre-condizione L’anno è un intero positivo maggiore di 1600 Dati di uscita Valore booleano: Post-condizione true se l’anno è bisestile, altrimenti false http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 Condizioni Un anno (>1600) è bisestile se: è divisibile per 4; (condizione non sufficiente) L’anno 2004 è bisestile L’anno 1900 non è bisestile è divisibile per 100 (condizione non ancora sufficiente); L’anno 2000 è bisestile oltre ad essere divisibile per 4, se è divisibile per 100, allora deve essere necessariamente divisibile anche per 400; http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Algoritmo per verificare se un anno è bisestile Dato un numero intero data, verifico che tutte le condizioni siano verificate: verifica che data sia divisibile per 4 se true allora verifica che data sia divisibile per 100 verifica che data è anche divisibile per 400 se true allora restituisci “bisestile” altrimenti restituisci “non bisestile” altrimenti restituisci “bisestile” http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 Codifica Java Realizziamo un metodo bisestile che ha come unico parametro di input un intero data, che rappresenta un anno, e restituisce true se l’anno è bisestile, altrimenti false http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 Il metodo bisestile public static boolean bisestile(int data){ boolean bis; //vero se l’anno e’ bisestile if(data%4==0){ // se è divisibile per 4 if(data%100==0){ /* se è divisibile per 100 */ /* allora per essere bisestile */ /* deve essere divisibile per 400 */ if(data%400==0) bis = true; else bis = false; } /* è divisibile per 4 ma non per 100 */ else bis = true; /* non e’ divisibile per 4 */ else bis = false; return bis; } http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

La classe applicazione Bisestile import fiji.io.*; /* Applicazione che verifica se un anno e' bisestile */ class Bisestile{ public static void main(String[] args){ //precondizione: anno >1600 int anno; //INPUT /*lettura dei parametri di input */ System.out.println("Scrivi un intero > 1600 "); anno = Lettore.in.leggiInt(); if (bisestile(anno)) System.out.println("e' bisestile"); else System.out.println("NON e' bisestile"); }//end main http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Espressione per anno bisestile Tutto si può ridurre ad una espressione L’anno deve essere divisibile per 4 (anno%4==0) && Se l’anno e’ divisibile per 100 allora e’ divisibile anche per 400 (anno%100==0) => (anno%400==0) A => B equivale a !A || B (anno%100==0) => (anno%400==0) equivale a !(anno%100==0) || (anno%400==0) Complessivamente (anno%4==0) && (!(anno%100==0) || (anno%400==0)) http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 Attenzione In questa applicazione non vi è nessuna verifica delle precondizioni !!! L’utente dell’applicazione Bisestile deve conoscere e rispettare le precondizioni fissate La responsabilità del rispetto delle precondizioni è dell’utente e non del programmatore della applicazione Il programmatore affida all’utente la questa responsabilità http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempio: Il giorno dopo Problema Applicazione che calcola la data del giorno successivo ad una data ricevuta in input Esempio: 13/1/2005  14/1/2005 Dati di ingresso La data di cui si vuole calcolare il giorno successivo espressa tramite tre numeri interi che rappresentano il giorno, il mese e l’anno Pre-condizione L’anno è un intero positivo maggiore di 1600 Il mese è un intero positivo minore o uguale di 12 Il giorno è un intero positivo generalmente minore o uguale di 31, ma questo valore, come noto, è funzione del mese. Dati di uscita Il giorno successivo http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 Condizioni Una data in input è rappresentata da tre diversi numeri interi: giorno, mese, anno. Generalmente la data del giorno dopo viene calcolata incrementando di uno il valore del giorno. 13/1/2005  14/1/2005 Dobbiamo fare attenzione alle condizioni limite: Se il giorno corrisponde all’ultimo del mese. 29/2/2004  1/3/2004 Se il giorno è l’ultimo del mese ed il mese è dicembre. 31/12/2004  1/1/2005 http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 L’algoritmo . . . Letti giorno, mese e anno verifico che non mi trovo in una condizione limite e incremento il giorno. Impiego la variabile intera giorni_del_mese per rappresentare il massimo numero dei giorni per il mese. http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 . . . L’algoritmo Verifico che giorno sia uguale a giorni_del_mese Se true, allora giorno viene posto a 1 verifico che mese sia uguale a 12 (dicembre) se true, allora mese viene posto a 1 incremento anno di 1 altrimenti, incremento mese di 1 Altrimenti incremento giorno di 1 http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Esempi di algoritmi e programmi - 3 I giorni di un mese Per calcolare il massimo numero di giorni per un dato mese, impiego il metodo GiorniMese, che tra le altre cose terrà conto se un anno è bisestile o meno: public static int GiorniMese(int mese,int anno){ int giorni; if(mese==2) if(Bisestile.bisestile(anno)) giorni = 29; else giorni = 28; else if(mese==4 || mese==6 || mese==9 || mese==11) giorni = 30; else giorni = 31; return giorni; } http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

La classe: IlGiornoDopo . . . import fiji.io.*; /* Applicazione che calcola la data del giorno dopo */ class IlGiornoDopo{ public static void main(String[] args){ int giorno, mese, anno; //INPUT int g,m,a;//OUTPUT int giorni_del_mese; //quanti giorni ha il mese m /*lettura della data di partenza senza controllo * sulla correttezza dei dati */ giorno = Lettore.in.leggiInt(); mese = Lettore.in.leggiInt(); anno = Lettore.in.leggiInt(); http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

. . . La classe: IlGiornoDopo a=anno; //nel caso in cui non vengano modificate m=mese; /* calcolo dei giorni del mese */ giorni_del_mese=GiorniMese(mese, anno); /* calcolo della data successiva */ /* se il giorno e' l'ultimo del mese */ if (giorno==giorni_del_mese){ g=1; if (mese==12){ //ultimo giorno dell'anno m=1; a=anno+1;} else m=mese+1; } else //nel caso generale basta incrementare il giorno g=giorno+1; System.out.println(g + " " +m+ " " + a); http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3

Riferimenti al libro di testo Per lo studio di questi argomenti si fa riferimento al libro di testo, e in particolare al capitolo 5 su Problemi, algoritmi e oggetti Con particolare riferimento ai seguenti paragrafi 5.2.3 e 5.2.4 http://www.dia.uniroma3.it/~java/fondinf/ Esempi di algoritmi e programmi - 3