Written by xinyiman Ottobre 19, 2011, 09:09:00 am21855 ViewsRating: 0 (0 Rates)Print
Può capitare che prima o poi ci si imbatta nella
necessità di dover generare dei numeri casuali (in realtà pseudo-casuali), ovvero numeri scelti
a caso dal computer, anche in questo caso ci viene in aiuto il
linguaggio. Per ottenere un numero casuale contenuto tra 0 e N ci
viene in aiuto la funzione RANDOM, che viene parametrizzata con il
valore massimo che può raggiungere, quindi ipotizziamo di voler
avere un numero casuale tra 0 e 5 allora dobbiamo parametrizzare la
funzione così: random(5) e assegnare il
valore ad una variabile. Per poter generare i numeri casuali prima
bisogna inizializzare il generatore di numeri casuali. Per fare ciò
utilizziamo la procedura RANDOMIZE. Vediamo ora un esempio pratico
per capire meglio come si ottengono i numeri casuali. Ipotizzando di
voler simulare il lancio di un dado (cioè i numeri casuali possono
variare da 1 a 6), e ipotizziamo di aver dichiarato una variabile di
tipo integer e di nome Dado, questo dovrebbe essere il codice da
scrivere:
Randomize;
Dado:=Random(5)+1;
writeln('Il dado restituisce il valore: ', Dado);
Analizzando il codice vediamo che per prima cosa
inizializziamo il generatore di numeri casuali, per secondo generiamo
un numero casuale da 0 a 5 e poi lo incrementiamo di uno, per finire
stampiamo il risultato a monitor. Ovviamente se dovevamo generare un
numero che partisse da uno e arrivasse a 6 dovevamo per forza
eliminare l'opzione 0 dai possibili risultati e parametrizzando
random con 6 ciò non sarebbe stato possibile.
Written by xinyiman Ottobre 19, 2011, 09:07:00 am22665 ViewsRating: 0 (0 Rates)Print
Esattamente come per le variabili di tipo numerico anche
per le variabili di tipo carattere sono presenti delle funzioni
native del linguaggio che permettono di lavorare su di esse. Le più
comuni ed utilizzate sono le seguenti.
ORD(x): immaginiamo di avere una variabile carattere di
nome x e ipotizziamo di voler sapere qual'è il suo corrispettivo
numerico, utilizzando la funzione ORD sarà possibile ottenere il
risultato che ci siamo proposti (esempio A equivale a 65).
CHR(x): la funzione CHR è l'esatto opposto della
funzione ORD, ovvero da un valore numerico possiamo ricavare il suo
valore carattere (esempio 65 equivale ad A).
SUCC(x): con la funzione SUCC possiamo sapere quale
carattere viene dopo a quello contenuto nella variabile x (esempio se
la variabile x contiene A il risultato sarà B).
PRED(x): con la funzione PRED possiamo sapere quale
carattere viene prima di quello contenuto nella variabile x (esempio
se la variabile x contiene D il risultato sarà C).
UPPERCASE(x): la funzione UPPERCASE restituisce il
carattere in maiuscolo, ad esempio se nella variabile x ci fosse il
carattere 'c' il risultato sarebbe 'C'. Una funzione simile è
ANSIUPPERCASE.
LOWERCASE(x): la funzione LOWERCASE restituisce il
carattere in minuscolo, ad esempio se nella variabile x ci fosse il
carattere 'B' il risultato sarebbe 'b'. Una funzione simile è
ANSILOWERCASE.
Adesso vediamo un esempio che racchiude tutte queste
funzioni appena descritte, per far si che l'esempio funzioni bisogna
dichiarare una variabile di nome carattere e di tipo char.
carattere:='C';
writeln('Carattere: ', carattere);
writeln('Valore numerico di ', carattere,': ',
Ord(carattere));
writeln('Carattere di 65: ', Chr(65));
writeln('Carattere successivo di C: ',
Succ(carattere), ' Precedente di C: ', Pred(carattere));
writeln('Uppercase di c: ', UpperCase('c'));
writeln('Lowercase di C: ', LowerCase('C'));
writeln('AnsiUppercase di c: ', AnsiUpperCase('c'));
writeln('AnsiLowercase di C: ', AnsiLowerCase('C'));
Una menzione particolare la meritano IntToStr e
StrToInt, che sono due funzioni per trasformare un numero in stringa
e viceversa. Vediamo un esempio: val:=IntToStr(7);
metterebbe nella variabile val il valore 7 sottoforma di stringa, un
carattere in questo caso, fosse stato 77 erano due caratteri. Mentre
se fosse stato: val:=StrToInt('7'); mi
avrebbe messo nella variabile val il valore numerico 7. Sono funzioni
molto utili e di uso quotidiano.
Written by xinyiman Ottobre 19, 2011, 09:03:00 am23908 ViewsRating: 0 (0 Rates)Print
Quando si lavora con variabili di tipo numerico serve
poter effettuare diverse operazioni, dalle più semplici alle più
complesse. Molte di queste operazioni sono già previste dal
linguaggio stesso. Iniziamo con le 4 operazioni più semplici.
SOMMARE: per poter sommare due o più valori si usa come
logica imporrebbe il simbolo +, vediamo un esempio:
Variabile1:=Variabile1+1 . Con questo
ultimo esempio abbiamo permesso alla variabile di auto incrementarsi
di uno, un operazione all'ordine del giorno nel mondo della
programmazione.
SOTTRARRE: per sottrarre dei valori si usa come logica
imporrebbe il simbolo -, vediamo un esempio:
Variabile1:=Variabile1+1 . Con questo
esempio abbiamo permesso alla variabile di auto decrementarsi di uno.
MOLTIPLICARE: per moltiplicare uno o più valori si
utilizza il simbolo *. Vediamo ora l'esempio:
Variabile1:=Variabile1*2 . Con questo
codice abbiamo permesso alla variabile di raddoppiare il suo valore.
DIVIDERE: per dividere uno o più valori utilizziamo il
simbolo /. L'esempio risulta scritto così: Variabile1:=Variabile1/2
. Con questo ultimo esempio abbiamo permesso alla
variabile di dividere il suo valore in due.
Abbiamo visto le quattro operazioni matematiche più
diffuse, ora vediamo quelle un po' meno all'ordine del giorno.
RADICE QUADRATA: per ottenere la radice quadrata di un
valore x ci basta usare la funzione SQRT(x).
QUADRATO: per ottenere il quadrato di un valore x ci
basta usare la funzione SQR(x).
VALORE ASSOLUTO: per ottenere il valore assoluto di un
valore x ovvero il valore senza il segno ci viene in aiuto la
funzione ABS(x).
ARROTONDAMENTO: per ottenere l'arrotondamento di un
valore x utilizziamo la funzione ROUND(x).
TRONCAMENTO: per ottenere la parte numerica prima della
virgola di un valore x utilizziamo la funzione Trunc(x) o la funzione
INT(x).
PARTE DECIMALE: per ottenere la parte decimale di un
valore x ci viene in soccorso la funzione Frac(x).
SENO: la funzione che restituisce il seno di un valore x
è SEN(x).
COSENO: la funzione che restituisce il coseno di un
valore x è COS(x).
ARCOTANGENTE: la funzione che restituisce l'arcotangente
di un valore x è ARCTAN(x).
LOGARITMO NATURALE: la funzione che restituisce il
logaritmo naturale di un valore x è LN(x).
ANTILOGARITMO NATURALE: la funzione che restituisce
l'antilogaritmo naturale di x è EXP(x).
PI GRECO: per ottenere il PIGRECO ci viene in aiuto la
costante PI.
Le altre funzioni sono ricavate dalla combinazione delle
precedenti, ad esempio l'elevamento a potenza x^y si ottiene
combinando EXP e LN in questa maniera: EXP(LN(x)*y). Vediamo ora un
esempio che conprende tutte le funzioni matematiche viste in questo
capitolo.
Dichiariamo una variabile di nome Variabile1 e inseriamo
il codice qua sotto riportato.
Variabile1:=4;
writeln('Valore iniziale: ',Variabile1);
Variabile1:=Variabile1+3;
writeln('Valore iniziale incrementato di 3:
',Variabile1);
Variabile1:=Variabile1-2;
writeln('Valore decrementato di 2: ',Variabile1);
Variabile1:=Variabile1*2;
writeln('Valore raddoppiato: ',Variabile1);
Variabile1:=Variabile1/3;
writeln('Valore diviso 3: ',Variabile1);
Variabile1:=Abs(-2);
writeln('Valore assoluto di -2: ',Variabile1);
Variabile1:=Sqr(4);
writeln('4^2: ',Variabile1);
Variabile1:=Sqrt(16);
writeln('Radice quadrata di 16: ',Variabile1);
Variabile1:=Round(1.5);
writeln('Arrotondamento di 1,5: ',Variabile1);
Variabile1:=Trunc(1.5);
writeln('Troncamento di 1,5: ',Variabile1);
Variabile1:=Int(1.5);
writeln('Intero 1,5: ',Variabile1);
Variabile1:=Frac(1.5);
writeln('Parte decimale 1,5: ',Variabile1);
writeln('Seno di 4: ', Sin(4));
writeln('Coseno di 4: ', Cos(4));
writeln('Arcotangente di 4: ', ArcTan(4));
writeln('Logaritmo naturale di 4: ', Ln(4));
writeln('Antilogaritmo naturale di 4: ', Exp(4));
writeln('PI greco: ', PI);
writeln('Elevamento a potenza: 4^3',Exp(LN(4)*3));
Compilate e vedrete il risultato del vostro lavoro.
Written by xinyiman Ottobre 17, 2011, 10:47:00 pm21286 ViewsRating: 0 (0 Rates)Print
Questo brevissimo articolo serve a specificare la differenza che c'è tra assegnare e confrontare. L'assegnazione significa dare un valore ad una variabile, ad esempio:
Variabile1:=5; oppure Variabile1:=Variabile2;. Mentre confrontare significa verificare se due valori o variabili sono uguali, ad esempio Variabile1=Variabile2. Generalmente queste ultime stanno all'interno di condizioni. Come si può ovviamente notare per assegnare usiamo := mentre per confrontare se è uguale usiamo =
Written by xinyiman Ottobre 17, 2011, 10:43:00 pm21619 ViewsRating: 0 (0 Rates)Print
Nel campo della programmazione si presenta quasi
quotidianamente la necessità di eseguire lo stesso blocco di codice
(per blocco di codice si intende una o più righe di codice) per un
numero di volte variabile. Facciamo un esempio se necessitaste di
fare un programma che scrive per tre volte la stessa parola voi cosa
fareste? In base alle conoscenze fino ad ora acquisite fareste una
cosa del tipo (ipotizzando che la parola sia ciao):
write('ciao
ciao ciao');
oppure
write('ciao');
write('ciao');
write('ciao');
Così facendo però se si presenta la necessita di
scriverlo 4,5,N volte ad ogni necessità dovreste cambiare il codice
del programma e poi ricompilarlo, con la conseguente perdita di tempo
e la visibile imperizia da parte vostra. Per ovviare a questi
problemi esistono i cosiddetti cicli, che sono tre.
Il primo è il ciclo for, che ha la seguente sintassi:
for
variabile:=assegnazione to IndiceMassimo do
begin
…
...
end;
Come si può dedurre se noi volessimo stampare i numeri
da 1 a 15 ci basterebbe scrivere queste poche righe di codice:
for
i:=1 to 15 do
begin
writeln('Numero: ', i);
end;
Ovviamente la variabile i deve essere stata dichiarata
precedentemente come integer.
Se si volessero stampare numeri da 1 a N basta
sostituire il 15 con una variabile che verrà valorizzata da
tastiera, così:
write('Fino
a quale numero vuoi stampare? ');
readln(IndiceMax);
for
i:=1 to IndiceMax do
begin
writeln('Numero: ', i);
end;
In questo modo è possibile stampare da 1 a un numero N
senza dover modificare e ricompilare ogni volta il programma.
Il secondo ciclo che andremo a vedere è il cosidetto
"repeat until". La sintassi del suddetto ciclo è la seguente:
repeat
…;
…;
until(Condizione);
Adesso replicheremo l'esempio di prima, ovvero stampare
i numeri da 1 a 15, per capire meglio come si usa questo ciclo.
i:=1;
repeat
writeln('Numero: ', i);
i:=i+1;
until(i>15);
Come si può osservare la condizione è legata alla
variabile i che deve essere valorizzata prima dell'esecuzione del
ciclo. Un'altra cosa da notare è che l'esecuzione del programma esce
dal ciclo quando la condizione è vera, come in questo caso che
smette di ciclare solo quando la variabile i diventa maggiore di 15.
La terza cosa ovvia da notare è che la verifica della condizione è
al fondo dell'esecuzione del ciclo, quindi questo vuol dire che le
righe di codice contenute all'interno del "repeat until" vengono
eseguite almeno una volta.
Il terzo e ultimo ciclo è quello chiamato "while",
la sua sintassi è la seguente:
while
(Condizione) do
begin
…;
…;
end;
per capire meglio come si usa proseguiremo riscrivendo
il codice di prima che stampa i numeri da 1 a 15.
i:=1;
while(i<=15)do
begin
writeln('Numero: ', i);
i:=i+1;
end;
In questo caso la prima cosa che dovrebbe saltare
all'occhio è che la condizione è in testa e quindi se non è
verificata il codice contenuto all'interno del ciclo non viene
eseguito. La seconda osservazione da notare è che esce dal ciclo
quando la condizione si rivela falsa.
Come si può intuire i cicli sono fondamentali per
scrivere programmi di qualsiasi genere.
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.