Sunteți pe pagina 1din 21

MEDII DE PROGRAMARE IN IA Cursul 1 Fi siere si date n Guru

Nicolae T and areanu

Facultatea de Matematic a si Informatic a, Universitatea din Craiova, str.A.I.Cuza 13, 1100-Craiova, Romania e-mail: rcai@central.ucv.ro

Obiective

Obiectivele acestui capitol sunt urm atoarele: nt elegerea metodelor prin care se lanseaz a mediul Guru n execut ie nt elegerea corect a a urm atoarelor concepte de baz a pentru programarea n Guru: siere si tipuri de siere, tipuri de date, In vederea atingerii acestor obiective cursantul trebuie s a execute sub Guru toate exemplele prezentate si s a urm areasc a explicat iile aferente din text.

Generalit a ti. Moduri de lucru n Guru.

GURU este un mediu de programare produs de rma Micro Data Base Systems Inc. din SUA. O serie de caracteristici de lucru ale acestuia sunt denite de utilizator prin setarea variabilelor de mediu, iar anumite informat ii suplimentare cu privire la procesarea informa tiei se pot obt ine prin utilizarea variabilelor utilitare. La baza mediului de programare GURU se a a limbajul de programare de generat ia a patra KGL (Know-

3 ledgeMan Guru Language). In lucrarea de fat a vom prezenta versiunea 3.0 a acestui limbaj. GURU nseamn a KGL si un pachet integrat de programe care permite dezvoltarea de aplicat ii ale utilizatorului. KGL este un limbaj procedural, are foarte multe tr as aturi comune cu alte limbaje de programare si n consecint a este u sor de asimilat. GURU acoper a toate facilit a tile privind procesarea bazelor de date oferite de FoxPro, dBase etc. GURU poate importa si exporta date din/ n BASIC, LOTUS 1-2-3, dBase III si IV. GURU pune la dispozit ia programatorului mijloacele necesare proiect arii, implement arii si proces arii unei baze de date, permite stabilirea de diferite rapoarte cont in and informat iile unei baze de date, permite lucrul cu spreadsheeturi, permite vizualizarea grac a a rezultatelor obt inute n urma proces arii si desigur asigur a compatibilitatea componentelor sale. Astfel, informat iile unei baze de date pot trecute ntr-un spreadsheet si invers, se poate utiliza modulul de grac a pentru vizualizarea rezultatelor etc. In plus, prin utilizarea variabilelor utilitare se pot obt ine statistici privind informat iile dintr-o baz a de date, iar prin setarea variabilelor de mediu se poate utiliza aritmetica fuzzy. Mediul de programare GURU este recomandat imple-

4 ment arii sistemelor expert prin faptul c a accept a siere cu reguli pentru reprezentarea cuno stint elor, cu o larg a varietate de procesare a acestora. De asemenea, GURU are o component a pentru procesarea limbajului natural. Exist a dou a moduri de a lucra, n particular de a lansa GURU: modul interactiv, se obt ine atunci c and sub prompterul sistemului de operare se tasteaz a comanda guru -g prin interfat a meniului Commander, atunci c and sub prompterul sistemului de operare se tasteaz a comanda guru In modul interactiv, GURU a seaz a prompterul propriu Guru> dup a care a steapt a introducerea unei comenzi GURU. In acest caz GURU execut a ecare linie introdus a de la tastatur a, prin urmare el lucreaz a interactiv, a sa cum arat a si numele modului de lucru. Acest mod de lucru este recomandat pentru cei care nvat a particularit a tile

Figura 1: Meniul Commander mediului de programare GURU deoarece este foarte comod a vericarea comenzilor. Al doilea mod de lucru a seaz a un meniu, iar prin selectarea componentelor si a subcomponentelor acestuia utilizatorul are acces la toate componentele mediului de programare GURU (Figura 1).

Tipuri de siere n Guru.

In general, atunci c and pronunt am cuv antul sier ne g andim la o mult ime de date organizate dup a o anumit a structur a. Astfel, n lucr arile de programare se nt alne ste frecvent armat ia datele sunt citite dintr-un sier. Me-

6 diul Guru extinde aceast a situat ie astfel nc at un sier poate un program, un subprogram sau poate s a cont in a o secvent a de reprezentare de cuno stint e. O aplicat ie n GURU este o combinat ie de siere de anumite tipuri, inclusiv programe n Microsoft C. Un sier poate scris cu orice editor de texte, dar GURU este dotat cu editorul TEXT. Tipurile de siere Guru difer a prin structur a sintactic a si mod de apelare la execut ie. Exist a urm atoarele tipuri de siere: Fi siere IPF (interpreted procedure le). Fi siere KGL (sau UDF, user dened le). Fi siere RSS (rule set source). Tipul unui sier se precizeaz a prin extensia numelui de sier. Extensiile numelor de siere sunt urm atoarele: IPF pentru siere IPF. KGL pentru siere UDF. RSS pentru siere RSS. Un sier IPF cont ine una sau mai multe comenzi GURU, funct ii si expresii. Execut ia unui asemenea sier se face cu comanda

7 PERFORM nume f isier Cont inutul unui asemenea sier este tradus linie cu linie n limbajul ma sin a si executat. De aceea un asemenea sier este u sor de scris si de depanat, dar viteza de execut ie este mai mic a. In comparat ie cu acestea, sierele KGL sunt mai rapide deoarece nainte de a executate ele sunt compilate. Un asemenea sier poate s a cont in a una sau mai multe funct ii denite de utilizator, acestea av and o anumit a structur a sintactic a care dene ste numele funct iei, nceputul si sf ar situl ei, parametrii formali si modul de ntoarcere a rezultatului. Compilarea unui sier KGL se face prin tastarea comenzii: g3c nume f isier la prompterul sistemului de operare. Dac a compilatorul g3c detecteaz a erori de sintax a, atunci acestea sunt a sate. Utilizatorul trebuie s a corecteze aceste erori si s a recompileze programul. In cazul n care sierul nu cont ine erori, compilatorul creaz a un sier cu acela si nume cu numele sierului KGL, dar cu extensia KGB (KnowledgeMan Guru Binary), cont in and un header de informat ii cu privire la funct iile de-

8 nite de utilizator n sierul KGL. De asemenea se creaz a un sier cu acela si nume, dar cu extensia BLB, care cont ine codurile binare ale funct iilor denite rezultate din compilare. Cele dou a siere, unul cu extensia KGB si cel alalt cu extensia BLB sunt actualizate la ecare compilare. Pentru a executa una din funct iile sierului compilat, utilizatorul va trebui s a tasteze comanda: Guru> LOAD UDF nume sier Aceast a comand a ncarc a informat ia header din sierul nume f isier.KGB n tabela de simboluri GURU. Spunem n acest caz c a sierul respectiv este in use. Informat ia nc arcat a r am ne n memorie p an a c and utilizatorul precizeaz a operat ia de extragere prin una din comenzile: Guru> RELEASE UDF nume sier Guru> RELEASE UDF ALL Codul binar al funct iilor utilizator ale sierului nume f isier.KGL nu este introdus n memorie. Aceast a operat ie are loc atunci c and funct ia respectiv a este chemat a la execut ie,

9 iar chemarea la execut ie se realizeaz a n mod clasic prin utilizarea numelui funct iei si a parametrilor actuali corespunz atori. Pentru a vedea toate headerele nc arcate n memorie, se utilizeaz a comanda Guru> SHOW UDF ALL Pentru vizualizarea numelor de funct ii memorate de sierul nume f isier KGL se utilizeaz a comanda: Guru> SHOW UDF nume sier Fi sierele RSS au o structur a sintactic a proprie organizat a pe sect iuni. In principal aceste siere cont in reguli de reprezentare a cuno stint elor. Fi sierele RSS sunt utilizate la implementarea sistemelor expert, oferind o palet a variat a de reprezentare a cuno stint elor. Operat ia prin care se execut a un sier RSS este numit a consultare. Aceast a terminologie se explic a prin faptul c a n urma execut iei sierului, o anumit a variabil a numit a scop prime ste o valoare care se obt ine prin nl ant uirea regulilor din sier. Datorit a important ei acestor siere, materialul de fat a le trateaz a ntr-o sect iune separat a. In ncheierea acestui paragraf subliniem c a prin componenta CLINK a mediului GURU se realizeaz a leg atura cu limbajul C;

10 GURU permite utilizarea obiectelor binare mari (BLOB - Binary Large Object).

Tipuri de date

Prin date n GURU nt elegem constante sau variabile. O constant a este o m arime care r am ane neschimbat a n timpul execut iei programului. GURU recunoa ste sase tipuri de constante: string, integer, numeric, logical, error si unknown. O constant a de tip string este un sir de cel mult 254 de caractere nchise ntre semnele dublu apostrof. Concatenarea a dou a constante string se specic a prin semnul plus (+) care trebuie s a separe cele dou a constante. Pentru a utiliza semnul dublu apostrof n interiorul unei constante string, acesta trebuie precedat de backslash. In general semnul backslash nu este interpretat ca literal; un backslash urmat de un caracter non-digit va interpretat drept acel caracter. Rezult a c a dou a semne backslash consecutive sunt interpretate drept un singur backslash. Un grup format dintr-un backslash urmat de cel mult trei cifre este interpretat drept codul ASCII al caracterului care i corespunde acestuia.

11 Dac a num arul reprezentat de cele trei cifre dep a se ste 256 atunci se consider a num arul modulo 256. Exemple de constante de tip string: "Constanta \"string\" este corecta" "SUMA CERUTA " + "ESTE:" "****$24.56****"

O constant a de tip integer este un num ar f ar a punct zecimal, cuprins ntre -32768 si +32767 (pentru versiunile sub MSDOS si OS/2; pentru versiunea sub UNIX gama de reprezentare este alta). Exemple de constante de tip integer: -345 5432 32767

O constant a de tip numeric este orice num ar care cont ine punctul zecimal sau orice num ar care iese din gama de reprezentare a numerelor ntregi. O constant a de tip numeric poate avea oric ate cifre, dar numai 14 sau 15 sunt semnicative (gama de

12 reprezentare este de la 10308 la 10+308 ). Cea mai din st anga pozit ie poate utilizat a pentru semn (- sau +). Exemple de asemenea constante: 954.32 4356722156 +.7532 7.2E-1

Construct iile +++.654 si 8.6+54 sunt incorecte. Observ am faptul c a GURU accept a scrierea constantelor prin utilizarea caracterului E. Astfel, n exemplul de mai sus constanta numeric a 7.2E 1 este echivalent a cu constanta 0.72. Exist a dou a constante logice: TRUE si FALSE Exist a o singur a constant a de tip error: ERROR Exist a o singur a constant a de tip unknown: UNKNOWN Exercit iul pe care l propunem este de a utiliza funct ia TYPE(), care d a ca r aspuns tipul de dat a asociat argumentului. De exemplu:

13 Guru>?TYPE("22-11-1995") STR Guru>?TYPE(256) INT Guru>?TYPE(2345678912) NUM Guru>?TYPE(TRUE) LOGIC Guru>?TYPE("TRUE") STR Guru>?TYPE(23+4354323276) NUM

O variabil a este numele simbolic al unei zone de memorie care memoreaz a o valoare. Rezult a de aici c ao variabil a si poate modica valoarea pe care o memoreaz a pe parcursul execut iei programului. Variabilele pot clasicate dup a tipul valorii cont inute, dup a rolul pe care l joac a n timpul proces arii si dup a domeniul de cunoa stere. Dup a tipul valorii cont inute exist a urm atoarele tipuri de variabile: string, numeric, integer, logical, BLOB, unknown si error. In general o variabil a memoreaz a o constant a de tipul corespunz ator ei. O combinat ie a

14 unei constante ntregi cu una numeric d a o constant a de tip numeric. O variabil a BLOB are lungime variabil a si poate memora orice tip de dat a (text, imagini grace etc). Memorarea si reg asirea datelor BLOB se face cu ajutorul unor funct ii standard (built-in). O variabil a care nu are nici o valoare sau i se atribuie o valoare incorect construit a, are valoarea ERROR. De exemplu, dup a ce o variabil a a fost declarat a (LOCAL sau GLOBAL), dar nainte de a i se atribui o valoare, are valoarea ERROR. De asemenea, imediat dup a declararea dimensiunii unui tablou, valoarea standard a unui element al tabloului este ERROR. In cele ce urmeaz a prezent am un exemplu de dialog cu mediul GURU cu observat ia c a scrierea sintactic a de forma ?nume var are ca efect a sarea pe desktop a valorii variabilei nume var. Guru> x:=12+"ab"; ?x Numeric value expected ERROR Guru> dim y(3); Guru> ?y(2) ERROR Guru> ?t Undefined name: T

15 ERROR Guru> local s; Guru> ?s ERROR Guru>

Variabila de tip unknown joac a un rol deosebit de important n special la sierele RSS. Mediul de programare GURU este nzestrat cu un motor de inferent e care permite nl ant uirea regulilor unui sier RSS si obt inerea unor rat ionamente pe baza c arora se obt ine valoarea unei anumite variabile numit a scop. Valoarea acesteia este unknown at ata timp c at motorul de inferent e nu i-a determinat o valoare. De asemenea, dup a cum vom vedea n cele ce urmeaz a, GURU permite lucrul cu variabile care au valori fuzzy. Valorile fuzzy sunt numere reale asociate cu factori de certitudine. Valorile fuzzy se trec ntre acolade si sunt separate prin virgule: { 21 cf 10, 1.54 cf 50, -33 cf 78 }

Valoarea fuzzy {} este echivalent a cu unknown.

16 Dup a rolul pe care l joac a n timpul proces arii exist a dou a categorii de variabile: variabile denite de utilizator si variabile predenite. GURU permite denirea de tabele (cu comanda DEFINE) care cont in nregistr ari de date. O nregistrare din tabel cont ine unul sau mai multe c ampuri de tipuri diferite. Un c amp poate de tip ntreg, string, numeric, logic sau BLOB. Fiecare nregistrare din tabel are aceea si structur a. Fiecare c amp al unei nregistr ari desemneaz a o variabil a de tip eld sau c amp. Ori de c ate ori se schimb a valoarea acestei variabile eld, are loc o modicare a valorii pe care o cont ine c ampul respectiv. O variabil a eld este strongly typed, adic a dac a a fost denit a de un anumit tip atunci ea poate s a cont in a numai date de acel tip. Numele unei variabile eld este format sintactic din numele tabelului urmat de punct si apoi numele c ampului. Astfel, dac a un tabel cont ine nregistr ari cu privire la numele elevului si media general a a acestuia atunci o nregistrare cont ine dou a c ampuri : unul pentru nume si altul pentru medie. Dac a numele tabelului este elev atunci ne putem referi la cele dou a c ampuri prin variabilele de tip eld elev.nume si

17 elev.medie. Tabelele pot active sau inactive. Un tabel activ se mai nume ste in use (vom prezenta mai t arziu comanda USE). Dac a la un moment dat singurul tabel in use este tabelul elev atunci putem utiliza nume n loc de elev.nume, respectiv medie n loc de elev.medie. Variabila celul a (cell) apare n leg atur a cu un spreadsheet. Un spreadsheet este o matrice bidimensional a, compus a din linii si coloane. Liniile sunt identicate de numerele 1,2,....,255, iar coloanele sunt notate cu literele A,B,C,...,Z,AA,AB,AC,.... Locul unde o linie intersecteaz a o coloan a se nume ste celul a. Deoarece valoarea cont inut a de o celul a se poate modica, o asemenea celul a desemneaz a o variabil a, care se nume ste variabil a celul a. Variabila celul a aat a la intersect ia liniei 6 cu coloana D este desemnat a de numele simbolic #D6. Spre deosebire de variabilele eld, variabilele celul a nu sunt strongly typed. Aceasta nseamn a c a pe parcursul aceleia si proces ari, o variabil a celul a poate memora o dat a de tip string, apoi una de tip integer s.a.m.d. O variabil a celul a poate utilizat a ca orice alt a variabil a cu condit ia ca spreadsheetul s a e vizibil pe ecran. Variabilele celul a ale unui spreadsheet pot v azute ca elemente ale unui tablou bidimensional. Numele

18 tabloului este #, deci variabila celul a #B3 se va numi #(3,2). Avantajul lucrului cu tablou const a n faptul c a ntr-o procedur a, se pot folosi elemente de forma #(i,j), adic a cu indici variabile. Descrierea si tehnicile de procesare a spreadsheeturilor sunt prezentate ntr-un capitol separat. Variabila de lucru desemneaz a o zon a de memorie care memoreaz a un calcul intermediar sau nal, poate primi valori printr-o operat ie de intrare etc. Ca si n cazul variabilelor celul a, tipul variabilei de lucru este determinat de tipul valorii pe care o cont ine. Variabilele eld exist a de ndat a ce declar am un tabel in use. Variabilele celul a exist a de ndat a ce ncepem s a activ am un spreadsheet. O variabil a de lucru exist a de ndat a ce ea este declarat a sau de ndat a ce i se atribuie o valoare. De exemplu, dac a sec este numele unei variabile care nu a fost declarat a anterior, atunci ea este creat a n urma unei atribuiri de forma: sec:=34.263 In acest caz, variabila sec devine automat variabil a de lucru de tip numeric. In urma atribuirii: sec:= 44

19 variabila de lucru sec devine de tip integer. In urma atribuirii: sec:= UNKNOWN variabila sec devine de tip unknown. Variabilele predenite sunt de dou a categorii: variabile de mediu si variabile utilitare. Ele sunt variabile speciale, denite standard. Valorile acestor variabile controleaz a comportarea mediului GURU. Numele unei variabile de mediu ncepe cu litera E (de la environment), iar cele utilitare ncep cu caracterul #. Valorile standard ale acestor variabile se pot aa cu ajutorul comenzilor: SHOW ENVIRONMENT SHOW UTILITY

Subliniem c a valorile acestor variabile se pot modica n conformitate cu dorint ele utilizatorului GURU. In caz c a nu sunt modicate, ele cont in valori prestabilite (default). In funct ie de domeniul de cunoa stere a valorii unei variabile pot exista variabile de tip LOCAL, GLOBAL si STATIC. Variabilele si tablourile declarate LOCAL sunt cunoscute numai n funct ia n care sunt declarate. La terminarea execut iei, variabilele si tablourile

20 locale declarate n acea funct ie sunt scoase din memorie si din tabela de simboluri creat a. Variabilele si tablourile globale sunt introduse n tabela de simboluri globale si acele variabile pot referite si de alte proceduri. Variabilele de tip GLOBAL trebuie denite ntr-un UDF chiar dac a acea variabil a a fost declarat a GLOBAL n procedura p arinte. Ele nu sunt scoase din memorie dec at atunci c and aplicat ia se ncheie sau c and o procedur a utilizeaz a comanda RELEASE care se refer a la acele variabile. Variabilele utilitare referite ntr-un UDF trebuie declarate ca variabile GLOBAL. Variabilele de tip STATIC sunt caracteristice pentru UDF. Aceste variabile sunt asem an atoare celor de tip LOCAL deoarece ele pot referite numai n acele UDF n care sunt declarate STATIC. Valoarea acestor variabile r am ane n memorie atunci c and UDF -ul respectiv este chemat la execut ie. Ele au o utilizare interesant a n acele UDF-uri care sunt apelate recursiv ntr-o aplicat ie. Valorile variabilelor de tip STATIC r am an n memorie p an a c and se utilizeaz a comanda RELEASE UDF function

21 O sintez a a tipurilor de date este prezentat a n Tabelul 1. GURU permite lucrul cu variabile si cu tablouri unidimensionale sau bidimensionale. Declararea dimensiunii se face cu comanda DIM: DIM X(4),C(5,6) Asupra acestei comenzi vom reveni atunci c and vom prezenta comenzile GURU.