Anteprima
Vedrai una selezione di 4 pagine su 14
Spiegazione 3° modulo informatica Pergola Pag. 1 Spiegazione 3° modulo informatica Pergola Pag. 2
Anteprima di 4 pagg. su 14.
Scarica il documento per vederlo tutto.
Spiegazione 3° modulo informatica Pergola Pag. 6
Anteprima di 4 pagg. su 14.
Scarica il documento per vederlo tutto.
Spiegazione 3° modulo informatica Pergola Pag. 11
1 su 14
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Diagrammi a blocchi e iterazioni

ITERA PER VERO: Prima Itera poi domanda = Do Until- Prima Domanda e poi itera = Do While

ITERA PER FALSO: Prima itera poi domanda = Loop Until- Prima domanda poi itera = Repeat Until

Diagrammi a blocchi, dove si ritrovano le varie sequenze. Indicano il flusso di esecuzione di qualcosa. Dettagliano il susseguirsi delle operazioni da fare per arrivare ad una soluzione. Sono collegati da frecce che servono a seguire l'ordine. Ogni blocco contiene un'azione. Ogni blocco ha una forma ben precisa:

  • Blocco di inizio (trapezio rovesciato)
  • Blocco di fine (trapezio normale)
  • Blocco di input o output (rombo-parallelogramma)
  • Operazioni di tipo operativo (rettangolo)
  • Selezione con due rami diversi uscenti in base al risultato (rombo perfetto)

Un diagramma a blocchi descrive un algoritmo se:

  • Ha un blocco iniziale e uno finale
  • È costituito da un numero finito di blocchi azione e/o blocchi lettura/scrittura
e/o blocchi di controllo Ciascun blocco elementare soddisfa le seguenti condizioni di validità: - ciascun blocco azione, lettura/scrittura ha una sola freccia entrante e una sola freccia uscente (sennò ambiguo) - ciascun blocco di controllo ha una sola freccia entrante e due uscenti (la sola entrante perché l'esecuzione è sequenziale) - ciascuna freccia entra in un blocco o si innesta su un'altra freccia (per indicarmi cosa fare) - ciascun blocco è raggiungibile dal blocco iniziale (ciascuna azione che devo fare essendo azioni in sequenza) - il blocco finale è raggiungibile da qualsiasi altro blocco (se così non fosse cosa succederebbe? Avremmo un loop infinito). Quali sono gli schemi applicabili? Per un processo logico fatto bene, gli schemi da utilizzare sono tre: - Schemi di sequenza: è specificato in sequenza cosa fare. - Schemi di selezione: mi pongo una domanda e prendo una strada piuttosto che un'altra. - Schemi di iterazione oo : mi fanno rifare un certo numero una cosa o una sequenza di cose in base a un numero stabilito o al verificarsi di una certa condizione. Da un punto di vista visivo è un ciclo se una delle frecce si riimmette (fa un back) ed è un (azione condizionata) se entrambe le frecce defluiscono. Slide 90?? Slide 85 di Bohm-Jacopini: Ogni diagramma a blocchi non strutturato (logica contorta) è sempre trasformabile in un diagramma a blocchi strutturato ad esso equivalente. Nella logica contorta non rispetto le regole che abbiamo detto prima per il diagramma a blocchi. (Ma se ho un problema complicato e necessito di salti logici? Non è vero, data una logica contorta c'è sempre almeno una semplice, lineare e strutturata che esegue le stesse funzioni. Es. esame: dato il seguente schema a blocchi, si ipotizzi che A=3 B=2 -> (<> ) equivale a ≠ Simularne l'esecuzione: prod= 0 3≠0 (vero) Prod: 0+b = 0+2= 2 A= a-1= 3-1= 2 2≠0

(vero)Prod= 2+b= 2+2= 4A= a-1= 2-1= 11≠0 (vero)Prod= 4+2 = 6A=1-1= 00≠0 (falso) -> fine. 3x2=6

Es2. Voglio sapere il massimo di un insieme di numeri. Supponiamo che mi danno tutti dei numeri positivi ed uno zero.

Es. mi da il numero 4. Per ora il numero massimo è 4

Mi dà il 23. Più grande adesso il 23.

Mi dà il 9 . rimane più grande 23

Mi dà il 59, più grande di 23

Mi dà 0. Ho finito 4 – 23 – 9 – 59 – 0 fare diagramma di flusso che rappresenta questi passaggi per individuare il maggiore.. ??

Es3. Dato un valore N, restituire il fattoriale:

Dato questo diagramma di flusso, si ipotizzi che N=3, Simulare l’esecuzione.

Quale problema risolve questo algoritmo?

Parto:

N=3

N=P=3

3>2 ? (vero)

N=3-1= 2

P= 3*2= 6

2>2? (falso)

Scrivi P = 6 (fine)

Cos’è 6? Il fattoriale = 3*2*1= 6

Es4. N=4 ; dato il diagramma simulare l’esecuzione:

parto:

N=4

P=1

I=1

I<N ?--> 1<4? (vero)

I=1+1= 2

P= 1*2=2

I<N = ...

2<4 (vero)

I= 2+1=3

P= 2*3= 6

I<N= 3<4 (vero)

I=3+1=4

P=6*4= 24

I<N= 4<4? (falso)

Scrivi P : P= 24 (fine)

Es5. N=3

Parto:

n=3

ris=0

i=0

i>n? = 0>3 (falso)

ris= 0+0=0

i=0+1=1

i>n = 1>3 (falso)

ris= 0+1= 1

i= 1+1=2

i>n = 2>3 (falso)

ris= 1+2=3

i=2+1=3

i>n = 3>3 (falso)

Ris=3+3=6

I=3+1= 4

i>n = 4>3 (vero)

Scrivi Ris= 6 (fine) (non mag o uguale)

Es6: N=3 Dato l’istogramma risolvere:

n=3

ris=n=3

n<1= 3<1 (falso)

n=3-1=2

ris= 3+2=5

2<1(falso)

n=2-1=1

ris=5+1=6

1<1(falso) [in realtà n≤1 si ferma qua, ris sempre=6]

n=1-1=0

ris=6+0=6

0<1 (vero)

Scrivi ris= 6 (fine)

È efficiente fare tutti questi passaggi? Teoricamente no, l’algoritmo migliore è quello di trovare la formula più adatta ed applicarla. La somma dei numeri: n= n*(n+1/2).

Es7. Simulare il seguente diagramma con

X= 3

Y=2

X<Y ? = 3<2 (falso)

X= 3-2= 1

1<2 (vero)

Output= x=1

Fare con

X=14

Y=3

14<3 (falso)

X= 14-3= 11

11<3 (falso)

X= 11-3= 8

8<3 (falso)

X= 8-3= 5

5<3 (falso)

X= 5-3= 2

2<3 (vero)

Output: x=2 X= 14-3-3-3-3=2
Come spiegata la divisione ai bambini? Con le sottrazioni, si sottrae fino a che rimane quello che non si può sottrarre.
Es8.
X=2
Y=18
x>0 (v)
y>0 (v)
ì=x= 2
i<18, 2<18 (vero)
i= 2*2=4
4<18 (v)
ì= 4*2=8
8<18 (v)
I= 8*2= 16
16<18 (v)
ì=16*2= 32
32<18 (f)
ì= 32:2= 16
Es.7
X=2
Y=18
X>0 (v)
y>0 (v)
ì=1
ì*x<y ? = 1*2<18= 2<18 (vero)
ì= ì*x = 1*2 = 2
ì= ì+1= 1+1=2
2*2<18 , 4<18 (vero)
ì= 2+1= 3
3*2<18, 6<18 (vero) (ad ì aggiungo sempre +1 ad ogni ciclo)
4*2<18 , 8 <18 (vero)
ì= 2+1= 3
5*2 <10, 10< 18
6*2 … 7*2 … 8*2.. , 9*2 <18, 18<18 (falso)
ì= 9*2= 18 [ multipli di 2 minori di 18 ]
Es. 8
N=10
n>0 (vero)
ì=1
ì*1≥10 (falso)
ì=1+1=2
2*2 ≥10 (falso)
ì= 2+1=3
3*3≥10, 9≥10 (falso)
ì=3+1=4
4*4, 16≥10 (vero)
Output= ì = 4
Da diagramma a VBA o deduzione inversa:
es1.
Sub Pippo()
Dim a As
utilizzo il tag html pre per mantenere la formattazione del testo:
Sub SingleDim()
    Dim b As Single
    Dim prod As Single
    
    a = InputBox("inserisci a")
    b = InputBox("inserisci b")
    
    Do While a <> 0
        prod = prod + b
        a = a - 1
    Loop
    
    MsgBox prod
End Sub

Sub Pippo2()
    Dim i As Single
    Dim n As Single
    Dim p As Single
    
    n = InputBox("inserisci n")
    
    p = 1
    i = 1
    
    Do While i < n
        i = i + 1
        p = p * i
    Loop
    
    MsgBox p
End Sub

Sub Pippo3()
    Dim n As Single
    Dim ris As Single
    Dim è As Single
    
    n = InputBox("leggi n")
    
    Do Until è = n
        è = è + 1
        ris = ris + è
    Loop
    
    MsgBox ris
End Sub

itera o prima itera poi si fala domanda? Si fa prima la domanda poi itera, quindi è un repeatuntil (perché prima mi chiedo, poi itero)

Repeat Until ì>nris = ris + ìì = ì + 1

Loop

MsgBox ris

End Sub

Gli algoritmi e i diagrammi di flusso visti fino ad ora riguardano algoritmi semplici (dati scalari). Ci sono anche i dati non strutturati (Array e Record).

Algoritmi che riguardano le variabili non scalari: la più semplice è quella di avere un insieme di informazioni omogenee (tutte dello stesso tipo, posso utilizzare il vettore).

Es. Il vettore: insieme di dati dello stesso tipo, tutti ordinati. La dimensione del vettore è la quantità di elementi che contiene.

Cerchiamo di vedere dato questo algoritmo, che cosa fa, simuliamo l'esecuzione e traiamo una conclusione.

Es1. Supponiamo di avere un vettore costituito da numeri interi.

Vettore (6,7,1,3,4,5)

Acquisito come elemento in ingresso, il valore 3.

Dimensione del vettore = 6

(sei elementicontenuti)Simulare l'esecuzione:Ì=00=6 ? (falso)Vettore (0) è 6 = 3 ? (falso)Ì=0+1 =11=6? (F)V(1) è 7 = 3?Ì= 1+1= 22= 6 ? (f)V(2) è 1 = 3? (f)Ì= 2+1= 33=6 ? (F)V(3) è 3= 3 ? (vero)Questo modus operandi va a cercare se un valore è presente o meno in un insieme di altri elementi. (es. unnumero di telefono in un elenco).Ora, riportare in VBA il diagramma precedente: non si può tradurre poiché ha due uscite.Va creata una uscita forzata da un ciclo ( se rischia di continuare il ciclo es. se trovo alla prima ciò checercavo evita che continui a controllare ogni elemento).. esci = GO TOSoluzione migliore, aggiungere una variabile che mi dice se ho trovato il mio oggetto oppure no.--Se programmato in modo strutturato (cioè senza uscite forzate). Es2.Vettore (6,7,1,3,4,5)Acquisito come elemento in ingresso, ilvalore 3.Dimensione del vettore = 6 (sei elementicontenuti)Ì=0trovato =

falso (ancora maglietta nontrovata).0= 6 oppure falso? (falso)

V(0) è 6=3? (F)

È= 0+1= 11=6 oppure falso? (f)

V(1) è 7 = 3? (f)

È=1+1=22=6 oppure falso ?(f)

V(2) è 1 = 3 (F)

È=2+1 = 33 = 6? (f)

V(3) è 3= 3? (vero)

Trovato= veroÈ=3+1=44= 6 oppure vero? (vero che trovato è vero. Ho un vero e un falso vince il vero)

Trovato? VeroFinePossibile tradurre in VBA (usare until)Es.3Simulare operazione:Vettore (6,7,1,3,4,5)Acquisito come elemento in ingresso, il valore 3.Dimensione del vettore = 6 (sei elementi contenuti) È=0V(0) è 6= max0 = 6-1 (F)È=0+1=1V(1) è 7 > 6 (vero)V(1) è 7 = max1=5 ? (f)È=1+1=2V(2) è 1 > 7 ? (falso)2=5 ? (f)È= 2+1=3V(3) è 3 > 7 (fa

Dettagli
Publisher
A.A. 2019-2020
14 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher VenoricaL di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Firenze o del prof Pergola Elisa.