22
1 Algoritmi e programmazione Prof. Emanuele Papotto Risoluzione di problemi Con la parola problema si intende un compito che si vuole far risolvere automaticamente a un calcolatore per risolvere un problema bisogna svolgere le seguenti attivita: comprendere il problema definire un procedimento risolutivo (algoritmo) per il problema implementare l'algoritmo in un linguaggio di Programmazione Dato un problema relativo all’elaborazione di un’informazione bisogna individuare un opportuno metodo di elaborazione che trasformi i dati iniziali nei corrispondenti risultati finali desiderati. Calcolatore = Esecutore di Azioni Elementari Affinché la risoluzione di un problema possa essere realizzata attraverso l’uso del calcolatore, tale processo deve poter essere definito come una sequenza di azioni elementari .

4 Algoritmi e programmazione - papotto.netpapotto.net/wp-content/uploads/2017/03/4_Algoritmi-e-programmazion... · Struttura di iterazione post -condizionale (do…while) Si deve

  • Upload
    vunhu

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

1

Algoritmieprogrammazione

Prof.EmanuelePapotto

Risoluzione diproblemi• Conlaparolaproblema siintende uncompitochesivuolefarrisolvereautomaticamente auncalcolatore

• perrisolvereunproblema bisognasvolgereleseguentiattivita:• comprendereilproblema• definireunprocedimentorisolutivo(algoritmo)perilproblema• implementarel'algoritmoinunlinguaggiodiProgrammazione

• Datounproblema relativoall’elaborazione diun’informazionebisognaindividuare unopportuno metododielaborazione chetrasformi idatiiniziali neicorrispondenti risultati finalidesiderati.

Calcolatore =EsecutorediAzioni Elementari

• Affinché la risoluzione di un problema possa essere realizzataattraverso l’uso del calcolatore, tale processo deve poter esseredefinito come una sequenza di azioni elementari.

2

Problemi nonrisolvibili• Non tutti i problemi sono risolvibili attraverso l'uso delcalcolatore, esistono classi di problemi per lequali la soluzioneautomatica non èpossibile:

• il problemapresenta infinite soluzioni (es. calcolo di pi greco)• per alcuni dei problemi non è stato trovato un metodorisolutivo (es. trovare tutte le coppie contigue di numeriprimi)

• per alcuni problemi è stato dimostrato che non esiste unmetodo risolutivo automatizzabile (es. trisecare un angolocon solo riga e compasso)

• Noi ci concentreremo sui problemi che, ragionevolmente,ammettono un metodo risolutivo (funzioni calcolabili).

L’algoritmo• Un algoritmo è un insieme finito di passi elementari(istruzioni) che, eseguiti secondo un ordine prestabilito,permettono di risolvere un determinato problematrasformando i dati di input in dati di output (o risultati)attraverso le relazioni esistenti tra input eoutput.

• esempi sono: una ricetta di cucina, le istruzioni per farfunzionare un elettrodomestico, le istruzioni per installare unprogramma

3

L’algoritmo

Per “esecutore”: si intende una macchina astratta (nonnecessariamente un calcolatore) in grado di eseguire le azionispecificate dal metodo risolutivo.

Proprietà diunalgoritmo

1. realizzabilità: ogni operazione prevista dall’algoritmo deveessere eseguibile con le risorse a disposizione;

2. non ambiguità: ogni azione deve essere univocamenteinterpretabile dall'esecutore, cioè deve essere descritta inmodo preciso; il risultato non deve cambiare al variaredell’esecutore (macchina/persona) dell’algoritmo;

3. finitezza: il numero totale di azioni da eseguire, per ogniinsieme di dati di ingresso, è finito e le operazioni da essespecificate devono essere eseguito un numero finito divolte.

4

Unpo’ distoria• Il termine “algoritmo” deriva dalnome del matematico arabo Al-Khowarzimi del IX secolo d.c. cheper primo suggerì un metodo persommare due numerirappresentati nel sistemanumerico Hindu e contribuì allafondazionedell’algebra.

• Nel medioevo il terminealgorismus servì ad indicare ilcomplesso di operazioni nelcalcolo numerico con numeriarabi.

Algoritmi eprogrammi• Ogni elaboratore è una macchina in grado di eseguire azioni elementari suoggetti detti dati.

• L'esecuzione delle azioni è richiesta all'elaboratore tramite comandi elementarichiamati istruzioni.

• Le istruzioni sono espresse attraverso un opportuno formalismo: il linguaggio diprogrammazione.

es:SUM A,Bread(x)scanf("%d",&Y)

• La formulazione testuale di un algoritmo in un linguaggio comprensibile ad unelaboratore è detta programma.

main(){int A, B;printf(“Immettere i dati (A,B): “);scanf(“%d%d”, &A, &B);printf(“Risultato: A+B=%d\n”, A+B);}

5

Dalproblemaalprogramma• Datounproblema,lasuasoluzionepuòessere ottenutamediantel’usodelcalcolatore,compiendoiseguentipassi:

1. individuazionediunmetodorisolutivo2. scomposizionedelprocedimentoinuninsiemeordinatodi

azionià ALGORITMO3. rappresentazionedeidatiedell'algoritmoattraversoun

formalismocomprensibiledall’elaboratore:linguaggiodiprogrammazioneà PROGRAMMA

4. esecuzionediunprogrammasulcalcolatoreà processo o“task”

Metodorisolutivo: ANALISI• L’analisi permettedi individuare:• natura dei dati in ingresso (INPUT): si tratta di tutte leinformazioni che devono essere fornite in ingresso al programmache si sta sviluppando, con eventuali vincoli di integrità (tutte lecondizioni che gli input ma anche gli output devono rispetta re peressere accettati dal programma)

• natura dei dati in uscita (OUTPUT o risultati) ed eventuali vincolidi integrità (condiz ioni che i dati in input devono rispettare peressere accetta ti): cioè i risultati attesi dall’elaborazione dei datiin ingresso da parte del programma.

• relazioni tra i dati di Input e Output: i collegamenti logiciesistenti tra le informazioni in ingresso e quelle in uscita dalprogramma. Queste possono essere formule matematiche,modello logico

6

Esempio• Problema:fornitiiningressoalprogrammalabaseel’altezzadiuntriangolo,calcolarnel’area

ANALISIDatiininput:lalunghezzadellabaseelalunghezzadell’altezzadeltriangolo;ilvincolodiintegritàdaporreè accettareiningressosolovalori>0

Datiinoutput:l’areadeltriangolo

RelazionetraI/O:l’areadeltriangolosiottienemoltiplicandolabaseperl’altezzaedividendoper2

A=(b*h)/2

Esempio: l’algoritmo1. Inizio2. Riceviiningressodatastieralalunghezzadellabase del

triangolo(conilvincolochesia>0)3. Riceviiningressodatastieralalunghezzadell’altezzadel

triangolo(convincolochesia>0)4. Calcolarel’areadeltriangolomoltiplicandolalunghezza

dellabaseperlalunghezzadell’altezzaedividendoilprodottoottenutoper2

5. Stampaavideol’areadeltriangolocalcolata6. Fine

7

Pseudo-codiceLopseudo–codiceèunadescrizione informale dialtolivelloadattaa

rappresentare unalgoritmooprogramma• Usalestrutture diunlinguaggiodiprogrammazione• Èadattoadesserelettodall’uomo• Nonèdirettamente comprensibile dauncalcolatore• Omette dettagli non essenz iali per la comprensibilità (es. ladichiarazione delle variabili)

es:inizioleggibaseleggialtezzaif (base∧ altezza)>0

Areaß base*altezzastampaArea

endifelsestampa“Erroreimmissionedatiinput”

fine

DatieistruzioniOgni passo dell’algoritmo di componedi dueparti distinte:• comando o istruzione: la descrizione dell’azione che deveessere eseguita (es. acquisisci il numero, moltiplica, stampa,ecc.)

• dati o argomenti : uno o più oggetti su cui ogni istruzioneopera (a, b, area, altezza, A, ecc.)• costanti: il valore non cambia durante l’esecuzione dell’algoritmo• variabili: è assegnato un valore che durante l’esecuzionedell’algoritmo può cambiare

• i valori dei dati possono essere:• numerici: interiereali(es.1023,4)• logici: VeroeFalso• alfanumerici, ostringhe (es.“AAAA”,“C.Colombo”)

8

Glioperatori• le sequenze di variabili e costanti sono combinate fra loromedianteoperatori:

• operatori aritmetici: +, -, *, / (rispettivamente somma,sottrazione, moltiplicazioneedivisione)

• operatorilogicierelazionali:<,>,==,=,>=,<=,<>,∧,∨,not,(rispettivamenteminore,maggiore,uguale,assegnazione, maggioreuguale,minoreuguale, diverso,and,or,not)

I simboli degli operatori logico relazionali non sono tutti epossono essere differenti tra i diversi linguaggi diprogrammazione.

Diagrammi diflusso• per la descrizione degli algoritmi si utilizzano particolarirappresentazioni grafiche denominate diagrammi di flusso,schemi a blocchi o flowchart.

è unformalismocheconsentedirappresentaregraficamenteglialgoritmi

• questa descrizione costituisce un efficace strumento per ladescrizione degli algoritmi, più valido di una esposizione ditipo discorsivo (chepuò risultare generica eambigua).

• qualsiasi algoritmo può essere decomposto in pochestrutture elementari.

9

Diagrammi diflusso• un diagramma di flusso (o flowchart) descrive le azioni daeseguire ed il loro ordinedi esecuzione

• ogni azione elementare corrisponde ad un simbolo grafico(blocco) diverso (sono convenzioni non universali)

• ogni blocco ha uno o più rami in ingresso ed un ramo inuscita (ad esclusione del blocco di decisione che ne ha due);collegando tra loro i vari blocchi attraverso i rami, si ottieneundiagrammadi flusso

• un diagramma di flusso appare, quindi, come un insieme diblocchi di forme diverse che contengono le istruzioni daeseguire, collegati fra loro da linee orientate che specificanola sequenza in cui i blocchi devono essere eseguiti (flusso delcontrollo di esecuzioneo sequenza di computazione)

Blocchi inizio/fine• inizioefinediunalgoritmoinizioeilbloccodacuideveiniziarel'esecuzione(unosolo)

• il blocco ne fa terminare l'esecuzione dell'algoritmo (almenouno)

10

Ingresso/letturaesecuzionedell'istruzione:• siricevonodall'unitàdiingresso(peresempio,latastiera)tantivaloriquantesonolevariabilispecificateall'internodelblocco,esiassegnano nellostessoordineallevariabiliA,B,Csononomidivariabili

• es.“Leggiitrevaloridatiiningresso,edassegnalirispettivamenteallevariabiliA,B,eC”

Uscita/stampa• sicalcolanoivaloridelleespressioniesitrasmettonoall'unitàdiuscita (adesempio,ilvideo)

• X,Y,Z possonoessere variabili• seX,Y,Z sonoespressionià “calcolaivaloridelleespressioniX,YeZ,etrasmettiliinuscita”

11

Azione/operazione• Esegue l’azionedescrittaall’internodelrettangolo

Somma=A+B

Controllo/condizione• Verificalacondizioneeseilrisultatoèveropassaaeseguire leistruzionisulramocorrispondenteaveroaltrimentipassaaeseguireleistruzionisulramocorrispondenteafalso

condizioneV F

12

Assegnamento einizializzazionesicalcolailvaloredell'espressioneadestradelsimbolo“=“elosiassegna allavariabileindicataasinistradelsimbolo

“=“coneventualeperditadelvaloreprecedentediV

V=Edove• Vèilnomediunavariabile• Eè unaespressioneounvaloresi interpreta come: “calcola il valore dell'espressione E eassegnalo alla variabileV”NB: Una variabile, prima di essere trattata, deve contenere giàun valore, ovvero essere già stata inizializzata ad es. a zero.

Esempio:sommadiduenumeri

13

Esempio: stampa ilmassimo traduenumeri

Confrontaduenumeri

14

Programmazione strutturata• È una tecnica di programmazione che ha lo scopo disemplificare la struttura di un algoritmo disciplinando l'usodelle strutturedi controllo utilizzabili all'interno di uno schemablocchi

• prevedel'usodiunnumerolimitatodistrutturedicontrollofondamentali,conuningressoedunauscita:

1. sequenza2. selezione3. Iterazione

Programmazione strutturata• laprogrammazionestrutturatavincolaquindil'utilizzodellestrutturedicontrollo,maoreiseguentivantaggi:

• rendepossibileunaprogettazioneditipotop-down,cioèsipartedall'obiettivofinaledelproblemaesiesplicitanoeraffinanoricorsivamentelepartichelocompongono

• permetteladefinizionedialgoritmipiùleggibili,essendopiùfacileindividuareimodulicorrispondentiallevariepartidicuisicomponel'algoritmo

• test,correzioneemanutenzionedelprogrammasonoperciòpiùsemplici,ancheseperiltestdelsistemacompletobisognaattenderediassemblare tuttiicomponenti

15

TeoremadiBöhm-Jacopini

Qualsiasialgoritmopuòesserescrittoutilizzandoesclusivamenteletrestrutturedicontrollofondamentali:

SEQUENZA– SELEZIONE– ITERAZIONE

Nel 1966 due matematici italiani Corrado Böhm e GiuseppeJacopini hanno formulato uno dei più importanti teoremidell’informatica.La domanda è: «Quali algoritmi sono codificabili con i trecostrutti sequenza, selezione e iterazione?».Risposta: «Con i tre costrutti fondamentali è possibilecodificare tutti gli algoritmi».

Strutturadisequenza

Istruzione S1

Istruzione S2

Istruzione S3

Leistruzionisonounadiseguitoallaaltra

Operazioni:faiquestofaiquello

Esempio:a=5;b=3;z =a+b;

16

Strutturadiselezione -1-

if Pthen S1else S2

Se siverificalacondizionePeseguil’istruzioneS1 oppureS2

Sintassi:if(espressione)istruzione1elseistruzione2

Esempio:prendinumero;resto=numero%2;if (resto==0)scrivi“numeropari”elsescrivi“numerodispari”

Strutturadiselezione -2-

if Pthen S1

Se siverificalacondizionePeseguil’istruzioneS1

Sintassi:if(espressione)istruzione

Esempio:prendinumero;resto=numero%2;if (resto==0)scrivi“numeropari”

17

Struttura diiterazione post-condizionale (do…while)

Si deve eseguire un blocco di istruzioni finché non si verificauna determinata condizione.

condizioneP

V

F

Lacondizioneèun’espressionecherappresentaunvaloreVerooFalso.Ilciclovieneripetutofinchél’espressionenondiventaFalsa.

DoBloccowhile P is true

Istruzione oBloccobloccoistruzioni do

{Bloccoistruzioni}while (condizione)

Vediamol'esempio:int i=1;do{

Console.Writeline (i);i++;

}while (i<=10)

Struttura diiterazione pre-condizionale (while)

condizioneP

Istruzione oBloccobloccoistruzioni

F

V

Lacondizioneèun’espressionecherappresentaunvaloreVerooFalso.

Ilciclovieneripetutofinchél’espressionenondiventafalsa.

while P isTrueEseguiBlocco

while (espressione){Bloccoistruzioni}

Vediamounsempliceesempio:int i=1;while (i<=10){

Console.Writeline (i);i++;

}

18

Confronto tralestrutture diiterazione

Esempio:stampadeiprimi100numeri

19

Esempio:stampadeiprimin numeri

Esempio: fattoriale din

20

Strutturaiterativa contatore• Ripetizioneconcontatoreèunastrutturaderivatadaquellediiterazione.Permettediripetereuncertogruppodiistruzioniundeterminatonumerodivolte.

espressione1

condizione

blocco

espressione2

F

V

Sintassi:for(espressione 1;condizione; espressione2){blocco}

Esempio:for(i=1;i<=10; i++){Console.Writeline (i);}

Esempi

1. Calcolodellamedia2. Calcolodeivalorimassimoeminimo3. Calcolodiunapotenza

21

Esempio 1

Esempio 2

22

Esempio 3