Fondamenti di Informatica 1 - uniroma2.it · Diagramma a blocchi o flow chart IL Flow-chart è la...

59
Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011

Transcript of Fondamenti di Informatica 1 - uniroma2.it · Diagramma a blocchi o flow chart IL Flow-chart è la...

Fondamenti di Informatica 1

Prof. B.ButtarazziA.A. 2010/2011

28/03/2011 2

Sommario

• Istruzioni di controllo– Iterative– Condizionali

• Algoritmi e Diagrammi di flusso• Esercizi

28/03/2011 3

Istruzioni iterative

whiledo whilefor

28/03/2011 4

Semantica del ciclo while

istruzione

vero

condizione

falso

E' composto da una condizione di controllo (o uscita) e da un corpo del ciclo. All'ingresso del ciclo viene verificata la validità della condizione di controllo. Se la condizione è vera vengono eseguite tutte le istruzioni contenute nel corpo. Il ciclo termina quando la condizione, costituita da un'espressione booleana, restituisce il valore false.

28/03/2011 5

Semantica del ciclo for

istruzione

vera

condizione

falsa

incremento

inizializzazione

28/03/2011 6

28/03/2011 7

28/03/2011 8

int k=0;do{

System.out.println(k);k++;

} while (k<=10);

28/03/2011 9

Confronto tra i cicli

28/03/2011 10

Confronto tra i cicli

La differenza fra while e do-whileconsiste nel fatto che:• il corpo del ciclo nel do-while viene

sempre eseguito almeno una volta (cioè la prima volta);

• nel while invece se la condizione booleana è falsa il corpo del ciclo non viene mai eseguito.

28/03/2011 11

Istruzioni condizionali

ifif elseif else if

28/03/2011 12

if ( boolean-expression ) istruzione1;

if

Espressionebooleana

Continuazione

istruzione1

true

falseContinuazione del programma

28/03/2011 13

if ( boolean-expression ) istruzione1;

elseistruzione2;

If-else

Espressionebooleana

istruzione2istruzione 1

true false

Continuazione del programma

Continuazione

28/03/2011 14

Istruzioni condizionali annidate

Mediante strutture di controllo condizionali annidate l’una dentro l’altra è possibile scrivere insiemi di istruzioni che corrispondono a una selezione a più vie, ovvero a un blocco condizionale dove l’elemento che decide i blocchi di istruzioni da eseguire è una variabile (X) che può assumere due o più valori.

28/03/2011 15

Istruzioni condizionali annidate

if (x==0) System.out.println("zero");else if (x==1) System.out.println("uno");

else System.out.println("non capisco");

28/03/2011 16

import java.io.*;public class provaif {public static void main(String[] args) throws NumberFormatException, IOException {// TODO Auto-generated method stubInputStreamReader In = new InputStreamReader(System.in);BufferedReader Tastiera = new BufferedReader(In);

int x; do{System.out.print("Immettere un numero: ");x=Integer.parseInt(Tastiera.readLine()); }while (x<0); System.out.println("numero inserito: " + x);

if (x==0) System.out.println("zero");else if (x==1) System.out.println("uno");

else System.out.println("non capisco");}}

28/03/2011 17

Istruzioni condizionali annidate

if (x==0) System.out.println("zero");else if (x==1) System.out.println("uno");else if (x==2) System.out.println("due");

else System.out.println("non capisco");}}

gli else si legano sempre all’if precedente

28/03/2011 18

Istruzioni condizionali annidate

gli else si legano sempre all’if precedente

28/03/2011 19

Istruzioni condizionali annidate

if (x==0) System.out.println("zero");else if (x==1) System.out.println("uno");else if (x==2) System.out.println("due");

else System.out.println("non capisco");}}

28/03/2011 20

Istruzioni condizionali annidate

if (x==0) System.out.println("zero");else if (x==1) System.out.println("uno");else <3>

}}

28/03/2011 21

Istruzioni condizionali annidate

if (x==0) System.out.println("zero");else if (x==1) System.out.println("uno");else <3>

}}

28/03/2011 22

Istruzioni condizionali annidate

if (x==0) System.out.println("zero");else <2>

}}

28/03/2011 23

Istruzioni condizionali annidate

if (x==0) <1>;else <2>

}}

Algoritmi

L’algoritmo è un procedimento risolutivo di un problema costituito da una sequenza finita di operazioni (istruzioni)

L’algoritmo ha le seguenti proprietà:

1. Finito

2. Deterministico

3. Non ambiguo

4. generale

indipendente dai computer e dall'informatica (es. ricetta di cucina)

Diagramma a blocchi o flow chartIL Flow-chart è la rappresentazione grafica di un algoritmo.

I blocchi (simboli) sono figure geometriche nelle quali sono inserite le operazioni elementari e sono collegate tra loro da linee di giunzione orientate.

I dati che interessano l’algoritmo possono essere:

Costanti quando nello svolgimento mantengono sempre lo stesso valore

variabili quando durante l’elaborazione possono assumere valori diversi e vengono rappresentate di solito con lettere

…una alternativa ai diagrammi di Nassi Shneiderman pag.41 libro

Diagramma a blocchi o flow chart

Inizio

Operazioni di Ingresso/Uscita

Istruzioni

Decisione

Diagramma a blocchi o flow chart

Fine

Linee di giunzione/direzione del flusso di elaborazione

28/03/2011 28

Esercizio

Scrivere un programma che dopo aver letto un numero intero N in INPUT stampa se è positivo o negativo (0 è considerato positivo)

Rappresentazione dell’algoritmo mediante diagramma a blocchi

Problema: Dati in input un numero, controllare se è positivo.

Inizio

Leggi numero

Numero>o

È Negativo

È positivo

VF

Fine

28/03/2011 30

…. riprendiamo il programma che leggeva un intero …

System.out.print("Immettere un numero: ");numero=Integer.parseInt(Tastiera.readLine());

System.out.println("numero inserito: " + numero);

28/03/2011 31

ora effettuiamo il controllo se numero è positivo o negativo e stampiamo il risultato

if (numero >=0 ){System.out.println(numero +" è positivo");}else {System.out.println(numero +" è negativo");}

28/03/2011 32

Esercizio

Scrivere un programma che dopo aver letto un numero intero N>0 in INPUT stampa se è pari o dispari

Inizio

numero%2==0

È dispari

È pari

VF

Fine

numero<=0 ?

leggi numero

Rappresentazione dell’algoritmo mediante diagramma

V

28/03/2011 34

…. riprendiamo il programma che leggeva un intero e applichiamo i concetti fin qui appresi

Facciamo in modo che in input venga letto un intero >0

System.out.print("Immettere un numero: ");numero=Integer.parseInt(Tastiera.readLine());

System.out.println("numero inserito: " + numero);

28/03/2011 35

do{System.out.print("Immettere un numero: ");numero=Integer.parseInt(Tastiera.readLine()); }while (numero<=0);

System.out.println("numero inserito: " + numero);

Ora effettuiamo il controllo se numero è pari o dispari e stampiamo il risultato

if (numero %2==0 ){System.out.println(numero +" è pari");}else {System.out.println(numero +" è dispari");}

Altre caratteristiche degli algoritmi

eseguibilità ogni passaggio deve poter essere messo in pratica con le risorse disponibili

strutturazione non devono essere presenti dei passaggi che rimandano ad altri passaggi in modo caotico che compromettono la leggibilità dell’algoritmo stesso

riusabilità deve poter essere riutilizzato per problemi analoghi

efficienza deve sfruttare le risorse (spazio di memoria e tempo di esecuzione) in modo ottimale, non devono esistere passaggi inutili

leggibilità deve essere enfatizzata la comprensibilità dei passaggi con l’eventuale introduzione di commenti esplicativi (tutto ciò ne agevola il riuso).

28/03/2011 36

28/03/2011 37

Diagrammi di flussoQualsiasi algoritmo può essere rappresentato da un diagramma di

flusso derivante dalla connessione di un numero finito di strutture

elementari.

• Sequenza

• Iterazione

• Selezione

28/03/2011 38

Sequenza

• Nella struttura di sequenza le istruzioni vengono eseguite una dietro l’altra.

Istruzione 1

Istruzione 2

Istruzione n

28/03/2011

39

Selezione• Nella struttura di selezione sono possibili strade

alternative legate ad una condizione

Istr. 2

CondizioneV F

Istr. 2Istr. 1

CondizioneV F

Istr. 1

28/03/2011 40

Iterazione

• La struttura di ripetizione permette un ciclo condizionato (con pre-condizione):

V

F

Condizione

Istruzione

28/03/2011 41

• La struttura di ripetizione permette un ciclo condizionato (con post-condizione):

V

F

Condizione

Istruzione

Iterazione

28/03/2011 42

Semantica del ciclo while

istruzione

vero

condizione

falso

28/03/2011 43

Semantica del ciclo do

vera

condizione

istruzione

falsa

28/03/2011 44

Semantica del ciclo for

istruzione

vera

condizione

falsa

incremento

inizializzazione

28/03/2011 45

EsercizioProgettare un algoritmo per calcolare il

fattoriale di n (>0).

nn ...3.2.1!Pre-condizionen numero naturale

Post- condizionefattoriale (n) = n · (n-1) · (n-2) · … · 2· 1fattoriale (0) = 1

28/03/2011 46

si

nonumero<=0 ?

stampaF

i<numero ?

F=1

i=1

F=F*i

i=i+1

si

leggi numero

Costrutto for

Costrutto do

28/03/2011 47

si

nonumero<=0 ?

stampaF

i<numero ?

F=1

i=1

F=F*i

i=i+1

si

leggi numero

Costrutto for

Costrutto do

do { System.out.print("Immettere un numero compreso fra 1 e 30: ");numero=Integer.parseInt(Tastiera.readLine()); }while (numero<=0);

28/03/2011 48

si

nonumero<=0 ?

stampaF

i<numero ?

F=1

i=1

F=F*i

i=i+1

si

leggi numero

Costrutto for

int F =1;for( int i = 2; i <= numero; i++ )

F = F*i;

28/03/2011 49

si

nonumero<=0 ?

stampaF

i<numero ?

F=1

i=1

F=F*i

i=i+1

si

leggi numero

Costrutto while

28/03/2011 50

si

nonumero<=0 ?

stampaF

i<numero ?

F=1

i=1

F=F*i

i=i+1

si

leggi numero

Costrutto while

while (i<numero) { i=i+1; F=F*i;}

28/03/2011 51

import java.io.*;public class fatt1 {

/*** @param args* @throws IOException * @throws NumberFormatException */public static void main(String[] args) throws NumberFormatException, IOException {

// TODO Auto-generated method stubInputStreamReader In = new InputStreamReader(System.in);

BufferedReader Tastiera = new BufferedReader(In);int numero=0; do { System.out.print("Immettere un numero compreso fra 1 e 30: ");numero=Integer.parseInt(Tastiera.readLine()); }while (numero<=0);int F=1;int i=1; //i indica il fattore già moltiplicato per Fwhile (i<numero) { i=i+1; F=F*i;}System.out.println("fattoriale di "+numero+" = "+F);

}

28/03/2011 52

si

no

leggi numero

numero<=0 ?

stampaF

i<=numero ?

F=1

i=1

F=F*i

i=i+1

si

28/03/2011 53

si

no

leggi numero

numero<=0 ?

stampaF

i<=numero ?

F=1

i=1

F=F*i

i=i+1

si

Costrutto do

28/03/2011 54

do { F=F*i;i=i+1;}while

(i<=numero);

si

no

leggi numero

numero<=0 ?

stampaF

i<=numero ?

F=1

i=1

F=F*i

i=i+1

si

Costrutto do

28/03/2011 55

import java.io.*;public class fatt1 {

/*** @param args* @throws IOException* @throws NumberFormatException*/public static void main(String[] args) throws NumberFormatException, IOException {

// TODO Auto-generated method stubInputStreamReader In = new InputStreamReader(System.in);

BufferedReader Tastiera = new BufferedReader(In);int numero=0; do { System.out.print("Immettere un numero compreso fra 1 e 30: ");numero=Integer.parseInt(Tastiera.readLine()); }while (numero<=0);int F=1;int i=1;do {

F=F*i;i=i+1;}while (i<=numero);

System.out.println("fattoriale di "+numero+" = "+F);

}

28/03/2011 56

Esercizio

Progettare un algoritmo che calcola an

Successivamente tradurre l’algoritmo in codice Java assumendo a ed n >0.

Algoritmi - Esercizio

28/03/2011 57

i<=nV

F

i++

Stampa Ris

i=1

Ris=Ris*a

Ris=1

Soluzione – diagramma a blocchi

28/03/2011 58

Soluzione - pseudocodice

• Problema: Calcolare a elevato alla n– Utilizziamo le variabili i, Ris– Inizialmente Ris=1 e i=1

• Algoritmo:– Fino a che i<=n

Calcola Ris * a e memorizzalo in RisIncrementa i

28/03/2011 59

Esercizio• Scrivere un programma Java per calcolare

la somma dei numeri pari da 1 a 100 utilizzando le tre istruzioni cicliche

50

1100,...,4,22

inuminum