Sunteți pe pagina 1din 11

168

Observatie. La Laboratorul UPC se va lucra cu FreeBasic, compatibil n totalitate cu mediul


Qbasic/QuickBasic fiind n fapt o variant mult mbuntit a acestuia.
III.1 Lecii de programare

L0. Limbajul de programare Qbasic. Fundamente
L0.1 Alfabetul
limbajului const n urmtoarele seturi de caractere pe care le nelege (grupate dup
posibilul lor rol n programele editate):
literele mari i mici ale alfabetului englez (sunt caractere cu care se formeaz cuvintele
n cadrul programului): A Z i respectiv a z; de remarcat c literele A F sau a f
sunt interpretate drept numere n contextul admis de limbaj pentru datele numerice n
sistem hexazecimal; n procesul de editare a comenzilor nu este necesar diferenierea
ntre majuscule i minuscule, pentru c mediul de lucru accept i nelege cuvintele-
cheie indiferent de forma de nscriere; la validare ns le transform automat n
majuscule;
cifrele: 0 9; anticipnd explicaiile legate de subiectul tipului de date, cifrele pot fi
interpretate drept numere sau caractere (compunnd cuvinte n programul editat);
semnele de punctuaie/delimitatori (parametrii, variabile, instruciuni pe aceeai linie
etc): . , ; : / \
(acelai tip de semne, cu rol de) comenzi de formatare: , ;
prompt al comenzii Input ?
caractere posibil de utilizat drept sufixe aferente tipurilor de date: % &! # $
operatorii aritmetici (semne): + - * / \ ^
operatorul de atribuire: =
caractere posibil de utilizat drept operatorii relaionali: < > =
paranteze: { } [ ] ( ) ;doar cele rotunde sunt admise n expresii;
alte caractere: ~ @ # | _

Observaii
Nu se pot utiliza caracterele diacritice romneti sau altele, chiar dac sunt
disponibile prin tastatur.
n schimb orice caracter coninut n codul ASCII poate fi afiat sau imprimat pe
suport fizic prin comenzi de ieire Qbasic (de tip Print|Lprint).
L0.2 Unitile lexicale (vocabularul). Enunuri, definiii i mod de tratare
Vocabularul limbajului const din cuvinte. Cuvintele sunt combinaii de caractere alfa-
numerice sau/i de alt natur. Exist dou mari categorii distincte de cuvinte posibil de
utilizat n Qbasic:
cuvinte-cheie predeclarate, rezervate ale limbajului, care pot fi utilizate numai n
contextul i forma stabilite de acesta; aciunea lor este strict determinat prin semantica
limbajului;
cuvinteutilizator care sunt denumiri definite de utilizator; exist reguli care trebuie
respectate la definire; utilizatorul trebuie s le includ n instruciuni valide respectnd
contextul n care le-a definit; condiia obligatorie este s difere de oricare din cuvintele-
cheie.
Combinaii de astfel de cuvinte i caractere admise se constituie n propoziii denumite
comenzi sau instruciuni dac sunt respectate toate regulile de ortografie i sintax impuse de
mediul de programare. Se spune n acest caz c sunt comenzi valide. n subcapitolul urmtor
se va trata aceast problematic n detaliu.
Cuvintele-cheie pot avea semnificaie de:
cuvinte-cheie necesare pentru alctuirea unei comenzi-limbaj (care definesc
comenzi propriu-zise n sens restrns de operaie elementar); spre exemplu:
Open, Close, Def, If, End, While, Wend, For, Next, Let, Sub, Common, Exit etc;
clauze: As, To, While(!), Until i altele specializate;
operator logic (sau matematic); spre exemplu: Not, Or, And, (Mod) etc;
funcie-sistem; spre exemplu: Sin, Tan, Loc, Pos etc.
Cuvintele-utilizator pot avea semnificaie de:
procedur de tip sub (subrutin/subprogram) sau de tip funcie;
variabil;
constant;
tip de dat (identifcator_grup);
etichet;
element de comentariu;
valoare dat (singular sau n combinaii cu alte date: expresiile).

Prin dat se nelege o informaie care poate fi identificat (prin denumire). Dependent
de context ( prin atribut) poate avea semnificaia de valoare numeric, logic, adres sau
ir-de-caractere. Valoarea este ncrcat la o anumit adres din memoria intern, asociat cu
denumirea datei. Explicaii detaliate asupra acestora vor fi oferite ntr-un subcapitol separat.
Deocamdat se semnaleaz faptul c valorile pot fi exprimate singular sau cu ajutorul
unor combinaii (n sens algebric, cu ajutorul unor operatori) de date de acelai tip. Astfel de
combinaii sunt denumite expresii. Expresiile la rndul lor trebuie s respecte anumite reguli
de scriere pentru a fi nelese i validate de limbaj.
Se spune c privitor la cuvintele-utilizator (exceptnd ultimele trei) - acestea
desemneaz denumirea entitilor pe care le reprezint. n informatic se utilizeaz pentru
denumire i un alt termen specific care poate avea i o semnificaie mai larg: identificator.
Regula Qbasic, care trebuie respectat, limiteaz definirea unui identificator la maximum 40
de caractere semnificative, exclusiv alfanumerice (litere i cifre zecimale), cu condiia ca
primul caracter s fie o liter. Exist o singura excepie: punctul: . , poate totui figura ntr-un
identificator. n cazul modului de lucru standard la fiierele cu acces direct (aleatoriu) n
contextul definirii unui grup_tip_dat, punctul devine indispensabil. Explicaii detaliate se
regsesc la lecia L.10.
Constantele se refer la date a cror valoare rmne neschimbat de-a lungul execuiei
programului. Se declar cu ajutorul cuvntului-cheie Const plasat naintea unei propoziii de
tip atribuire. Variabilele n schimb desemneaz date la care valoarea poate fi modificat n
timpul execuiei unui program.
Variabilele indexate sunt caracteristice unei anumite clase de aplicaii i sunt tratate n
mod aparte de limbaj (a se vedea lecia L.4). Este vorba de entiti de tip matrice sau vector;
n informatic se utilizeaz i termenele de tablou respectiv masiv, pentru a le desemna,
denumiri care vor apare n explicaiile i leciile urmtoare.
Pentru lucrul cu variabile indexate, Qbasic impune declararea preliminar a
dimensiunilor variabilelor (cu comanda Dim|Redim, n care se poate include concomitent i
declararea tipului de dat) i apoi la utilizare (atribuiri, prelucrri, ieiri), indexarea
individual a elementelor componente ale masivelor cu variabile-contor. Exist i excepii:
pentru index={0,,9} se poate lucra i fr dimensionare (a se vedea lecia L4.).
Constantele i variabilele se definesc prin instruciunile de atribuire cu ajutorul crora
identificatorilor acestora se ataeaz valori de dat, concrete. Se mai spune c acestea sunt
asignate cu astfel de valori, care pot fi singulare sau definite printr-o expresie. Modul de
atribuire poate fi direct sau interactiv. Dup cum s-a mai spus, valorile efective sunt plasate
170

ntr-o adres de memorie. Operatorul de atribuire n Qbasic este identic ca form cu cel
relaional, de egalitate (=). Mediul le difereniaz funcie de context.
Pentru variabilele indexate vor exista attea operaii de atribuire cte elemente conine
variabila.
Funciile desemneaz tot valori de dat. Valorile ns pot fi create i utilizate doar
dac funciile n sine sunt n prealabil create/definite. Exist funcii predefinite prin cuvinte-
cheie de Qbasic (funciile-sistem; spre exemplu cele trigonometrice: sinusul, tangenta etc) sau
create de utilizator cu acelai operator (=) prin care se ataeaz expresii cuvintelor-utilizator
de funcie. n acest caz expresiile sunt simbolice: conin identificatori de
variabile/constante/alte_funcii cunoscute, care reprezint argumentele funciei n cauz Nu
este necesar cunoaterea valorii acestora la momentul definirii i nu exist valoare de dat
pentru funcia n cauz la momentul definirii. Se poate spune c n acest caz, operatorul =
nu are rol de atribuire propriu-zis ci de definire. Utilizarea se produce prin apelul simplu al
funciilor definite (apel plasat obligatoriu dup momentul definirii), n oricare expresie care
conine identificatori de funcie. Se opereaz cu valorile actuale ale identificatorilor (de
variabile, constante sau alte funcii) coninui n definiia funciei n cauz. Se spune c s-au
transmis funciei, date de intrare prin argumentele sale. Apelul unei astfel de funcii este
ntr-un anume sens - similar specificrii de valoare ntr-o expresie oarecare. Exist multe
termene echivalente utilizate n context n literatur: se spune c funciile creaz, produc,
furnizeaz, returneaz sau chiar ntorc valori. Se poate consulta lecia L.9 pentru detalii.
Etichetele sunt cuvinte-utilizator care pot fi formate n condiiile acelorai reguli cu
cele expuse pentru identificatorii de variabile i constante (alctuite din maximum 40
caractere alfanumerice sau caracterul punct, cu condiia ca primul s fie o liter). Se
delimiteaz de instruciunea propriu-zis cu caracterul dou_puncte : i se utilizeaz pentru
marcarea liniilor de program la care se execut operaiuni de salt, cu instruciunile GoTo sau
GoSub.
Comentariile sunt iruri de caractere explicative care se dispun n program pentru a
uura citirea, urmrirea i depanarea acestuia. Nu influeneaz n nici un fel execuia
programului. Uneori instruciuni valide pot fi dezactivate prin transformare n comentariu,
dac la un moment dat nu este necesar executarea lor. Programatorii uzeaz de aceast
posibilitate i pentru pstrarea unor variante/secvene de instruciuni funcionale de care nu
este nevoie la un moment dat, pentru a le putea utiliza dup caz, ulterior.
Exist dou modaliti de dispunere/setare de comentarii:
^ prin dispunerea cuvntului-cheie Rem naintea irului de caractere specificat;
modalitatea echivaleaz cu o instruciune de sine stttoare i poate fi eventual
delimitat de alte instruciuni anterioare prin caracterul dou_puncte;
^ prin plasarea unui caracter apostrof: , naintea irului de caractere respectiv;
poate fi dispus i dup o instruciune valid (delimitat cu un spaiu), pentru o
explicaie nemijlocit asupra acesteia.
Dup comentariu nu mai poate fi dispus nici o alt instruciune pentru c nu mai
poate fi interpretat ca atare!

Observaii
Identificatorii nu pot forma singuri o instruciune/linie de program, ci numai n
combinaie cu alte cuvinte. Cel mai des ns apar n instruciuni de atribuire, n care o
expresie de acelai tip de dat este cea care i confer valoare.
Drept identificatori pot fi utilizate uzual caractere literale singulare (spre exemplu a,
b, c etc) sau cuvinte ntregi care definesc mrimea calculat n cadrul aplicaiei de rezolvat
prin program (spre exemplu: viteza, acceleratie etc). Se reamintete c se pot utiliza pn la
40 de caractere pentru denumiri, dar dac cuvintele sunt exagerat de lungi, apare pericolul
greelilor de editare.
Se accept faptul c atunci cnd n aplicaie coexist deosebit de multe entiti-
utilizator, este ntr-adevr esenial ca denumirea s indice cu exactitate mrimea creia i
corespunde pentru a nu se ncurca ntre ele! Programatorii cu experien i creaz uzane
proprii n conferirea denumirii pentru astfel de cazuri: denumiri sugestive dar nu exagerat de
lungi ci cu prescurtri, pentru a nu ngreuna inutil editarea i lizibilitatea instruciunilor.

I mportant
Nu se pot utiliza indici de tip clasic (superiori sau inferiori). De aceea n aplicaiile n
care se lucreaz cu variabile indexate (care evident necesit indici), modalitatea acceptat de
limbaj este: ncadrarea n paranteze rotunde plasate fr spaiu liber - nemijlocit dup
denumirea (identificatorul) entitii. Pot apare funcie de numrul dimensiunilor de tablou
urmtoarele forme: a(1), alfa(4,1), data$(7), etc.
Consecin
Indexul masivelor poate fi gestionat printr-o variabil separat. Aceasta se ntmpl
de regul n cazul operaiilor care trebuie executate identic asupra tuturor elementelor
variabilei. Pentru fiecare astfel de operaie se lucreaz cu o singur instruciune n care
(conform conveniilor de notaie a instruciunilor) apare elementul generic al variabilei
indexate sub urmtoarea form:

<identificator_variab_indexat>(<identificator_index>)

Toate operaiile de acest gen (nlocuite cu instruciunile corespunztoare) se includ n
structuri repetitive (For-Next sau While-Wend, Do-Loop) n care variabila-index trebuie s
fie contorul structurii (=numrtorul de repetiii, implicit sau explicit). n exemplele de lucru
(redate la lecia L.4) n cadrul structurilor amintite apar identificatori generici de forma: a(i),
nota(i,j) etc la care i, j sunt variabile-contor.
L0.3 Tipuri de date admise de Qbasic
L0.3.1 Caracteristici generale de tip
Limbajul Qbasic accept valori care se ncadreaz n 4 tipuri diferite de date:
numerice, iruri de caractere, valori logice (de adevr) i adrese.
Orice entitate care apare n expresii este tratat de operatorii specifici (proprii,
conform tabelelor nr.III 9 i 10) n contextul unui anumit tip de dat. n cadrul aceleiai
expresii, se admit operanzi de tipuri diferite dac sunt compatibili, dup cum rezult din
informaiile detaliate din Tabelul nr. III.8 (exemplu: relaionali cu logici).
n tabelul acesta sunt prezentate ntr-o form sistematizat - toate caracteristicile
tipurilor de date numerice i iruri de caractere acceptate de limbajul Qbasic precum i modul
de tratare al celorlalte dou tipuri.
Referitor la datele logice i adrese utilizatorul trebuie doar s editeze comenzi valide
n contextul acestor tipuri de date. n acest caz, Qbasic le gestioneaz (automat i implicit) n
mod corect. n continuare ns, programatorului i revine responsabilitatea de a nu le scoate
din contextul admis. Altfel acestea i pierd caracteristicile de tip, devenind date numerice
obinuite fr legatur cu datele iniiale!
I mportant
n programe, orice entitate care poate primi valoare trebuie s fie definit prin
identificatorul su i ca tip de dat!!
Mediul FreeBasic preia structura tipurilor de date din Qbasic/QuickBasic,
amendndu-le domeniul. Cu ajutorul acestora pot fi rezolvate majoritatea problemelor uzuale
de tip tehnic. In plus, dispune si de alte tipuri de date ( a se vedea Help-ul) i de modalitai de
lucru similare cu alte limbaje de nivel nalt cu posibilti mai mari (C sau C++).
172


Tabelul nr. III.8
Tip
date
Denumire
tip uzual
Cuvnt-
tip
1

Prescur-
tare
2

Nr.
octei/
adres
Valori admise*
(pentru datele numerice)
Sufix
3
/
precizie
N
u
m
e
r
i
c
e


ntreg INTEGER INT 2 -32.768 (+)32.767 %
ntreg lung LONG LNG 4
-2147483648
(+)2147483647
&
V
i
r
g
u
l



m
o
b
i
l


Simpl
precizie
SINGLE SNG 4
Pozitive 3.402823E+38 2.802597E-45
Negative -2.802597E-45 -.402823E+38
!
(7 cifre)
Dubl
precizie
DOUBLE DBL 8
Pozitive 1.79769313486231D+308
4.940656458412465D-324
Negative -4.940656458412465D-324
-1.79769313486231D+308
#
(15 cifre)
Necesit declaraii (definiii) de tip n program, implicite (impuse automat de
Qbasic), sau expliciteimpuse de utilizator prin cuvinte-cheie, prescurtri i sufixe:
1
n interiorul modulelor/structurilor de definire Type-End_Type;
2
n comenzile simple Def<prescurtare>;
3
n orice instruciune direct, prin ataare drept ultim caracter al identificatorului; au
prioritate maxim la definire i nu pot fi dispuse n structuri Type-End_Type.

i
r
u
r
i

d
e

c
a
r
a
c
t
e
r
e


ir STRING STR
4 +
nr.caract.
lungime maxim/ir: 32.767 $
D
a
t
e

l
o
g
i
c
e

Datele logiceapar doar n contextul evalurii (calculrii) unor expresii logice: acelea n
care pot apare operatori logici sau/i relaionali.
Expresiile logice apar n programe (inclusiv n proceduri i funcii):
drept condiii sau clauze legate de unele instruciuni simple sau structurate (If-
Then-Else, While-Wend, Do-Loop_Until etc);
n comenzi de atribuire pentru variabile sau constante logice n vederea utilizrii
ulterioare;
n comenzi de atribuire, intrare (Input) sau ieire (Print) respectiv prelucrare
logic (la nivel de bit) pentru variabile sau constante logice.
Limbajul Qbasic lucreaz cu numerele0 i non-zero (uzual: -1) avnd semnificaia de
valori de adevr logice fals (F) i respectiv adevrat (T)
Definiia de tip este implicit (prin context). Nu se declar explicit!
i datele logice i adresele sunt i pot fi tratate formal n programe drept date de tip
numeric, fiind desemnate prin numere ntregi.
Scoase din propriul context (i supuse operaiilor de tip matematic) i pierd caracterul
definitoriu, devenind date numerice obinuite (ntreg: INTEGER sau ntreg-lung: LONG)!!!
A
d
r
e
s
e

Sistemul lucreaz permanent n timpul
execuiei programelor (dar netransparent
pentru utilizator) cu numerereprezentnd
adrese (la primul octet alocat) ale
variabilelor i constantelor, procedurilor i
funciilor.
Numrul de adrese depinde de memoria
disponibil i modul de gestiune (prin
segmente i octei) rezultat din
conlucrarea Qbasic DOS.
La versiuni mai noi sub Windows pot apare
probleme din cauza unei gestiuni proprii a MI.
Utilizatorul areacces direct la adreseleunor entiti memorate exclusiv prin intermediul
comenzilor i funciilor-sistem specializateale limbajului Qbasic (i numai n contextul
acestora): Def_Seg, Varseg, Varptr, Call_Absolute, Peek, Poke.
* dac se depesc valorile limit, Qbasic emite mesajul de eroare Overflow.


L0.3.2 Operatori specifici tipurilor de date
Fiecare tip de dat poate fi supus prin operatori specifici - doar la operaii bine
determinate. Limbajul Qbasic dispune dup cum se observ din Tabelul nr.III.9 - de 4 seturi
de operatori n coresponden direct cu tipurile de date admise: setul matematic, relaional,
logic i setul-operatori-ir.
Tabelul nr. III.9
Operatorii matematici
1
Operatorii relaionali Operatorii logici Operatorii-ir
(operanzi numerici) ir (rar) (operanzi logici) (operanzi ir-caractere)
+ adunare = egal NOT* negaia logic + concatenare*
- scdere <> diferit AND i
=

o
p
e
r
a
t
o
r
i
i

r
e
l
a

i
o
n
a
l
i

o
p
e
r
e
a
z


c
u

c
o
d
u
l

A
S
C
I
I

a
l

c
a
r
a
c
t
e
r
u
l
u
i

i
n
i

i
a
l
!

*
*

* nmulire < mai mic OR sau
/ mprire <= mai mic sau
egal
XOR sau exclusiv
MOD
modulo
(=restul mpririi
ntregi)
> mai mare EQV echivalena
logic
\ mprire
ntreag
>= mai mare
sau egal
IMP implicaia
logic
* ir care nsumeaz (n
ordine) toate
caracterele operanzilor
implicai
^ ridicarea la
putere
: puteri fracionare
pentru radicali
* operator unar;
! toi ceilali sunt binari!
numerice logice (de adevr):
adevrat/fals
logice (de adevr):
adevrat/fals
**logice (de adevr):
adevrat/fals
l Tipul valorilor rezultate n urma operaiilor efectuate l
1
la expresii cu operanzi de diferite tipuri, toi sunt convertii de operatorii matematici (naintea
efecturii operaiilor) la tipul operandului cu cea mai mare precizie;

Tabelul nr. III.10

Tabelele de adevr ale operaiilor logice admise
de limbajul Qbasic
Operand unic Negaia
:
Operator
unar
:
x NOT x
F A
A F
Operatori binari
Operand
1
Operand
2
Suma
(SAU)
Produsul
(I)
Sau exclusiv Echivalena Implicaia
x y x OR y x AND y x XOR y x EQV y x IMP y
FALS (F) F F F F A A
ADEVRAT (A) F A F A F A
F A A F A F F
A A A A F A A
Atenie: Qbasic furnizeaz la execuia programelor valorile de adevr valide : 0 (pentru fals )
i valoare non-zero (pentru adevrat;: +1 la operaii bit cu bit, respectiv valoarea 1! la cele
relaionale).

Se atrage atenia c n cazul cifrelor care apar n context de ir-caractere, acestea nu
pot fi tratate drept numere. Nu se pot efectua operaii matematice cu astfel de valori!

174

Operaiile logice admise de Qbasic sunt definite prin intermediul tabelelor de adevr
(conform Tabelului nr. III.10) n care se evideniaz toate combinaiile posibile ale valorilor
de adevr pentru argumentele/operanzii implicate/i n acestea i rezultatul operaiilor pentru
fiecare combinaie distinct. Numrul operanzilor definete tipul operatorului. Exist astfel
operatori unari (cu 1 operand: negaia logic) i operatori binari (cu 2 operanzi: toate celelalte
operaii admise).
I mportant. Limbajul opereaz n contextul operaiilor logice cu cifrele 0 i o valoare
non-zero, avnd ns semnificaie exclusiv de valoare de adevr: fals i respectiv adevrat!
Aceste valori nu reprezint numere dar uneori pot fi supuse operaiilor matematice caz n care
i pierd apartenena la tip! n limba englez, termenii corespunztori sunt false i respectiv
true.
L0.4 Expresii
Conveniile i notaiile utilizate n continuare sunt n conformitate cu subcapitolele
III.1.5.1, 2,3.
Combinaiile valide de: valori de dat sau variabile, constante i funcii (de acelai
tip/sau compatibil, desemnate prin intermediul identificatorilor, a se vedea mai jos explicaia)
realizate cu ajutorul unor operatori la rndul lor compatibili cu tipul de dat poart denumirea
de expresii. Entitile valoare dat singular enumerate, combinate sau nu prin operatori, se
denumesc operanzi. Operatorii trebuie plasai ntre doi operanzi. Exist i excepii:
specificarea semnului unui operand la nceputul expresiilor.
Dup cum s-a specificat i despre identificatori, expresiile nu pot forma singure o
instruciune/linie de program, ci numai n combinaie cu alte cuvinte. n combinaie direct
cu un identificator, n instruciuni de atribuire, expresiile confer valoare. Expresia este
convertit la tipul de dat al entitii specificate prin identificator.
Expresiile n Qbasic trebuie discutate funcie de tipul operanzilor i operatorilor. Dac
intervin operanzi de mai multe tipuri, nota de la Tabelul nr.III.8 semnaleaz modul de
convertire n cazul operatorilor matematici.
Dac apar operatori logici n contextul unor valori numerice, operanzii sunt convertii
n ntregi, rezultatul fiind de asemenea un ntreg. Altfel, operaiile logice se efectueaz bit cu
bit!
Pe baza informaiilor din Tabelul nr. III.11 se analizeaz modul de scriere pentru ca
ordinea operaiilor de executat s fie cea corect.
L0.4.1 Expresiile numerice i formele de notare a numerelor
A. Descrierea expresiilor
n cazul expresiilor cu date numerice, ordinea de execuie a operaiilor este cea
cunoscut din algebr. Pri ale expresiilor pot fi grupate cu ajutorul parantezelor rotunde,
singurele care sunt admise. Nu se accept celelalte tipuri de paranteze, care pot fi utilizate
doar n comentarii sau ca valori pentru iruri de caractere. Pot exista paranteze imbricate
(incluse, coninute n altele de rang mai mare). Pot exista serii de paranteze imbricate,
rangurile fiind succesiv din ce n ce mai mari. Rangul cel mai mic este cel al parantezei care
conine doar operatori i operanzi.
Se reamintete c:
^ operaiile din paranteze au prioritate;
^ n cadrul unei paranteze imbricate de rang mare, se execut parantezele n
ordinea cresctoare a rangului: de la inferior la superior;
^ un ir de paranteze de acelai rang se execut n ordinea apariiilor;
^ prioritatea operatorilor ntr-un ir care nu conine paranteze este: ^ apoi * /
MOD \ i respectiv + - ;
^ un ir de operaii de aceeai prioritate se execut pas cu pas, n ordinea
apariiilor din expresie.
Probleme apar doar atunci cnd trebuie editate relaii redate iniial sub form
fracionar. Aceast form nu poate fi reprodus n program: instruciunile pot fi nscrise ntr-
un singur rnd-text! Pentru rezolvare trebuie utilizate una sau mai multe perechi de paranteze
rotunde (simple sau imbricate, dup caz).
Iat n Tabelul nr. III.11 - un exemplu simplu de scriere corect i greit a unei
astfel de relaii: cea a soluiilor x
1,2
pentru o ecuaie de gradul al II-lea unde a, b i c sunt
coeficienii puterilor (n ordine descresctoare a) lui x.
Tabelul nr. III.11
Relaie matematic editare greit editare corect
a 2
c a 4 b b
x
2
1,2


=

x1=-b+b^2-4*a*c^1/2/2*a
x2=-b+(b^2-4*a*c)^1/2/(2*a)
x1,2=-b+/-(b^2-4*a*c)^(1/2)/(2*a)
x1=(-b+(b^2-4*a*c)^(1/2))/(2*a)
x2=(-b- (b^2-4*a*c)^(1/2))/(2*a)
l nu sunt variabile cu indici! l

Pentru notaii cu indici (=caz de
variabil indexat sau masiv/
tablou) trebuie declarat anterior
dimensiunea cu comanda Dim.
x(1)=(-b+(b^2-4*a*c)^(1/2))/(2*a)
x(2)=(-b- (b^2-4*a*c)^(1/2))/(2*a)
!variabile cu indici!
n coloana din mijloc, la execuia celui de-al treilea termen pentru x1, operaiile se
execut n ordine, deci rezultatul nmulirii primilor 3 operanzi (4, a, i c) se ridic la puterea
1, rezultatul se mparte de dou ori succesiv la 2 i se nmulete cu a! Se pot evita greelile n
cazul particular pentru radicalul de ordin 2, utiliznd conform cu lecia L13.2 - funcia Sqr.

B. Forme (notaii) posibile ale numerelor n Qbasic
Valorile numerice sunt gestionate i prezentate uzual (n instruciuni i n cadrul
dialogului cu sistemul de calcul) n sistemul de numeraie zecimal. n programe, un numr n
baza zece poate fi ntlnit n forme (se spune n notaii) diferite:
^ exclusiv cu cifre zecimale (notaia zecimal simpl a valorii);
^ notaia exponenial matematic (cea obinuit); n cadrul programului se
transpune printr-o expresie_numeric_Qbasic valid; pentru una i aceeai
valoare exist mai multe forme posibile;
^ notaia/reprezentarea exponenial Qbasic cu ajutorul cifrelor i iniialelor-
exponent (E sau D, n notaie zecimal-exponenial); caracterul E se folosete
la numere de tip Single, n simpl precizie (implicit i la valori ntregi), pe
cnd D apare la numerele Double, n dubl precizie; exist o singur form de
notaie/reprezentare posibil!! Este form specific limbajului.
Sunt trei situaii distincte n care pot apare valori numerice:
ncorporate n instruciuni;
la introducerea de valori n timpul execuiei (urmare a comenzilor de intrare
de tip Input);
valori afiate/imprimate drept rezultate (se mai poate spune reprezentate) n
pagina auxiliar, urmare a comenzilor de ieire (de tip Print).
Pentru primele dou situaii n care utilizatorul editeaz valorile, se utilizeaz uzual
notaia zecimal (pentru numere ntregi Integer sau Long) i notaia exponenial obinuit
(transpus ns prin expresii valide n cazul numerelor Single sau Double). Cea de-a treia
notaie este admis, dar se comport diferit la validare.
n cazul reprezentrilor de rezultate (la ieire) programul furnizeaz o valoare. Nu se
ntlnete notaia exponenial obinuit, ci notaiile zecimal i reprezentarea specific
Qbasic. Aceast form de notaie apare (uzual) la comenzile de ieire (afiare, imprimare cu
Print sau Lprint), indiferent de situaia prin care s-a atribuit valoare entitii n cauz dac se
depete spaiul de 7 pentru Single (respectiv 15 pentru Double) cifre semnificative (exclusiv
punctul zecimal i semnul; dac semnul lipsete se mai adaug un caracter).
176

Pentru ambele notaii exponeniale, valorile mantisei sunt n general numere reale, iar
ale exponentului, ntotdeauna valori ntregi, ambele n notaie zecimal simpl.
n Tabelul nr.III.12 se prezint exemple astfel alese nct s fie relevante pentru
comportamentul expus. Se sugereaz folosirea lor n exerciii. Pentru verificare, tabelul
conine formeleechivalente care apar n cele trei situaii de utilizare. Expresiile din coloana
de mijloc sunt cele care se editeaz.
Comportamentul difereniat poate fi observat dac se efectueaz exerciii cu diferite
forme de notaie ale numerelor, prin comenzi de atribuire/introducere i apoi de afiare cu
Print (sunt vizibile cteva astfel de exerciii n Figura nr. III.29).
Tabelul nr. III.12
Notaie matematic iniial Expresie_Qbasic_validat Reprezentare_Qbasic (notaie
exponenial sau din octal/hexa)
<mantis>10
<exponent>
<mantis>*10^<exponent> <mantis>{E|D}{+|-}<exponent>
42,6510
7
0,426510
9

426510
5

42.65*10^7

0.4265*10^9
4265*10^5
4.265E+8

4.265E+8

4.265E+8
S
I
N
G
L
E

42,651238210
7
0,42651238210
9

42651238210
5

42.6512382#*10^7

0.426512382#*10^9
426512382#*10^5
4.265124E+8
4.265124E+8
4.265124E+8
7142,1423210
15

71,421423210
17

7142.14232#*10^(15)
71.4214232#*10^(17)
7.14214232D+18
7.14214232D+18
D
O
U
B
L
E

-714214,232
-71421423210
-3

-714214.232
-714214232*10^(-3)
-714214.232
-714214.232
29118481,370105281 29118481.37010528# 29118481.37010528
248,1372517425614610
13
248137,2517425614610
10

248.1372517425615#*10^13
248137.2517425615#*10^10
2.481372517425615D+16
2.481372517425615D+16
723
8
&O723 467
OCTAL
723
16
&H723 1827
HEXA
Exist posibilitatea de a lucra n cadrul programului i cu valori numerice n sistemul
de numeraie octal i respectiv hexazecimal (pe post de expresii, argumente etc). Pentru
aceasta ns trebuie folosit o notaie special, cu prefixele &O i respectiv &H, conform
formei generale de mai jos (exemplu cu operaii de atribuire):
<identificator
1
> = { [+] | - }&[O]<ir_cifre_octale>
<identificator
2
> = { [+] | - }&H<ir_cifre_hexazecimale>
Se reamintete c intervalul cifrelor octale admise cuprinde irul (0 7) iar cel al
cifrelor hexazecimale irul (0 9, a f). Notaia se utilizeaz spre exemplu n instruciuni
grafice (Paint) i la nominalizarea adreselor de porturi.
n calcule, intern, valoarea este cea din zecimal, care reapare n notaie standard la
comenzile de ieire (cu Print).
Valorile octale i hexazecimale ale unor numere zecimale pot fi vizualizate (cu Print)
numai dac se transform n iruri de caractere cu funciile Oct$ i Hex$:
<identificator
1
$> = OCT$(<expresie_zecimal>)
<identificator
2
$> = HEX$(<expresie_zecimal>)
Valorile binare se pot vizualiza n forma contractat, cea a valorilor hexazecimale,
tiindu-se c exist coresponden biunivoc ntre 4 bii (cifre) n codul natural numeric binar
i 1 cifr din sistemul hexazecimal de numeraie. n general, PC-ul furnizeaz i informaii
binare legate de sistem prin forma lor hexazecimal.

Concluzii i comentarii
Este evident c exist mai multe forme de reprezentare exponenial (matematic i
respectiv editat prin instruciuni n expresii) pentru una i aceeai valoare numeric.
Indiferent de forma editat, se poate observa c reprezentarea n notaie exponenial Qbasic
este unic.
La numerele reale n notaii zecimale simple, cifrele care depesc formatul admis
amintit mai sus nu se mai afieaz/imprim. Aceeai regul se aplic i oricrei mantise n
cazul notaiei exponentiale. Apare reprezentarea rotunjit i trunchiat a valorii numrului.
Programul va lucra ns n continuare cu valoarea real, care rmne neschimbat!
Qbasic accept i n timpul editrii forme diferite de tip reprezentare (nscriere de
valori cu E sau D). La validare ns aceasta din urm se transform (dac este cazul)
automat n cea standard, unic.
Qbasic semnaleaz nc de la editare (la validarea liniei-program) posibilitatea ca la
execuie, s apar o notaie trunchiat pentru o valoare numeric nscris: se execut
automat trunchierea i apare sufixul # la captul irului de cifre editate.
Programatorul poate impune prin instruciuni, dup dorin (n anumite limite),
modul de reprezentare printr-un format determinat de notaie n cadrul comenzii
[L]Print_Using.
L0.4.2 Expresiile ir de caractere
pot conine valori sau identificatori. O caracteristic a valorilor de acest tip este faptul c n
instruciuni acestea trebuie specificate ntre ghilimele! Sunt vizibile n stare real fr
acestea - doar dac sunt afiate/imprimate n pagina auxiliar.
A. Expresii-ir propriu-zise. La irurile de caractere, operaiile (uzuale) admise sunt
cele de concatenare. Operatorul + acioneaz similar celui aritmetic, n ordinea apariiei n
expresie a operanzilor. irul rezultat const deci din alturarea/adugarea (pas cu pas) a
tuturor valorilor-caracter a operanzilor.
Iat un exemplu simplu de concatenare cu 2 valori-ir i dou variabile indexate.

Ionescu are prenumele: + prenume$(1) + + prenume$(2)

Cea de-a doua valoare-ir este necesar ntruct semnific caracterul spaiu (gol)
fr de care cele dou prenume ar fi reprezentate contopit; valorile variabilelor trebuie
cunoscute anterior.
Parantezele se pot utiliza dar nu influeneaz rezultatul, neavndu-i rostul n astfel de
operaii.
B. Expresii-ir mixte. Expresiile cu iruri accept de asemenea i operatori logici i
relaionali. Operatorii sunt activi fa de valoarea din codul ASCII a iniialei irului specificat.
Rezultatul este o valoare de adevr i se supune regulilor i operaiilor corespunztoare
acestui tip de dat. La aceste operaii sunt admise parantezele.
Din punct de vedere formal-funcional n astfel de cazuri expresiile i pierd caracterul
exclusiv de ir fiind n esen expresii logice mixte (cu iruri). Anticipnd, sunt posibile
formele:
nume$(1) < nume$(2) (nume$(1) = nume$(2)) AND (prenume$(1) <> prenume$(1))

L0.4.3 Expresiile logice
L0.4.3.1 Expresiile logice obinuite, cu operatori logici i relaionali
Conduc la un rezultat de tip valoare de adevr. Fiecare operator al unei astfel de
expresii este ncadrat de doi operanzi. Funcie de forma operanzilor expresiile pot fi:
178

^ simple (ambii constau dintr-o singur valoare, constant, variabil sau
funcie):
nota > 4 a < b abc = SIN(alfa)
^ simplu-compuse (unul din operanzi este o entitate singular, cellalt o
expresie simpl):
a < = (b + ce^2/3) (a NOT b) <> g abc = (ro MOD ro1)
^ multiplu-compuse (ambii operanzi sunt expresii simple):
(nota > 4) AND (nota < = 10) (a OR b) XOR (c AND d)
^ simplu-imbricate (cel puin un operand este o expresie multiplu-compus);
^ multiplu-imbricate (ambii operanzi sunt expresii multiplu-compuse).
Se pot crea uor exemple de expresii imbricate.
Exemplele de la subcapitolul anterior (cu iruri de caractere) sunt expresii simple i
respectiv multiplu-compuse.

Observaii
Caracterul = din exemple este operator relaional i nu semnific atribuire,
rezultatul operaiei fiind dup cum s-a artat, o valoare de adevr.
Expresiile logice sunt indispensabile n structurile alternative (de tip If-End_If) i
repetitive (cu numr necunoscut de pai, de tip While-Wend i Do-Loop cu clauzele While|
Until) unde apar drept condiii pentru executare (sau nu!) a unor secvene de instruciuni
indicate.
Traducerea n limbajul natural a unei astfel de condiii exprimate prin expresia n
cauz const n rspunsul la ntrebarea este adevrat (ndeplinit) condiia exprimat prin
expresie?. Evaluarea expresiei dup cum se tie const dintr-un rspuns de tip adevrat
sau fals. Qbasic le gestioneaz cu valorile 1 i respectiv 0 pe cnd n schemele logice
apar cuvintele-cheie DA i respectiv NU. Programul avanseaz pe una din ramificaiile
posibile funcie de sensul cuvintelor cheie (de regula impus de acestea) din comanda n care
a fost ncorporat condiia. Spre exemplu pentru structura If-End_If cu adevrat se
execut instruciunile care urmeaz liniei care conine evaluarea (de tip If), cu fals nu se
execut aceste instruciuni ci se sare la urmtoarea instruciune a structurii cu o nou
evaluare sau la instruciunea de final.
Dac este vorba de expresii care se constituie n operanzi pentru ali operatori
relaionali/logici, se observ c acestea se ncadreaz obligatoriu n paranteze rotunde. n
cazul expresiilor imbricate i multiplu-compuse trebuie utilizate cu atenie i discernmnt
perechi de paranteze rotunde simple sau imbricate. Nu sunt acceptate alte tipuri de paranteze.
Se reamintete c rezultatul oricrei expresii este o valoare de adevr: fals (false n
englez; Qbasic opereaz real cu valoarea de adevr numeric echivalent 0) sau adevrat
(true n englez; operare cu valoarea numeric echivalent 1).
Reinnd proprietatea definitorie comun (rezultatul este ntotdeauna o valoare de
adevr) pot fi distinse ntr-o sistematizare formal mai riguroas dou subcategorii:
^ expresii logice pure cu operatori logici i operanzi logici (valori de adevr);
^ expresii relaional-logice cu operatori relaionali i operanzi numerici; n
expresii imbricate pot fi utilizate doar ca operand de rang inferior, expresia n
sine fiind operand logic pentru o eventual expresie logic pur de rang mai
mare.
n exemplele de mai sus poate fi observat fr dificultate tipologia expresiilor.

S-ar putea să vă placă și