prof. cleto azzani ipsia “moretto ”–brescia -italy

100
1 1 prof prof . . Cleto Cleto Azzani Azzani IPSIA IPSIA Moretto Moretto BRESCIA BRESCIA - - ITALY ITALY PRELIMINARY PRELIMINARY FEB FEB . 2009 . 2009

Upload: others

Post on 29-Nov-2021

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

11

profprof. . CletoCleto AzzaniAzzaniIPSIA IPSIA ““MorettoMoretto”” –– BRESCIA BRESCIA -- ITALYITALY

PRELIMINARY PRELIMINARY FEBFEB. 2009. 2009

Page 2: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

22

IntroduzioneIntroduzione

�� Il Il nomenome Delphi Delphi sisi éé ispiratoispirato allaalla cittcittàà didi DelfiDelfi, , la localitla localitàà

nella Grecia antica, in cui era possibile consultare nella Grecia antica, in cui era possibile consultare

l'oracolo di Delfil'oracolo di Delfi. Il nome . Il nome èè dovuto al fatto che gli dovuto al fatto che gli

sviluppatori del compilatore stavano realizzando uno sviluppatori del compilatore stavano realizzando uno

strumento in grado di interfacciarsi ai database Oracle strumento in grado di interfacciarsi ai database Oracle

(da cui oracolo di cui il pi(da cui oracolo di cui il piùù famoso famoso èè quello di Delfi).quello di Delfi).

�� Delphi Delphi éé un un linguaggiolinguaggio didi programmazioneprogrammazione orientatoorientato agliagli

oggettioggetti (OBJECT PASCAL), (OBJECT PASCAL), basatobasato sullasulla

programmazioneprogrammazione visualevisuale in cui il programmatore utilizza in cui il programmatore utilizza

una serie di icone per ricreare tutti gli oggetti sullo una serie di icone per ricreare tutti gli oggetti sullo

schermo di Windows.schermo di Windows.

Page 3: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

33

StoriaStoria

�� Il Il linguaggiolinguaggio PASCAL (PASCAL (nomenome sceltoscelto per per onorareonorare ililmatematicomatematico e e filosofofilosofo BLAISE PASCAL) BLAISE PASCAL) èè statostato ideatoideatonelnel 1968 1968 daldal profprof. . NiklausNiklaus Wirth del Wirth del politecnicopolitecnico didi ZurigoZurigo. .

�� NelNel 1983 la software house americana Borland 1983 la software house americana Borland International introduce International introduce sulsul mercatomercato ilil linguaggiolinguaggio ““Turbo Turbo PascalPascal””..

�� NelNel 1994, 1994, nascenasce Delphi 1 in Delphi 1 in coincidenzacoincidenza con con ilil ritornoritorno didiBorland al Borland al segmentosegmento deidei linguaggilinguaggi didi programmazioneprogrammazione..

�� Delphi viene presentato come RAD Delphi viene presentato come RAD RapidRapid ApplicationApplicationDevelopmentDevelopment

Page 4: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

44

EvoluzioniEvoluzioni e e CuriositCuriositàà

ÈÈ il grande boom di Internet. Delphi 3 porta il supporto per la il grande boom di Internet. Delphi 3 porta il supporto per la creazione di applicazioni Internet con CGI e ISAPI / NSAPI. E creazione di applicazioni Internet con CGI e ISAPI / NSAPI. E 'stato il primo strumento con il supporto per la costruzione di 'stato il primo strumento con il supporto per la costruzione di applicazioni applicazioni multimulti--tiertier (con DCOM), con ambiente RAD (MIDAS)(con DCOM), con ambiente RAD (MIDAS)

19971997

Dopo il lancio di Windows 95, prima versione di Windows a 32 Dopo il lancio di Windows 95, prima versione di Windows a 32 bit, esce Delphi 2 che mantiene la totale compatibilitbit, esce Delphi 2 che mantiene la totale compatibilitàà con la con la versione a 16 versione a 16 bitsbits..La nuova versione migliora in modo significativo la costruzione La nuova versione migliora in modo significativo la costruzione di applicazioni Client/Server.di applicazioni Client/Server.

19951995

Nasce Delphi 1 , versione 16 Nasce Delphi 1 , versione 16 bitsbits per Windows 3.0.per Windows 3.0.

Sistema di sviluppo rivoluzionario: in meno di 3 mesi guadagna Sistema di sviluppo rivoluzionario: in meno di 3 mesi guadagna una considerevole fetta del mercato. Primo una considerevole fetta del mercato. Primo tooltool RAD 100% RAD 100% orientato agli oggetti.orientato agli oggetti.

19941994

Page 5: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

55

EvoluzioniEvoluzioni e e CuriositCuriositàà

Delphi 4 ha il sostegno dei piDelphi 4 ha il sostegno dei piùù recenti modelli di mercato, recenti modelli di mercato,

come CORBA e Oracle 8, portando un aumento della come CORBA e Oracle 8, portando un aumento della

produttivitproduttivitàà dell'ambiente di sviluppo, con la possibilitdell'ambiente di sviluppo, con la possibilitàà di di

debugdebug remoto delle applicazioni, e remoto delle applicazioni, e wizardwizard per la costruzione di per la costruzione di

controlli controlli ActiveXActiveX//ActiveFormsActiveForms..

19981998

Il formato XML, novitIl formato XML, novitàà del momento, del momento, èè pienamente supportato pienamente supportato

da Delphi 5 che anticipa i concorrenti nella manipolazione dei da Delphi 5 che anticipa i concorrenti nella manipolazione dei

file XML confermando la sua caratteristica di sostegno di file XML confermando la sua caratteristica di sostegno di

Borland alle varie tecnologie. Borland offre pure una serie di Borland alle varie tecnologie. Borland offre pure una serie di

componenti per l'uso della tecnologia ADO (Microsoft). Gli componenti per l'uso della tecnologia ADO (Microsoft). Gli

strumenti strumenti TeamSourceTeamSource TranslationSuiteTranslationSuite sono anche novitsono anche novitàà di di

questa versione. questa versione.

19991999

Page 6: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

66

EvoluzioniEvoluzioni e e CuriositCuriositàà

NET. NET. èè la novitla novitàà del momento. Borland non potrdel momento. Borland non potràà mai lasciare mai lasciare

che questo accada. Delphi 7, mantiene la piena compatibilitche questo accada. Delphi 7, mantiene la piena compatibilitàà

con le versioni precedenti, e ora permette agli sviluppatori di con le versioni precedenti, e ora permette agli sviluppatori di

fornire le loro applicazioni di girare sulla piattaforma NET.fornire le loro applicazioni di girare sulla piattaforma NET.

20022002

La stella del momento La stella del momento èè rappresentata da Linux e Borland rappresentata da Linux e Borland èè il il

primo ad offrire uno strumento RAD nativo "primo ad offrire uno strumento RAD nativo "CrossCross--piattaformapiattaforma". ".

I Web I Web ServicesServices sono stati inoltre potenziati; Delphi 6 sono stati inoltre potenziati; Delphi 6 èè il primo il primo

strumento commerciale ad avere il supporto per queste strumento commerciale ad avere il supporto per queste

tecnologie. Nasce Kylix, Delphi per Linux; ma anche tecnologie. Nasce Kylix, Delphi per Linux; ma anche BizSnapBizSnap, ,

DataSnapDataSnap e e WebSnapWebSnap..

20012001

Page 7: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

77

Ambiente DelphiAmbiente Delphi

Page 8: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

88

Ambiente DelphiAmbiente Delphi

Questa Questa èè la barra degli strumenti principali per Delphi. Attraverso essala barra degli strumenti principali per Delphi. Attraverso essa si ha lsi ha l’’accesso a accesso a tutte le caratteristiche che consentono di costruire visualmentetutte le caratteristiche che consentono di costruire visualmente la vostra applicazione.la vostra applicazione.

Nella pagina standard, per esempio, si ha lNella pagina standard, per esempio, si ha l’’accesso a oggetti come caselle di testo, accesso a oggetti come caselle di testo, oggetti combo, oggetti combo, radioradio--buttonbutton, box di verifica, memo (raccoglitori di testo) e altro , box di verifica, memo (raccoglitori di testo) e altro ancora.ancora.

��Palette Palette deidei componenticomponenti

Page 9: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

99

Ambiente DelphiAmbiente Delphi

�� La La FormForm èè il punto centrale di qualsiasi applicazione Delphi e costituiscil punto centrale di qualsiasi applicazione Delphi e costituisce le l’’area su cui vengono area su cui vengono collocati i vari oggetti via via che lcollocati i vari oggetti via via che l’’applicativo si sviluppa. La applicativo si sviluppa. La formform èè equivalente ad una finestra di equivalente ad una finestra di Windows. In questa finestra, Windows. In questa finestra, èè necessario posizionare i componenti o oggetti (combo, la casellnecessario posizionare i componenti o oggetti (combo, la casella a di riepilogo, ecc) e scrivere il codice di riepilogo, ecc) e scrivere il codice ObjectObject Pascal coinvolto negli eventi di componenti Pascal coinvolto negli eventi di componenti selezionati. Tutto ciò che viene collocato sulla selezionati. Tutto ciò che viene collocato sulla formform, viene registrato in un file (. DFM) allegato al , viene registrato in un file (. DFM) allegato al progetto della applicazione. Anche se questo file progetto della applicazione. Anche se questo file èè registrato in formato binario, esso viene registrato in formato binario, esso viene correttamente aperto e letto da Delphi.correttamente aperto e letto da Delphi.

FORMFORM

Page 10: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1010

AmbienteAmbiente DelphiDelphi

�� CODE EDITORCODE EDITOR

La finestra Code Editor La finestra Code Editor èèesattamente il luogo in cui il esattamente il luogo in cui il programma viene scritto. programma viene scritto. Il codice che gestisce gli Il codice che gestisce gli eventi, che riguardano i vari eventi, che riguardano i vari componenti collocati sulla componenti collocati sulla formform, serve a Delphi per , serve a Delphi per rispondere alle sollecitazioni rispondere alle sollecitazioni delldell’’utente (click su un utente (click su un bottone, cambiamento del bottone, cambiamento del contenuto di una contenuto di una editedit box, box, ecc.). ecc.). Il codice scritto in Il codice scritto in ObjectObjectPascal viene registrato in un Pascal viene registrato in un file con estensione (. PAS), file con estensione (. PAS), che sarche saràà chiamato UNIT.chiamato UNIT.

Page 11: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1111

AmbienteAmbiente DelphiDelphi

�� EE’’ importanteimportante saperesapere chechetuttotutto quelloquello cheche vieneviene scrittoscrittonellanella UNIT UNIT vieneviene decisodecisodalldall’’utenteutente. .

�� Delphi Delphi cici dada unauna manomanoscrivendoscrivendo dada solo la solo la maggiormaggiorparte del parte del codicecodice e e inserisceinserisceneinei puntipunti opportuniopportuni le le istruzioniistruzioni cheche ililprogrammatoreprogrammatore vuolevuoleintrodurreintrodurre. .

Page 12: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1212

AmbienteAmbiente DelphiDelphi�� OBJECT INSPECTOROBJECT INSPECTOR

Questo Questo importantissimoimportantissimostrumentostrumento ausiliarioausiliario didiDelphi Delphi permettepermette didimodificaremodificare gligli attributiattributi deideicomponenticomponenti e e delladella ““formform””usateusate nellanella applicazioneapplicazione. . Alcuni degli attributi o Alcuni degli attributi o

PROPRIETAPROPRIETA’’ potrebbero potrebbero essere: il colore del testo, il essere: il colore del testo, il colore dello sfondo, il tipo di colore dello sfondo, il tipo di carattere e coscarattere e cosìì via. via. Inoltre Inoltre èè attraverso attraverso

““OBJECT INSPECTOROBJECT INSPECTOR””possiamo pianificare quello possiamo pianificare quello che deve accadere quando che deve accadere quando l'utente fa clic su un l'utente fa clic su un pulsante, selezionare pulsante, selezionare un'opzione, relativo alla un'opzione, relativo alla formform, etc. (EVENTI)., etc. (EVENTI).

Page 13: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1313

EventiEventi

�� Gli eventi sono blocchi di istruzioni che vengono associate al Gli eventi sono blocchi di istruzioni che vengono associate al verificarsi di alcune attivitverificarsi di alcune attivitàà oppure a una azione da intraprendere.oppure a una azione da intraprendere.

�� Un linguaggio di programmazione Un linguaggio di programmazione ““orientato agli eventiorientato agli eventi”” non non èènecessariamente una struttura logica dotata di un inizio e di unnecessariamente una struttura logica dotata di un inizio e di una a fine; fine; èè piuttosto una sequenza di comandi, che viene eseguita solo piuttosto una sequenza di comandi, che viene eseguita solo nel momento in cui si verifica un evento. nel momento in cui si verifica un evento.

Page 14: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1414

EventiEventi�� Delphi ha piDelphi ha piùù di 130 eventi predefiniti, che sono associati al di 130 eventi predefiniti, che sono associati al

verificarsi di azioni nelle diverse classi. verificarsi di azioni nelle diverse classi. Un evento può essere associato a :Un evento può essere associato a :

�� il clic o il movimento del mouse;il clic o il movimento del mouse;�� Utilizzo della la tastiera; Utilizzo della la tastiera; �� Operazioni su finestre (apertura, chiusura, creazione, Operazioni su finestre (apertura, chiusura, creazione,

ridimensionamento, spostamento, ...); ridimensionamento, spostamento, ...); �� Errori di esecuzione etc.Errori di esecuzione etc.

Page 15: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1515

EventiEventi

�� EventiEventi comunicomuni::

�� OnClickOnClick: si verifica quando un utente effettua una click con il tasto s: si verifica quando un utente effettua una click con il tasto sinistro inistro del mouse.del mouse.

�� OnCreateOnCreate: si verifica quando l'oggetto viene creato.: si verifica quando l'oggetto viene creato.

�� OnChangeOnChange: si verifica quando il contenuto di una : si verifica quando il contenuto di una EditEdit o di una Memo o di una Memo subisce un cambiamento.subisce un cambiamento.

�� On Active: On Active: si verifica quando il programma attiva l'oggetto per la prima si verifica quando il programma attiva l'oggetto per la prima volta, o quando si torna da un'altra applicazione.volta, o quando si torna da un'altra applicazione.

Page 16: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1616

TipologieTipologie didi DatiDati

Page 17: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1717

TipoTipo IntegerInteger

Le Le tipologietipologie ““integerinteger”” vengonovengono usateusate per per rappresentarerappresentare quantitquantitàà intereintere. .

EsistonoEsistono varivari tipi tipi differentidifferenti didi variabilivariabili intereintere ::

SISI323244--223131 .. +2.. +23131--11LONGINTLONGINT

NONO3232440 .. 20 .. 23232--11CARDINALCARDINAL

SISI323244--223131 .. +2.. +23131--11INTEGERINTEGER

SISI161622--32768 .. +3276732768 .. +32767SMALLINTSMALLINT

SISI8811--128 .. +127128 .. +127SHORTINTSHORTINT

NONO1616220..655350..65535WORDWORD

NONO88110..2550..255BYTEBYTE

SEGNOSEGNOBITBITBYTESBYTESINTERVALLOINTERVALLO--VALORIVALORITIPOTIPO

Page 18: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1818

Ripassiamo !!!Ripassiamo !!!Kilo, mega e giga in ambito DIGITALEKilo, mega e giga in ambito DIGITALE

4G4G1G x 41G x 41024 x 1024 x 1024 x 41024 x 1024 x 1024 x 4221010 221010 221010 2222443232

1G1G1M x 1K1M x 1K1024 x 1024 x 10241024 x 1024 x 1024221010 221010 2210103030

16M16M1M x 161M x 161024 x 1024 x 161024 x 1024 x 16221010 221010 2244332424

1M1M1K x 1K1K x 1K1024 x 10241024 x 1024221010 2210102020

64K64K1024 x 641024 x 64221010 2266221616

32K32K1024 x 321024 x 32221010 22551515

16K16K1024 x 161024 x 16221010 22441414

8K8K1024 x 81024 x 8221010 22331313

4K4K1024 x 41024 x 4221010 22221212

2K2K1024 x 21024 x 2221010 22111111

1K1K102410242210101010

COMBINAZIONICOMBINAZIONIBYTESBYTESN BITN BIT

Page 19: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

1919

Tipo RealTipo Real

Le tipologie di dati “Real” sono progettati per rappresentare quantità numeriche dotate di parte frazionaria. In tabella sono riportati i vari tipi “real”:

�� NOTA: Il tipo COMP NOTA: Il tipo COMP èè in realtin realtàà un INTERO grande, e non un numero reale. Il tipo COMP un INTERO grande, e non un numero reale. Il tipo COMP èèstato incluso in questa tabella in quanto esso viene implementatstato incluso in questa tabella in quanto esso viene implementato con le stesse tecniche dei o con le stesse tecniche dei dati dati ““floatingfloating--pointpoint”” (virgola mobile). In effetti, si tratta di un numero intero a 6(virgola mobile). In effetti, si tratta di un numero intero a 64 bit.4 bit.

88Signed 64 bitSigned 64 bit1919--2020--9.2E18..9.2E189.2E18..9.2E18COMPCOMP

10101919--20203.4E3.4E--4932..1.1E49324932..1.1E4932EXTENDEDEXTENDED

881515--16165E5E--324..1.7E308324..1.7E308DOUBLEDOUBLE

4477--881.5E1.5E--45..3.4E3845..3.4E38SINGLESINGLE

661111--12122.9E2.9E--39..1.7E3839..1.7E38REALREAL

BytesBytesCifreCifreSignificativeSignificative

Range Range didi valorivaloriTipiTipi

Page 20: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2020

Tipo Tipo didi datidati ““valutavaluta”” (currency)(currency)

��Tipo Tipo didi datodato usatousato esclusivamenteesclusivamente per per rappresentarerappresentare valorivalori monetarimonetari;;

��Il tipo dati Il tipo dati ““valutavaluta”” ha una precisione di 4 cifre decimali, ed ha una precisione di 4 cifre decimali, ed èè conservato come conservato come un intero a 64 bitun intero a 64 bit

��ÈÈ possibile chiedersi il motivo per cui si dovrebbe usare il tipopossibile chiedersi il motivo per cui si dovrebbe usare il tipo dati valuta dati valuta piuttosto che il tipo dati piuttosto che il tipo dati realreal. Il Tipo dati valuta offre due importanti vantaggi:. Il Tipo dati valuta offre due importanti vantaggi:

��Il tipo valuta ha una maggiore precisione nella rappresentazioneIl tipo valuta ha una maggiore precisione nella rappresentazione di numeri di numeri grandi.grandi.

�� Il tipo dati valuta Il tipo dati valuta èè usato unitamente al usato unitamente al CurrencyFieldCurrencyField e in altri componenti. e in altri componenti. ÈÈcompatibile con i tipi di database nella rappresentazioni di quacompatibile con i tipi di database nella rappresentazioni di quantitntitàà di denaro.di denaro.

Page 21: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2121

TipoTipo didi datidati BooleanBoolean

�� Il tipo di dati Il tipo di dati booleanboolean èè uno dei piuno dei piùù semplici e pisemplici e piùù utilizzati. Variabili utilizzati. Variabili di tale tipologia rappresentano quantitdi tale tipologia rappresentano quantitàà logiche che possono logiche che possono assumere due soli valori: VERO o FALSO.assumere due soli valori: VERO o FALSO.

�� Le variabili di tipo booleano possono contenere valori che derivLe variabili di tipo booleano possono contenere valori che derivano ano da espressioni condizionali; che verranno discusse pida espressioni condizionali; che verranno discusse piùù avanti.avanti.

Page 22: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2222

TipoTipo datidati CarattereCarattere

●Tipo di dato progettato per memorizzare un carattere;

●Delphi permette anche l'uso del sistema di caratteri Unicode.

�Unicode è uno standard che consente di rappresentare e manipolare, in modo coerente, il testo di qualsiasi sistema di scrittura esistente utilizzando 2 bytes.

CarattereCarattere UNICODEUNICODE22WIDECharWIDEChar

CarattereCarattere ANSIANSI11ANSIChar o CharANSIChar o Char

ContenutoContenutoBytesBytesTipo Tipo didi CarattereCarattere

Page 23: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2323

Tipo StringTipo StringIn Delphi, il tipo di dati STRING è, in un certo senso, una concatenazione di caratteri singoli fino ad un massimo di 255. Un altro termine usato per definire il tipo STRING è “array di char” o “array di caratteri”. Nella tabella che segue vengono presentati i 4 tipi STRING disponibili in Delphi.

Le Le stringhestringhe didi carattericaratteri didi lunghezzalunghezza superioresuperiore a 255 a 255 carattericaratteri vengonovengono allocate allocate dinamicamentedinamicamente..

SISIWideCharWideChar~1.5GB~1.5GBWideStringWideString

SI o NOSI o NOANSICharANSIChar~3GB~3GBStringString

SISIANSICharANSIChar~3GB~3GBAnsiStringAnsiString

NONOANSICharANSIChar255255ShortStringShortString

TerminatoreTerminatoreNULL NULL

ContenutoContenutoLunghezzaLunghezzaTipo StringTipo String

Page 24: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2424

TipoTipo RecordRecord

�� Il tipo dati Il tipo dati ““recordrecord”” èè probabilmente il tipo dati piprobabilmente il tipo dati piùù versatile disponibile versatile disponibile in Delphi perchin Delphi perchéé può contenere dati di tipo eterogeneo.può contenere dati di tipo eterogeneo.

�� Non Non èè possibile utilizzare un possibile utilizzare un arrayarray per contenere dati di tipo differente. per contenere dati di tipo differente.

Un Un ArrayArray può contenere solo dati dello stesso tipo.può contenere solo dati dello stesso tipo.

�� ArrayArray[1..50] of Integer; Array[1..20] of Real; Array[1..10] of Boole[1..50] of Integer; Array[1..20] of Real; Array[1..10] of Boolean;an;

��CorrispondeCorrisponde al al costruttorecostruttore didi tipotipo strutturatostrutturato ““structstruct”” del del linguaggiolinguaggio C.C.

Page 25: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2525

typetypeStipendioStipendio = Record= Record

Nome: String;Nome: String;Data_ContData_Cont: : TDateTimeTDateTime;;SalarioSalario: currency;: currency;

end;end;

varvarStipendi_AprileStipendi_Aprile: : StipendioStipendio;;

beginbegin

Stipendi_AprileStipendi_Aprile.Nome.Nome := := ‘‘Paola RossiPaola Rossi’’;;Stipendi_AprileStipendi_Aprile.Data_Cont.Data_Cont := 10/02/1998; // data in := 10/02/1998; // data in formatoformatoStipendi_AprileStipendi_Aprile.Salario.Salario := 2200;:= 2200;

end;end;

Si noti che Si noti che èè necessario utilizzare un punto per separare il nome del record necessario utilizzare un punto per separare il nome del record dal nome del campo. dal nome del campo. ObjectObject Pascal, e linguaggi di programmazione piPascal, e linguaggi di programmazione piùù moderni forniscono un modo pimoderni forniscono un modo piùù semplice per semplice per fare questa operazione, utilizzando lfare questa operazione, utilizzando l’’istruzione istruzione WithWith ::

beginbegin

With With Stipendi_AprileStipendi_Aprile do do beginbegin

Nome := Nome := ‘‘Paola RossiPaola Rossi’’;;Data_ContData_Cont := 10/02/1998;:= 10/02/1998;SalarioSalario := 2200;:= 2200;

end;end;

end;end;

Page 26: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2626

Tipo Tipo EnumerativoEnumerativo

�� Questo tipo consente di creare un elenco organizzato di elementiQuesto tipo consente di creare un elenco organizzato di elementi. . Ad esempio, un tipo enumerativo che descrive il giorno della setAd esempio, un tipo enumerativo che descrive il giorno della settimana può timana può essere introdotto come segue:essere introdotto come segue:

�� typetypeSettimana = (Settimana = (LunediLunedi, , MartediMartedi, , MercolediMercoledi, , GiovediGiovedi, , VenerdiVenerdi, Sabato, , Sabato, Domenica);Domenica);

�� varvargsetgset : Settimana;: Settimana;

�� Per assegnare valori appartenenti al Tipo Settimana alla variabiPer assegnare valori appartenenti al Tipo Settimana alla variabile le gsetgsetbasta semplicemente scrivere:basta semplicemente scrivere:

�� GsetGset : = : = LunediLunedi; ;

�� GsetGset := := MartediMartedi;;

�� etc.etc.

Page 27: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2727

Tipo Tipo ““subintervalssubintervals””

��Il tipo Il tipo ““subintervalssubintervals”” consente di impostare una valida consente di impostare una valida gamma di risposte possibili che un utente può utilizzare in un gamma di risposte possibili che un utente può utilizzare in un programma;programma;

��Un tipo Un tipo ““subintervalssubintervals”” può contenere i seguenti tipi: può contenere i seguenti tipi: booleanboolean, , carattere, intero e tipi enumerativi;carattere, intero e tipi enumerativi;

Type Type

Salario_gamma1 = 500 .. 1000;Salario_gamma1 = 500 .. 1000;

varvar

Salario_DipSalario_Dip : Salario_gamma1;: Salario_gamma1;

Page 28: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2828

Tipo Tipo InsiemeInsieme (Set)(Set)

�� Ad un insieme di elementi viene associato un nome; in questo mAd un insieme di elementi viene associato un nome; in questo modo odo èè possibile possibile effettuare confronti con altri valori per stabilire se essi sonoeffettuare confronti con altri valori per stabilire se essi sono inclusi o esclusi inclusi o esclusi dalldall’’insieme.insieme.

�� Un esempio potrebbe essere un insieme contenente tutte le possUn esempio potrebbe essere un insieme contenente tutte le possibili risposte di un ibili risposte di un carattere a una domanda di tipo Scarattere a una domanda di tipo Sìì/No. Le quattro risposte possono essere incluse in un /No. Le quattro risposte possono essere incluse in un insieme [ 'y', 'Y', 'Noinsieme [ 'y', 'Y', 'No‘‘, 'N']. Una volta definito questo insieme, , 'N']. Una volta definito questo insieme, èè possibile quindi possibile quindi utilizzarlo per vedere se la nostra risposta utilizzarlo per vedere se la nostra risposta èè inclusa o meno nellinclusa o meno nell’’insieme.insieme.

�� Per Per verificareverificare se un se un determinatodeterminato myinputmyinput èè inclusoincluso oppureoppure no in un no in un insiemeinsieme didi valorivaloripredeterminatopredeterminato sisi puòpuò utilizzareutilizzare la la istruzioneistruzione ININ

IfIf MyinputMyinput IN [IN [‘‘yy’’, , ‘‘YY’’, , ‘‘nn’’, , ‘‘NN’’] then ....] then ....

Page 29: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

2929

VettoriVettori o Arrayo Array

�� Gli Gli arrayarray o matrici, sono gruppi ordinati di elementi tutti dello stesso o matrici, sono gruppi ordinati di elementi tutti dello stesso tipo.tipo.

�� Esso si avvale di un indice numerico intero che consente lEsso si avvale di un indice numerico intero che consente l’’accesso al singolo accesso al singolo elemento del gruppo.elemento del gruppo.

�� Per dichiarare una variabile come Per dichiarare una variabile come arrayarray, si può procedere come segue:, si può procedere come segue:

�� varvarGiorno_SettimanaGiorno_Settimana : Array [1..7] of string;: Array [1..7] of string;Giorno_MeseGiorno_Mese : Array [1..31] of integer; : Array [1..31] of integer;

Cifre_BCDCifre_BCD : : ArrayArray[1..10] of Byte;[1..10] of Byte;

Page 30: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3030

Esempio di Esempio di ArrayArray caso 1caso 1

Domenica

Sabato

Venerdì

Giovedì

Mercoledì

Martedì

LunedìQuesto vettore (Array) contiene 7 elementi, il 1°elemento è “Lunedì”, il 7°elemento è “Domenica”.

Il primo elemento o elemento di posto 1 viene indicato

Giorno_Settimana[1] = “Lunedì”

Il settimo elemento o elemento di posto 7 viene indicato

Giorno_Settimana[7] = “Domenica”

Page 31: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3131

Esempio di Esempio di ArrayArray caso 2caso 2

[ ]9876543210

Questo vettore (Array) contiene 10 elementi, le cifre numeriche BCD; l’elemento di posto 1 è la cifra 0; …l’elemento di posto 10 è la cifra 9.

Cifre : Array[1..10] of Byte;

Page 32: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3232

Tipo VariantTipo Variant

�� Le variabili di tipo VARIANT possono accettare vari tipi di valoLe variabili di tipo VARIANT possono accettare vari tipi di valori. ri. �� Uno dei principali usi di tipo VARIANT si verifica quando il Uno dei principali usi di tipo VARIANT si verifica quando il

programmatore non sa a priori quale tipo di dati verranno inseriprogrammatore non sa a priori quale tipo di dati verranno inseriti nel ti nel programma. programma.

�� Il tipo VARIANT Il tipo VARIANT èè in grado di supportare tutti i tipi di dati semplici.in grado di supportare tutti i tipi di dati semplici.�� Il codice riportato nella slide che segue presenta lIl codice riportato nella slide che segue presenta l’’uso corretto del uso corretto del

tipo VARIANTtipo VARIANT

Page 33: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3333

Abbiamo una flessibilitAbbiamo una flessibilitàà senza precedenti ma, tuttavia, esistono pure svantaggi nell'usosenza precedenti ma, tuttavia, esistono pure svantaggi nell'uso di di variabili di tipo variabili di tipo VariantVariant..

procedure TForm1.Button1Click(Sender: TObject);procedure TForm1.Button1Click(Sender: TObject);var var

m_valor1, m_valor2, m_valor3 : Variant;m_valor1, m_valor2, m_valor3 : Variant;m_Str1 : String;m_Str1 : String;

BeginBegin

m_valor1 := 12; // m_valor1 := 12; // vieneviene attribuitoattribuito valorevalore INTEGERINTEGERm_valor2 := 5.2; // m_valor2 := 5.2; // vieneviene attribuitoattribuito valorevalore REALREALm_valor3 := m_valor1 * m_valor2;m_valor3 := m_valor1 * m_valor2;m_Str1 := m_valor3; // m_Str1 := m_valor3; // vieneviene attribuitoattribuito al al risultatorisultato ilil valorevalore convertitoconvertito

End;End;

Esempio utilizzo dati tipo VARIANT

Page 34: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3434

PuntatoriPuntatoriI puntatori in Object Pascal hanno lo stesso potere di puntatori in C/C++, ma sono molto meno utilizzati.

Diamo un'occhiata ad alcuni raffronti di sintassi dei puntatori in Delphi e C.

PMessaggio: ^String[40];char* punt_char;

var Puntatore_integer: ^integer;int* Puntatore_int;Esempi

var punt: ^tipo;tipo* nome_variabile;Dichiarazione

Delphi (Pascal)CLINGUAGGIO

Page 35: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3535

PuntatoriPuntatoriPer utilizzare i puntatori è fondamentale rendere il loro punto di riferimento corretto. Un valore “nil” o un puntatore non valido può essere causa di interruzione del programma. Per utilizzare il valore di riferimento da un sottolineato, utilizzare la seguente sintassi:

a^ := a^ + 1;*a =*a + 1;

a := b^;a = *b;Esempi

puntatore^* puntatore;Sintassi

Delphi (Pascal)CLINGUAGGIO

Page 36: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3636

DichiarazioneDichiarazione didi costanticostanti

�� Le costanti servono per memorizzare informazioni o valori che noLe costanti servono per memorizzare informazioni o valori che non n cambiano nel corso del programmacambiano nel corso del programma

�� ConstConstPI = 3.1416;PI = 3.1416;LinguaggioLinguaggio : String = : String = ‘‘DelphiDelphi’’;;giornigiorni : array [0..6] of String[9] = (': array [0..6] of String[9] = ('Domenica',Domenica',‘‘LunedLunedìì',',

‘‘MartedMartedìì',',‘‘MercoledMercoledìì',',‘‘GiovedGiovedìì',',‘‘VenerdVenerdìì','Sabato','Sabato');');

I valori delle costanti vengono inseriti nella fase di compilaziI valori delle costanti vengono inseriti nella fase di compilazione; i valori one; i valori vengono impostati staticamente.vengono impostati staticamente.

Page 37: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3737

DichiarazioneDichiarazione didi VariabileVariabile

�� Il nome della variabile deve essere univoco in ogni blocco del Il nome della variabile deve essere univoco in ogni blocco del programma; può essere lungo fino a 255 caratteri e può essere programma; può essere lungo fino a 255 caratteri e può essere composto da lettere, numeri e underscore "_", ma composto da lettere, numeri e underscore "_", ma èè sempre sempre obbligatorio che il nome inizi con una lettera e non può essere obbligatorio che il nome inizi con una lettera e non può essere una una parola riservata dellparola riservata dell’’ObjectObject Pascal.Pascal.

VARVAR

nome_della_variabilenome_della_variabile [, [, nome_della_variabilenome_della_variabile ...] : tipo;...] : tipo;

N_PersoneN_Persone : Byte;: Byte;

Nome, Nome, CognomeCognome : String;: String;

eta : Integer;eta : Integer;

Page 38: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3838

constconst

w: Word = SizeOf(Byte); w: Word = SizeOf(Byte);

varvar

i: Integer = 8;i: Integer = 8;

j: SmallInt = Ord(j: SmallInt = Ord(‘‘aa’’););

L: Longint = Trunc(3.14L: Longint = Trunc(3.14

typetype

A = array[1..2] of Integer;A = array[1..2] of Integer;

constconst

w: Word = SizeOf(Byte);w: Word = SizeOf(Byte);

varvar

i: Integer = 8;i: Integer = 8;

j: SmallInt = Ord(j: SmallInt = Ord(‘‘aa’’););

L: Longint = Trunc(3.14159);L: Longint = Trunc(3.14159);

x: ShortInt = Round(2.71828);x: ShortInt = Round(2.71828);

B1: Byte = High(A);B1: Byte = High(A);

B2: Byte = Low(A);B2: Byte = Low(A);

C: char = Chr(46);159);C: char = Chr(46);159);

x: ShortInt = Round(2.71828);x: ShortInt = Round(2.71828);

B1: Byte = High(A);B1: Byte = High(A);

B2: Byte = Low(A);B2: Byte = Low(A);

C: char = Chr(46);C: char = Chr(46);

Page 39: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

3939

VariabiliVariabili GlobaliGlobali –– VariabiliVariabili localilocali

�� Una variabile si definisce globale se Una variabile si definisce globale se èè visibile e quindi valida in ogni visibile e quindi valida in ogni punto del programma.punto del programma.

�� Una variabile locale Una variabile locale èè visibile e valida unicamente allvisibile e valida unicamente all’’interno di una interno di una procedura o di una funzione in cui viene definita.procedura o di una funzione in cui viene definita.

�� Lo Lo ““ScopeScope”” o area di visibilito area di visibilitàà di una determinata funzione o di una di una determinata funzione o di una determinata variabile; rappresenta la parte del programma entro determinata variabile; rappresenta la parte del programma entro cui cui funzione e variabile risultano note al compilatore.funzione e variabile risultano note al compilatore.

Page 40: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4040

constconstAlgumConstantAlgumConstant = 100;= 100;

varvarAlgumGlobalAlgumGlobal: Integer;: Integer;R: Real;R: Real;

procedure AlgumProc(var R: Real);procedure AlgumProc(var R: Real);varvarLocalReal: Real;LocalReal: Real;beginbegin

LocalRealLocalReal := 10.0;:= 10.0;R := R R := R -- LocalReal;LocalReal;

end;end;

beginbeginAlgumGlobalAlgumGlobal := AlgumConstant;:= AlgumConstant;R := 4.593;R := 4.593;AlgumProc(RAlgumProc(R););

end.end.beginbegin

LocalRealLocalReal := 10.0;:= 10.0;R := R R := R -- LocalReal;LocalReal;

end;end;beginbegin

AlgumGlobalAlgumGlobal := AlgumConstant;:= AlgumConstant;R := 4.593;R := 4.593;AlgumProc(RAlgumProc(R););

end. end.

Page 41: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4141

Caratteristiche dei LinguaggiCaratteristiche dei Linguaggi

““ObjectObject--orientedoriented””�� INCAPSULAMENTO:INCAPSULAMENTO:

�� combinazione dei dati e dei relativi campi finalizzata a nascondcombinazione dei dati e dei relativi campi finalizzata a nascondere i dettagli di ere i dettagli di implementazione. I vantaggi dellimplementazione. I vantaggi dell’’incapsulamento sono la modularitincapsulamento sono la modularitàà e e l'isolamento del codice da altro codice.l'isolamento del codice da altro codice.

�� EREDITARIETAEREDITARIETA’’::�� La capacitLa capacitàà di creare nuovi oggetti che mantengono proprietdi creare nuovi oggetti che mantengono proprietàà e comportamento e comportamento

degli oggetti degli oggetti ““antenatiantenati””. Questo concetto consente di creare una gerarchia di . Questo concetto consente di creare una gerarchia di oggetti VCL che sono dotati di proprietoggetti VCL che sono dotati di proprietàà di tipo generico dai quali vengono poi di tipo generico dai quali vengono poi ereditati altri oggetti dotati di proprietereditati altri oggetti dotati di proprietàà pipiùù specifiche e specializzate.specifiche e specializzate.

�� POLIMORFISMO:POLIMORFISMO:�� Letteralmente polimorfismo significa "molti modi". Il polimorfisLetteralmente polimorfismo significa "molti modi". Il polimorfismo mo èè una tecnica una tecnica

di di programmazioneprogrammazione che consente l'utilizzo di parti di codice sorgente che, pur che consente l'utilizzo di parti di codice sorgente che, pur rimanendo inalterate, generano a rimanendo inalterate, generano a runrun--timetime comportamenti diversi.comportamenti diversi.

�� Il polimorfismo permette di ridefinire, nelle classi derivate, pIl polimorfismo permette di ridefinire, nelle classi derivate, procedure, funzioni, costruttori e rocedure, funzioni, costruttori e proprietproprietàà ecc... presenti nella classe base, ecc... presenti nella classe base, cosicchcosicchèè il loro utilizzo nella classe derivata sia diverso il loro utilizzo nella classe derivata sia diverso da quello nella classe base. da quello nella classe base.

Page 42: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4242

Le Le ClassiClassi

Sono strutture o modelli con cui vengono creati gli oggettiSono strutture o modelli con cui vengono creati gli oggetti

Definizione di una classeDefinizione di una classe<<identificatoreidentificatore> = > = class[(classe_Antenataclass[(classe_Antenata)])]<<attributiattributi e e metodimetodi>>

end;end;

typetypeTAnimalTAnimal = class= class

Nome: string;Nome: string;AltezzaAltezza, Peso: real;, Peso: real;

end;end;

Page 43: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4343

MetodiMetodi

I I Metodi sono procedure e funzioni appartenenti a un determinato Metodi sono procedure e funzioni appartenenti a un determinato oggetto.oggetto.

TypeType

TBoogieNights = classTBoogieNights = class

Dance: Boolean;Dance: Boolean;

procedure DoTheHustle;procedure DoTheHustle;

end;end;

procedure TboogieNights.DoTheHustle;procedure TboogieNights.DoTheHustle;

beginbegin

Dance := True;Dance := True;

end;end;

Page 44: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4444

VisibilitVisibilitàà�� Definisce chi Definisce chi èè autorizzato ad accedere e modificare gli attributi e autorizzato ad accedere e modificare gli attributi e metodi della classe.metodi della classe.�� Nella stessa classe possono esistere attributi e metodi con diNella stessa classe possono esistere attributi e metodi con diverso verso livello di visibilitlivello di visibilitàà..

PublicPublic�� Gli attributi e metodi possono essere utilizzati da qualsiasi Gli attributi e metodi possono essere utilizzati da qualsiasi classe.classe.

PrivatePrivate�� Gli attributi e i metodi possono essere utilizzati solamente dGli attributi e i metodi possono essere utilizzati solamente dalla classe entro cui sono alla classe entro cui sono definiti.definiti.

ProtectedProtected�� Gli attributi e i metodi possono essere utilizzati manipolati daGli attributi e i metodi possono essere utilizzati manipolati dalla classe entro cui sono lla classe entro cui sono definiti o da qualsiasi sottoclasse o nuova classe dichiarata ndefiniti o da qualsiasi sottoclasse o nuova classe dichiarata nella stessa UNIT.ella stessa UNIT.

Page 45: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4545

ISTRUZIONIISTRUZIONI

Page 46: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4646

Assegnazione Assegnazione

Assegnare ad una variabile il risultato di un'espressione, il vaAssegnare ad una variabile il risultato di un'espressione, il valore di un'altra lore di un'altra variabile o di una costante.variabile o di una costante.

SintassiSintassi ::

<<variabilevariabile> := <> := <EspressioneEspressione | | VariabileVariabile | | CostanteCostante>;>;

Page 47: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4747

IstruzioniIstruzioni DecisionaliDecisionali

If...Then...ElseIf...Then...ElseLa istruzione IF è una delle più importanti istruzioni di base nella

programmazione in Object Pascal. Se la espressione logica che segue la frase IF è VERA (True) verranno eseguite le istruzioni collocate dopo la clausola THEN in caso contrario verranno eseguite le istruzioni collocate dopo la clausola ELSE.

Object Pascal prevede pure un tipo di istruzione IF che è dotata di clausola THEN ma è sprovvista di clausola ELSE. In tal caso se la espressione logica che segue la frase IF è VERA (True) verranno eseguite le istruzioni collocate dopo la clausola THEN in caso contrario il controllo del programma passa alle istruzioni che nel programma vengono dopo la IF.

Page 48: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4848

Flow Chart Flow Chart IfIf....ThenThen .. Else.. Else

THEN

NO

ELSE

SI

Elaborazione 1

X > 0 ?

Elaborazione 2 Elaborazione 3

……VieneViene eseguita la Elaborazione 1 poi ci si chiede se X eseguita la Elaborazione 1 poi ci si chiede se X èè maggiore di 0; se la proposizione maggiore di 0; se la proposizione èè vera viene eseguita la Elaborazione vera viene eseguita la Elaborazione

3 in caso contrario viene eseguita la 23 in caso contrario viene eseguita la 2

Page 49: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

4949

Flow Chart Flow Chart IfIf....ThenThen

Elaborazione 1

Elaborazione 3

X > 0 ?SINO

THEN

……VieneViene eseguita la Elaborazione 1 poi ci si chiede se X eseguita la Elaborazione 1 poi ci si chiede se X èè maggiore di 0; se la proposizione maggiore di 0; se la proposizione èè vera viene eseguita la Elaborazione vera viene eseguita la Elaborazione

3 in caso contrario il controllo passa all3 in caso contrario il controllo passa all’’istruzione che segue.istruzione che segue.

Page 50: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5050

-- Alternativa Alternativa SempliceSemplice

IF IF <<EspressioneLogicaEspressioneLogica> > THEN THEN <istruzione1><istruzione1>ELSE ELSE <istruzione2> ;<istruzione2> ;

-- Alternativa CompostaAlternativa Composta

IF IF < < EspressioneLogicaEspressioneLogica >>THENTHEN

BEGINBEGIN

<istruzione1>;<istruzione1>;ENDEND

ELSEELSE

BEGINBEGIN

<istruzione2>;<istruzione2>;END;END;

Page 51: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5151

�� -- AlternativaAlternativa SempliceSemplice senzasenza ELSEELSE

�� IF IF <<EspressioneLogicaEspressioneLogica> > �� THEN THEN <<istruzioneistruzione>;>;

�� -- AlternativaAlternativa CompostaComposta senzasenza ELSEELSE

�� IF IF < < EspressioneLogicaEspressioneLogica >>�� THENTHEN�� BEGINBEGIN�� <<listalista istruzioniistruzioni>;>;�� END;END;

Page 52: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5252

�� LL’’istruzione CASE opera sempre in abbinamento ad una istruzione CASE opera sempre in abbinamento ad una ““variabile di variabile di controllocontrollo””. A seconda dei valori che tale variabile assume, il . A seconda dei valori che tale variabile assume, il programma presenta comportamenti diversi. programma presenta comportamenti diversi.

�� LL’’istruzione CASE può essere vista come una IF ad alternative istruzione CASE può essere vista come una IF ad alternative multiple.multiple.

�� LL’’esempio che segue analizza il esempio che segue analizza il VotoFinaleVotoFinale conseguito da uno conseguito da uno studente ad un Esame di Stato; se la Votazione assume il valore studente ad un Esame di Stato; se la Votazione assume il valore 100 100 visualizza il messaggio visualizza il messaggio ““RisultatoRisultato--EccellenteEccellente””, se la Votazione , se la Votazione èècompresa fra 85 e 99 visualizza il messaggio compresa fra 85 e 99 visualizza il messaggio ““RisultatoRisultato--OttimoOttimo””, e cos, e cosììvia dicendo. Nel caso in cui la variabile via dicendo. Nel caso in cui la variabile VotoFinaleVotoFinale assumesse valori assumesse valori esterni allesterni all’’intervallo 0..100 il messaggio segnala intervallo 0..100 il messaggio segnala ““VotoFinale ErratoVotoFinale Errato””..

IstruzioneIstruzione CASECASE

Page 53: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5353

EsempioEsempio IstruzioneIstruzione CASECASE

EsempioEsempio::

Case Case VotoFinaleVotoFinale ofof

100 : 100 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– EccellenteEccellente’’););85..99 : 85..99 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– OttimoOttimo’’););75..84 : 75..84 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– BuonoBuono’’););70..74 : 70..74 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– DiscretoDiscreto’’););60..69 : 60..69 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– SufficienteSufficiente’’););45..59 : 45..59 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– InsufficienteInsufficiente’’););0 .. 44 : 0 .. 44 : ShowMessage(ShowMessage(‘‘RisultatoRisultato –– GravementeGravemente InsufficienteInsufficiente’’););else else ShowMessage(ShowMessage(‘‘VotoFinaleVotoFinale ErratoErrato’’););

EndEnd;;

Page 54: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5454

Cicli IterativiCicli Iterativi

�� Iterativo sinonimo di RipetitivoIterativo sinonimo di Ripetitivo�� RankRank: blocco di istruzioni che devono essere ripetute: blocco di istruzioni che devono essere ripetute

�� Il PC ha la capacitIl PC ha la capacitàà di svolgere una grandissima quantitdi svolgere una grandissima quantitààdi elaborazioni in tempi relativamente piccoli. di elaborazioni in tempi relativamente piccoli. �� NB. Non ha senso utilizzare un PC per sviluppare una equazione; NB. Non ha senso utilizzare un PC per sviluppare una equazione; èè pipiùù sensato utilizzarlo sensato utilizzarlo

dove si richiede di risolvere 1000 o pidove si richiede di risolvere 1000 o piùù equazioni.equazioni.

�� Struttura Iterativa FOR Struttura Iterativa FOR (si utilizza quando (si utilizza quando èè noto a priori il numero di volte in noto a priori il numero di volte in cui una determinata sequenza di calcoli va ripetuta)cui una determinata sequenza di calcoli va ripetuta)

�� Struttura Iterativa Struttura Iterativa WhileWhile …… dodo�� Struttura Iterativa Struttura Iterativa RepeatRepeat .. .. UntilUntil

Page 55: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5555

StruttureStrutture RipetitiveRipetitiveIstruzione FORIstruzione FOR

LL’’istruzione FOR permette di eseguire una o piistruzione FOR permette di eseguire una o piùù istruzioni un determinato numero istruzioni un determinato numero

di volte. Il numero di ripetizioni di volte. Il numero di ripetizioni èè controllato talvolta da un valore costante ma picontrollato talvolta da un valore costante ma piùù

spesso da una variabile o da una espressione che ovviamente devespesso da una variabile o da una espressione che ovviamente deve assume assume

valori interi (valori interi (IntegerInteger).).

EsempioEsempio ::

VarVar I : Byte;I : Byte;

BeginBegin

For For I := 1 I := 1 to to 10 10 dodo

BeginBegin

ShowMessageShowMessage ((‘‘Questo Questo èè ilil messaggiomessaggio numeronumero: : ‘‘ + + IntToStrIntToStr(I(I));));

EndEnd;;

EndEnd;;

Page 56: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5656

Flow Chart Flow Chart ForFor I:=1 I:=1 ToTo 10 Do..10 Do..

MESSAGGIO

N° I

1 ---> I

O

I + 1 ---> I

SI

NO

I è > 10

?

Page 57: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5757

IstruzioneIstruzione WHILE WHILE

Forma Forma sintatticasintattica WHILE <WHILE <condizionecondizione> do> do

BeginBegin<RANK><RANK>

End;End;

Fino a Fino a cheche la <la <condizionecondizione> > risultarisulta veravera (True), (True), vieneviene eseguitoeseguito ilil bloccoblocco didiistruzioniistruzioni cheche costituiscecostituisce ilil RANK del RANK del ciclociclo iterativoiterativo..Quando la <condizione> risulta falsa (False), il controllo Quando la <condizione> risulta falsa (False), il controllo passa alle istruzioni passa alle istruzioni che seguono lche seguono l’’istruzione WHILE, il RANK non viene eseguito.istruzione WHILE, il RANK non viene eseguito.La coppia La coppia BeginBegin …… End End èè obbligatoria solamente se il RANK obbligatoria solamente se il RANK èè costituito da costituito da almeno due righe di codice.almeno due righe di codice.

StruttureStrutture RipetitiveRipetitive

Page 58: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5858

EsempioEsempio::

VarVarDigit : Digit : Integer Integer ;;TerminaTermina : : Boolean Boolean ;;

BeginBegin

Digit :=0;Digit :=0;Termina := True;Termina := True;While While Termina Termina dodoBeginBegin

Digit := Digit + 1;Digit := Digit + 1;If Digit = 100 then Termina := False;If Digit = 100 then Termina := False;

EndEnd;;EndEnd..

Page 59: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

5959

Flow Chart Flow Chart WhileWhile

I <= 10

???

SI

1 ---> I

NO

I + 1 ---> I

O

MESSAGGIO

N° I

……

I := 1;I := 1;

WhileWhile I <= 10 doI <= 10 do

BeginBegin

WritelnWriteln((‘‘Messaggio n Messaggio n ’’,I);,I);

I := I+1;I := I+1;

End;End;

……

Page 60: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6060

LL’’Istruzione REPEAT .. UNTIL funziona in modo analogo allIstruzione REPEAT .. UNTIL funziona in modo analogo all’’istruzione WHILE. In istruzione WHILE. In veritveritàà esistono solamente due differenze: (1) Le condizioni di ripetizesistono solamente due differenze: (1) Le condizioni di ripetizione ione vengono verificate non allvengono verificate non all’’inizio (istruzione WHILE) ma al termine del ciclo inizio (istruzione WHILE) ma al termine del ciclo iterativo; (2) la coppia REPEAT .. UNTIL funziona da contenitoreiterativo; (2) la coppia REPEAT .. UNTIL funziona da contenitore alla stessa alla stessa stregua della coppia BEGIN END che in questo unico caso non andrstregua della coppia BEGIN END che in questo unico caso non andràà usata.usata.

EsempioEsempio::

VarVar

D : Integer ;D : Integer ;

Fine : Boolean ;Fine : Boolean ;

BeginBegin

D :=0;D :=0;

Fine := False;Fine := False;

RepeatRepeat

D := D + 1;D := D + 1;

If D = 100 Then Fine := True;If D = 100 Then Fine := True;

Until Fine;Until Fine;

End.End.

IstruzioneIstruzione Repeat ... UntilRepeat ... Until

Page 61: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6161

EsempioEsempio::VarVarD : Integer ;D : Integer ;Fine : Boolean ;Fine : Boolean ;

BeginBeginD :=0;D :=0;Fine := False;Fine := False;RepeatRepeatD := D + 1;D := D + 1;If D = 100 Then Fine := True;If D = 100 Then Fine := True;

Until Fine;Until Fine;End.End.

Page 62: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6262

Confronto strutture iterativeConfronto strutture iterative�� FOR C := a FOR C := a ToTo b DO b DO ……�� FOR C := b FOR C := b DowntoDownto a DO a DO ……�� La struttura FOR (ciclo controllato da variabile contatore nel La struttura FOR (ciclo controllato da variabile contatore nel nostro caso C). C assume il valore iniziale a, viene nostro caso C). C assume il valore iniziale a, viene

eseguita leseguita l’’istruzione o le istruzioni che seguono la frase Do; il contatoreistruzione o le istruzioni che seguono la frase Do; il contatore C viene incrementato di 1 unitC viene incrementato di 1 unitàà ((ToTo))

�� REPEAT REPEAT …… UNTIL <condizione>;UNTIL <condizione>;

�� WHILE <condizione> WHILE <condizione> DODOBEGIN BEGIN ……

END;END;

Page 63: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6363

Commenti entro il codice Commenti entro il codice ““sorgentesorgente””

�� I Commenti possono essere inseriti nel programma I Commenti possono essere inseriti nel programma sorgente Pascal o Delphi in uno dei seguenti 3 modi:sorgente Pascal o Delphi in uno dei seguenti 3 modi:

�� Usando le parentesi graffe { commento }Usando le parentesi graffe { commento }�� Usando le sequenze (* commento *)Usando le sequenze (* commento *)�� Doppio Doppio slashslash // commento // commento

�� Delphi accetta tutti e tre i metodi; Turbo Pascal accetta Delphi accetta tutti e tre i metodi; Turbo Pascal accetta solo il primo ed il secondo metodo.solo il primo ed il secondo metodo.

Page 64: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6464

Procedure e Procedure e FunzioniFunzioni

Page 65: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6565

Procedure e Procedure e FunzioniFunzioni�� Una procedura Una procedura èè un segmento di programma che svolge un compito un segmento di programma che svolge un compito

specifico; può venire mandata in esecuzione dal programma specifico; può venire mandata in esecuzione dal programma principale o allprincipale o all’’interno di uninterno di un’’altra procedura o funzione. Ultimato il altra procedura o funzione. Ultimato il proprio compito la procedura restituisce il controllo al programproprio compito la procedura restituisce il controllo al programma ma chiamante. chiamante. (Es.: procedura di stampa; procedura di invio di una e(Es.: procedura di stampa; procedura di invio di una e--mail, etc.)mail, etc.)

�� Una funzione opera nello stesso modo, tranne che per il fatto chUna funzione opera nello stesso modo, tranne che per il fatto che e essa restituisce un valore al essa restituisce un valore al ““programma chiamanteprogramma chiamante”” e e successivamente restituisce il controllo al programma chiamante.successivamente restituisce il controllo al programma chiamante. (Es.: (Es.: funzione calcolo della media, calcolo del logaritmo, funzione funzione calcolo della media, calcolo del logaritmo, funzione UpperCaseUpperCase, etc.), etc.)

�� Le variabili definite allLe variabili definite all’’interno di una procedura o di una funzione interno di una procedura o di una funzione sono dette sono dette ““variabili localivariabili locali””. Queste variabili esistono unicamente . Queste variabili esistono unicamente mentre mentre èè in corso di esecuzione il codice di una procedura o di una in corso di esecuzione il codice di una procedura o di una funzione.funzione.

Page 66: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6666

ManipolazioneManipolazione delledelle stringhestringheCHR (CHR (funzionefunzione))

Restituisce il carattere corrispondente al codice ASCII fornito.Restituisce il carattere corrispondente al codice ASCII fornito.

EsempioEsempio::VarVar

P : TextFile;P : TextFile;

BeginBegin

AssignPrn(PAssignPrn(P););

Rewrite(PRewrite(P););

Writeln(PWriteln(P, chr(12) , , chr(12) , ‘‘Test della stampanteTest della stampante’’););

CloseFile(PCloseFile(P););

End;End;

Page 67: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6767

CONCAT (CONCAT (funzionefunzione))ConcatenaConcatena pipiùù stringhestringhe frafra didi loroloro

EsempioEsempio::varvar

S: string;S: string;beginbegin

S := Concat('ABC', 'DEF'); { 'ABCDEF' }S := Concat('ABC', 'DEF'); { 'ABCDEF' }end;end;

Page 68: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6868

COPY COPY ((proceduraprocedura))

s1 := Copy(s,2,3);s1 := Copy(s,2,3);RestituisceRestituisce unauna sottostringasottostringa s1 a s1 a partirepartire dada unauna stringastringa s, s, iniziandoiniziando

daldal caratterecarattere didi postoposto 2 e per 3 2 e per 3 carattericaratteri..

Ex:Ex:var var

s, s1 : string;s, s1 : string;beginbegin

s := 'ABCDEF';s := 'ABCDEF';s1 := Copy(s, 2, 3) { 'BCD' }s1 := Copy(s, 2, 3) { 'BCD' }

end;end;

Page 69: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

6969

DELETE DELETE ((proceduraprocedura))

Elimina parte Elimina parte didi unauna stringastringa partendopartendo dada un un caratterecarattere inizialeiniziale didi cui cui vieneviene fornitafornita unauna posizioneposizione e per un e per un numeronumero stabilitostabilito didi carattericaratteri..

Ex:Ex:varvar

s: string;s: string;beginbegin

s := 'Honest Abe Lincoln';s := 'Honest Abe Lincoln';Delete(s,8,4);Delete(s,8,4);WriteLn(sWriteLn(s); { 'Honest Lincoln' }); { 'Honest Lincoln' }

end.end.

Page 70: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7070

INSERT (INSERT (proceduraprocedura))InserisceInserisce unauna stringastringa origineorigine entroentro unauna stringastringa s a s a partirepartire

dada unauna posizioneposizione inizialeiniziale p.p.

Ex:Ex:varvar

s: string;s: string;beginbegin

s := 'Honest Lincoln';s := 'Honest Lincoln';Insert('AbeInsert('Abe ', s, 8);', s, 8);WriteLn(sWriteLn(s); { 'Honest Abe Lincoln' }); { 'Honest Abe Lincoln' }

end.end.

Page 71: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7171

LENGTHLENGTHFunzioneFunzione LENGTH: LENGTH: RestituisceRestituisce ilil numeronumero didi carattericaratteri cheche costituisconocostituisconounauna stringastringa..

Es:Es:varvar

S : string;S : string;beginbegin

ReadLn(SReadLn(S););WriteLn(length(SWriteLn(length(S));));

end.end.

Page 72: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7272

POSPOS

FunzioneFunzione POS: POS: RestituisceRestituisce la la posizioneposizione didi inizioinizio delladella stringastringas1 s1 entroentro la la stringastringa s2. (s2. (restituiscerestituisce 0 se la 0 se la stringastringa s1 non s1 non vieneviene individuataindividuata))

Es:Es:var var

s: string;s: string;beginbegin

s := ' 123.50';s := ' 123.50';{ Converte { Converte carattericaratteri spaziospazio in in carattericaratteri ““00”” }}while Pos(' ', s) > 0 dowhile Pos(' ', s) > 0 do

s[Poss[Pos(' ', s)] := '0';(' ', s)] := '0';end.end.

Page 73: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7373

UPPERCASE UPPERCASE –– LOWERCASELOWERCASE

FunzioneFunzione Uppercase Uppercase –– RestituisceRestituisce unauna StringaStringa con con letterelettere tuttetuttemaiuscolemaiuscole..

FunzioneFunzione Lowercase Lowercase -- RestituisceRestituisce unauna StringaStringa con con letterelettere tuttetutteminuscoleminuscole..

Es:Es:Uses Sysutils;Uses Sysutils;varvar

s : string;s : string;i : Integer;i : Integer;

beginbeginWrite('DigitareWrite('Digitare unauna stringastringa didi carattericaratteri: ');: ');ReadLn(sReadLn(s););WriteLn('ConvertoWriteLn('Converto in in maiuscolomaiuscolo: ',Uppercase(s));: ',Uppercase(s));ReadlnReadln;;

end.end.

Page 74: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7474

STRSTRprocedure procedure Str(NStr(N [: Width [: Decimals ]]; [: Width [: Decimals ]]; varvar S);S);

TrasformaTrasforma unauna quantitquantitàà numericanumerica N in N in unauna stringastringa didi carattericaratteri numericinumerici S; N S; N puòpuò essereessere un un numeronumero interointero o o realereale; ; possoposso specificarespecificare ilil numeronumerocomplessivocomplessivo didi carattericaratteri (Width) e (Width) e ilil numeronumero didi cifrecifre appartenentiappartenenti allaalla parte parte decimaledecimale (Decimals) ((Decimals) (dopodopo la la virgolavirgola).).

Es:Es:varvar

F : string;F : string;N : integer;N : integer;

beginbeginN:=1492;N:=1492;str(N:7,F);str(N:7,F);writeln(Fwriteln(F); (* ' 1492' *)); (* ' 1492' *)

end.end.

Page 75: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7575

VALVAL

ValVal(s, n, (s, n, codcod) )

Converte Converte unauna stringastringa S in un S in un numeronumero n. La n. La proceduraprocedura VAL VAL restituiscerestituisce un un codicecodice didi erroreerrorecod; se cod cod; se cod èè nullonullo la la conversioneconversione ha ha avutoavuto esitoesito positivopositivo; se cod ; se cod èè diversodiverso dada 0 tale 0 tale valorevalore esprimeesprime la la posizioneposizione in cui la in cui la proceduraprocedura VAL ha VAL ha rilevatorilevato un un caratterecarattere non non appartenenteappartenente a a quelliquelli consentiticonsentiti dada unauna quantitquantitàà numericanumerica..

Es:Es:Program conver;Program conver;varvar

X : string;X : string;Y,Z : integer;Y,Z : integer;

beginbeginX:='9876';X:='9876';Val(X,Y,ZVal(X,Y,Z););writeln(Ywriteln(Y););writeln(Zwriteln(Z););readlnreadln;;

end.end.

Page 76: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7676

TRIM TRIM –– TRIMLEFT TRIMLEFT –– TRIMRIGHTTRIMRIGHT

�� FunzioneFunzione Trim Trim –– EliminaElimina gligli spazispazi a a sinistrasinistra e a e a destradestra delladella stringastringa�� FunzioneFunzione TrimLeftTrimLeft -- EliminaElimina gligli spazispazi a a sinistrasinistra delladella stringastringa�� FunzioneFunzione TrimRightTrimRight -- EliminaElimina gligli spazispazi a a destradestra delladella stringastringa

Es:Es:If Trim(EditNome.Text) = If Trim(EditNome.Text) = ‘’‘’ thenthenBeginBegin

ShowMessage(ShowMessage(‘‘MMancata notifica del nome ancata notifica del nome ’’););EditText.SetFocusEditText.SetFocus;;Exit;Exit;

End;End;

Page 77: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7777

ORDORD

La La FunzioneFunzione ORD ORD RestituisceRestituisce ilil codicecodice ASCII del ASCII del caratterecarattererappresentatorappresentato nellanella variabilevariabile x.x.

Es:Es:

varvarI : integer;I : integer;

beginbeginfor I := 1 to length(C) dofor I := 1 to length(C) doif (ord(C[I]) >= 65) and (ord(C[I]) <= 90)if (ord(C[I]) >= 65) and (ord(C[I]) <= 90)thenthen......

end;end;

Page 78: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7878

ManipolazioneManipolazione NumericaNumerica

ABSABS

La La FunzioneFunzione ABS, ABS, RestituisceRestituisce ilil valorevalore assolutoassoluto didi x. x.

Es:Es:varvar

r: real;r: real;i: Integer;i: Integer;

beginbeginr := Abs(r := Abs(--2.3); { 2.3 }2.3); { 2.3 }i := Abs(i := Abs(--157); { 157 }157); { 157 }

end.end.

xy =

Page 79: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

7979

EXPEXP

RestituisceRestituisce ilil valorevalore didi e (e=2.7182818285) e (e=2.7182818285) elevatoelevato allaallapotenzapotenza x. y = ex. y = exx

Es:Es:beginbegin

WriteLn('eWriteLn('e = ',Exp(1.0));= ',Exp(1.0));end.end.

xey =

Page 80: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8080

LNLN

RestituisceRestituisce ilil logaritmo logaritmo naturalenaturale didi x (base e=2.7182818285).x (base e=2.7182818285).

Es:Es:......varvar

I : integer;I : integer;pot, y, x : real; pot, y, x : real;

beginbeginpot := pot := exp(Yexp(Y**ln(Xln(X));));

end;end;......

Page 81: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8181

FRACFRAC

RestituisceRestituisce la parte la parte frazionariafrazionaria didi x (parte x (parte dopodopo la la virgolavirgola))

Es:Es:varvar

S : string;S : string;beginbegin

str(Frac(123.456):7:3,S); { 0.456 }str(Frac(123.456):7:3,S); { 0.456 }Writeln(SWriteln(S););str(Frac(str(Frac(--123.456):7:3,S); { 123.456):7:3,S); { --0.456 }0.456 }Writeln(SWriteln(S););readlnreadln;;

end.end.

Page 82: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8282

INTINT

RestituisceRestituisce la parte la parte interaintera didi x.x.

Es:Es:

var var r: real;r: real;

beginbegin

r := Int(123.456); { 123.0 }r := Int(123.456); { 123.0 }r := Int(r := Int(--123.456); { 123.456); { --123.0 }123.0 }

end.end.

Page 83: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8383

ROUNDROUND

RestituisceRestituisce ilil valorevalore didi x x arrotondatoarrotondato allall’’interointero pipiùù vicinovicino..

Es:Es:

beginbegin

WriteLn(1.4, ' WriteLn(1.4, ' arrotondatoarrotondato ', Round(1.4));', Round(1.4));WriteLn(1.5, ' WriteLn(1.5, ' arrotondatoarrotondato ', Round(1.5));', Round(1.5));WriteLn(WriteLn(--1.4, ' 1.4, ' arrotondatoarrotondato ', Round(', Round(--1.4));1.4));WriteLn(WriteLn(--1.5, ' 1.5, ' arrotondatoarrotondato ', Round(', Round(--1.5));1.5));ReadlnReadln;;

end.end.

Page 84: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8484

TRUNCTRUNCRestituisceRestituisce la parte la parte interaintera didi x x scartandoscartando la parte la parte

decimaledecimale. .

Es:Es:

beginbegin

WriteLn(1.4, ' WriteLn(1.4, ' troncatotroncato ', Trunc(1.4));', Trunc(1.4));

WriteLn(1.5, ' WriteLn(1.5, ' troncatotroncato ', Trunc(1.5));', Trunc(1.5));

WriteLn(WriteLn(--1.4, ' 1.4, ' troncatotroncato ', Trunc(', Trunc(--1.4));1.4));

WriteLn(WriteLn(--1.5, ' 1.5, ' troncatotroncato ', Trunc(', Trunc(--1.5));1.5));

ReadlnReadln;;

end.end.

Page 85: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8585

SQRSQR

RestituisceRestituisce ilil quadratoquadrato didi xx

EsempioEsempio::

writeln (writeln (‘‘Il Il quadratoquadrato didi x vale = x vale = ‘‘ , SRQ(X));, SRQ(X));

Page 86: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8686

SQRTSQRT

RestituisceRestituisce la la radiceradice quadrataquadrata didi xx

Es:Es:beginbegin

WriteLn('5 al WriteLn('5 al quadratoquadrato = ', Sqr(5));= ', Sqr(5));WriteLn(WriteLn(‘‘LaLa radiceradice quadrataquadrata didi 2 = ', Sqrt(2.0));2 = ', Sqrt(2.0));

end.end.

Page 87: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8787

ODDODD

RestituisceRestituisce un un risultatorisultato ““TRUETRUE”” ((verovero) se X ) se X èè un un numeronumerointerointero disparidispari..

Es:Es:

If ODD(X) then If ODD(X) then Write(Write(‘‘X X éé un un numeronumero disparidispari’’););

Page 88: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8888

ManipolazioneManipolazione deidei Tipi Tipi ScalariScalari

PREDPREDFunzione che recupera lFunzione che recupera l’’elemento che precede X in una sequenza di elemento che precede X in una sequenza di

valori valori ““enumeratienumerati”” . Il risultato . Il risultato èè dello stesso tipo del parametro X.dello stesso tipo del parametro X.

Es:Es:{ X { X èè un un caratterecarattere; ; poniamoponiamo ilil caratterecarattere ““CC”” ebbeneebbene ilil caratterecarattere ““BB”” precede o precede o èè ilil

predecessorepredecessore didi ““CC”” nellanella sequenzasequenza deidei carattericaratteri codificaticodificati in ASCII }in ASCII }

varvarx : char;x : char;

beginbeginx:=x:=‘‘CC’’;;write(PRED(xwrite(PRED(x)); { )); { ‘‘BB’’ }}

end.end.

Page 89: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

8989

SUCCSUCCFunzione che recupera lFunzione che recupera l’’elemento che segue X in una sequenza di valori elemento che segue X in una sequenza di valori

““enumeratienumerati”” . Il risultato . Il risultato èè dello stesso tipo del parametro X.dello stesso tipo del parametro X.

Es:Es:{ X { X èè un un caratterecarattere; ; poniamoponiamo ilil caratterecarattere ““CC”” ebbeneebbene ilil

caratterecarattere ““DD”” segue o segue o èè ilil successoresuccessore didi ““CC”” nellanellasequenzasequenza deidei carattericaratteri codificaticodificati in ASCII }in ASCII }

varvarx : char;x : char;

beginbeginx:=x:=‘‘CC’’;;write(SUCC(x)); { write(SUCC(x)); { ‘‘DD’’ }}

end.end.

Page 90: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9090

IstruzioniIstruzioni cheche operanooperano sullasullamemoriamemoria

SIZEOFSIZEOFRestituisceRestituisce ilil numeronumero didi bytes bytes occupatioccupati dada unauna determinatadeterminata

variabilevariabile..

Ex:Ex:varvar

s : string[35];s : string[35];beginbegin

write(sizeof(Swrite(sizeof(S)); { 36 })); { 36 }ReadlnReadln;;

end.end.

Page 91: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9191

InterazioneInterazione con con ilil sistemasistema operativooperativo

CHDIRCHDIR

La La proceduraprocedura ChDirChDir modificamodifica la directory la directory correntecorrente..

Ex:Ex:beginbegin

{$I{$I--}}{ cambia la directory { cambia la directory correntecorrente; ; ilil nuovonuovo valorevalore vieneviene trattotratto daldal controllocontrolloEdit1 }Edit1 }

ChDir(Edit1.Text);ChDir(Edit1.Text);if IOResult <> 0 thenif IOResult <> 0 thenShowMessage('DirectoryShowMessage('Directory non non trovatatrovata');');

end;end;

Page 92: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9292

GETDIRGETDIR

RestituisceRestituisce ilil percorsopercorso (path) (path) delladella directory directory correntecorrente relativorelativo ad un ad un drive drive specificatospecificato ((unitunitàà didi default=0,A=1,B=2,...). Questa default=0,A=1,B=2,...). Questa proceduraprocedura restituiscerestituisce ilil risultatorisultato ““--11”” se se ilil drive drive specificatospecificato non non èèpresentepresente nelnel sistemasistema consideratoconsiderato..

Ex:Ex:

varvars : string;s : string;

beginbeginGetDir(0,s); { 0 = Drive GetDir(0,s); { 0 = Drive CorrenteCorrente }}writeln('Drivewriteln('Drive e directory corrente: ' + s);e directory corrente: ' + s);readlnreadln;;

end.end.

Page 93: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9393

Istruzioni di salto incondizionatoIstruzioni di salto incondizionato

-- In In ObjectObject Pascal Pascal èè possibile effettuare un possibile effettuare un ““salto incondizionatosalto incondizionato”” verso un'altra parte verso un'altra parte del programma; ldel programma; l’’istruzione che lo istruzione che lo permette permette èè la la ““GoToGoTo””..

Page 94: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9494

GOTOGOTOL'istruzione GOTO permette di L'istruzione GOTO permette di ““effettuare un salto incondizionatoeffettuare un salto incondizionato”” dalla dalla posizione attuale alla posizione contrassegnata con una etichettposizione attuale alla posizione contrassegnata con una etichetta specifica.a specifica.

Es:Es:VarVar

RispRisp: char;: char;BeginBegin

InizioInizio: : // // etichettaetichetta cheche individuaindividua la la destinazionedestinazione del del saltosalto

Writeln(Writeln(‘‘OkOk’’););Writeln(Writeln(‘‘RipetiamoRipetiamo??’’); ); Readln(RispReadln(Risp););If If RispRisp = = ‘‘SS’’ then GOTO then GOTO InizioInizio;;

End. End.

Page 95: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9595

Istruzioni Break e Continue (salti all'interno di un Istruzioni Break e Continue (salti all'interno di un ciclo iterativo)ciclo iterativo)

Queste istruzioni, ad eccezione di quelle presentate finora, hanQueste istruzioni, ad eccezione di quelle presentate finora, hanno ruolo no ruolo importante accanto alle istruzioni che controllano i importante accanto alle istruzioni che controllano i ““cicli iterativicicli iterativi””. . Essi sono utilizzate solo in due situazioni: Essi sono utilizzate solo in due situazioni:

�� BREAK: quando si vuole interrompere la esecuzione di un ciclo BREAK: quando si vuole interrompere la esecuzione di un ciclo iterativo;iterativo;

�� CONTINUE: quando si vuole far proseguire la esecuzione delle CONTINUE: quando si vuole far proseguire la esecuzione delle istruzioni facenti parte di un ciclo iterativo.istruzioni facenti parte di un ciclo iterativo.

Es:Es:

VarVar

I : Integer;I : Integer;BeginBegin

For For I := 1 I := 1 to to 3 3 do do If (I mod 2) <> 0 then If (I mod 2) <> 0 then ContinueContinue;;For For I := 1 I := 1 to to 3 3 do do If (I mod 2) = 0 then If (I mod 2) = 0 then BreakBreak;;

EndEnd;;

Page 96: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9696

EXITEXITLL’’istruzione EXIT viene usata per forzare listruzione EXIT viene usata per forzare l’’uscita dal blocco corrente. uscita dal blocco corrente. Se il blocco corrente Se il blocco corrente èè il programma principale, la EXIT lo conclude. il programma principale, la EXIT lo conclude. Se il blocco corrente Se il blocco corrente èè annidato allannidato all’’interno di una struttura iterativa (FOR, interno di una struttura iterativa (FOR, REPEAT, WHILE), lREPEAT, WHILE), l’’istruzione EXIT passa il controllo alla istruzione collocata istruzione EXIT passa il controllo alla istruzione collocata immediatamente dopo le istruzioni (FOR, REPEAT, WHILE).immediatamente dopo le istruzioni (FOR, REPEAT, WHILE).Se il blocco corrente Se il blocco corrente èè una procedura o una funzione, luna procedura o una funzione, l’’istruzione EXIT istruzione EXIT provoca l'uscita dalla funzione o dalla procedura e la conseguenprovoca l'uscita dalla funzione o dalla procedura e la conseguente te prosecuzione del programma al di lprosecuzione del programma al di làà del punto in cui del punto in cui èè stata chiamata.stata chiamata.

Es:Es:Procedure Test( X : Integer) ;Procedure Test( X : Integer) ;BeginBeginIf X = 0 then EXIT;If X = 0 then EXIT;............

End;End;

Page 97: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9797

LibrerieLibrerie DLLDLL

Page 98: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9898

Una libreria a collegamento dinamico, o DLL, Una libreria a collegamento dinamico, o DLL, èè una raccolta di una raccolta di routine (piccoli programmi) che possono essere chiamati da altreroutine (piccoli programmi) che possono essere chiamati da altreapplicazioni e altre DLL. Allo stesso modo di una UNIT, una DLL applicazioni e altre DLL. Allo stesso modo di una UNIT, una DLL contiene codice e risorse condivise, che offrono la possibilitcontiene codice e risorse condivise, che offrono la possibilitàà a pia piùùapplicazioni di condividere una singola copia di una routine cheapplicazioni di condividere una singola copia di una routine che essi essi hanno in comune. Il concetto di DLL hanno in comune. Il concetto di DLL èè il cuore della architettura il cuore della architettura intrinseca di Windows, e nella maggior parte dei casi di Windowsintrinseca di Windows, e nella maggior parte dei casi di Windowspuò essere ritenuto una raccolta di DLL. può essere ritenuto una raccolta di DLL.

Utilizzando Delphi, siamo in grado sia di utilizzare che scriverUtilizzando Delphi, siamo in grado sia di utilizzare che scrivere una e una nostra DLL; possiamo chiamare funzioni incorporate nella DLL nostra DLL; possiamo chiamare funzioni incorporate nella DLL magari sviluppate su altri sistemi o in altri linguaggi di magari sviluppate su altri sistemi o in altri linguaggi di programmazione come Visual Basic o C/C++.programmazione come Visual Basic o C/C++.

Page 99: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

9999

La DLL (libreria a collegamento dinamico),La DLL (libreria a collegamento dinamico),èè costituita da costituita da una raccolta di routine (piccoli programmi) che possono una raccolta di routine (piccoli programmi) che possono essere utilizzati o richiamati da altre applicazioni e altre essere utilizzati o richiamati da altre applicazioni e altre DLL. DLL.

Una DLL contiene codice e risorse condivise, che consente Una DLL contiene codice e risorse condivise, che consente a pia piùù applicazioni di condividere una singola copia di una applicazioni di condividere una singola copia di una routine che essi hanno in comune. routine che essi hanno in comune.

La DLL La DLL èè alla base della architettura di Windows, che, in alla base della architettura di Windows, che, in massima parte, massima parte, èè costituito da una raccolta di DLL. costituito da una raccolta di DLL.

Attraverso Delphi, Attraverso Delphi, èè possibile scrivere una nostra possibile scrivere una nostra personale DLL; ma personale DLL; ma èè anche possibile richiamare funzioni anche possibile richiamare funzioni o procedure contenute in DLL sviluppate in altri linguaggi o procedure contenute in DLL sviluppate in altri linguaggi di programmazione quali Visual Basic o C/C++.di programmazione quali Visual Basic o C/C++.

Page 100: prof. Cleto Azzani IPSIA “Moretto ”–BRESCIA -ITALY

100100

BibliografiaBibliografia

FonteFonte PrincipalePrincipale::GrupoGrupo Delphi Delphi (in lingua (in lingua portogheseportoghese))

AutoriAutori: Adriano Machado : Adriano Machado -- Ramon Ramos Ramon Ramos -- Douglas Douglas GavazzaGavazzaStudentiStudenti IngegneriaIngegneria InformaticaInformatica delldell’’UniversitUniversitàà Federale Federale

di di EspiritoEspirito Santo Brasile Santo Brasile http://www.ufes.br/http://www.ufes.br/

Blog: Blog: http://http://delphiproject.blogspot.comdelphiproject.blogspot.com//

EE--mail: mail: [email protected]@gmail.com