Variabili booleane e cicli If Then Else

{progetto 3}


A questo punto possiamo tranquillamente continuare il discorso della programmazione affrontando le variabili booleane. Queste sono di un tipo che possono assumere solo due valori, “True” o “False” (vero o falso) e sono state ereditate direttamente dal mondo digitale.

Per maneggiare queste variabili bisogna anche introdurre il ciclo condizionale If... Then... Else, dove l’ultima espressione è anche possibile non utilizzarla. La sintassi per questo ciclo è la seguente:


If espressione

Then esegui 1

Else esegui 2;


Dove espressione è una parte di codice che ritorna un valore booleano, esegui 1 è il codice che viene eseguito se espressione è “True”, mentre esegui 2 è la parte di codice che viene eseguita se espressione è “False”. Se vi sono più righe di codice da eseguire si può far uso di un costrutto (procedura o funzione):


If espressione

Then MiaProcedura

Else MiaFunzione;


oppure dei limitatori di blocco Begin.. End dove andremo a inserire il nostro codice:


If espressione

Then Begin

esegui 1

esegui 2

End

Else Begin

esegui 3;

esegui 4;

esegui 5;

End;


Si noti che il primo end non ha la doppia virgola in quanto il comando If finisce quando termina il blocco dell’Else, se è presente.

Facciamo un esempio creando un nuovo progetto, ormai sappiamo come si fa. Deve essere simile al progetto n° 2 ma oltre al pulsante chiudi deve avere solo il pulsante “Calcola”. Inserite sulla nostra form tre componenti del tipo “TRadioButton” e allineateli subito dopo le edit. Per fare questo in modo veloce potete selezionarli tutti e tre, tastino dx del mouse poi “Position\Align...”

 

 

Nella finestra che compare ci sono diverse scelte per l’allineamento verticale e orizzontale degli oggetti selezionati, a noi servono allineati a sx e spaziati in verticale in modo regolare.

 

 

Modificate la caption scrivendo rispettivamente: Somma, Moltiplicazione e Divisione. Selezionate poi il primo RadioButton e nell’object inspector ponete su True la proprietà “Checked”. Infine selezionate solo le due edit e cancelliamo il testo scritto, infondo qui ora bisogna scrivere numeri; nell’object inspector trovare la proprietà “Text” e cancellate quello che trovate scritto. Alla fine dovremmo avere qualcosa di simile:

 

 

Il pulsante Chiudi, al solito deve chiudere la form, mentre nell’evento onClick del pulsante Calcola dobbiamo scrivere il seguente codice:


procedure TForm1.Button2Click(Sender: TObject);

begin

If RadioButton1.Checked Then ProcSomma;

If RadioButton2.Checked Then ProcMolt;

If RadioButton3.Checked Then ProcDiv;

end;


La proprietà “Checked” di questo componente indica se è selezionato, dato che le possibilità possono essere solo due (selezionato e non selezionato) è di tipo boolean. Come abbiamo visto prima, l’espressione richiesta do “If” vuole un risultato booleano, allora lo utilizziamo per controllare se uno dei tre RadioButton è selezionato. Se risulta selezionato (proprietà Checked=True) allora (Then) viene eseguita la procedura relativa.

Vorrei farvi notare a questo punto l’indentazione del codice. E’ molto utile all’interno di un costrutto cercare di schematizzare i livelli di codice, specie in presenza di cicli ricorsivi (che vedremo in seguito) o condizionali. L’indentazione non è altro che lo spostamento verso destra del codice ogni volta che il flusso logico del programma lo richiede. Non esiste una regola per questo, potete anche scrivere sempre allineato a sinistra come abbiamo fatto fino a ora, ma scoprirete che è un mezzo molto utile per la leggibilità del codice. Io utilizzo una mia metodologia che vi mostrerò negli esempi a venire, va comunque ricordato che la formattazione dello scritto non incide in alcun modo sul prodotto finale.

Le tre procedure scritte ancora non esistono, ma le possiamo scrivere, vuote, senza problemi poi le svilupperemo una per volta.

Dichiarazione e procedure:

 

           

 

  

Come possiamo dedurre osservando i tre blocchi, oltre al tipo di lavoro che le tre procedure dovranno fare (somma, moltiplicazione e divisione), per il resto le operazioni da compiere sono le stesse, cioè prima convertire le stringhe in numeri, fare il calcolo ognuna per conto proprio, e poi convertire il risultato in stringa e scriverlo nella label. Quindi volendo la prima e l’ultima operazione potremmo scriverla solo una volta, e poi magari richiamarla dalla singola procedure, vediamo.

Prima di implementare le nostre procedure dobbiamo creare tre variabili globali, in modo che tutte le procedure le possano utilizzare. Nella sezione { Private declarations }, prima delle dichiarazioni delle procedure, creiamo le nostre variabili:

 

 

Messe in quel posto vanno ad aggiungersi alle proprietà della form, quindi diventano proprietà della form come le procedure scritte dopo. Se le avessimo scritte nella procedura (come nel progetto n° 2) allora solo quella procedura poteva utilizzarle. Ora che abbiamo le nostre variabili possiamo implementare una procedura che assegni loro il dato battuto dall’utente.

PROCEDURE TForm1.GetNumeri;

BEGIN

ValInt1 := StrToInt(Edit1.Text);

ValInt2 := StrToInt(Edit2.Text);

END;


Ricordatevi di aggiungere la dichiarazione della procedura nella sezione privata. A questo punto tutte e tre le procedure chiamano questa, così la prima cosa che viene fatta quando si preme “Calcola” è la conversione dei due numeri stringa in numeri reali. Dopodiché bisogna scrive il codice riguardo all’operazione da effettuare in ogni singola procedura:

Per finire un’ultima procedure che converta il risultato numerico in una stringa da mostrare in Label1, da chiamare dopo il calcolo matematico.


PROCEDURE TForm1.MostraTot;

BEGIN

Label1.Caption := IntToStr(ValTot);

END;


Come vedete in questo caso non abbiamo usato una variabile dove conservare il valore restituito da IntToStr ma si è usato direttamente il risultato per assegnarlo alla proprietà Text della label. Il codice di una delle procedure dovrà risultare così, le altre due sono simili tranne per il calcolo matematico:


PROCEDURE TForm1.ProcMolt;

BEGIN

GetNumeri;

ValTot := ValInt1*ValInt2;

MostraTot;

END;


Nella sezione delle implementazioni:


private

{ Private declarations }

ValInt1 : Integer;

ValInt2 : Integer;

ValTot : Integer;

PROCEDURE ProcSomma;

PROCEDURE ProcMolt;

PROCEDURE ProcDiv;

PROCEDURE GetNumeri;

PROCEDURE MostraTot;

public

{ Public declarations }

end;

Trappola per Eccezioni

Indietro