Written by xinyiman Ottobre 17, 2011, 10:40:00 pm21320 ViewsRating: 0 (0 Rates)Print
Per poter effettuare delle condizioni abbiamo la
necessita di saper differenziare cosa è maggiore cosa è minore e
cosa è uguale. Per fare ciò ci vengono in aiuto i tre caratteri >
< =. Facciamo un esempio vediamo quale tra le due variabili di
nome Variabile1 e Variabile2 è più grande in questo semplice
esempio.
Variabile1:=15;
Variabile2:=5;
if
(Variabile1<Variabile2) then
writeln('La
variabile1 è maggiore!')
else
if (Variabile1>Variabile2) then
writeln('La
variabile2 è maggiore')
else
if(Variabile1=Variabile2) then
writeln('Le
due variabili sono uguali');
E' possibile anche mescolare questi caratteri per
semplificare la scrittura di condizioni, ad esempio ipotizziamo di
dover dire che la variabile1 è maggiore o uguale a 10, lo potremmo
fare così ((Variabile1>10)OR(Variabile1=10))
o così (Variabile1>=10). Come si può
notare la seconda versione è più veloce da scrivere e anche più
facile da leggere.
Written by xinyiman Ottobre 17, 2011, 10:38:00 pm21035 ViewsRating: 0 (0 Rates)Print
Esattamente come in qualsiasi linguaggio si presenterà
l'occasione in cui si devono usare o/e. Facciamo due esempi per
capire cosa intendo:
Arrivano
Andrea e Marco.
Potrebbe
arrivare Andrea o
Marco.
Come si può evidenziare da queste due frasi di esempio
la possibilità di dire OR/AND è importantissima e così lo è anche
per un linguaggio di programmazione, soprattutto quando si vogliono
effettuare condizioni multiple, ad esempio la variabile1 deve essere
maggiore di 5 e la variabile2 deve essere minore di 15. Questo ultimo
esempio si può tradurre informaticamente con
((Variabile1>5)AND(Variabile2<15)).
Written by xinyiman Ottobre 17, 2011, 02:27:00 pm23086 ViewsRating: 0 (0 Rates)Print
Condizioni
Generalmente in ogni discorso si arriva in un punto in cui si esprime il concetto del "se" o "oppure". Bene, il Pascal come linguaggio di programmazione non fa eccezione. Vediamo come si fa proseguendo con il programma che abbiamo realizzato nell'articolo "Input di dati". Il programma in questione, se avete provato a realizzarlo e testarlo, dice: "Inserire un numero da uno a dieci: ". Ma se si inseriscono valori numerici differenti da quelli previsti, non esegue nessun controllo e vengono stampati lo stesso. Questo perchè ancora non sappiamo come differenziare i numeri validi da quelli non validi. Per fare ciò si ricorre al "if". Vediamo come verrebbe modificato il codice del programma prima menzionato se usassimo un if.
write('Inserisci un numero da uno a dieci: '); readln(PrimaVariabile); if ((PrimaVariabile > 0) and (PrimaVariabile < 11)) then writeln('Il numero da te immesso e'': ', PrimaVariabile) else if ((PrimaVariabile > 10) and (PrimaVariabile < 21)) then writeln('Il numero da te immesso e'' compreso tra 11 e 20') else writeln('Il numero da te immesso non e'' compreso tra 1 e 10!');
repeat until keypressed;
Analizziamo ora il codice: dopo aver letto la variabile di nome PrimaVariabile possiamo notare il costrutto
se (Condizione1) allora Operazione che si vuol fare oppure se(Condizione2) allora Operazione che si vuol fare oppure Operazione che si vuol fare
Come si può capire da questi semplici esempi, il comando if è alla base di tutti i programmi.
Precedentemente abbiamo detto che ogni riga deve terminare con il punto e virgola, ma se andiamo a vedere l'esempio appena esposto, noteremo che su alcune righe il punto e virgola non c'è. Questo perché la riga subito dopo l'if è considerata come il codice da eseguire se la condizione è verificata, altrimenti esegue quello che c'è nell'else; quindi non necessita del punto e virgola per specificare dove finisce la riga.
Abbiamo visto che se si verificano le condizioni, allora si esegue una sola riga. In realtà ci si può trovare di fronte alla necessità di dover eseguire più di una riga di codice, e per fare ciò bisogna usare il "begin end". Modificando il vecchio esempio andremo a capire meglio cosa intendo.
write('Inserisci un numero da uno a dieci: '); readln(PrimaVariabile);
if ((PrimaVariabile > 0) and (PrimaVariabile < 11)) then writeln('Il numero da te immesso e'': ', PrimaVariabile) else if ((PrimaVariabile > 10) and (PrimaVariabile < 21)) then begin writeln('Il numero da te immesso e'' superiore ma non troppo'); writeln ('Eseguo piu'' di una riga di codice!'); end else writeln('Il numero da te immesso non e'' compreso tra 1 e 10!');
repeat until keypressed;
Come possiamo notare, la prima condizione, se verificata, esegue la stessa operazione di prima, mentre la seconda condizione, se verificata, oltre a stampare quello che stampava la prima, esegue un'operazione in più, ma solo se si è verificata quella condizione. Per far capire al compilatore che le due righe in questione vanno eseguite solo se il numero immesso è compreso tra 11 e 20, allora racchiudo le operazioni tra begin e end (ed ogni riga termina con il punto e virgola, begin end esclusi). Ma il comando if non è il solo che permette la gestione delle scelte, infatti è presente anche il comando case che opera al pari dell'if. Vediamo un esempio per capire come funziona.
writeln('Inserisci un numero tra uno e dieci: '); readln(PrimaVariabile);
case PrimaVariabile of 1..10: writeln('Numero compreso tra 1 e 10.'); 11..20: writeln('Numero compreso tra 11 e 20.'); else writeln('Altro numero.'); end;
Notiamo che laddove prima esisteva il costrutto "if then else" ora esiste il costrutto "case of else". Vediamo ora come si può usare.
Case variabile of Condizione1: ; Condizione2: ; . . . . . CondizioneN: ; else
end;
Questo modo di gestire le scelte è comodo, perché in realtà dovremmo scrivere molti if per esprimere un concetto. In tal caso conviene usare il case. Allo stesso modo dell'if, se abbiamo la necessita di eseguire più operazioni all'avverarsi di una data condizione, useremo il costrutto begin end.
Written by xinyiman Ottobre 16, 2011, 11:07:00 pm22520 ViewsRating: 0 (0 Rates)Print
Nell'articolo precedente abbiamo visto come si possa scrivere a video qualcosa tramite il comando write o writeln. Bene, oltre a scrivere a video, all'utente può tornare utile ricevere dei dati dalla tastiera. Questo è possibile tramite il comando read o readln. Facciamo un esempio. Apriamo una nuova console application e nella parte dichiarativa andiamo ad immettere la seguente riga:
write('Inserisci un numero da uno a dieci: '); readln(PrimaVariabile); writeln('Il numero da te immesso è: ', PrimaVariabile); repeat until keypressed;
Ovviamente ricordiamoci di andare ad inserire la unit Crt. Se lanciamo il programma appena realizzato, noteremo che con questo semplice comando possiamo leggere input da tastiera. Si noti che la variabile dichiarata è di tipo integer, ovvero numerica; se noi al posto di digitare un numero digitassimo un carattere ci restituirebbe un errore e il programma verrebbe immediatamente terminato.
Written by xinyiman Ottobre 16, 2011, 10:57:00 pm24865 ViewsRating: (1 Rates)Print
Si può considerare una variabile come un contenitore dove andare ad immagazzinare un informazione. Questa informazione può variare nel tempo, proprio per questo si chiama variabile. Si può considerare una costante al pari di una variabile ma una volta riempita con un valore quello rimane fisso fino alla fine del programma. Quando si dichiara una variabile si occupa dello spazio in memoria per tutta la durata del programma o della funzione o della procedura, dipende dove questa variabile è dichiarata. Si può anche dire allocare in memoria una variabile. Affronteremo questo capitolo in maniera pratica come sarà di consuetudine in questa community. Per capire l'argomento di discussione di questo capitolo apriamo una nuova console application come abbiamo fatto precedentemente per il primo programma.
Dove troviamo scritto { add your program here } andiamo ad aggiungere le seguenti righe:
writeln('La costante da me dichiarata con il nome MiaCostante ha un valore di:', MiaCostante);
PrimaVariabile := 'A'; SecondaVariabile := 3; TerzaVariabile := 3.3; QuartaVariabile := TerzaVariabile + 1; QuintaVariabile := 'Ecco a cosa servono le variabili!';
writeln('PrimaVariabile: ', PrimaVariabile); writeln('SecondaVariabile: ', SecondaVariabile); writeln('TerzaVariabile: ', TerzaVariabile); writeln('QuartaVariabile: ', QuartaVariabile); writeln('QuintaVariabile: ', QuintaVariabile); writeln('La costante da me dichiarata con il nome MiaCostante ha un valore di:', MiaCostante);
PrimaVariabile := 'B'; SecondaVariabile := SecondaVariabile + 2; TerzaVariabile := 3.3 + 1; QuartaVariabile := TerzaVariabile + 1; QuintaVariabile := 'Ecco a cosa servono le variabili! Fine';
Ora analizziamo quello che abbiamo appena fatto. Prendiamo in esame l'ultima modifica effettuata, var è una parola riservata che sta a significare che voglio dichiarare delle variabili o delle costanti. Dichiarare vuol dire che si decide che tipo di contenuto può possedere la variabile in questione, se numerica intera, numerica decimale, alfanumerica, stringa, o altro.
Consideriamo solo le variabili che abbiamo aggiunto noi, la prima si chiama PrimaVariabile ed è definita come char, ovvero può contenere caratteri. La seconda si chiama SecondaVariabile ed è definita integer, ovvero un tipo numerico intero come il 5 o 8 ma non ad esempio 4,5 o 4.3. La TerzaVariabile e la QuartaVariabile sono di tipo real ovvero numerico con la virgola. Mentre la QuintaVariabile è di tipo string ovvero può contenere una lettera come una parola o una frase alfanumerica. E poi per ultima la costante MiaCostante, che avrà il valore 5 per tutta la vita del programma. Ora vediamo in pratica come si differenzia una variabile da una costante. Come si può notare nella prima parte di codice che abbiamo modificato in questo programma abbiamo assegnato dei valori alle variabili e poi le abbiamo stampate a video, e poi nuovamente rivalorizzate e successivamente ristampate. Se il lettore si prendesse la briga di provare a riassegnare un valore alla costante noterebbe che in fase di compilazione del programma si otterrebbe un errore, perchè una costante non può essere rivalorizzata dopo essere stata dichiarata. Compilando attraverso il solito pulsantino che contiene un triangolino verde saremo in grado di vedere il risultato del nostro articolo.
I tipi principali delle variabili disponibili nel linguaggio free pascal sono: integer, shortint, smallint, longint, longword, int64, byte, word, cardinal, qword, boolean, bytebool, longbool, char.
Per quanto riguarda i tipi numerici li possiamo così classificare:
Tipo
Range
Dimensione in bytes
Byte
0..255
1
Shortint
-128..127
1
Smallint
-32768..32767
2
Word
0..65535
2
Integer
o Smallint o Longint
2 o 4
Cardinal
Longword
4
Longint
-2147483648 .. 2147483647
4
Longword
0..4294967295
4
Int64
-9223372036854775808 .. 9223372036854775807
8
QWord
0 .. 18446744073709551615
8
Per quanto riguarda il tipo integer che può variare da smallint a longint è il freepascal a fare la conversione automatica del tipo in base al contenuto stesso della varibile.
Oltre ai tipi interi esistono anche i tipi booleani ovvero variabili che contengono i valori TRUE e FALSE (VERO o FALSO).
Nome
Dimensione in bytes
Valore TRUE/VERO
Boolean
1
1
ByteBool
1
Qualsiasi valore diverso da zero
WordBool
2
Qualsiasi valore diverso da zero
LongBool
4
Qualsiasi valore diverso da zero
Free pascal e quindi anche lazarus visto che si basa su questo linguaggio comprende anche il tipo Char che è esattamente un byte di dimensione e contiene uno dei caratteri ASCII. Una costante di tipo carattere quando verrà dichiarata avrà il valore tra virgolette ad esempio 'A'. Un carattere può anche essere specificato dal suo codice ASCII facendolo precedere dal carattere #. Ad esempio #65 equivale ad 'A'.
Oltre il tipo Char esiste anche il tipo String che che è definito come in Turbo Pascal ovvero una sequenza di caratteri, con una specifica dimensione facoltativa. Essa sostiene inoltre anche AnsiString con lunghezza illimitata come in Delphi.
Il tipo string va da 1 carattere a 255 e viene dichiarato nel seguente modo:
In questa maniera abbiamo dichiarato una variabile di nome NomeVariabile che può contenere 50 caratteri, ovvero una stringa di 50 caratteri. Mentre le variabili dichiarate come AnsiString sono quelle che terminano con null e vengono gestiti tramite puntatori dal linguaggio, ma del tutto trasparenti al'utente programmatore. Facciamo un esempio se dichiaro la variabile
ottengo una variabile potenzialmente infinita (può essere grande tanto quanto la memoria messa a disposizione dalla macchina su cui gira il programma). Facciamo un confronto, se dichiaro una stringa non ansi come ho fatto precedentemente allora se andando avanti nell'esecuzione del programma necessito di memorizzare nella variabile una stringa di 51 caratteri non posso farlo e il programma va in errore in fase di compilazione (o meglio segnala che c'è un errore ma il programma viene realizzato ma tronca la stringa a 10 caratteri), nel secondo caso no.
Facciamo un esempio pratico creando una nuova console application e modificandola in modo che sia così:
procedure TMyApplication.DoRun; var ErrorMsg: String; PrimaVariabile: string[10]; SecondaVariabile: AnsiString; begin // quick check parameters ErrorMsg:=CheckOptions('h','help'); if ErrorMsg'' then begin ShowException(Exception.Create(ErrorMsg)); Halt; end;
// parse parameters if HasOption('h','help') then begin WriteHelp; Halt; end;
{ add your program here } clrscr(); PrimaVariabile:='sono 10 lettere mie'; SecondaVariabile:='sono 10 lettere'; writeln(PrimaVariabile); writeln(SecondaVariabile); repeat until keypressed; // stop program loop Terminate; end;
constructor TMyApplication.Create(TheOwner: TComponent); begin inherited Create(TheOwner); StopOnException:=True; end;
destructor TMyApplication.Destroy; begin inherited Destroy; end;
procedure TMyApplication.WriteHelp; begin { add your help code here } writeln('Usage: ',ExeName,' -h'); end;
var Application: TMyApplication;
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}
begin Application:=TMyApplication.Create(nil); Application.Title:='My Application'; Application.Run; Application.Free; end.
Se compilate oltre a vedere il risultato vedrete che viene riportato un errore in fase di compilazione dovuta al fatto che la stringa contenuta in PrimaVariabile contiene più caratteri di quelli consentiti.
Free pascal supporta anche l'implementazione delphi Pchar che è definito come un puntatore ad un tipo Char. Può essere paragonato ad una stringa che termina con il null, vale a dire che il Pchar è un puntatore ad un array di tipo char che termina con il carattere null. Free pascal permette l'inizializzazione delle variabile di tipo Pchar sotto forma di costanti o tramite inizializzazine dirette. Ad esempio dichiariamo in una nuova console application la seguente variabile nella parte dichiarativa del programma:
se salviamo ed eseguiamo il programma allora noteremo che avremo lo stesso risultato del programma precedente.
N.B. Le variabili possono essere suddivise in due macrocategorie: variabili globali e variabili locali. Le variabili globali sono dichiarate nella sezione dichiarativa del programma principale. Hanno visibilità e "vita" per tutta la durata del programma e in tutte le procedure. Le variabili locali sono dichiarate nella sezione dichiarativa di una procedura/funzione. Hanno visibilità e "vita" solo all'interno della procedura in cui sono state dichiarate.
N.B. Tutti i real vengono visualizzati in notazione scientifica, che non sempre è bella da vedere o utile ai fini della visualizzazione. Per ovviare a questo problema basta specificare quante cifre avrà la parte decimale. La sintassi per fare questo è:
In questo caso writeln('Esempio real: 'MiaVariabile:6:2) avremo come risultato un valore di 6 cifre di cui 2 sono decimali, ovviamente la MiaVariabile doveva essere dichiarata real.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.