Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Variabile

fox pro



+ Font mai mare | - Font mai mic



Variabile

Prelucrarea datelor cu ajutorul calculatorului presupune mai intai depozitare acestora intr-o memorie externa sau interna a calculatorului. Pentru depozitarea in memoria interna a unei anumite date ( de tip numeric, logic, sir de caractere etc. ) se foloseste variabila de memorie, sau simplu variabila. Aceasta reprezinta o zona de memorie, careia I se atribuie un nume, si in care se poate memora o variabila de un anumit tip. Ca urmare o variabila are trei elemente specifice:



numele variabilei, atribuit de programator sau predefinit de proiectantii FoxPro -ului, folosit pentr identificarea variabilei respective printre celelalte variabile existente la un moment dat in memorie;

continutul sau valoarea variabilei, reprezentand data ce este memorata in zona de memorie a veriabilei. In timpul unui program continutul unei variabile se poate modifica;

tipul variabilei, reprezentand tipul datei ce se poate memora in zona de memorie a variabilei. Acest tip determina comenzile si functiile ce se pot aplica acestor variabile.

Exemplu:

Nume

Continut + tip

alfa

Referirea la o variabila se face prin numele sau, astfel:

? alfa

se traduce prin " afiseaza ( ? ) continutul variabilei alfa ( 432 ) ". variabila alfa este de tip numeric, intelegand prin aceasta ca ea poate memora un numar, o valoare de tip numeric.

Pentru folosirea unei variabile, ea trebuie mai intai creata, acesata presupuntnd:

atribuirea unui nume variabilei respective

stabilirea tipului variabilei si rezervarea zonei de memorie ce este atribuita variabilei;

atribuirea unei valori initiale pentru aceasta, adica stabilirea continutului initial al variabilei.

Tipurile posibile pentru variabile sunt: numeric, caracter, data calendaristica, logic.

O alta caracteristica a variabilelor FOX este statutul lor public sau privat. O variabila are statut privat (sau local) programului unde ea a fost creata, pierzandu-si valabilitatea dupa terminarea executiei programului. Daca a fost creata in modul de lucru comanda ea are statutul de variabila publica (globala) fiind recunoscuta in toate unitatile functionale (subprograme, functii utilizator) lansate din acest mod de lucru.

Tablourile pot avea doar 1-2 dimensiuni si - ceea ce este de subliniat - spre deosebire de limbajele de programare PASCAL, C, unde le-am mai intalnit, in dBASE (FoxPro) natura elementelor nu este omogena; in functie de valoarea retinuta la un moment dat, unele elemente pot fi numerice, altele caracter, etc.

Declararea variabilelor:

Variabilele simple nu necesita declarare, ci numai tablourile. Inainte de folosirea elementelor sale, tabloul trebuie declarat printr-o comanda:

DECLARARE <lista-tablou>

unde <lista-tablou> este o secventa de nume de tablouri separate de virgula:

<nume-tab>[<dim1>[, <dim2>]].

Declararea dimensiunii unui tablou inseamna si initializarea valorilor tabloului cu valoarea logica .F.

Observatie: In FoxPro, pentru tablouri se pot folosi atat parantezele patrate cat si cele rotunde

Operatia de atribuire:

In FoxPro, exista doua modalitati de a atribui valori initiale sau de a modifica valoarea unei variabile: prin comanda STORE si prin comanda de atribuire <var>=<exp>.

a)      Crearea unei variabile sau modificarea valorii acesteia se realizeaza prin operatorul de atribuire, cu urmatoarea sintaxa:

<variabila> = <exp>

Functionarea unei asemanea comenzi are loc astfel:

se evalueaza expresia <exp>, obtinandu-se o valoare de un anumit tip;

se cauta in memorie variabila cu numele <variabila> si, daca se gaseste, se inlocuieste vechiul continut al acesteia, cu valoarea expresiei;

daca nu se gaseste variabila respectiva, FoxPro creaza una noua cu numele <variabila>, in care depune valoarea expresiei;

tipul variabilei este dat de tipul valorii expresiei, indiferent de tipul anterior al variabilei, in cazul cand aceasta exista si inainte de executia comenzii.

Exemplu:

a = 2 && se creaza variabila numerica "a" cu valoarea initiala 2

a = "buna" && vechea variabila "a" este inlocuita cu una noua, de tip sir de caractere;

ce va contine sirul "buna"

data = && se creaza variabila "data", de tip calendaristic, cu valoarea initiala

b)      o comanda echivalenta cu operatorul de atribuire este comanda STORE:

STORE <expr> TO <lista-variabile>

Comanda consta in evaluarea expresiei <expr> si depunerea valorii rezultate in toate variabilele din <lista variabile>. Cele care nu exista vor fi create odata cu executia comenzii.

Exemplu:

STORE 0 TO a, b, c

NOTE se creaza trei variabile numerice a, b, c, care sunt initializate cu valoarea 0.

STORE TO data

NOTE se creaza variabila data, de tip data calendaristica si se initializeaza cu valoarea

Citirea unei variabile

Operatia de citire a unei variabile are intelesul de atribuire unei valori de la tastatura pentru variabila respectiva. Sunt trei astfel de comenzi prin care se pot da valori unei variabile.

Atentie! numai unei singure variabile i se poate citi valoarea intr-o comanda.

a)      Comanda de citire INPUT permite crearea/modificarea oricarui tip de variabila:

INPUT [<mesaj>] TO <var>

Comanda INPUT permite afisarea (eventuala) a unui mesaj <mesaj> pe ecran si asteapta introducerea de catre operator a unei expresii. Expresia se evalueaza si, daca este corecta, se creeaza variabila cu numele specificat in <var>.

Variabile primeste cu aceasta ocazie tipul expresiei introdusa de operator.

b)      comanda ACCEPT permite crearea sau modificarea variabilelor de tip caracter:

ACCEPT [<mesaj>] TO <var>

Observatie: Indiferent de tipul expresiei introdusa de la tastatura, comanda considera si evalueaza numai siruri.

c)      comanda WAIT permite crearea unei variabile de tip caracter si lungime 1:

WAIT [<mesaj>] [TO <var>]

Comanda permite o pauza in program pana cand operatorul apasa o tasta.

Caracterul corespunzator tastei este eventual atribuit variabilei <var> imediat ce a fost apasata tasta ne mai asteptandu-se certificarea introducerii prin tasta <enter>, ca la celelalte citiri. Si mesajul poate lipsi; in acest caz sistemul are un mesaj standard de tipul:

"Press and key to continue"

Stergerea variabilelor

Numarul de variabile pe care le poate gestiona sistemul este destul de mare ca sa nu ne preocupe eliberarea spatiului prin stergerea unor variabile. De asemenea, toate variabilele folosite intr-un program sunt sterse automat cand programul respectiv se termina.

Dar, uneori este necesar sa avem in memorie numai anumite variabile din cele manipulante in sesiune (pentru a le salva pe disc de exemplu).

Operatia de stergere a variabilelor are urmatorul format general:

RELEASE <lista-variabile>/ALL/ [LIKE /EXCEPT <maccheta> ]

Comanda RELEASE permite stergerea unor variabile nominalizate in <lista-variabile>. Daca este prezenta optiunea ALL, sunt sterse automat toate variabilele.

Clauza <masca> permite selectarea variabilelor care vor fi sterse (clauza LIKE) sau nu (clauza EXCEPT).

Exemplu:

RELEASE alfa, beta && se elimina din memorie variabilele alfa si beta

RELEASE ALL LIKE a*

Note se inlatura din memorie toate variabilele care incep cu litera a

RELEASE ALL EXCEPT b?

NOTE se vor elimina toate variabilele cu exceptia celor al caror nume este format din doua caractere, dintre care primul este b

Operatia de stergere a tuturor variabilelor poate fi realizata prin alte doua comenzi:

CLEAR MEMORY CLEAR ALL

Folosirea distincta a celor doua comenzi RELEASE, CLEAR ALL este legata de statutul de variabila publica sau privata a unei variabile.

Comanda RELEASE ALL sterge toate variabilele locale, dar nu actioneaza asupra celor publice.

Comanda CLEAR permite stergerea variabilelor publice, care in mod firesc se sterg numai la incheierea sesiunii de lucru.

Salvarea si restaurarea variabilelor

O alta problema importanta este salvarea variabilelor create intr-o sesiune de lucru ca variabile publice sau private, in vederea refolosirii lor ulterioare.

Trecerea pe disc a acestor variabile utile mai multor sesiuni intr-un fisier special cu extensia .MEM se face prin comanda SAVE:

SAVE TO <fis.mem> [ALL LIKE /EXCEPT <masca>]

Sunt trecute pe disc in fisierul <fis.mem> fie toate variabilele (este optiunea implicita) fie numai o parte a acestora (clauza ALL LIKE va indica cele ce se vor pastra, clauza ALL EXCEPT pe cele ce se vor ignora la salvare).

Exemplu:

CLEAR ALL

CLEAR

a = 1

b = 2

suma = a + b

? a , " + " , b , " ? " , suma

SAVE TO fvar

NOTE se salveaza variabilele a , b si suma in fisierul fvar.mem

a = 5

b = 3

suma = a + b

? a , " + " , b , " ? " , suma

RESTORE FROM fvar

? a , " + " , b , " ? " , suma

Restaurarea inseamna trecerea variabilelor din fisier in memoria de lucru si se face prin suprascriere prin comanda RESTORE:

RESTORE FROM <fis. mem> [ADDITIVE]

Clauza ADDITIVE este necesara atunci cand vrem sa se adauge variabilele salvate la cele existente.

O tehnica speciala de lucru cu variabile o reprezinta macrosubstitutia, prin care continutul unei variabile de tip sir de caracter este tratat ca numele altei variabile. Macrosubstitutia functioneaza ca si cum in locul variabilei respective ar fi pus sirul de caractere continut de aceasta, fara apostrofurile delimitatoare. Sintaxa este:

& < var > [ . < expC > ]

in care <var> desemneaza variabila de tip sir de caractere care va fi substituita de continutul sau.

Exemplu:

a = " alfa "

alfa = " Salut ! "

? & a

Salut !

? alfa && echivalenta cu comanda anterioara

Salut !

O alta metoda de referire indirecta la o variabila data este reprezentata de expresiile nume. Acestea determina tratarea valorii unei espresii ca un nume. Pentru ca o expresie sa fie tratata ca o expresie de tip nume, aceasta se incadreaza intre paranteze rotunde. Constructia este tratata ca o expresie de tip nume numai acolo unde nu exista posibilitatea confundarii parantezelor rotunde cu cele care grupeaza operatiile din expresii.

Exemplu:

a = " nume "

b = " propriu "

? ( a + b ) && nu va fi tratata ca o expresie numerica

nume propriu

....

REPLACE ( a ) WITH " Popescu"

NOTE in acest caz a este o expresie nume

Ori de cate ori este posibila folosirea expresiilor nume, se recomanda aceasta metoda deoarece macrosubstitutia este mai lenta.

Afisarea listei variabilelor existente se realizeaza prin urmatoarea comanda:

DISPLAY/LIST MEMORY [TO PRINTER/TO FILE <fis. txt>]

Comanda permite trecerea in revista a variabilelor utilizator cu statutul lor public sau privat, tipul si valoarea in momentul respectiv. Statutul public al unei variabile ii permite sa fie recunoscuta in mai multe programe; altfel ea are caracter privat, fiind locala programului care a definit variabila.

Clauza TO PRINTER permite afisarea listei la imprimanta, iar clauza TO FILE trecerea listei de variabile intr-un fisier text.

Masive

O variabila poate memora la un moment dat o singura valoare, de un anumit tip, tipul variabilei respective. Pentru memorarea simultana a mai multor valori se pot folosi mai multa variabile, carora li se atribuie pentru identificare nume distincte. Dar ce facem atunci cand numarul valorilor care trebuiesc memorate simultan este mare? O comanda care spre exemplu , ar incarca variabilele respective cu date dintr-un fisier, ar ocupa sute de linii din program, necesare pentru specificarea tuturor variabilelor care vor fi incarcate. Evident ca acest lucru este ineficient , acesta metoda fiind nerecomandata.

O alta metoda pentru memorarea mai multor valori in memoria interna a calculatorului este oferita de masive , structuri de date care permit memorarea mai multor valori intr-o zona de memorie continua careia i se atribuie un nume, valorile respective putand fi tratate ca un tot unitar (in comenzi siin funcaii speciale) , cat si independent, ca variabile simple.

Masivele sunt organizate sub forma unui tablou de valori, unidimensional sau bidimensional, deci sub forma de vector sau de matrice. Declararea unui masiv (vector sau matrice), presupune urmatoarele operatii:

-stabilirea tipului masivului, adica daca acesta este vector sau matrice;

-rezervarea zonei de memorie necesara depozitarii valorilor care vor fi memorate in masiv, in functie de numarul de elemente ale acestuia;

atribuirea unui nume, prin caremasivul va fi identificat.

Declararea unui masiv se realizeaza prin una din comenzile DIMENSION sau DECLARE, care sunt identice ca functionare si sintaxa:

DIMENSION <masiv1> (<expN1> [,<expN2>])

[, <masiv2> (<expN3> [,<expN4>]) ] .

DECLARE <masiv1> (<expN1> [,<expN2>])

[, <masiv2> (<expN3> [,<expN4>]) ] .

cu aceste comenzi se pot declara unul sau mai multe tablouri, ale caror nume vor fi <masiv1>, <masiv2>,.... Tipul tabloului, unidimensional (vector) sau bidimensional (matrice), va fi dat de numarul de expresii numerice care urmeaza numelui: unidimensional, cand este prezenta o singura expresie, si bidimensional, cand sunt prezente doua valori numerice intre parantezele rotunde.

Dimensiunea tabloului, adica numarul de elemente ale acestuia, este data de valorile expresiilor dintre paranteze <expN1> si <expN2> pentru primul tablou si <expN3> si <expN4> pentru cel de-al doilea si asa mai departe. Astfel tabloul unidimensional <masiv1> va avea <expN1> elemente numerotate de la 1 la <expN1> iar, daca acesta este bidimensional, numarul de elemente va fi <expN1>*<expN2>.

In cazul unui tablou bidimensional, deci o matrice, se adopta urmatoarea tehnologie, preluatade la lucrul cu matrice: prima expresie din paranteza va da numarul de linii ale matricei, numerotate de la 1 la <expN1> iar cea de a doua expresie numarul de coloane ale matricei, numerotate de la 1 la <expN2>.

Exemplu:

DIMENSION a(10)

NOTE defineste vectorul a cu 10 elemente,numerotate de la 1 la 10.

DIMENSION alfa(2,4)

NOTE va declara matricea alfa cu 2 linii si 4 coloane

DECLARE vector ( 3 ) , mat ( 5,10 )

NOTE se defineste vectorul vector cu 3 elemente si matricea mat cu 5 linii si 10 coloane.

In comenzile DIMENSION si DECLARE se pot inlocui parantezele rotunde cu cele patrate, fara a afecta comanda respectiva.

Elementele masivului sunt identificate prin pozitia acestora in cadrul tabloului, astfel:

printr-un singur numar, indicand pozitia elementuluiin cadrul vectorului;

prin doua numere,care vor desemna linia si coloana la care se afla elementul respectiv.

Exemplu: a ( 5 ) identifica al 5-lea element al vectorului a

Alfa ( 2,3 ) desemneaza elementul de pe linia 2 si coloana 3 a matricei alfa.

Elementele unei matrici pot fi, de asemenea, desemnate printr-o singura valoare numerica, care va indica pozitia in matrice a elementului respectiv, numararea acestora facandu-se in ordinea urmatoare: mai intai se numara elementul unei linii, dupa care se trece la urmatoarea.

Exemplu: elementul alfa ( 2,3 ) poate fi identificat si prin alfa ( 7 ):

alfa( 1 )

alfa( 2 )

alfa( 3 )

alfa( 4 )

alfa( 5 )

alfa( 6 )

alfa( 7 )

alfa( 8 )

alfa (2,3)

Dupa declararea unui masiv toate elementele acestuia vor fi de tip logic, avand initial valoarea .F. Atat tipul cat si valoarea unui element al masivului, pot fi schimbate printr-o instructiune de atribuire ( operatorul de atribuire "=" sau comanda STORE ).

Elementele unui masiv nu trebuie neaparat sa aiba acelesi tip ( spre deosebire de alte limbaje, Pascal, C).

O modalitate speciala de initializare a elementelor unui masiv este data de folosirea unei instructiuni de atribuire in care, in locul variabilei de atribuit, este introdus numele masivului. Astfet, toate elementele masivului vor capata valoarea expresiei din instructiune.

Exemplu: DIMENSION a (10)

STORE 0 TO a

NOTE toate elementele masivului vor fi de tip numeric, avand ;

initial valoarea 0.

? ' a (3) =', a (3)

a (3) = 0

a = ' '

NOTE tipul tuturor elementelor masivului a va fi sir de caractere;

si toate elementele acestuia vor avea valoarea ' '

Marimea si dimensiunile unui tablou creat anterior se pot schimba printr-o noua comanda DIMENSION sau DECLARE, prin redefinirea acestuia.

Se pot realiza astfel:

marirea sau micsorarea dimensiunii unui tablou unidimensional ;

transformarea unui tablou unidimensional intr-unul bidimensional si incers;

redimensionarea unui tablou bidimensional.

Pentru masive unidimensionale:

la marirea numarului de elemente ale acestuia, vechile elemente vor ramane neschimbate, iar noile elemente vor fi de tip logic, avand initial valoarea .F.;

la micsorarea dimensiunii masivului, elementele care sunt in plus vor fi eliminate din memorie, iar celelalte vor ramane neschimbate.

Transformarea unui masiv bidimensional intr-unul unidimensional se face copiind elementele vechiului masiv, linie cu linie, in cadrul fiecarei linii copierea facandu-se de la primul pana la ultimul element al acesteia. In aceasta situatie apar doua cazuri:

masivul bidimensional avea mai multe elemente decat noul masiv unidimensional: in acest caz restul elementelor care nu au incaput se pierd;

noul masiv creat, unidimensional, are mai multe elemente decat noul masiv bidimensional, caz in care restul elementelor masivului unidimensional pentru care nu au mai fost elemente de copiat din primul masiv, vor fi initializate cu valoarea logica .F.

Trecerea inversa se face in mod analog: completarea masivului bidimensional se face pe linii , incepand cu prima linie a masivului si terminand cu ultima. Si in acest caz elementele care nu incap in noul masiv bidimensional se pierd, iar elementele masivului bidimensional care nu au corespondent in masivul unidimensional vor fi de tip logic, cu valoarea initiala .F.

Redimensionarea unui masiv bidimensional se realizeaza prin alocarea memoriei necesare noului masiv bidimensional, dupa care urmeaza copierea elementelor vechiului masiv in cel nou, in ordinea numerotarii acestora.

Elementele vechiului masiv bidimensional care nu incap in cel nou se vor pierde, iar daca exista elemente ale noului masiv care nu au corespondent in vechiul masiv, acestea vor fi initializate la valoarea logica .F.

Exemplu:

DIMENSION a ( 2,3 )

FOR I = 1 TO 6

a ( I ) = 0

ENDFOR

FOR I = 1 TO 2

?

FOR J = 1 TO 3

?? a ( I,J )

ENDFOR

ENDFOR

?

DIMENSION a ( 3,4 )

FOR I = 1 TO 3

?

FOR J = 1 TO 4

?? a ( I,J )

ENDFOR

ENDFOR

Vom obtine pe ecran urmatoarele rezultate:

1 2 3

4 5 6

1 2 3 4

5 6 .F. .F.

.F. .F. .F. .F.

Vom prezenta in continuare functiile referitoare la prelucrarea masivelor.

Numarul elementelor unui masiv, numarul liniilor sau numarul colanelor acestuia, se obtine prin functia ALEN ( ), aceasta avand sintaxa:

ALEN ( < masiv> [ , < expN > ] )

< masiv > desemneaza masivul asupra caruia ne informam, iar <expN> este o expresie numerica ce determina informatia returnata, astfel;

cand valoarea acesteia este 0, functia returneaza numarul de elemente ale masivului;

la valoarea 1 a expresiei functia va returna numarul de linii ale masivului ( numarul de elemente pentru masive unidimensionale );

in cazul valorii 2 a lui < expN>, functia va returna numarul de coloane ale masivului ( 0 pentru masivele bidimensionale ).

Valoarea returnata este de tip numeric.

Exemplu:

DIMENSION alfa (3,5 )

? ' tabloul alfa are ' ,ALEN ( alfa ), 'elemente'

Tabloul alfa are 15 elemente

? 'Acest tablou are ' ,ALEN ( alfa, 1 ), ' linii si ' , ALEN ( alfa , 2 ) , ' coloane'

Acest tablou are 3 linii si 5 coloane

Absenta expresiei numerice <expN> este echivalenta cu valoarea 0 a acesteia.

Exemplu:

DIMENSION a ( 10 )

? ALEN ( a ) = ALEN ( a, 0 )

.T.

Inserarea unui element, a unei linii sau a unei coloane intr-un masiv se realizeaza cu functia AINS ( ), avand sintaxa:

AINS ( < masiv> [ , 2 ] )

Aceasta functie lucreaza diferit, in functie de numarul dimensiunilor masivului:

pentru masive unidimensionale funtia va insera un nou element in pozitia <expN> a masivului <masiv>;

pentru masive bidimensionale functia va insera o linie, a <expN>-a linie a masivului <masiv>, cand lipseste parametrul 2 din apelul functiei, sau va insera o coloana, a <expN>-a coloana, in cazul cand parametrul 2 este prezent.

Inserarea unui element, a unei linii sau a unei coloane intr-un masiv nu va determina modificarea dimensiunii acestuia ci pierderea elementelor care nu mai incap in masiv dupa ce inserarea are loc.

Exemplu:

DIMENSION a ( 5 )

FOR I = 1 TO 5

a ( I ) = I

ENDFOR

?

FOR I = 1 TO 5

? ? a ( I )

ENDFOR

AINS ( a , 3 )

FOR I = 1 TO 5

? ? a ( I )

ENDFOR

In exemplul anterior, inserarea elementului nou pe pozitia a 3-a a masivului unidimensional a va avea loc astfel:

a ( 1 ) a ( 2 ) a ( 3 ) a ( 4 ) a ( 5 )

1 2 3 4 5

1 2 .F. 3 4 5

elementul nou apare aici acest element se pierde

Functia opusa lui AINS ( ) este functia ADEL ( ), care sterge un elemen, o linie sau o coloana a unui masiv. ADEL ( ) are sintaxa:

ADEL ( < masiv >, <expN> [, 2 ] )

Functia stergand elementul <expN> al masivului, in cazul cand acesta este unidimensional, sau linia sau coloana <expN> a masivului, cand acesta este bidimensional. Parametrul 2, ca si la functia anterioara, face distinctia intre stergerea unei linii ( absenta acestui parametru) si stergerea unei coloane (prezenta parametrului ).

Dupa stergere, celelalte elemente ale masivului sunt translatate, in vederea umplerii golului format, iar pe ultima pozitie, ultimul element, ultima linie sau ultima coloana, eliberata prin translatare, se va introduce valoarea logica .F.

Exemplu:

DIMENSION a ( 5 )

FOR I = 1 TO 5

a ( I ) = I

ENDFOR

?

FOR I = 1 TO 5

? ? a ( I )

ENDFOR

ADEL ( 3 )

FOR I = 1 TO 5

? ? a ( I ) dispare acest element

ENDFOR

a ( 1 ) a ( 2 ) a ( 3 ) a ( 4 ) a ( 5 )

1 2 3 4 5

1 2 4 5 .F.

Referirea la elementele unui masiv bidimensional se poate face in doua moduri: prin doi indici reprezentand linia si coloana elementului respectiv in cadrul masivului, sau printr-un singur indice, acesta reprezentand pozitia elementului in masiv, numerotarea masivului facandu-se astfel: mai intai se numara elementele primei linii, dupa care se trece sa cea de-a doua linie si asa mai departe.

Pentru a afla pozitia unui element al unui masiv, cand se cunoaste linia si coloana pe care se afla acesta, vom folosi functia AELEMENT ( ), care are urmatoarea sintaxa:

AELEMENT ( <masiv> , <expN1> [ , <expN2> ] )

<masiv> desemneaza tabloul, masivul la care se refera functia, iar <expN1> si <expN2> reprezinta linia respectiv coloana elementului referit. Daca <exp2> lipseste, masivul este unidimensional, functia returnand valoarea <expN1>. Rezultatul functiei este de tip numeric.

Unele functii referitoare la masive manipuleaza elementele tablourilor bidimensionale printr-un singur indice, pentru aflarea acestuia folosindu-se functia prezentata anterior. Functia care realizeaza transformarea inversa , deci de la un singur indice la doi indici, este functia ASUBSCRIPT ( ) :

ASUBSCRIPT ( <masiv>, <expN1>, <expN2> )

<masiv> reprezinta tabloul la care se refera functia, iar <expN1> reprezinta pozitia elementului in tablou, <expN2> este o expresie numerica ce determina tipul informatiei returnate de functie:

linia elementului, cand <expN2> are valoarea 1;

coloana elementului, in cazul valorii 2 a lui <expN2>.

Exemplu: avand un masiv bidimensional definit cu :

DIMENSION a ( 4, 6 )

Urmatoarele referiri sunt echivalente:

a ( 2,3 ),

a ( 9 ),

a ( AELEMENT ( a, 2, 3 )),

a ( ASUBSCRIPT ( a, 9, 1 ), ASUBSCRIPT ( a, 9, 2 ))

Copierea elementelor unui masiv in elementele altui masiv se face cu ajutorul functiei ACOPY ( ):

ACOPY ( <masiv1>, <masiv2>, [, <expN1> [, <expN2> [, <expN3>]]])

Functia va determina copierea a <expN2> elemente ale masivului <masiv1> incepand de la al <expN1>-lea inclusiv, in elementele masivului<masiv2>, incepand de la pozitia <expN3>. Observam ca referirea la elementele masivului se face printr-un singur indice. Daca <expN1> lipseste, se presupune implicit valoarea 1 a acestei expresii.

Pentru a copia toate elementele masivului <masiv1>, incepand de la al <expN1>-lea si pana la sfarsit, in masivul <masiv2>, vom folosi valoarea -1 pentru expresia <expN2>.

Cand masivul <masiv2> nu exista, se creeaza unul nou, cu aceleasi dimensiuni in care se copiaza continutul masivului <masiv1>.

Cautarea unei expresii intr-un masiv se face prin functia ASCAN ( ) cu sintaxa:

ASCAN ( <masiv>, <expr>, [ expN2]])

in care <masiv> desemneaza tabloul in care se cauta expresia <expr>. Functia returneaza pozitia elementului in care s-a gasit aceasta expresie, in caz de reusita, sau valoarea 0, cand cautarea nu s-a incheiat cu succes.

Functia ASORT ( ) sorteaza elementele masivului <masiv> in ordine crescatoare sau descrescatoare. Toate elementele sortate trebuie sa fie de acelasi tip, pentru a se putea compara intre ele.

ASORT ( <masiv> [, ,expN1 [, <expN2> [, <expN3>]]] )

Pentru masivele unidimensionale se vor sorta elementele acestuia, iar pentru cele bidimensionale se vor sorta liniile masivului respectiv, in sensul ca, in functie de rezultatul compararii a doua elemente ale unor linii distincte , se vor schimba sau nu intre ele toate elementele acestor linii, fiecare element ramanand pe coloana pe care a fost si inainte.

Daca masivul este unidimensional <expN1> va determina elementul de unde se incepe sortarea ( se vor srta elementele de la al <expN1>-lea incolo). In cazul cand avem un masiv bidimensional, prima linie care va intra la sortare va fi cea pe care se afla elementul al <expN1>-lea al masivului. De asemenea, <expN1> determina si coloana de pe care se iau elementele de comparat, pentru a stabili ordinea liniilor.

Exemplu:

Daca avem masivul a (3,4 ), iar <expN1> este 7, avem situatia:

a ( 1,1 ) a ( 1,2 ) a ( 1,3 ) a ( 1,4 )

a ( 2,1 ) a ( 2,2 ) a ( 2,3 ) a ( 2,4 )

a ( 3,1 ) a ( 3,2 ) a ( 3,3 ) a ( 3,4 )

Elementul al 7-lea este a (2,3), deci se vor sorta liniile 2 si 3 ale masivului, compararea acestora facandu-se prin a (2,3 ) si a (3,3 ) (deci elementele de pe coloana a 3-a ).

-<expN2> specifica numarul elementelor sortate, in cazul unui masiv unidimensional, sau numarul liniilor de sortat, pentru un masiv bidimensional. Daca valoarea lui <expN2> este -1 sau daca aceasta espresie lipseste, se vor sorta elementele, liniile, pana la sfarsitul masivului ( ultimul element, respectiv ultime linie ).

-<expN3> determina ordinea sortarii:

-crescatoare, daca <expN3> lipseste sau daca acesta expresie are valoarea 0;

-descrescatoare pentru o valoare diferita de 0 a expresiei <expN3>.

Rezultatul functiei este de tip numeric.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 960
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved