Esercizi di programmazione in Turbo Pascal. Per le Scuole superiori 8824465307, 9788824465304

492 88 91MB

Italian Pages [189] Year 2009

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Esercizi di programmazione in Turbo Pascal. Per le Scuole superiori
 8824465307, 9788824465304

Table of contents :
Scan-190612-0141_1L_risultato
Scan-190612-0141_2R_risultato
Scan-190612-0142_1L_risultato
Scan-190612-0142_2R_risultato
Scan-190612-0143_1L_risultato
Scan-190612-0143_2R_risultato
Scan-190612-0144_1L_risultato
Scan-190612-0144_2R_risultato
Scan-190612-0145_1L_risultato
Scan-190612-0145_2R_risultato
Scan-190612-0146_1L_risultato
Scan-190612-0146_2R_risultato
Scan-190612-0147_1L_risultato
Scan-190612-0147_2R_risultato
Scan-190612-0148_1L_risultato
Scan-190612-0148_2R_risultato
Scan-190612-0149_1L_risultato
Scan-190612-0149_2R_risultato
Scan-190612-0150_1L_risultato
Scan-190612-0150_2R_risultato
Scan-190612-0151_1L_risultato
Scan-190612-0151_2R_risultato
Scan-190612-0152_1L_risultato
Scan-190612-0152_2R_risultato
Scan-190612-0153_1L_risultato
Scan-190612-0153_2R_risultato
Scan-190612-0154_1L_risultato
Scan-190612-0154_2R_risultato
Scan-190612-0155_1L_risultato
Scan-190612-0155_2R_risultato
Scan-190612-0156_1L_risultato
Scan-190612-0156_2R_risultato
Scan-190612-0157_1L_risultato
Scan-190612-0157_2R_risultato
Scan-190612-0158_1L_risultato
Scan-190612-0158_2R_risultato
Scan-190612-0159_1L_risultato
Scan-190612-0159_2R_risultato
Scan-190612-0160_1L_risultato
Scan-190612-0160_2R_risultato
Scan-190612-0161_1L_risultato
Scan-190612-0161_2R_risultato
Scan-190612-0162_1L_risultato
Scan-190612-0162_2R_risultato
Scan-190612-0163_1L_risultato
Scan-190612-0163_2R_risultato
Scan-190612-0164_1L_risultato
Scan-190612-0164_2R_risultato
Scan-190612-0165_1L_risultato
Scan-190612-0165_2R_risultato
Scan-190612-0166_1L_risultato
Scan-190612-0166_2R_risultato
Scan-190612-0167_1L_risultato
Scan-190612-0167_2R_risultato
Scan-190612-0168_1L_risultato
Scan-190612-0168_2R_risultato
Scan-190612-0169_1L_risultato
Scan-190612-0169_2R_risultato
Scan-190612-0170_1L_risultato
Scan-190612-0170_2R_risultato
Scan-190612-0171_1L_risultato
Scan-190612-0171_2R_risultato
Scan-190612-0172_1L_risultato
Scan-190612-0172_2R_risultato
Scan-190612-0173_1L_risultato
Scan-190612-0173_2R_risultato
Scan-190612-0174_1L_risultato
Scan-190612-0174_2R_risultato
Scan-190612-0175_1L_risultato
Scan-190612-0175_2R_risultato
Scan-190612-0176_1L_risultato
Scan-190612-0176_2R_risultato
Scan-190612-0177_1L_risultato
Scan-190612-0177_2R_risultato
Scan-190612-0178_1L_risultato
Scan-190612-0178_2R_risultato
Scan-190612-0179_1L_risultato
Scan-190612-0179_2R_risultato
Scan-190612-0180_1L_risultato
Scan-190612-0180_2R_risultato
Scan-190612-0181_1L_risultato
Scan-190612-0181_2R_risultato
Scan-190612-0182_1L_risultato
Scan-190612-0182_2R_risultato
Scan-190612-0183_1L_risultato
Scan-190612-0183_2R_risultato
Scan-190612-0184_1L_risultato
Scan-190612-0184_2R_risultato
Scan-190612-0185_1L_risultato
Scan-190612-0185_2R_risultato
Scan-190612-0186_1L_risultato
Scan-190612-0186_2R_risultato
Scan-190612-0187_1L_risultato
Scan-190612-0187_2R_risultato
Scan-190612-0188_1L_risultato
Scan-190612-0188_2R_risultato
Scan-190612-0189_1L_risultato
Scan-190612-0189_2R_risultato
Scan-190612-0190_1L_risultato
Scan-190612-0190_2R_risultato
Scan-190612-0191_1L_risultato
Scan-190612-0191_2R_risultato
Scan-190612-0192_1L_risultato
Scan-190612-0192_2R_risultato
Scan-190612-0193_1L_risultato
Scan-190612-0193_2R_risultato
Scan-190612-0194_1L_risultato
Scan-190612-0194_2R_risultato
Scan-190612-0195_1L_risultato
Scan-190612-0195_2R_risultato
Scan-190612-0196_1L_risultato
Scan-190612-0196_2R_risultato
Scan-190612-0197_1L_risultato
Scan-190612-0197_2R_risultato
Scan-190612-0198_1L_risultato
Scan-190612-0198_2R_risultato
Scan-190612-0199_1L_risultato
Scan-190612-0199_2R_risultato
Scan-190612-0200_1L_risultato
Scan-190612-0200_2R_risultato
Scan-190612-0201_1L_risultato
Scan-190612-0201_2R_risultato
Scan-190612-0202_1L_risultato
Scan-190612-0202_2R_risultato
Scan-190612-0203_1L_risultato
Scan-190612-0203_2R_risultato
Scan-190612-0204_1L_risultato
Scan-190612-0204_2R_risultato
Scan-190612-0205_1L_risultato
Scan-190612-0205_2R_risultato
Scan-190612-0206_1L_risultato
Scan-190612-0206_2R_risultato
Scan-190612-0207_1L_risultato
Scan-190612-0207_2R_risultato
Scan-190612-0208_1L_risultato
Scan-190612-0208_2R_risultato
Scan-190612-0209_1L_risultato
Scan-190612-0209_2R_risultato
Scan-190612-0210_1L_risultato
Scan-190612-0210_2R_risultato
Scan-190612-0211_1L_risultato
Scan-190612-0211_2R_risultato
Scan-190612-0212_1L_risultato
Scan-190612-0212_2R_risultato
Scan-190612-0213_1L_risultato
Scan-190612-0213_2R_risultato
Scan-190612-0214_1L_risultato
Scan-190612-0214_2R_risultato
Scan-190612-0215_1L_risultato
Scan-190612-0215_2R_risultato
Scan-190612-0216_1L_risultato
Scan-190612-0216_2R_risultato
Scan-190612-0217_1L_risultato
Scan-190612-0217_2R_risultato
Scan-190612-0218_1L_risultato
Scan-190612-0218_2R_risultato
Scan-190612-0219_1L_risultato
Scan-190612-0219_2R_risultato
Scan-190612-0220_1L_risultato
Scan-190612-0220_2R_risultato
Scan-190612-0221_1L_risultato
Scan-190612-0221_2R_risultato
Scan-190612-0222_1L_risultato
Scan-190612-0222_2R_risultato
Scan-190612-0223_1L_risultato
Scan-190612-0223_2R_risultato
Scan-190612-0224_1L_risultato
Scan-190612-0224_2R_risultato
Scan-190612-0225_1L_risultato
Scan-190612-0225_2R_risultato
Scan-190612-0226_1L_risultato
Scan-190612-0226_2R_risultato
Scan-190612-0227_1L_risultato
Scan-190612-0227_2R_risultato
Scan-190612-0228_1L_risultato
Scan-190612-0228_2R_risultato
Scan-190612-0229_1L_risultato
Scan-190612-0229_2R_risultato
Scan-190612-0230_1L_risultato
Scan-190612-0230_2R_risultato
Scan-190612-0231_1L_risultato
Scan-190612-0231_2R_risultato
Scan-190612-0232_1L_risultato
Scan-190612-0232_2R_risultato
Scan-190612-0233_1L_risultato
Scan-190612-0233_2R_risultato
Scan-190612-0234_1L_risultato
Scan-190612-0234_2R_risultato
Scan-190612-0235_1L_risultato

Citation preview

Copyright © 2009 Esselibri S.p.A. Via F. Russo 33/D 80123 Napoli Tutti i diritti riservati È vietata la riproduzione anche parziale e con qualsiasi mezzo senza l'autorizzazione scritta dell'editore. Per citazioni e illustrazioni di competenza altrui , riprodotte in questo libro, l'editore è a disposizione degli aventi diritto. L'editore prowederà, altresì, alle opportune correzioni nel caso di errori e/o omissioni a seguito della segnalazione degli interessati.

Esercizi di programmazione in Turbo Pascal , Visual Basic e Java Prima edizione : aprile 2009

Ristampe 8 7 6 5

4 3 2 1

2009

2010

2011

2012

Questo volume è stato stampato presso Arti Grafiche Italo Cernia Via Capri , 67 - Casoria (NA)

Turbo Pascal è un marchio registrato dalla Borland lnternational lnc. Visual Basic è un marchio registrato dalla Microsoft lnc. NetBeans è un marchio registrato dalla Sun Microsystem.

Coordinamento dell 'opera, revisione ed editing doti. Umberto Marane Grafica di copertina :

~

c·11n ilinee

Tutti i diritti di sfruttamento economico dell 'opera appartengono alla Esselibri S.p.A. (art. 64, D.Lgs. 10-2-2005 , n. 30)

Introduzione Durante lo tudi o dell ' informatica bu ona parte del tempo è d dicata allo viluppo di emplici progra mmi che avv icinino gli tudenti all a compren ione della compi a artico lazione d Il attività menta li he occorr m ttere ul campo p r r ali zzar prodotti applicati vi orretti . ormai opinione condi vi a da molti che la programmazione ia un ' atti vità che va affrontata on il ricor o ad una metodologia ri goro a d il upporto di tecniche di ingegneri zzazione d I oft-v ar . econda del paradigma di programmazione pr ce lto le trade po ono e re differenti. i egue il paradigma imperativo , il problema da ri ol ver attra ver o un programma p r laboratore a innanzitutto anali zzato, oprattutto per quanto ri guard a i dati di input di output. Succ i ament va indi viduato un procedimento algoritm ico da eguire per tt nere i ri ultati atte i . A II opo di cond ivider con altre fi gure pro~ ionali la pr cedura id ata i pu far ri ferimento ad una rappre ental ione grafica dell 'a lgoritmo (ad e empio il fl w-chart), che co ti tui ce la ba p r pa ar all a fa ucce iva , ovvero la codi fica nel linguaggio pre celto. Il prodotto di ta l la oro va infine i to come la ba p ravv iar poi atti vità tecnich di routine, quali la compilazione, il debugg in , il te t ed il rilascio . in vece i gue un paradigma visuale ad eventi o ad oggetti , I attenzion , piu tto to che ui dati , va c ncentrata ull ' interfacc ia grafi ca o ulle compon nti del problema. Quando i vuole rea lizzare un ' applicazion attra r o un ' int rfaccia grafi ca (G I ) i fa u o di una combinazion di controlli quali bottoni di comando, fi ne tr , ca Il di te to, etichette ecc. p r i quali la ce lta del layout più adeguato a opportunamente calibrata al fine d ll ' i erimento nel i tema pi ù ampio dell ' int rfacc ia tra l ' utente e la macchina. li paradigma orientato agli oggetti aiuta il progra mmat re a ri lv r il probi ma attraver o l ' individ uazione degli oggetti componenti la rea ltà da pr nder in e ame e le corr !azioni e i tenti tra gli oggetti . Il te to rappre nta un upporto allo rudente h vuole far e peri nze di programmazione in tu tti tr i parad igmi di programmazion . Perci gli ercizi pr entati ono affr ntati econdo il par adigma imp ra ti vo con il ricor o al linguaggio Turbo Pascal , econdo il paradigma della progra mmazi ne isu I attraver o il linguaggio Visual Basic e e ondo la metodologia OOP (Orient d Obj et Programming) attrav r o il linguagg io Java . P r eia cun e ercizio ono pre entati : una tracc ia inteti ca ; uno hema rappre entante i dati di input e di output; uno chema di e empi ritenuti igni fica ti vi per la compren ione e !' anali i del probi ma. Gli e ercizi vo lti ec ndo la prog rammazion imperati va ono poi integrati dal fl ow-chart ri soluti o e dalla odi fica in Turbo Pa ca l. Gli e ercizi volti co ndo il parad igma i ualeed il paradigma ad oggetti ono in fi n int grati dall'interfacc ia gra fi ca dal cod ice in Vi ' ual Ba ic ed in Java. In tutto gli e ercizi 0 110 2 17, di cui 80 interamente vo lti in Turbo Pa ca l , 32 interamente olti in Vi ual B a ice 30 interamente olti in Java . Gli e rcizi vo lti pe o contengono commenti fi nali che fac ilitano la compr n ione del codic guidano lo tudent in modo graduale ai temi eone ttuali e intattici dei di er i linguagg i di prog rammazion adottati . Il linguaggio Turbo Pa ca l utilizzato fa ri ferim nto alla ver ione Turbo Pa ca l per Window 1.5, ma e n picco li ime modifiche può e re applicato anche all a ver ione Turb Pa ca l 7 .0. 1 ' Per rendere compa1ibile il cod ice alla ver ione 7.0 o orre tra fom1are la linea

WI

RT in

RT.

3

Il odice Vi ual Ba ic ' tato r a li zzato econdo l'a mbi nt Mi cro oft Vi ual Ba ic 5 .0 . I prog rammi Ja a o no tati ottenuti attra v r o etB an IDE 6.1. Gli e er izi ono pre entati in blocchi a diffico ltà via ia ere ce nte ed affrontano le egue nti tematiche gen ra li : • • • • •

u od Il a ola truttura equenzia le;t u o dell a trutturad !l ' alternati a; u od Il a truttura ite rativa; e laborazione di array monodime n ionali e bidime n ionali ; e laboraz ione di archi i.

In app ndic ono mo trate indicazioni utili p r introdurr all'utilizzo d Ila piattaforma Netbeans per iluppare programmi Java. Al te to i acco mpagna un CD-ROM cont n nte l' ambi nte di progra mmazion etbean Java fornito dalla Sun Micro y t m utili zzabil (p raltro facilm nt caricabile dall a r te inte rnet facendo ricoro , p r gli indiri zz i, ai motori di ricer a) di programmi in Turbo Pa cal , Vi ua l Ba ice Java . Il O-ROM tato p n ato co me trum nto util e allo tudente che voglia impadronir i de ll abilità e de l I comp tenze re lati ve ai linguagg i Pa cal, Vi ual Ba ice Java . Attraver o il programma (i n autoa iam nto) di fruiz ione d i conte nuti d I CD vengo no pr entati a ideo tutti gli e ercizi volti n I te to con un a modalità mpli ce e hiara e guidata da pul anti di comando: pe r e ia un e rcizio e l zion ato ie n i uali zzata la traccia , accompag nata dal codice (in Turbo Pa cal, in Vi ual Ba ic o in Ja a) ed ntualm nte dall 'e ecuzione immedi ata d I programma . P r rend re più ve loc compi ta I' cuzione d i prog rammi è anche po ibile proc de re all ' in tal lazion de i conte nuti u hard di k . In ogni ca o, i ugg ri c di indiri zzare lo tudente ai tudio di eia cun e rc izio:

gue nti compo rtamenti m todolog ic i per lo

a) I ttura de lla traccia dell 'e ercizio ul te to cartaceo e/o da programma , 1 zionando la ezione e l'e erc izio; b) anali id i dati di input e di output attra e ro la I ttura del te to cartaceo· ) lettura degli e e mpi forniti dal t to artaceo; d) ame de ll 'e ecuzion dell 'e e rc izio attraver o il pul ant "E egui l'e e rcizio" de l programma allo copo di ricavarne il layout dell videat e la tipologia de lle laborazioni de unt . Pe r i dati , i uggeri e di far ri fe rime nto a qu elli ricavati dag li e e mpi di cui al punto precedente e); e) realizzazione e ilupp de l codice orgente per imulare I'e ecuzione di cui al punto precedente; f) confronto de lla oluzione algoritmica e de l codi ce prodotto con que llo de i contenuti de l CD. Que to confronto è facilitato facendo u o d I pul ante de l programma " Vi uali zza il codi ce".

Ai miei studenti

ESERCIZI SULL'USO DELLA STRUTTURA SEQUENZIALE

~ ~

Esercizio n.

VISUAL BASIC

1

viluppare l'algoritmo per ottenere il quadrato ed il cubo di un certo numero, immes o tramite ta tiera, e visualizzare i risultati . Analisi dei dati di input e di output

Input

Semantica

Output

A

Numero Q

Quadrato del numero A

e

Cubo del numero A

Esempi

A

Q

e

10

100

1000

l

I

I

Note

Flow-chart relativo all'algoritmo risolutivo

100= 10

X

10

l = Ix l

1000= lOx JOx 10 l=lxlxl

Codifica in Turbo Pascal PROGRAM Eserl ;

INIZIO {Uistruzione seguente serve a gestire i dispositivi video e stampane~ USES WINCRT;

LEGGI

A

VAR a , q , c : real ; { PROGRAMMA PRINCIPAL~

Q=AxA BEGIN { U istruzione seguente serve a " pulire " lo schermo!

C = AxAxA VISUALIZZA

Q, C FINE

CLRSCR ; WRITE( ' Eserciz io 1 - Programma di calcolo del quadrato e cubo di un numero . ' ); WRITEL N( ' ' ) ; WRITE ( ' Digita un valore numeri co : ' ) ; READLN(a) ; q :z sqr(a) ; c :=a'q ; WR ITELN (' Il quadra o di ', a :6 : 1,' è ', q :7 :2,';, il cubo è ', c :8 :2); END .

ote on l' azione " LEGGI A" l'e ecutore dell'algoritmo non legge A, ma acquisì ce dall'esterno (nel n stro ca o da tastiera) un valore numerico e lo memorizza nella locazione denominata simbolicamente n il nome A . A perciò va interpretato come l' indirizzo imbolico del valore letto data tiera . Per lo stesso motivo , attraver o l'istruzione " VISUALIZZA Q , C" i ottiene la vi ualizzazione dei nt nuti delle locazioni di memoria chiamate simbolicamente con i nomi di Q e di C.

I

Esercizi sull'uso della struttura sequenziale L' i truzione Q = A x A non va a ociata erroneamente ad un ' uguaglianza algebrica , nel senso che non bi sogna interpretarla come fondamento dell ' affermazione che Q ia uguale ad A per A . E sa indica invece che il ri ultato dell 'espre sione aritmetica di de tra (A x A) va memorizzato ali ' interno de lla locazione di memoria Q.

IMPLEMENTAZIONE IN VISUAL BASIC

Interfaccia

Programma di calcolo del quadrato e del cubo Digitare un valore numerico

I · IO 13000 > 26

Flow-chart relativo all'algoritmo risolutivo

Codifica in Turbo Pascal

INIZIO

PROGRAM Eser 23 ; USES WINCRT ;

LEGGI A, B

VAR a , b , c : REAL ; { PROGRAMMA PRINCIPAL~

FALSO

C=B

VISUALIZZA

e

BEGIN CLRSCR ; WRITE(' Ese r cizio 23 - Prog r amma di de terminazione ' ) ; WRI TELN( ' del maggi o re tra d u e numeri. ' ); WRITE( ' Digita i due numeri ' ) ; RE ADLN (a , b ); IF a> b THEN c : =a ELSE c : =b ; WRITELN( ' Il maggi o re è ', c : 5 : 0 ) ; END .

FfNE

Note

Nel caso in cui i due valori fossero uguali , il flow-chart presentato visualizzerebbe uno dei due come maggiore. Per evidenziare la circostanza accaduta, si potrebbe porre nella strada del «falso» un ' ulteriore condizione del tipo: A= B? , con conseguente emissione del messaggio opportuno.

69

Esercizi sull'uso della struttura iterativa Private Sub CmdReset_C l ic k() lbla . Visible = True lblb . Visible = True lblrisultato . Visible False lblma x .Visible = False txta . Locked = False t x tb . Locked = False txtc . Visible = False t x ta . Text = 1111 t x tb . Text = 1111 CmdCalcola . Enabled = True CmdReset . Enabled False End Sub Private Sub CmdUscita_Click () End End Sub

Osservazioni al codice Visual Basic Per codificare in Yisual Basic la struttura dell ' alternativa si è fatto uso del costrutto

I f condizione logica then Istruzione per vero else Istruzione per falso

End If

IMPLEMENTAZIONE IN JAVA

Listato del codice Java package esercizi ; import java . io . * ; import java x. swing . * ; public class Main { public static void main (Strin~] args ) String Stra , Strb , Strc , Strconf ; float a O; float b O; float c O; float d O; Strconf = JOptionPane . showinputDialog (" Programma di determinazione del valore maggiore ." + "\n " + " La funzione scelta è quella voluta (Si/ .. ) ? "); boolean conf = (Strconf . equals( " si 11 ) ) I I (Strconf . equals (" Si ") I I I (Strconf . equals (" SI ")) if (conf) { Boolean errore ; do {

72

Esercizio n.

23 errore= false ; try { Stra = JOptionPane . showinputDialog (" Digitare il primo valore numerico "); a = Float.valueOf(Stra ) . floatValue () ; )

catch(Exception e ) { JOptionPane . showMessageDialog (null , " Il valore digitato non è corretto . Riprova ! "); errore = true ; ) while (errore ); do errore = false ; try { Strb = JOptionPane . showinputDialog (" Digitare il secondo valore numerico " ) ; b = Float .valueOf(Strb ) . floatValue (); catch (Exception e ) { JOptionPane . showMessageDialog (null, " Il valore digitato non è corretto . Riprova ! "); errore = true ; while (errore ); if (a > b ) c = a ; else c

b;

JOptionPane . showMessageDialog ( null , " Il valore maggiore è : " + c );

Esecuzione del programma

----------------1 '\,,.

,...r·.a:..l:'O...'.. ... . . . . . : . . : : . ~ ~ ~ - - -...- r : ~ 4 ~

----------------·)•,_.c...,_,_-•

~

~11:'..:L...LIIIA..~~





,~.,.

~

J

Olgl•• I secondowlore runerico

Olgl•• I primowlore numerico

jso~

----------------•..,._ __....,.,,._• ..., ,,.;t-"'t:2.-

i

• ""I. -

~

-

- { - .: ......... ........_,.~.;- -

t~•~

_ . , . __

~

•.

I valore maggiore è: 500.0

73

Esercizi sull'uso della struttura iterativa Osservazioni al codice Java Per ottenere l'esecuzione della struttura alternativa indicata nel flow-chart, il linguaggio Java prevede semplicemente il rispetto della seguente sintassi: if (condizione logica) istruzione per vero; istruzione per falso;

si tenga presente che ia le parentesi tonde che i punti e virgola ono indispensabili ed obbligatori. Se invece la struttura alternativa doves e prevedere più istruzioni da dover eseguire nel caso del vero e/o nel caso del falso , allora occorrerebbe fare uso anche delle parentesi graffe, così come segue:

(condizione logica) istruzione per vero ; istruzione per vero ;

i f

istruzione per vero ; e l se { istruzione per falso; istruzione per falso; istruzione per falso ; }

74

~ ~

Esercizio n.

VISUAL BASIC

24

Vi sualizzare in modo crescente due valori numerici letti da tastiera . Analisi dei dati di input e di output

Input

Output

A, B

Semantiea Dati numerici

e

Maggiore tra A e B

D

Minore tra A e B

Esempi A

B

e

D

IO 26000

500 157

500 26000

IO

Flow-chart relativo all'algoritmo risolutivo

-

500 > IO 26000 > 157

Codifica in Turbo Pascal

INIZIO LEGGI A,B

FALSO

C=A

D=B

VISUALIZZA D

157

Nou

PROGRAM Eser24; USES WINCRT ; VAR a , b , c , d:REAL; { PROGRAMMA PRINCIPAL~ BEGIN CLRSCR ; WR ITE { ' Esercizi o 24 - Programma di visualizzazione ' ) ; WRITELN( ' in modo cresce nt e d i du e numeri. ' ); WRITE( ' Digita i due numeri ' ) ; READLN(a , b) ; If a > b THEN BEGIN c : =b ; d: =a ; END ELSE BEGIN c : =a; d : =b ; END; WRITELN( ' I due numeri so no ', c : 5 : 0,' e ', d : 5:0) ; END.

FINE

75

Esercizi sull'usa della struttura iterativa Private Sub CmdReset _Click() lbla.Visible = True lblb.Visible = True txta.Locked = False txtb.Locked = False txtc.Visible = False Txtd.Visible = False txta.Text = "" t xtb.Text = "" CmdCalcola.Enabled = True CmdReset.Enabled False Snd Sub

Private Sub CmdUscita_Click() End End Sub

'

Osservazioni al codice Visual Basic Se ci sono più istruzioni da dover eseguire nel caso in cui la condizione dovesse essere vera (o falsa), basta seri vere le istruzioni dopo la linea del then (o dell 'else):

I f condizione logica then Istruzione per vero Istruzione per vero else Istruzione per falso Istruzione per falso End If

IMPLEMENTAZIONE IN JAVA

Listato del codice Java package esercizi; import java.io.*; import javax.swing.*; public class Ma i n { public static void main (String[) args) String Stra, Strb, Strc, Strconf; float a = O; float b O; float c = O; float d; Strconf = JOptionPane.showinputDialog ("Programma di disposizione in modo crescente di 2 valori"+ "numeric i ."+ "\n" + "La funzione scelta è quella voluta" +

Esercizio n. 24 (Si/ .. )?"); boolean conf = (Strconf.equals("si")) I I (Strconf.equals("Si")) I I (Strconf.equals("SI")) if (conf) { Boolean errore; do { errore = false; try { Stra = JOptionPane.showinputDialog ("Digitare il primo valore numerico"); a = Float.valueOf(Stra) .floatValue(); }

catch(Exception e) { JOptionPane.showMessageDialog(null, "Il valore digitato non è corretto. Riprova !"); errore = true; while (errore); do { errore = false; try { Strb = JOptionPane.showinputDialog ("Digitare il secondo valore numerico"); b = Float . valueOf(Strb) .floatValue(); catch(Exception e) { JOptionPane.showMessageDialog(null, "Il valore digitato non è corretto. Riprova !"); errore = true; while (errore); if (a > b) { c = b; d = a; else {

c d

a;

=

b;

JOptionPane.showMessageDialog(null, "La disposizione dei due valori in modo crescente è: "+ "\n" + c +" - "+ d );

Esercizi sull'uso della struttura iterativa Esecuzione del programma

Diail•• I primo wlore runerico

Diail•• Il secondo wlore runerico

lso~

La ll8poalziol• dli ._Vlllorl In modo crncenle I:

10.0 . 500.0

Osservazioni al codice Java Così come già specificato nell 'esercizio n. 23 , per ottenere l'e ecuzione della struttura alternativa indicata nel flow -chart si è dovuto fare uso delle parente i graffe che hanno la funzione di indicare l'inizio e la fine del blocco da eseguire per la trada del vero e del falso.

TURBO PASCAL

VISUAL BASIC

JAVA

Esercizio n. 25 Dati i parametri di un 'equazione di 2° grado A, Be C, calcolare il discriminante e solo nel caso in cui quest'ultimo dovesse risultare positivo calcolare e visualizzare le due radici distinte, applicando la seguente formula: X. =

-B± ✓ B 2 -4AC

'

2A

Analisi dei dati di input e di output

Input

Output

Semantica

A, B, C

Parametri dell'equazione di 2° grado Xl , X2

Radici dell'equazione come da formula

Esempi A

B

e

Xl

X2

2

5

2

--0 ,5

-2

--0,5 = (-5 + 3) / 4

2

4

2

-

-

Discriminante = O

Flow-chart relativo all'algoritmo risolutivo

LEGGI A , B,C

D=B 2 - 4x A xC

FALSO

Xl =( -B+ ✓ 0)/2A

X2 - (-B- JD)/2A

-2=(-5-3)/4

Codifica in Turbo Pascal

INIZIO

VERO

Note

PROGRAM Eser25 ; USES CRT ; VAR a , b , c , d , x l , x 2 : REAL ; (PROGRAMMA PRINCIPAL~ BEGIN CLRSCR ; WRITE ( ' Esercizio 25 - Programma di determinazione ' ); WRITELN ( ' delle radici di un " equazione ' ); WRITELN ( ' di 2° grado . ' ) ; WRITE ( ' Digita i tre parametri a , b e c ' ); READLN(a , b , c) ; d :=S R(b)-4* a*c ; IF d > O THEN BEGIN xl : = (-b+SQRT(d )) /(2* a ); x 2 :• (-b-SQRT (d) )/(2* a ) ; WRITE ( ' Le due radici sono ', xl : 5 :2) ; WRITELN (' e ', x2 :5 : 2) ; END ; END.

VISUALIZZA Xl,X2

FINE

81

Esercizi sull'uso della struttura iterativa Poiché le radi c i de ll 'equazio ne di 2° g rado devono e ere calcolate (e vi ualizzate) o lo ne l ca o in cui il di criminante dove e pre entar i po iti vo, mentre in vece ne l ca o contrari o è stato celto di presentare una label con proprieta caption " DlSCRJMI NANT E NON POSfT JVO", a ll ' inte rno dell a struttura if then else i trova no di ver e istru zio ni che re ndo no vi ibili o meno alcune textbox e label. Perciò, e il di criminante d dovesse e ere po iti vo, oltre a calcolare le radici X l e X2, si procederebbe ne l modo egue nte:

lblrisultato . Vi sible lbl x l . Visible = True lbl x 2 . Visible True t x t x l . Visible True t x t x 2 . Visible True

True

i rende i rende i rende i rende i rende

visibile vi ibile vi ibile vi ibile vi ibile

la la la la la

labe l con captio n "RISULTATO" labe l con captio n "X I=" labe l con captio n "X2=" tex tbox conte nente la prima radice textbox contenente la eco nda radice

Se in vece il di crimin ante d non dove e e ere po iti vo, no n i procederebbe a l calcolo dell e radic i X l e X2 e si vi uali zzerebbe la label (deno minata lbl d isneg) che contiene una scritta appropriata:

l b l d isneg . Visi b l e = Tr u e Infine, in ogni ca o, vengono e eguite le eguenti i truz ioni :

lbla . Visible = False lbl b . Visible = False lblc . Visible False t x ta . Loc ke d = True t x tb . Loc ked True t x tc . Locked True

i tog lie la vi ibilità all a label con captio n "digita 'a'" i tog lie la vi ibilità alla label con caption "di gita 'b"' si tog lie la vi ibilità all a label con captio n "di gita 'c'" si blocca l' input all a textbox di immi ione di 'a' i blocca l' input alla tex tbox di immis ione di 'b' i blocca l' input all a tex tbox di immi io ne di 'c'

TURBO

VISUAL AC::1~

PASCAL

Esercizio n.

26

Dati due valori numerici interi A e B, determinare e B è il re to della divi ione di A per 97. In ca o affermativo vi uali zzare A , Be la critta "ESATTO", mentre ne l ca o contrario vi uali zzare la trin ga " ERRATO". Analisi dei dati di input e di output

Input

Output

Semantica

A,B

umeri interi COM

Segnalazione alfabetica "ESATTO" o " ERRATO"

Esempi A

B

COM

Note

100

3

ESATTO

3 = I00 - ( I x 97)

130

13

ERRATO

13 "i:- I 30 - ( l

X

97)

Flow-chart relativo all'algoritmo risolutivo

LEGGI A, B

Q = INT (A/97)

R = A - (Q x 97)

VERO

FALSO

COM = "ERRATO "

COM = "ESATTO"

VISUALIZZA A , 8 ,COM

FINE

81.____.

Esercizi sull'uso della struttura iterativa Codifica in Turbo Pascal PROGRAM Eser26; USES WINCRT ; VAR a , b : INTEGER; q , r : RE AL; c om: STRINO: 6] ; {PROGRAMMA PRINCIPAL~ BEGIN CLRSCR ; WRITE('Esercizio 26 - Pr ogramma di verifica se un numer o è il resto della divis io ne '); WRITELN(' di un valore per 97 .'); WRITE( ' Digita il dividendo '); REA DLN (a ); WR I TE(' Digita il presunt o resto ') ; READLN (b) ; q: =INT (a /97 ); r: =a -(q* 97 ); If r = b THEN com : = ' Esatto ' ELSE com : ='Errat o '; WRITELN('Il r esto di ', a ,' per 97 è ', b ,'? RISPOSTA: ', com ); END .

IMPLEMENTAZIONE IN JAVA

Listato del codice Java package esercizi; import javax.swing.*; publi c class Main { public sta tic void main (String[ I args) String Strconf, Stra, Strb , Strcom; int a O; int b = O; int r = O; Strconf = JOptionPane.showinputDialog("Programma di verifica se "+ "un dato numero è il resto della divisione di un certo valore"+ "per 97." + "\n" + "La funzione scelta è quella voluta (Si/ .. )?"); boolean conf = (Strconf.equals ("si")) 11 (Strconf.equals("Si")) I I (Strconf.equals("SI")) if (conf ) { Boolean errore; do errore false; try { Stra JOptionPane . showinputDialog(null, "Digitare un"+ "va lore numerico intero (d ividendo )", "Ve rifica Resto divisione - Richiesta di dato di input",

88

~

:t-:~

-~-----

Esercizio n.

26 JOptionPane.ERROR_MESSAGE); a= Integer.valueOf(Stra) .intValue(); catch(Exception e) ( JOptionPane.showMessageDialog(null, "Il valore digitato non è corretto. Riprova !"); errore= true; while (errore); do ( errore= false; try ( Strb = JOptionPane.showinputDialog("Digitare il numero"+ corrispondente al resto."); b = Integer.valueOf(Strb) .intValue(); }

catc h(Excep tion e) ( JOptionPane.showMessageDialog(null, "Il valore digitato non è corretto. Riprova !"); errore = true;

~

I

·,

while (errore); r = a % 97 ; if (r == b) Strcom = "esatt o "; else Strcom = "errato"; JOptionPane.showMessageDialog(nul l ," Il resto della divisione"+ "di " + a+" per 97 è " + r + ". Il resto digitato (" +b + ") era"+ Strcom);

'~

i ·.,

!i

,i

{

~

,,•

} }

Esecuzione del programma - - - - - - - - - - -- - - - - -

-----------------

)(

)(

"'~'

~-~ . . -

-



·-

... .A"• • - ✓ •···~-.

_ _ _ _ _.,,,,.

J

'



-

--

J

..

~..,-



.._.,.

-

~---~-"--

.... _ _ _ . . . . . . _ . . _ . . . . . . . . . , .

-ir..1

··-

--

__,

Digbre ... Wlare llLIMrico lnl•o (dMllendo)

Dlgllae I ,....o cot1lspotNllnte al resto.

i, oo .----...... ~-~

I~---~~

SI(

I

11...-1

11...-.1

SI(

I

--------------------------)(

• .,__



--•-

•• t

~









-

~ • -

-

-'•



-

---

_.......,.

--



-

-

L.

I resto dlllll ....._ cl 100 per 97 i 11 resto dlghto (3) •• ...no

89

~

Esercizi sull'uso della struttura iterativa

Digil• e un valore runerKo intero (dMdendo)

Diail• e Il runero corrtspondenle al resto.

11 3 aj

13

..---..... .-----, QK

I

ll &nriu1a l

I resto della dMsione cl 130 per 97 è 33. I resto digitato (13) era errato

Osservazioni sul codice Come i è notato pe r qu anto co nce rne l' e ec uzione de l progra mma , il primo panne llo di ri chie ta del dato di input de l di vidend o pre enta novità . In più , il tito lo del pa nnello non è pi ù gene rico e anonimo con il contenuto " Input", ma con un a strin ga che de c ri ve il co nte to in cui i inse ri sce il pannello (" Ve ri fica Resto di vi ione - Ri chi e ta di dato di input") . li panne llo è otte nuto face ndo ricorso al metodo JOptionPane . sho winputDialog . L' istru zione preci a adottata è: Stra= JOptionPane . showinputDialog (null , " Digitare un " + " valore numerico intero (dividendo ) ", " Verifica Resto divisione - Richiesta di dato di input ", " + " JOptionPane . QUESTION_MESSAGE ) ; Come i vede è tato utili zzato come primo parametro il va lore null , seguito dalla stringa che compare all ' inte rno del pannello e dalla stringa che compare nella barra del titolo de lla fin e tra. L' ultimo parametro informa ul tipo di fi ne tra che può es ere QUEST ION _ MESSAGE (finestra info rmati va - logo?), ERROR _ MESSAGE (fi ne tra di errore - logo X), WARNING _ MESSAGE (fin estra di atte nzione - logo !) o PLAIN _ MESSAGE (fi ne tra ge nerica senza logo) . Si noti infine l'operatore logico"==" utili zzato nella fun zione I F: if (r ==

b)

Strcorn = " esatto "; else Strcorn = " errato " ;

Se nei linguagg i di programmazione i è abi tuati ad utili zzare l'e pre ione IF r = b , in Java occorre utili zzare l' operatore== .

V1SUAL

TURBO

Bfl

PASCAL

Esercizio n.

JAVA

IC

27

Dato un valore numeri co corri pondente ad un importo, calcolarne lo conto pari al I 0% o al 6% a seconda che l ' importo superi o meno il va lore di 5000 . Vi uali zzare l ' importo iniziale, lo conto ed il valore contato. Analisi dei dati di input e di output

Input

Semantica

Output

CMP

Impo rto Sconto in valore applicando la percentuale u IMP

SCONTO NETTO

Va lo re netto (lMP - SCO NTO)

Esempi

IMP

SCONTO

NETTO

2000

120

1880

6000

600

5400

Note

=2000 X 0 ,06 600 =6000 X 0 ,(0

NETTO =2000 - l 20

120

ETIO

=6000 -

600

Flow-chart relativo all'algoritmo risolutivo

LEGG I IMP

VERO

FALSO

PS = 0 ,06

PS = 0 ,1

SCO TO = IMP x PS

ETTO = IMP - SCONTO

VIS ALI ZZA IMP, SCO TO , NETTO

91

Esercizi sull'uso della struttura iterativa Codifica in Turbo Pascal PROGRAM Eser2 7; USES WINCRT; VAR imp , sc o nto ,netto , ps: REA L; ( PROGRAMMA PRINCIPALQ BEGIN CLRSCR ; WR I TELN (' Eser ciz i o 27 - Programma di calcolo dell o sconto e del nett o di un imp ort o ' ); WR IT ELN(' ') ; WR I TE('D ig i t a l' 'i mporto ') ; READLN (imp) ; IF i mp < 500000 THEN ps:= 0. 06 ELSE ps: =0 . 1; sc ont o :=i mp* ps; netto :=imp-sconto; WR I TE LN( ' Lo sconto è ', s conto : 9:1 , ' ; ! " importo netto è ', netto : 9:1); END.

ITlJRao7

VISUAL

~

B11sir

Esercizio n. 28 Dati tre valori numerici da leggere tramite tastiera, determinare se essi corrispondano ai lati di un triangolo ed in caso affermativo il tipo (scaleno, isoscele, equilatero o rettangolo). In un triangolo, qualsiasi lato è minore della somma degli altri due. Analisi dei dati di input e di output

Input

Output

Se""'111iea

A,B,C

Valori numerici reali RISP

Risposta affermativa o negativa

TIPO

Tipo del triangolo eventualmente rappresentato dai 3 valori A, B e C

Esempi

3

B 4

3

6

A

e

RISP

5 2

POSITIVA

Nou

TIPO

RETTANGOLO 52 = 32 + 42

..... .. .....

NEGATIVA

6 è maggiore di 3 + 2

Flow-chart relativo all'algoritmo risolutivo

FALSO

VERO RISP = '"POSITIVA"

RISP = " NEGATIVA" TIPO=" ........ ... . "

TIPO= " RETTANGOLO"

TIPO= "EQUILATERO"

VISUALIZZA RISP.TIPO

ANE

I

Esercizi sull'uso della struttura iterativa Codifica in Turbo Pascal PROGRAM Eser28 ; USES WINCRT ; VAR a ,b, c : REAL; risp: STRINC{ 8) ; tipo : STRINC{ 10) ; (PROGRAMMA PRINCIPAL~ BEGIN CLRSCR ; WRITE('E sercizio 28 - Pro gramma di determinazione se tre valori corrispo ndan o o ' ); WRITELN( ' men o ai lati di un triangolo . ' ); WRI TE (' Digita i tre val o ri numerici: ' ); READLN (a ,b, c ); IF NOT ( (a < (b+ c) ) ANO (b < (a+c)) ANO (c < (a+b)) ) THEN BEGIN risp:= ' NEGATIVA ';

tipo :: ' ---------- ', END ELSE BEGIN risp : = ' POSITIVA '; IF (a =SQRT (b• b+c• c ) ) OR (b=SQRT(a• a+c- c ) ) OR (c =SQRT(a' a+b*b)) THEN tipo : = ' RETTANGO LO ' ELSE IF (a =b) AN O (b=c ) THEN tipo : = 'EQUILATERO ' ELSE IF (a=b ) OR (b =c ) OR (a=c) THEN tipo := ' ISOSCELE ' ELSE tipo := ' SCALENO '; END ; WRITELN( ' Risposta ', risp ,' Tipo : ', tipo ); END.

Esercizio n.

28

IMPLEMENTAZIONE IN JAVA

Esecuzione del programma

Ywlllcare N

3wllrt~

Prllllowllre: Sec:Glldewa.re: ,-wa.r-=

corrl•,•n~••••l.il••....-

Li ILl LI

IVIII.Ofl ..w w II umm .. TIIIIMìOLO 1

RETTANGOLO

SI

In questo programma si inizia a mostrare l'uso della GUI (GraphicaI User lnterface) come interfaccia tra programma ed utente. In particolare, nell'esercizio in esame sono utilizzati (oltre che ovviamente il form che in ambiente Java viene definito Jframe) controlli come le label, le textbox (Text Field in Java)e i Button. Per ottenere ciò, all'interno del NetBeans è stato fatto uso della componente JFrame Form. Per le modalità operative di realizzazione dell'interfaccia si rimanda al paragrafo 3 dell'appendice NETBEANS IDE alla fine del volume. Seguono le proprietà principali dei controlli significativi del form.

7Ypo Text field Text field Text field Text field Text field Button Button Button

Valon

Pro~ Name Text Name Text Name Text Name Text Name Text Text Text Text

txta txtb txtc txtrisp txttipo Verifica Pulisci Fine

Codice Java /** codice generato automaticamente da NetBeans (GUI) * / public class Esercizio _ 28UI extends javax.swing.JFrame { public Esercizio_28UI() { initCompo ne nts(); }

Suppress Warnings("un checke d") /** fine codice generato automaticamente

*/

9 ,

Esercizi sull'uso della struttura iterativa private

void

Cmd_VerificaActio nPerf ormed (java. awt. event. Ac tionEve nt

evt)

{

float a= b = e= if

a, b, e ; Float.parseFloat(txta.getText()); Float.parseFloat(txtb.getText()); Float.parseFloat(txtc.getText()); ( (a < (b+c) ) & (b < (a+c) ) & (e < (a+b))) { txtrisp.s et Text("SI"); txttipo.setText(""); if ((a== Math .sqrt(b*b+c*c) (b Math.sqr t (a*a +c*c ) ) I (e == Math.sqrt (a*a +b*b ))) { txttipo.setText("RETTANGOLO"); else if (a == b) & (b ==e )) txttipo.setText("EQUILATERO"); else if ( (a == b) (b == e) (a == e )) txttipo.setText("ISOSCELE"); else txttipo.setText("SCALENO"); else txtrisp.setText("NO"); txttipo.setText(""); }

private

void

Cmd_PulisciActionPerformed (j ava. awt. event .ActionEvent

evt)

{

txtrisp.setText(""); txta.setText(""); txtb.setText(""); txtc.setText(""); tx~tipo.setText("");

private void Cmd_FineActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0);

publi c static void main (String args[ J ) { java.awt.EventQueue.invokeLater(new Runnable() public void run() { new Esercizio_28UI() .setVis ible ( true ); } ) ;

private private private private private priva te

96

javax.swing.JButton Cmd Fine; javax.swing.JButton Cmd Pulisci; javax.swing.JButton Cmd_Verifica; javax .swing.JLabel jLabell; javax.swing. JLabel jLabel2; javax.swing.JLabel jLabel3;

Esercizio n. 28 pr i va te p ri va t e p r ivate pr i v ate private pr i v ate pr i vate

javax. s wi j avax. s wi javax.sw i jav a x. s wi j av a x.sw i j avax. s wi j av a x. s wi

ng. ng. ng. ng. ng. ng. ng.

JLabe l j Label4; JLabe l jLabel 6 ; JTe xtF iel d tx t a; JTe x t Fi el d t xtb; J Te xtF ie ld t xt c ; JTe x t Fie ld t x tris p; J Te x t Fiel d t x tti p o ;

Note al codice Il codice è stato integrato in modo "automatico" dal generatore NetBeans di interfaccia grafica GUI con istruzioni per gestire correttamente l'emissione e l'imnussione di dati attraverso pannelli contenenti i diversi oggetti di controllo (etichette , caselle di testo , pulsanti ecc .). Si noterà perciò all'inizio del codice un gruppo di 5 linee per utilizzare (attraverso la cosiddetta ereditarietà tipica dei linguaggi ad oggetto) la classe JFrame di j avax . sw i ng. Analogamente, nell ' ultimo blocco di codice sono contenute 21 linee ottenute automaticamente da NetBeans sempre a conclusione dell ' uso dell ' interfaccia grafica. Dal prossimo esercizio in poi , per motivi di brevità questi blocchi di codice verranno omessi e saranno elencati solo i segmenti di codice ritenuti significativi ai fini della trattazione. Tornando agli aspetti sintattici del linguaggio Java , per utilizzare l' operatore relazionale ANO si adopera il simbolo & , mentre invece il simbolo I serve ad codificare l'operatore relazionale OR . Nel codice è stato anche utilizzato il metodo Ma th. sqr t per calcolare la radice quadrata.

TURBO PASCAL

Esercizio n.

VISUAL RA IC

30

Un supermercato pratica una data percentuale di sconto sulla somma di spesa eccedente i 65 €. CaJcolare l'importo scontato da pagare, dati l'ammontare di spesa e la percentuale di sconto, digitati tramite tastiera. Analisi dei dati di input e di output

Input

Output

Semantiea

SP,P

Ammontare spesa e percentuale sconto IMPS

Importo scontato (SP - (SP x P / 100)) se P > 65 altrimenti IMPS = SP

Esempi

SP

p

70

0,20

69

100

0 ,30

89,5

Flow-chart relativo all'algoritmo risolutivo

Nou

IMPS 69 =65 + (5 - (5

X

0 ,20))

89 ,5 =65 + (35 - (35

X 0,30))

Codifica in Turbo Pascal

INIZJO

PROGRAM Eser30 ; USES WINCRT ;

LEGGI SP, P

VAR sp , p , imps : REAL ; (PROGRAMMA PRINCIPAL~

IMPS = SP

BEGIN

FALSO

VERO

VISUALIZZA IMPS

CLRSCR ; WRITE( ' Esercizio 30 - Programma di calcolo ' ); WRITELN(dell " importo scontato . ' ); WRITELN( ' ' ); WRITE( ' Digita l' ' ammontare di spesa ' ) ; READLN(sp) ; WRITE ( ' Digita la percen uale unitaria di sconto ' ); RE ADLN (p) ; imps := sp ; IF sp > 65 THEN imps : = imps - (imps-65 )'p; WRITE LN( ' L" importo scontato è ' , imps:9:2) ; END .

FINE

Note

Si ipotizza che la variabile P contenga una percentuale unitaria (es . 0,20 , 0,50 ecc.).

sercizio n.

30

~PLEMENTAZIONE IN JAVA

)ecuzione del programma i---e la percenlullle cl sconlo •

1f1H11 accedente 15 ~

5pna.-. . . .

!lid•laclaconto SC-. FINALE DA PAGARE 69.0

I

Tipo

Text fìeld Text fìeld Text fìeld Text fìeld

, Button Button Button

Valore

Proprktà

Name Text Name Text Name Text Name Text Editable Text Text Text

-I

txtsp txtp txterr txtimps fal se Verifica Pulisci Fine

odice: package esercizi ; i mport java . io . * ; /** codice generato automaticamente da NetBeans (GUI ) */ public class Esercizio _30UI e x te nd s javax . s wing . JFrame ( public Esercizio 30UI () { initComponents( ); }

Suppress Warn i ngs("un c h ecke d ") /** fine codice generato automaticamente */ private void Cmd _ Ve rifica Actio n Performed ( java . awt . e v ent . Actio nEven t {

float sp , p , i mp s ; sp = Float.parseFloat ( t x ts p. getTe x t ()); p = Float .parseFloat (txtp . getText ()); if (p > 1) { t x terr . setTe xt( " Percentuale > l "); } else {

evt )

imps = sp ; i f (sp > 65 ) imps - = (imps - 65) * p ; txtimps . setText (String . valueOf (imps ));

private void Cmd_ PulisciActionPerformed ( java.awt . event.ActionEvent evt ) { txtimps . setText (""); txtsp . setText( ""); txterr . setText( "" ) ; txtsp . setText( "" ) ; txtp.setText( "");

private void Cmd_FineActionPerformed(java . awt . event.ActionEvent evt) { System . exit (0 );

pub l ic sta tic void main (String args[] ) { java . awt.EventQueue . invokeLater (new Runnable() public void run () { new Esercizio_30UI() . setVisible ( true) ; ) ) ;

private private private private private private private private private private private

java x.swing . JButton Cmd Fine ; javax . swing . JButton Cmd_Pulisci ; javax . swing . JButton Cmd_ Verifica; javax.swing.JLabel jLabell ; javax . swing . JLabel jLabel2 ; javax . swing . JLabel jLabel3 ; javax . swing . JLabel jLabel6 ; javax . swing . JTextField txterr ; javax . swing . JTextField txtimps; javax . swing . JTextField txtp ; java x . swing . JTextField txtsp ;

Esercizio n.

30

Note al codice Il codice è stato integrato in modo "automatico" dal generatore NetBeans di interfaccia grafica GUI con istruzioni per ge tire correttamente l'e missione e l'i mmissione di dati attraverso pannelli contenenti i diversi oggetti di controllo (etichette, caselle di testo, pulsanti ecc.) . Entrando poi nel merito delle istruzioni scritte "a mano", si noti che per reali zzare l' istru zione:

IMPS = IMPS -

(( IMPS - 65 ) * P)

nella quale la stessa variabile IMPS si presenta come operatore e come risultato, in lava si può far ricorso all'operatore - = che consente di sottrarre da una variabile (la variabile IMPS , appunto) un valore numerico (nel nostro caso un 'espressione numerica). Nel caso in esame , l' istruzione di cui sopra è stata codificata come:

imps - = (imps - 65 ) * p ; Un'altra particolarità del codice è l'u o del metodo SetText che inseri sce (ovvero sc rive) nella proprietà Te xt del controllo (t x tsp o txtp) una determinata stringa. Perciò , se con il metodo getText si ottiene l'estrazione (ovvero il prelievo) della stringa dalla proprietà text di un controllo , con il metodo setText si ottiene il contrario cioè la scrittura nella proprietà te x t. Quindi con l'istruzione:

t xterr . setText (" Percentuale > 1 "); si ottiene il risultato di scrivere nella proprietà text del text field di nome txterr la stringa di errore "Percentuale > I". Caso di verso è invece quello relativo ali' istruzione:

txtimps . setText (String . valueOf (imps )); Infatti qui l'esigenza è di inserire nel controllo (di tipo text field) di nome txtimps non una stri nga , ma il contenuto della variabile (di tipo float peraltro) imps. Sarebbe tato bagliato crivere direttamente:

txtimps . setText (imps) ; in quanto ci sarebbe stato conflitto di tipo: da un lato stringa dall'altro numerico float. È necessario allora ricorrere all ' operazione di conversione da float a stringa , ottenuta attraverso l'operazione Str i ng . valueO f che converte un valore numerico di tipo float in stringa.

105

TURBO PASCAL

Esercizio n.

VISUAL BAartiamo dal pre entare direttamente il pannello utente:

Dlglla la temperatura

In.,..

Celsius

~

lrdca la se• Il •rlw

c.....

O Ketwin

O RNmur

Gr. . calcolall nella se• scala

95.0

In e so i vede facilmente che l'utente non deve scrivere un codice da a ociare alla scala pre celta I , 2 o 3) , ma direttamente cliccare su uno dei pul anti circolari che, una volta celto con il mou se, si :olora ali ' interno di un cerchio nero. I tre radio _ button ono stati chiamati rbcelsius, rbkelvin e rbreamur e sono Lati raggruppati" sotto un controllo definito Button Group allo copo di rendere esclusiva la selezione lel singolo pulsante ri petto agli altri due bottoni : in altre parole, se si sceg lie Celsiu ad e empio, autonaticamente vengono deselezionati gli altri due pul anti. Il codice Java non cambia se non che nell 'area relativa alla gestione dell 'evento converti, in cui 11 posto dell ' acquisizione tramite casella di testo della scelta (I , 2 o 3) si procede a controllare quale ,utsante sia stato elezionato: int scelta =O ; if ( rbcelsius . isSelected()) scelta else

l;

Esercizio n.

33

if ( rbkelvin . isSelected ()) scelta= 2 ; else if (rbreamur . isSelected ()) scelta= 3 ; Temperatura templ = new Temperatura (c , scelta );

in realtà , si è proceduto a forzare il contenuto della variabile scelta ad I a 2 o a 3 a seconda che l'utente abbia elezionato il primo , il secondo o il terzo radio button.

[Tui;,7 ~

VISUAL BASIC

Esercizio n. 48 Calcolare e visualizzare la somma dei primi N numeri naturali. N deve essere letto tramite tastiera. Analisi dei dati di input e di output -

Input

Output

S•lftalltica

N

Numero naturale Somma dei primi N numeri naturali

R

Esempi

N 5 7

R 15

28

Noi. 15=1+2+3+4+5 28 = I + 2 + 3 + 4 + 5 + 6 + 7

Flow-chart relativo all'algoritmo risolutivo a)

b)

INlZIO

INIZIO

LEGGI N

LEGGI N

R=O

R =0 I= 1,N

1=0

R=R+I

VISUALIZZA R

I= I+ I

VISUALIZZA FINE

R=R+ I

R

FINE

--

Esercizio n.

48

Note I due algoritmi presentati si differenziano per l' uso della struttura iterativa prevista: in a) si usa il WHILE .. . DO ... , mentre in b) viene impiegato il costrutto FOR .. . DO ... . Ambedue le strutture sono valide: sia il WHILE .. . DO ... che il FOR ... DO .. . sono previsti e contemplati da quasi tutti i linguaggi di programmazione ad alto livello . La notazione FOR ... DO .. . nel flow-chart b) indica che tutte le istruzioni cicliche contenute tra i simboli O e • vengono eseguite tante volte fintantoché la variabile di controllo (I), partendo dal valore iniziale I , non giunga al valore finale N, con passo d ' incremento I .

Codifica in Turbo Pascal del flow-chart a) PROGRAM Eser48a; USES WINCRT ; VAR n , r , i: INTEGER ; BEGIN CLRSCR ; WRITELN( ' Esercizio 48 - Programma di somma dei primi N numeri naturali. ' ); WR ITELN( ' ' ); WRITE ( ' Digita N ' ) ; READLN(n) ; r:=0 ;

i :• 0; WH ILE NOT (i • n) DO BEGIN i : =i+l ;

r :=r+i; END ; WRITELN( ' La somma dei primi ', n ,' numeri naturali è ', r) ; END .

Codifica in Turbo Pascal del flow-chart b) PROGRAM Eser48b; USES WINCRT ; VAR n , r , i: INTEGER ; BEGIN CLRSCR ; WRITELN( ' Esercizio 48 - Pr og ramma di somma de i primi N numeri na urali. ' ); WRITELN( ' ' ) ; WRITE( ' Digita N ' ) ; RE ADLN (n) ; r : =0 ; FOR i: =l TO n DO BEGIN r : =r+i ; END; WRITELN( ' La somma dei primi ', n ,' numeri naturali è ', r ); END .

13

Esercizi sull'uso della struttura iterativa Note al codice Ne ll a ge tio ne de ll ' evento CrndCalcola _Click c i o no di ver i aspetti innovati vi ri s petto alle codi fic he deg li e e rc iz i precedenti : 1) Definizione delle variabili all 'interno del codice . ln VisuaJ Ba ic per di chiarare una variabile (s ia es a nume rica o tringa) , si può procedere a rea li zzare una dic hi arazio ne e pli c ita con la no tazio ne :

Dirn norne _ variabile as tipo dove tipo può appartenere a l do minio numerico (integer, fl oat , do uble , ecc.) o a lfa nume rico . ln que t' ultimo ca o i può o ptare pe r il tipo tringa , attraver o la parola String . Nel no tro ca o , abbiam o la linea di codice:

Dirn r , n , i As Integer attraver o c ui o no tate dic hiarate 3 variabili ( r , n ed i ) de finite di tipo nume rico intero. Da no ta re che ta li variabili sono vari abili inte rne (o loca li) aJla routine e no n glo ba li . Que to sig ni fica c he a ll ' e te rno de ll a routine , ta li vari abili no n hanno con i te nza. In futuro i vedrà come dic hi arare una variabile glo ba le, c ui c ioè i può far ri fe rime nto in qu a l ia i punto de l progra mma. 2) iterazione definita o ciclo for next . Pe r codi ficare il c icl o fo r, sotte o a l fl ow-c hart b) in Vi ua l B a ic i ricorre a l co trutto intattico:

fori= valore iniziale to valore valore finale next i li sig nifi cato è: face ndo var iare c iclicame nte la vari abile i da l valo re ini zia le ino a che no n raggiun ge il va lo re fin a le, e egui le i tru zio ni de l c iclo (rappresentate da i puntini o pe n ivi) . Ne l no tro ca o :

fori = 1 ton r = r + i next i o ttie ne il ri ulta to di inc re me ntare la vari abile r de l valo re conte nuto ne ll a variabil e i. 3) Ne ll ' i truzio ne M g Box pre e nte a ll ' inte rno de ll a subro utine C mdCa lcola è stato fa tto u o de l caratte re"_ " di continuazio ne, co ì come g ià comme ntato ne ll' e e rciz io n. 16.

IMPLEMENTAZIONE IN JAVA

Interfaccia GUI ~

olo clelll SOlffllll del primi N l'IIIIMri natural

I

I~

Dlglla I valore N

~

olo clelll SOlffllll del primi N l'IIIIMri natwll

I'"'s_ __,I '

Digita l valore N

RISULTATO

RISULTATO

La somma

Somma

!

Pulisci

11

Rne

detprlni S numeri natural è 15 NIKi

Il

Rne

1ercizio n.

I

48 Proprietà

Tipo

Text fi e ld

Name Text Name Tex t Name Tex t Ed itable Name Tex t Name Text Name Text

Text fi e ld Text fi e ld

Button Button Button

Valore txtn txterr txtr Fa lse C md So mma So mma C md Pulisci Pulisc i C md_ Fine Fine

>dice Java private void Cmd _ SommaActionPerformed(java . awt . event . ActionEvent evt ) { int n , r=0 ; n = Integer . parseint ( t xtn . getText()) ; if (n < O ) { t x terr . setTe x t ( " il valore N deve essere positivo " ) ; } else { txterr . setTe x t ( "" ) ; for ( int i=l ; i< = n ; i++ ) { r += i ; t x tr . setTe x t ( " La somma dei primi " +n+ " numeri naturali è " + String . valueOf ( r )) ;

private void Cmd_FineActionPerformed(java . a wt . event . ActionEvent evt ) { System.exit(0) ;

private

void

Cmd _Pulisci ActionPerformed ( j ava . a wt . event . ActionEvent

{

t x tr . setTe x t ("" ) ; t x tn . setText ("" ) ; txterr . setText ( "") ;

evt )

Esercizi sull'uso della struttura iterativa Note al codice: Per realizzare l'iterazione definita, meglio nota sotto il nome di for next, il linguaggio Java prevede la seguente sintassi generale: far

(inizia lizzazio n e ; co nd izione ; ag gi orname nt o )

{

// istruzioni cicl i c he

Nel nostro caso specifico , l'inizializzazione si ottiene ponendo il valore I nella variabile i. La linea di codice trascritta è perciò: i = 1;

La condizione per restare nel ciclo è che la variabile i non abbia superato il contenuto della variabile n (ovvero i< =n; ). L'aggiornamento consiste nell'incrementare la variabile di controllo i di I . Ciò si otterrà attraverso il codice: i++ ;

TURBO PASCAL

VISUAL

8A51C

Esercizio n. 49 Calcolare la somma dei primi numeri naturali pari sino ad N. N sia un numero pari e debba essere letto tramite tastiera. Visualizzare N ed il risultato. Analisi dei dati di input e di output

Input

Output

Semantica

Numero naturale pari Somma dei primi N numeri naturali pari

N R

Esempi

Note

N

R

6 8

12 20

12=2+4+6 20=2+4+6+8

Flow-chart relativo all'algoritmo risolutivo INIZIO

LEGGI N

1=0

R=O

VISUALIZZA R

1=1+2 FINE

R=R+ I

145

Esercizi sull'uso della struttura iterativa Codifica in Turbo Pascal PROGRAM Eser49 ; USES WINCRT; VAR n,r , i : INTEGER ; BEGIN CLRSCR ; WRITELN('Eser cizio 49 - Programma di somma dei primi n umeri naturali pari sino a N. '); WRITELN(' '); REPEAT WRITE('Digita N '); READLN(n); UNTIL n/2 = INT(n/2 ); r:=0 ; i:=0 ; WHILE NOT (i=n) DO BEGIN i : =i+2 ;

r: =r+i ; END; WR ITELN ('La somma dei primi numeri na turali pari sino a ',n,' è ', r ); END .

Note

Il primo REPEAT ... UNTIL . .. svolge esclusivamente un ruolo di controllo della variabile N: verifica che si tratti di un numero pari.

IMPLEMENTAZIONE IN JAVA

Interfaccia GUI ijìc.ìì .... _

.. __. ....... ,.. ...... ,

.......... L_

RISULTATO

is

I

- _J

.....

tMdlla-lllllUWlnlluralP!'!llno•NI

.....

is

I

-=-~- J

RISULTATO

Esercizio n. 49 n,,o Text field

.-

' Name Text Name Text Name Text Editable Name Text Name Text Name Text

Text field Text field

Button Button Button

Valon txtn txterr txtr False Cmd Somma Somma Cmd Pulisci Pulisci Cmd Fine Fine

Codice Java private void Cmd_ SommaActionPerformed(java.awt.event.ActionEvent evt ) { int n, r =0, i =O; n = Integer.parseint(txtn.getText()); if ( (n < O) 11 (n/ 2 != ( int ) (n/2))) { txterr .setText ("il valore N deve essere positivo e pari"); } else { txterr.setTe xt(""); while (i! =n) i+= 2; r += i; t xtr.setText("La somma dei primi "+n+" numeri naturali è"+ String.valueOf(r));

private void Cmd_ FineActionPerformed(java.awt.event.ActionEvent evt ) { System.exit(0);

private

void

Cmd PulisciActionPerformed(java.awt.event.ActionEvent

evt)

{

txtr.setText(""); txtn.setTe xt(""); txterr.setText("");

147-

Esercizi sull'uso della struttura iterativa Note al codice Per realizzare l'iterazione per vero , meglio nota sotto il nome di wh i le ... d o ... , il linguaggio Java prevede la seguente sintassi generale: while (condizio ne ) {

// istruzioni cicliche c he si ripetono per condizione verificata )

Nel nostro caso specifico, la condizione da verificare è I d i v erso d a N che in Java si codifica: i !=n

Si noti che inizialmente è stato realizzato il controllo che la variabile n sia positiva e pari attraverso la linea di codice: if ( (n < O) I I (n/ 2 != (i n t ) (n/2 )))

ITuRBol

IJ

~

Esercizio n.

VISUAL BASIC

JAVA

5O

Calcolare la somma dei primi numeri naturali dispari non maggiori di N. Vi sualizzare N e la somma. Analisi dei dati di input e di output

Input

Or,tput

Semanti.ca

N

.,

Numero naturale Somma dei primi numeri naturali dispari sino a N

R

Esempi

N 7 3 4

L

R 16 4 4

-

Not. 16=1+3+5+7 4=1+3 4=1+ 3

Flow-chart relativo all'algoritmo risolutivo

Codifica in Turbo Pascal PROGRAM Eser50 ;

INIZIO

USES WINCRT ;

LEGGI N

VAR n , r , i : I NTEGER ; BEGIN

I= I

CLRSCR ; WR ITE (' Ese rciz io 50 - Programma di somma ' ); WRITELN( 'd ei primi nume r i natura li dispari