AlgoBuild: Strutture iterative e selettivecesposito/materiale/lezioni/Lezione... · 2016. 10....

85
Fondamenti di Informatica AlgoBuild: Strutture iterative e selettive Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 AlgoBuild: Strutture iterative e selettive

Transcript of AlgoBuild: Strutture iterative e selettivecesposito/materiale/lezioni/Lezione... · 2016. 10....

  • FondamentidiInformaticaAlgoBui ld : S trutture i terat ive e se lett ive

    Prof. Chr i st ian Espos i toCorso d i Laurea in Ingegner ia Meccanica e Gest iona le (C lasse I )A .A . 2016/17

    AlgoBuild:Struttureiterativeeselettive

  • AlgoBuild :StruttureiterativeeselettiveOUTLINE• Struttura selettiva• Esempi• StrutturaiterativaFOR(cicloacondizioneiniziale)• Esempi• StrutturaiterativaDO/WHILE(cicloacondizionefinale)• Esempi•Array

    AlgoBuild:Struttureiterativeeselettive 02/85

  • DiagrammidiFlusso:BloccodiDecisioneBinaria(oCondizionale)• Possonoesserepresentiistruzionicondizionali,lacuiesecuzionedipendecioèdascelteeffettuateinbaseaidati

    • Concettualmente,possiamoimmaginarecheilflussodiesecuzionesiramifichi• Inbaseadunacondizione vienedecisoseeseguireun’operazioneoppureun’altra

    ?

    Diramazione(condizionale)

    AlgoBuild:Struttureiterativeeselettive 03/85

  • StrutturediControllo:SelezioneSemplice

    AlgoBuild:Struttureiterativeeselettive 04/85

  • StrutturediControllo:SelezioneaDueVie

    AlgoBuild:Struttureiterativeeselettive 05/85

  • StrutturaSelettivaIF– Esempio•Definiamoundiagrammadiflussoche• PrendeininputlavariabileVOTO dapartedell’utente•Mostrainoutput«Superato!» se VOTOèmaggioreougualedi18• «NONSuperato»,altrimenti

    AlgoBuild:Struttureiterativeeselettive 06/85

  • StrutturaSelettivaIF• IniziamodalprendereininputlavariabileVOTO

    AlgoBuild:Struttureiterativeeselettive 07/85

  • StrutturaSelettivaIF

    AlgoBuild:Struttureiterativeeselettive 08/85

  • StrutturaSelettivaIF

    AlgoBuild:Struttureiterativeeselettive 09/85

  • StrutturaSelettivaIF

    Civerràrichiestodiinserirel’espressione(condizionebooleana)chelastrutturaselettiva

    IFdevesoddisfare.Taleespressionepuòassumereunvalorebooleano:vero(T)ofalso(F)

    AlgoBuild:Struttureiterativeeselettive 10/85

  • StrutturaSelettivaIF

    AlgoBuild:Struttureiterativeeselettive 11/85

  • StrutturaSelettivaIF

    Flussodiesecuzioneselacondizioneèfalsa

    AlgoBuild:Struttureiterativeeselettive 12/85

  • StrutturaSelettivaIF

    Flussodiesecuzioneselacondizioneèvera

    AlgoBuild:Struttureiterativeeselettive 13/85

  • StrutturaSelettivaIF

    PSEUDO-CODICE

    PROGmainINVOTOIFVOTO>=18OUT"Superato!"

    ELSE//ifVOTO>=18OUT"NONSuperato"

    ENDIF//VOTO>=18ENDPROG//main

    AlgoBuild:Struttureiterativeeselettive 14/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    15/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    16/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    17/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    VariabileVOTOpresaininputdall’istruzioneprecedente18/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    Condizionevera

    19/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    20/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaSelettivaIF– DEMO

    CosasarebbeaccadutoseavessiusatoVOTO=16?

    21/85

  • StrutturaSelettivaIF(Annidata)• Nelleistruzionidelblocco“Vero”odelblocco“Falso”(else),èpossibileinserirealtriblocchidiscelta

    • Intalcasosidicechelasecondasceltarisultaannidata all’internodellaprima

    C1

    A1 B

    C2

    A2 A3

    A4

    V

    V

    F

    F

    AlgoBuild:Struttureiterativeeselettive 22/85

  • StrutturaSelettivaIF(Annidata)• C1Vero,C2Vero• Istruzionieseguite:A1,A2,A4

    C1

    A1 B

    C2

    A2 A3

    A4

    V

    V

    F

    F

    AlgoBuild:Struttureiterativeeselettive 23/85

  • StrutturaSelettivaIF(Annidata)• C1Vero,C2Falso• Istruzionieseguite:A1,A3,A4

    C1

    A1 B

    C2

    A2 A3

    A4

    V

    V

    F

    F

    AlgoBuild:Struttureiterativeeselettive 24/85

  • StrutturaSelettivaIF(Annidata)• C1Falso• Istruzionieseguite:B

    C1

    A1 B

    C2

    A2 A3

    A4

    V

    V

    F

    F

    AlgoBuild:Struttureiterativeeselettive 25/85

  • StrutturaSelettivaIF(Annidata)• L’interobloccodisceltapiùinterno(dallacondizionefinoalricongiungimento)deveesserecompletamentecontenutoall’internodiunodeiramidelbloccopiùesterno

    C1

    A1 B

    C2

    A2 A3

    A4

    V

    V

    F

    F

    AlgoBuild:Struttureiterativeeselettive 26/85

  • StrutturaSelettivaIF(Annidata):Esempio1• L’esitodell’esamediunostudentepuòassumereunadelleseguentiquattrovalutazioni• Sufficiente: seilvotoècompresotra18e21• Buono: seilvotoècompresotra22e25• Ottimo: seilvotoècompresotra26e28• Eccellente: seilvotoè29o30

    • Unvotoè valido seècompresotra0e30

    AlgoBuild:Struttureiterativeeselettive 27/85

  • StrutturaSelettivaIF(Annidata):Esempio1

    Controllocheilvotosiavalido

    AlgoBuild:Struttureiterativeeselettive 28/85

  • StrutturaSelettivaIF(Annidata):Esempio1

    Seilvotoèminoredi18,l’esamenonèsuperato

    AlgoBuild:Struttureiterativeeselettive 29/85

  • StrutturaSelettivaIF(Annidata):Esempio1

    AlgoBuild:Struttureiterativeeselettive 30/85

  • StrutturaSelettivaIF(Annidata):Esempio1

    IFannidato

    AlgoBuild:Struttureiterativeeselettive 31/85

  • AlgoBuild:Struttureiterativeeselettive

    IFannidato

    10/85

  • AlgoBuild:Struttureiterativeeselettive

    IFannidato

  • AlgoBuild:Struttureiterativeeselettive

    IFannidato

  • Esempio:Risoluzionediequazionidiprimogrado• 𝑎𝑥 + 𝑏 = 0• Lasoluzione è:• 𝑥 =– 𝑏/𝑎• Solose𝑎 ≠ 0• 𝑥 = 𝑖𝑛𝑑𝑒𝑡𝑒𝑟𝑚𝑖𝑛𝑎𝑡𝑜(𝑖𝑛𝑓𝑖𝑛𝑖𝑡𝑒𝑠𝑜𝑙𝑢𝑧𝑖𝑜𝑛𝑖)• Se𝑎 = 0𝑒𝑏 = 0

    • 𝑥 = 𝑖𝑚𝑝𝑜𝑠𝑠𝑖𝑏𝑖𝑙𝑒(𝑛𝑒𝑠𝑠𝑢𝑛𝑎𝑠𝑜𝑙𝑢𝑧𝑖𝑜𝑛𝑒)• Se𝑎 = 0𝑒b ≠ 0

    AlgoBuild:Struttureiterativeeselettive 35/85

  • AlgoBuild:Struttureiterativeeselettive 36/85

  • AlgoBuild:Struttureiterativeeselettive 37/85

  • AlgoBuild:Struttureiterativeeselettive 38/85

  • IFannidato

    IFannidato

    AlgoBuild:Struttureiterativeeselettive 39/85

  • AlgoBuild:Struttureiterativeeselettive 40/85

  • StrutturediControllo:CicloaCondizioneIniziale

    AlgoBuild:Struttureiterativeeselettive 41/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio1• Definiamo un diagramma di flusso che• Prende in input le seguenti due variabili• X• Y• Memorizza e (mostra in output) una variabile• R = XY• N.B. Il calcolo di XY deve essere eseguito con ilmetodo moltiplicativo• X × X × …× X

    Yvolte

    42/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio1

    43/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio1

    44/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio1

    45/85

  • StrutturaIterativaFOR– Esempio1

    • I = 1; I

  • StrutturaIterativaFOR– Esempio1

    AlgoBuild:Struttureiterativeeselettive 47/85

  • StrutturaIterativaFOR– Esempio1

    R denotalavariabileincuiverràmemorizzatodivoltainvoltal’output.Talevariabileèinizializzataad1

    AlgoBuild:Struttureiterativeeselettive 48/85

  • StrutturaIterativaFOR– Esempio1PSEUDO-CODICE

    PROGmainINXINYASSIGNR=1FORI=1;I

  • 50/85AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– DEMO(Video)

    IntroduzioneadAlgoBuild

  • StrutturaIterativaFOR– Esempio2

    • Definiamo un diagramma di flusso cherappresenta il calcolo della media aritmetica di Nnumeri presi in input, dove• N è una variabile presa in input

    AlgoBuild:Struttureiterativeeselettive 51/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2PSEUDO-CODICE

    PROGmainINNASSIGNSomma =0FORI=1;I

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2RichiedoN all’utente(Input)

    53/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2• ImpostoSomma azero

    • CiòmiserviràpertenertracciadellasommadegliNnumeri

    54/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2

    • Ciclofor chevada1aN• Adogniiterazione

    • Vienerichiestoininputunnumero(INValore)

    • VieneaggiornatalavariabileSomma cheverràutilizzatasuccessivamenteperilcalcolodellamediaaritmetica• Somma=Somma+Valore

    55/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2

    • Calcololamedia• Dividendolasomma(variabile

    Somma)pergliN numeripresiininput

    56/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2

    IlcontenutodellavariabileMediavienemostratoinoutput

    57/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Demo(Video)

    IntroduzioneadAlgoBuild 58/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaFOR– Esempio2OSSERVAZIONE

    È necessario fornire preventivamente alnostro programma il numero di valori di cuisi dovrà calcolare la media…

    …è possibile fare la media di un certonumero (non noto a priori) di valori presi ininput?

    59/85

  • StrutturediControllo:CicloaCondizioneFinale

    AlgoBuild:Struttureiterativeeselettive 60/85

  • StrutturaIterativaDO/WHILE– Esempio

    • Definiamo un diagramma di flusso cherappresenta il calcolo della media aritmetica diun certo numero (non noto a priori) di valoripresi in input

    AlgoBuild:Struttureiterativeeselettive 61/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaDO/WHILE– Esempio

    PSEUDO-CODICE

    PROGmainASSIGNSomma =0ASSIGNN=0DO_WHILE//Continua==1INValoreASSIGNSomma =Somma +ValoreASSIGNN=N+1INContinua

    ENDDO_WHILEContinua==1ASSIGNMedia=Somma /NOUTMedia

    ENDPROG//main

    62/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaDO/WHILE– Esempio• Inizializzazione a 0 delle variabili Somma

    ed N• Non è stato preso ancora in input

    alcun valore (quindi N = 0)• Non è stata eseguita ancora la

    somma di alcun valore (quindiSomma = 0)

    63/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaDO/WHILE– Esempio

    • Ciclo DO/WHILE• Richiede in input un valore (IN Valore)• Aggiorna la variabile Somma, aggiungendogli la

    variabile Valore• Somma = Somma + Valore

    • Aggiorna il valore di N (dato che è stato preso ininput un nuovo valore)• N = N + 1

    • Chiede all’utente se vuole continuare (quindi unnuovo valore verrà preso in input)• Se il valore della variabile Continua sarà

    diverso da 1, allora il ciclo while siinterromperà

    • Altrimenti si proseguirà con un’altraiterazione

    64/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaDO/WHILE– Esempio

    • Calcola la media aritmetica dividendoSomma per N

    • La media aritmetica è memorizzata nellavariabileMedia• Che viene poi mostrata in output

    65/85

  • AlgoBuild:Struttureiterativeeselettive

    StrutturaIterativaDO/WHILE– DEMO– (Video)

    AlgoBuild:Struttureiterativeeselettive 66/85

  • Array(ovettore)• Èunavariabilestrutturata doveèpossibilememorizzarepiùvalorituttidellostessotipo

    • Unarraymonodimensionale ovettore puòessereimmaginatocomeuncontenitoresuddivisointantiscompartiquantisonoidatichevisivoglionomemorizzare• Unarraybidimensionaleènotocomematrice

    • Ognunodiquestiscomparti,dettielementidelvettore,contieneununicodatoedèindividuatodaunnumeroprogressivo,dettoindice,chespecificalaposizionedell’elementoall’internodelvettorestesso

    • L’indicepuòassumerevaloriinteridazero alnumerototaledielementimeno1

    • L’indicedibasedell’arrayèsemprezero

    • IlnumerocomplessivodeglielementidelvettorevienedettolunghezzaIndicei 0 1 2 3 4 5 6 7 8 9

    a 32 15 8 5 12 9 63 3 102 1Nomearray

    AlgoBuild:Struttureiterativeeselettive 67/85

  • Array(ovettore)• Peraccedereaunsingoloelementodiunarraysidevespecificareilnomedell’array seguitodall’indicedell’elemento postotraparentesiquadre:a[i]

    • Es:a[1]restituiscel’elemento15,a[3]restituiscel’elemento5

    Indicei 0 1 2 3 4 5 6 7 8 9

    a 32 15 8 5 12 9 63 3 102 1Nomearray

    AlgoBuild:Struttureiterativeeselettive 68/85

  • Esempio:InserireglielementiinunArrayestamparli• Vediamocomeinserireglielementi(valori)inunvettoredilunghezza10• Alterminedell’inserimento,glielementiverrannopoistampati

    Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray

    AlgoBuild:Struttureiterativeeselettive 69/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray

    AlgoBuild:Struttureiterativeeselettive 70/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray

    AlgoBuild:Struttureiterativeeselettive 71/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray

    AlgoBuild:Struttureiterativeeselettive 72/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32

    AlgoBuild:Struttureiterativeeselettive 73/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15

    AlgoBuild:Struttureiterativeeselettive 74/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8

    AlgoBuild:Struttureiterativeeselettive 75/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5

    AlgoBuild:Struttureiterativeeselettive 76/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5 12

    AlgoBuild:Struttureiterativeeselettive 77/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5 12 9

    AlgoBuild:Struttureiterativeeselettive 78/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5 12 9 63

    AlgoBuild:Struttureiterativeeselettive 79/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5 12 9 63 3

    AlgoBuild:Struttureiterativeeselettive 80/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5 12 9 63 3 102

    AlgoBuild:Struttureiterativeeselettive 81/85

  • Indicei 0 1 2 3 4 5 6 7 8 9

    aNomearray 32 15 8 5 12 9 63 3 102 1

    AlgoBuild:Struttureiterativeeselettive 82/85

  • Prendovaloriininput

    Restituiscovaloriinoutput

    AlgoBuild:Struttureiterativeeselettive 83/85

  • Esempio:Determinareilmassimoelementodiunarrayestamparnelaposizione

    AlgoBuild:Struttureiterativeeselettive

    INIZIOALGORITMOtrovaMaxposizione = 0Per i che va da 0 a 9

    Se a[i] > a[posizione]posizione = i //Istruzione eseguita se A(i) > max

    Incrementa irestituisci a[posizione], posizioneFINEALGORITMOtrovaMax

    Indicei 0 1 2 3 4 5 6 7 8 9

    a 32 15 8 5 12 9 63 3 102 1Nomearray

    84/85

  • AlgoBuild:Struttureiterativeeselettive 85/85