• Non ci sono risultati.

Algoritmi e programmazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Algoritmi e programmazione"

Copied!
67
0
0

Testo completo

(1)

Alg orit m i e pr og ram m azio ne

Definizioni

Definizione di algoritmo

I linguaggi di programmazione

Linguaggi compilati e linguaggi interpretati

Nozioni fondamentali di programmazione i JAVA

I tipi di dato

Gli oggetti

Il controllo del flusso

Alg orit m i

(2)

Alg orit m i

toreoraelabdall’ se; blemadi unadataclasdirenonèttamenteeseguibile pro Algoritmorisodi Algoritmo:sequenza istrue uzioni attraverso le quali si n lver

di un ione escrizla d èammaprogrIl  inae di una determbleta classe di prosolumizion Programmaza dProgramma:sequeni op allaerazioni atte a predisporre l’elaboratore

algoritmoalgoritmo

in una forma comprensibileall’elaboratore

L’elaboratore èunamacchina universalemacchina universale:cambiando il programma residente in memoria, èin grado di risolvere problemi di natura diversa (una classe di problemi per ogni programma)

Es em pio : ra gg ru pp am en to pe r s em e de lle ca rte

ProblemaProblema: Sia dato un mazzo di carte da ordinare in modo che lecuori precedano le quadri, che a loro volta precedono fiori e picche; le carte di uno stesso seme sono ordinate dall’asso al re

piccheaz3)endano nell’ordine i mSi przetti lle cuori, quadri, fiori ede di ciascun 2)Si ordinino le cartedalmazzetto l’asso al re esso esemlo stdel zzo 4 maz1)Si suddivida il main zetti, ciascuno costituito da tutte le carte ooritmAlgoritmAlgo:

OsservazioniOsservazioni

L’algoritmo ordina le carte qualunque sia il modo in cui sono ordinate le carte inizialmente e sia per i mazzi da 0 carte che per quelli da 52: l’algoritmo risolve una classe di problemi

(3)

Es em pio : c alc olo de lle ra dic i d i un ’eq ua zio ne di se co nd o g rad o

blemaProici rc=x++bxdi aeali elle radlo dalco: CmablePro0 2

eFin7) 21unic6)Comare i valori x, x 21 5)x=(b+√∆)/2a, x=(b−√)/2a 21e 6ion x l'isuiresegoi ea, pb/2=)=xtruz=0,Se 4) Se dici 3)<0 non esistono rareali, eseguire l'istruzione 7) re 2)Calcola= b4ac 2 ,b,cnti aicieoeffe i cuisirAcq1) ooritmAlgoritmAlgo:

Es em pio : o rd ina m en to de i C D m us ica li p er au tor e e tit olo

ProblemaProblema: Dato un insieme di CD musicali si vogliono ordinare per il nomedell’autore e, in caso di CD dello stesso autore, per titolo e inserirli in un contenitore



AlgoritmoAlgoritmo:1)Si scorrono tutti i CD ricordandosi dell’autore con il nome che precede tutti glialtri2)Si scorrono nuovamente tutti i CD cercando quello dell’autore individuato al passo 1) e con il titolo che precede gli altri3)Si inserisce il ilCD individuato dai passi 1) e 2) nella prima posizione vuota delcontenitore4)Se l’insieme non èvuoto si ripetono i passi 1), 2) e 3)

OsservazioniOsservazioni

Si poteva definire un algoritmo piùefficiente ……possono esistere piùalgoritmiper risolvere lo stesso problema

(4)

Es em pio : ri ce rca di CD pe r a uto re e tito lo



ProblemaProblema: Dato un insieme di CD musicali si vuole cercare un CD. Si suppone che i CD siano ordinati su uno scaffale.



Algoritmo 1Algoritmo 1:1)Si scorrono tutti i CD partendo dal primo fino a che non troviamo il CDdesiderato



Algoritmo 2Algoritmo 2:1)Si guarda il CD al centro dello scaffale e si confronta con quello che si vuolecercare2)Il confronto ci permette di capire se si deve cercare nella parte destra delloscaffale o in quella sinistra. Quindi ritorna a 1, concentrandoci solo sulla partepertinente dello scaffale. OsservazioniOsservazioni

Ovviamente 2 èpiùveloce di 1

Pro prie tà de gli alg orit m i

Affinchéun elenco di istruzioni, possa essere considerato un algoritmo,devono essere soddisfatti i seguenti requisiti:



FinitezzaFinitezza: ogni algoritmo deve essere finito, cioèogni singola istruzione deve poter essere eseguita in tempo finito ed un numero finito di volteGeneralitGeneralitàà: ogni algoritmo deve fornire la soluzione per una classe di problemi; devepertanto essere applicabile a qualsiasi insieme di dati appartenenti all’insieme di definizione o dominio dell’algoritmoe deve produrre risultati che appartengano all’insieme di arrivo o codominio

Non ambiguitNon ambiguit

devono essere definiti in modo univoco e chiaro tutti i passi daeseguire àà:

(5)

Pro gra m m are : co sa è un lin gu ag gio , c om pila tor e… .

Alg orit m i e Li ng ua gg i d i pro gra m m azio ne

Caratteristiche intuitive dei linguaggi di programmazione

Intuitivamente, permettono di specificare algoritmi in modo comprensibile ad un calcolatore

Sono dotati di strutture linguistiche che garantiscono precisione e sintesi:

il linguaggio naturale non ha queste caratteristiche perchéalcune frasi possono essere ambigue e la stessa cosa può essere detta in maniere diverseSono sufficientemente precisi da poter di rispondere a domande come:quali sono le frasi lecite?si può stabilire se una frase appartiene al linguaggio?come si stabilisce il significato di una frase?quali sono gli elementi linguistici primitivi?

(6)

Li ng ua gg i d i p rog ram m azio ne

In questo corso non ci soffermeremo su questo aspetto, ma

I linguaggi di programmazione sono sistemi matematici definiti formalmenteda tre componenti



LessicoLessico: un insieme di regole formali per la scrittura delle parole (i componentielementari)

SintassiSintassi

: un insieme di regole formali per la scrittura di frasi, che stabiliscono cioèla grammatica del linguaggio stesso

SemanticaSemantica

: un insieme dei significati da attribuire alle frasi (sintatticamentecorrette) costruite nel linguaggio

NotaNota: una frase può essere sintatticamente corretta e tuttavia non avere significato!

Es em pio

Definizione formale di numero intero positivo per mezzo di regole sintattiche

<intero> := 0 | <cifra-non-nulla>{<cifra>}<cifra-non-nulla>:= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <cifra>:= 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Indica una possibile sceltaIndica la ripetizione

Cifra non nullaCifra 0 Intero

Rappresentazionegrafica di una regola

(7)

Li ng ua gg i d i b ass o e alt o li ve llo

Linguaggi di basso livello

Il linguaggio macchina èil linguaggio dalla CPU del calcolatore

I linguaggi a basso livello sono simili al linguaggio macchina, molto diversi dal linguaggio umano

Variano a seconda del computer su cui si scrive il programma

Programmare con linguaggi a basso livello richiede molto tempoLinguaggi di alto livello

Sono indipendenti dalla macchina

Sono piu’vicini al linguaggio umano, meno al linguaggio macchina

Programmare con linguaggi ad alto livello richiede meno tempo

Java, C++, Basic, ……

Li ng ua gg i d i a lto live llo e co m pila zio ne

Contengono istruzioni piu’vicine al linguaggio umano

“seQUESTA CONDIZIONEÈVERA, FAI QUESTO, altrimenti FAIQUEST’ALTRO

“ripeti QUESTO fino a che si verifica QUESTA CONDIZIONE

Poiche’i computer non possono eseguire i linguaggi ad alto livello, occorrecompilare(tradurre) il programma prima di poterlo eseguireif(a==b) {c=3;}else (c=4;} LOAD REG1, aLOAD REG2, bCMP REG1, REG2BNEQ ELSESTORE 3, cELSE:JMP ENDSTORE 4, cEND: 001010101…110010101…111010101…111010101…110101101…001010101…. Java

AssemblyLinguaggio macchina CompilatoreAssembler

(8)

Co m pila tor i e am bie nti di s vi lup po

Gli ambienti di sviluppoGli ambienti di sviluppo

includono un compilatoree aiutano il programmatorenella scrittura del codice

quelli piu’moderni si chiamano RAD(RapidApplicationDevelopmentTools) e sono sofisticatissimi che forniscono una grande quantita’di strumenti

includono editori specializzati, strumenti per controllare la correttezzadel programma, strumenti per testare il programma, documentazione, strumenti per lo sviluppo visuale del software, ……

In laboratorio ne useremo uno: JBuilder

Il p roc ess o d i svi lup po de l so ftw are

Il processo di sviluppo del softwareIl processo di sviluppo del softwareèècostituito da tre fasicostituito da tre fasi



Analisi e progetto (per applicazioni medie, 30% del tempo)Analisi e progetto (per applicazioni medie, 30% del tempo)Si studia il problema documentandosi. Si realizza e si raffina Si studia il problema documentandosi. Si realizza e si raffina il progetto e fino a giungere ad una definizione dettagliata il progetto e fino a giungere ad una definizione dettagliata delledellefunzionalitafunzionalita

’’inconechieli ricsti.ei v e darieessnecessarie e dei vincoli richiesti.

Scrittura del software (30% del tempo)Scrittura del software (30% del tempo)Si scrive il programmaSi scrive il programma



Test (per applicazioni medie, 40% del tempo)Test (per applicazioni medie, 40% del tempo)Si prova il programma, prima la verifica viene fatta dai Si prova il programma, prima la verifica viene fatta dai programmatori, poi sul programmatori, poi sul campocampo……

(9)

Sc he m a d el p roc ess o d i svi lup po de l so ftw are

In caso di errori si In caso di errori si ritorna ad una fase ritorna ad una fase precedenteprecedente Analisieprogetto

Realizzazione

Test DocumentazioneProgrammaedocumentazione

Prodottofinale edocumentazione Descrizioneerrore

Il li ng ua gg io J ava

(10)

Co m po ne nti ele m en tar i d i Ja va : cla ssi, m eto di, va ria bili

Un programma Java

consiste di insieme di componenti semplici chiamate classi

Una classe èdefinita da

un insieme di dati detti variabilie

un insieme di funzioni detti metodi,con cui si puooperare sui quei dati

Es em pio : il pro do tto di un su pe rm erc ato

Un prodotto

un prodotto ècaratterizzato da un nome, un costo netto, la percentuale IVAe un eventuale sconto.

Ci èstato richiesto di sviluppareun modulosoftware chememorizza un prodotto, permettedi modificare il costo netto, lo scontoe di calcolare il costo totale. Classe Prodotto

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaTotale Variabili

Metodi sconto

(11)

Es em pio : u no stu de nte

Unostudente secondo la segreteria studenti

Uno studente ha un nome, un indirizzo e un curriculum.

Si deve poter inserire nuovi esami, calcolarne la media e modificarel’indirizzo, .... Classe Studente

nome

Indirizzo

esamiSostenuti

inserisciEsame

modificaIndirizzo

calcolaMedia Variabili

Metodi

……

Co m po ne nti ele m en tar i d i Ja va : og ge tti

Classi e oggetti

una classe èuna definizione astratta di un concetto

unoggettoèuna particolare istanza concreta di quella classe

negli oggetti, le variabili assumo un valore preciso

ad ogni classe possono corrispondere piùoggetti

(12)

Es em pio : il pro do tto di un su pe rm erc ato II

Oggetto pasta

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaLordo sconto “Pasta 500g”

0.50

20

0 Oggetto fazzoletti

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaLordo sconto “Pacco di fazzoletti”

120

0.20Valore delle variabili Valore delle variabili pasta e fazzoletti sono istanze concreta della classe Prodotto

Es em pio : u no stu de nte II

Le variabili dello studente assumo un valore negli oggetti concreti pippoe paperino

Oggetto pippo

nome

Indirizzo

esamiSostenuti

inserisciEsame

modificaIndirizzo

calcolaMedia PippoTopolinia

Og. EsameAnalisi28 Og. EsameInform.28 Oggetto paperino

nome

Indirizzo

esamiSostenuti

inserisciEsame

modificaIndirizzo

calcolaMedia PaperinoPaperopoli

Og. EsameAnalisi30 Valori dellevariabili

(13)

Co m po ne nti ele m en tar i d i Ja va : tip i d i d ato

Tipi di dato

Ad ogni variabile èassociato un tipo di datoche specifica i valori che la variabile può assumere

I tipi si dividono in

tipi elementarisonodati semplici: numerointero, numeroreale, carattere, booleano,..

oggettidetti anche tipi strutturaticontengono dati complessi, composti da tipi elementari

Es em pio : il pro do tto di un su pe rm erc ato III

Oggetto pasta

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaLordo sconto “Pasta 500g”

0.50

20

0 Oggetto fazzoletti

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaLordo sconto “Pacco di fazzoletti”

120

0.20Valore delle variabili Valore delle variabili Le variabili costoNetto, IVA, sconto contengono numeri reali:tipi semplici

La variabili nome contiene una sequenza di caratteri:tipo strutturato

(14)

Es em pio : u no stu de nte II

Le tre variabili contengono tipi strutturati

esamiSostenuticontiene un insieme di esami:ogni esame èa sua volta unoggetto

Oggetto pippo

nome

Indirizzo

esamiSostenuti

inserisciEsame

modificaIndirizzo

calcolaMedia PippoTopolinia

Og. EsameAnalisi28 Og. EsameInform.28 Oggetto paperino

nome

Indirizzo

esamiSostenuti

inserisciEsame

modificaIndirizzo

calcolaMedia PaperinoPaperopoli

Og. EsameAnalisi30 Valori dellevariabili

Co m po ne nti ele m en tar i d i Ja va : tip i d i d ato II

Tipi di dati predefintii Java (alcuni esempi, tanto per iniziare)

Tipi semplici

gli interi: si possono definire usando la parola chiaveint

i reali: si possono definire usando la parola chiavefloat

Tipi strutturati

lestringhe(sequenze di caratteri): si possono definireusando la parola chiave String

insiemi: si possono definire usando le parentesi quadre []

(15)

De fin iam o la no str a p rim a c las se in Ja va … .

Classe Prodotto

nome

costoNetto

IVA

sconto In Java la definizionedi unaclasseèracchiusafraparentesie precedutadallaparolachiaveclass

class Prodotto {

Stringnome;floatcostoNetto;floatIVA;floatsconto;

}

De fin iam o la no str a … se co nd a c las se in J ava

class Esame {

Stringmateria;intvoto;

} Classe Esame

materia

voto

……

(16)

De fin iam o la no str a … ter za cla sse in Ja va

Unostudentecontieneun insiemedi esami, per cui ladefinizionedelleclasseStudenteusala definizionedellaclasseEsame

class Studente {

Stringnome;

Stringindirizzo;

Esame esamiSostenuti[];

} Classe Studente

nome

Indirizzo

esamiSostenuti

……

Co m po ne nti ele m en tar i d i Ja va : m eto di

I metodi

sonofunzioniche operano sui dati della classe

un metodo riceve dei dati in ingressoe restituisce altri dati

sonol’interfaccia verso l’esternodella classe

sono operazioni messe a disposizione “degli altri”per fare modifiche e calcoli sui dati: …per operare sui dati convienechiedere (si dice chiamare) ai metodi

(17)

Co m po ne nti ele m en tar i d i Ja va : tip i d i d ato e m eto di

Tipi di dati associati ai metodi definiscono

cosa il metodo prende in ingresso:

ad ogni ingresso (parametro) èassociato una variabile e un tipo

cosa restituisceIl tipo speciale voidspecifica che un metodo non restituisce niente

voidmodificaNetto(floatnuovoNetto);

voidmodificaSconto(floatnuovoSconto);

floatcalcolaTotale(); Tipodi datoin ingressoVariabilein ingressoTipodi datorestituito

De fin izio ne Ja va de lla cla sse Pro do tto

Classe Prodotto

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaTotale sconto class Prodotto {

Stringnome;floatcostoNetto;floatIVA;floatsconto;

voidmodificaNetto(floatnuovoNetto);

voidmodificaSconto(floatnuovoSconto);

floatcalcolaTotale(floatnuovoSconto);

}

(18)

De fin izio ne Ja va de lla cla sse Stu de nte

Classe Studente

nome

Indirizzo

esamiSostenuti

inserisciEsame

modificaIndirizzo

calcolaMedia class Studente {

Stringnome;

Stringindirizzo;

Esame esamiSostenuti[];

voidinserisciEsame(Esame nuovoEsame)

voidmodificaIndirizzo(StringnuovoIndirizzo)floatcalcolaMedia()

}

Da ta m an ipu lati on

Manipolazione dei dati

Abbiamo visto comedefinirevariabili e classi

Dobbiamo capire comemanipolare variabili e classi

Ogni linguaggio di programmazione contieneistruzioniper inizializzareo modificare il valore delle variabili

ad es., fare in modo che il nome del prodotto è“pasta”

Ogni linguaggio di programmazione contiene un meccanismo per creareun’istanza di una classe, cioèun oggetto

ad es., fare in modo da creare l’oggetto Pasta a partire dalladefinizione della classe Prodotto

(19)

Ist ru zio ni d i m an ipo laz ion e d ei d ati: co m inc iam o c on … l’a sse gn am en to

L’assegnamento èl’istruzione piùsemplice

attribuisce alla variabile a sinistra del simbolo “=”il valore dell’espressione a destra.

Il valore assegnato deve essere compatibile col tipo della variabile, altrimenti si genera un errore …. quasi sempre

inta, b;floatv;a = 4;b = a;v = 3.2*12-a;b = v; b prende il valore di a

v prende il valore diuna espressioneerrore

Ist ru zio ne ne w e og ge tti

L’istruzione new

serve a costruire un oggetto a partire dalla classe

deve essere seguita dal nome della classe ed eventuali parametrichespecificano di che oggetto si tratta

Stringstringa1;Stringstringa2;stringa1= new String(“Nel mezzo del cammino”);stringa2= new String(“Tobeor nottobe”);Creazionedi un oggettostringa String èunaclassepredefinitad Java

(20)

Ac ce sso dir ett o a lle va ria bili di un og ge tto

Una volta creato un oggetto

si può accedere alle sue variabili, usando il nome dell’oggetto seguito daun punto e il nome della variabile

Prodotto n;

n=newProdotto();

n.nome=new String(“Pasta 500g”);

n.costoNetto=0.50;

n.IVA=20;

n.sconto=0; Oggetto pasta

nome

costoNetto

IVA

modificaNetto

modificaSconto

calcolaLordo sconto “Pasta 500g”

0.50

20

0 Creazionedell’oggetto

Assegnazionedellevariabili

Os se rva zio ne im po rta nte

La programmazione attraverso oggetti e classi si chiama ObjectOrientedProgramming(OOP)

Ogni oggetto èun’unita’software che racchiude (incapsula) un insieme di dati omogeneo e offre i metodi per poterci lavorare

Se un oggetto èfatto bene, puo’essere riusatoin piu’applicazioni

ad esempio, l’oggetto studente puo’essere usato nell’anagraficadella segreteria, nella gestione dei tirocini, …

Se un programma èdiviso bene in oggetti, piu`persone possono lavorare sulla stessa applicazione contemporaneamente: ognuno realizza alcuni oggetti

ad esempio, uno realizza l’oggetto corsi, l’altro quello studenti, …

(21)

En tria m o n ei d ett ag li: no zio ni d i b ase

I n om i

bileariaa vi une dom il navaIn J deen ple begolle r dearepetto risvonegiorecisuaglinguaglinggio devonpettare delle regole ben preciseo ris I nmeltri li ai gtutt di i etoddei entiili, riab vaellei domdi un elemomI ni eentielemltri li ai gtutt di toddi medei ili, riab vaellei dun

Puocontenere lettere (minuscole o maiuscole), cifre e il carattere ‘_’

Non può essere una delle parole riservate del linguaggio(if, else, while, return ecc…)

Non puo’iniziare con una cifra

E’case sensitive: nomeèdiverso da Nome

mia eta

12stipendio

co*carepeatnomi scorretti miaEta

stipendio12

co_caripetizionenomi corretti

(22)

I c om m en ti e le ist ru zio ni

Tutte le istruzioni

sono terminate da un punto e virgolaI commenti

sono il testo contenuto fra i simboli “/*”e “*/”

sono il testo da “//”fino alla fine dellalinea

commentare un programma èessenziale per documentarlo // Questo èun commento ….// definizioneinta, b;floatv;/* Un’altro commento ….assegnazioni */a = 4;b = a;v = 3.2*12-a;b = v;

Sta m pa re a vi de o

Esistono molti modi per stamparedei valori a video

Il modo piùsemplice èquello di usare i metodi dellaclasse predefinitaSystem.out Stringa;Stringb;Stringc;a=newString(“Paperon”);b=newString(“dei Paperoni”);c=newString(“Paperopoli”);

System.out.print(a);System.out.println(b);System.out.print(c);stampala stringaaggiungendoun fine linea

Paperondei PaperoniPaperopoli Stampa

(23)

En tria m o n ei d ett ag li: l e va ria bili

Le va ria bili

Una variabile

rappresenta un’areadi memoria riservata dal compilatoreper memorizzare dati

èdefinita da un nome univoco che la identifica e da un tipo chedefinisce i tipi di dati che puo’accettare

inteta;floatstipendio;

Stringcognome;

Date dataDiNascita; Intero con segnoNumero realeStringa, sequenza di caratteriData, èclasse Java per la rappresentazione delle date

(24)

Le va ria bili

In Java una variabile deve essere dichiarata prima di essere usata(altri linguaggi non hanno questo vincolo)

Dichiarare una variabile significa avvertire il compilatore che riservi un’area di memoria perchéin futuro essa verràutilizzata per memorizzarci i dati della variabile

Se una variabile viene dichiarata di tipo T, essa potràmemorizzarevalori di tipo T

Il compilatore dara’un messaggio di errore sia in caso di mancatadichiarazione della variabile che in caso gli si assegni un valore di tipo sbagliato

Tip i d i d ato

I tipi di dato si distinguono in tipi semplici e tipi strutturati:

tipi di dato semplici–sono tipi di dato a cui può essere associatoun singolo valore (numerico o carattere) ed un riferimento allavariabile èun riferimento al contenuto

tipi di dato strutturati–sono tipi di dato composti da più“campi”, da cioèuno o piùaltri tipi di dato a loro volta semplici o strutturati

Riferimenti

Documenti correlati

Osserviamo anche che se due polinomi monici irriducibili hanno una radice comune essi coincidono, per l’unicit` a del polinomio minimo... Ragioniamo per induzione

[r]

Dimostrare che gli elementi nilpotenti di un anello commutativo R formano un ideale.. Ci sono quindi

Forse un giorno capirete perché al posto di questi 100 euro preferiremmo un contratto nuovo che venga finalmente rinnovato ad ogni scadenza e che tenga conto della

La raccolta dei dati e le valutazioni relative agli habitat e alle specie vegetali sono state effettuate alla luce dei risultati di due progetti realizzati dalla Società

[r]

Definire l’usuale ordinamento sui numeri naturali e successivamente provare la propriet`a transitiva di tale ordinamento.. Formalizzare la seguente frase in linguaggio naturale:

Soluzione: Si consideri una costante “m”, un predicato unario “P(x)” che significa “x `e un professore” e un predicato binario “A(x,y)” che significa “x ammira