Você está na página 1de 73

Argument

Lucrarea de fa este rezultatul mai multor ani de munc, plecnd de la


clasele de Matematic-Informatic, acolo unde elevii au avut posibilitatea
susinerii examenului de Atestat la disciplina informatic.
Alegerea temelor, conceperea acestora, documentarea i implementarea n
limbajul de programare s-au fcut exclusiv n cadrul celor dou instituii amintite,
sub atenta ndrumare a profesorilor coordonatori i cu tot sprijinul acestora.
Ideea adunrii acestor lucrri mult imbuntite n comparaie cu forma lor
iniial i aportul considerabil al tuturor profesorilor coordonatori ai acestor elevi a
generat apariia acestei cri, un ndrumtor de mare ajutor (sperm noi) n sprijinul
elevilor care urmeaz s susin un examen de acest gen la disciplina informatic.
Aplicaiile care urmeaz a fi prezentate pot fi mult mbuntite din multe
puncte de vedere, dar avnd n vedere gradul moderat de dificultate al unui astfel
de examen, considerm c forma sub care acestea sunt discutate i analizate este
suficient pentru atingerea scopului propus.
De asemenea, lucrarea acoper o gam divers de teme, de la implementarea
unor algoritmi matematici, rezolvare de probleme de matematic, teste de cultur
general, pn la gestiunea dosarelor ntr-un tribunal, interaciunea fiind
interdisciplinar. Pentru ca ideile expuse s poat fi implementate cu uurin,
fiecare tem este nsoit de rezolvarea acesteia, explicit prin codul de aplicaie
FoxPro. n acest fel, putei urmri procedurile care rezolv un anumit punct din
fiecare tem propus.
V urm succes n parcurgerea acestui material didactic !

CUPRINS:
ARGUMENT
1. CE TREBUIE S CONIN O LUCRARE DE ATESTARE A
COMPETENELOR PROFESIONALE LA DISCIPLINA INFORMATIC?
2. O BAZ DE DATE DE PROBLEME DE MATEMATIC N FOXPRO
3. CAMPIONAT DE FOTBAL N FOXPRO
4. EVIDENA DOSARELOR NTR-UN TRIBUNAL
5. VREI S FII MILIARDAR?
6. OPERATII CU PERMUTRI N FOXPRO
7. CALCULUL MATRICELOR I DETERMINANILOR N FOXPRO
8. PROBLEME DE MATEMATIC REZOLVATE N STIL GRIL
9. PREZENTAREA LICEULUI TEORETIC ERBAN CIOCULESCU
BIBLIOGRAFIE

1. Ce trebuie s conin o lucrare de atestare a competenelor


profesionale la disciplina informatic?

Un proiect de atestare a competenelor profesionale la disciplina informatic se compune


din dou componente separate: partea de documentaie asociat proiectului (listingul) i aplicaia
efectiv.
Documentul proiectului este o descriere amnunit a aplicaiei (cine a realizat aplicaia,
cum a fost realizat, mediul de implementare, materiale folosite etc). Documentul proiectului va
conine o pagin n care va fi prezentat tipul proiectului, de exemplu PROIECT DE ATESTAT
LA INFORMATIC. De asemenea, este necesar sa apar sesiunea n care va fi prezentat,
descris prin lun i an. O alt pagin va conine titlul lucrrii, de exemplu O BAZ DE DATE
DE PROBLEME DE MATEMATIC N FOXPRO. Pe aceeai pagin sau pe o alt pagin se
vor scrie numele candidatului, clasa i profilul la care elevul este ncris. mpreun cu aceste date,
se va scrie i numele profesorului coordonator.
Urmeaz prezentarea cuprinsului lucrrii, de regul, format din Argument, Prezentarea
lucrrii, Codul surs (dac este foarte mare, se prezint esenialul), Bibliografie. Dac n cuprins
vor apare i alte date importante legate de proiectul descris, acestea pot deveni articole n
cuprins.
Cartea de fa se dorete a fi un ndrumtor pentru relizarea lucrrilor de atestat, aducnd
n prim plan cteva modele de atestate realizate i prezentate n anii trecui la Grupul colar
Domnul Tudor i Liceul Teoretic erban Cioculescu. Toate aceste proiecte au fost
implementate n FoxPro, viznd n primul rnd lucrul cu bazele de date (organizarea informaiei,
schema conceptual, memorarea informaiei concepte ce sunt prezente n toate mediile de
gestiune a bazelor de date), dar i puterea de realizare a interfeelor prietenoase fr prea mare
efort. Proiectele sunt doar cteva exemple, cteva repere de realizare a aplicaiilor n FoxPro, dar
acestea pot fi mult mbuntite n Visual FoxPro.

2. O BAZ DE DATE DE PROBLEME DE


MATEMATIC N FOXPRO
ARGUMENT
Sistelemele de Gestiune a Bazelor de Date (SGDB) reprezint sisteme informatice
specializate n stocarea i prelucrarea unui volum mare de date. Termenul de baz de date se
refer la ceea ce trebuie prelucrat, la modul de organizare a acestora pe suportul fizic de
memorare, iar termenul de gestiune se va referi la aciunea de memorare i prelucrare a acestor
date.
FoxPro este un SGDB al bazelor de date relaionale. Studierea limbajului FoxPro n acest
an colar, crearea i utilizarea frecvent a bazelor de date pe parcursului anului de studiu i
realizarea de interfee prietenoase la nivelul acestuia ntr-un timp relativ scurt, m-a determinat s
m opresc la aceast tem.
Separarea bazei de date de programul de aplicaie i vizualizarea acesteia prin program cu
posibilitatea de testare a nregistrrilor de tip MEMO este unul dintre punctele tratate n lucrare.
Ca la orice subiect ales, abordarea putea fi orict de detaliat, dar am decis c operaiile alese
sunt suficiente pentru a da contur lucrrii.
Ideea de verificare a unui soft deja creat, prin ncercri multiple aduse de verificatorii
soft-ului de aplicaie i depistare a erorilor de programare la nivel conceptual este un alt punct
forte al lucrrii.
Principalul joc al acestui program s-a redus la lucrul cu ferestre i alte obiecte de control
specifice limbajului.

PREZENTAREA LUCRRII
Aplicaia lucreaz pe o baz de date, permind doar vizualizri ale coninutului bazei de
date, nu i adugri. De asemenea, se pot realiza i testri ale informaiilor date de nregistrrile
bazei de date. Structura bazei de date nu poate fi modicat de programul executabil. Este o baz
de date pentru care se indic o copie de siguran, deoarece coruperea acesteia face ca programul
s nu poat fi aplicabil.
Ideea de baz este aceea a crerii unui caiet de laborator, n care elevul poate s rezolve o
problem de informatic i apoi s-i testeze rezolvarea, s verifice dac rezolvarea dat de
acesta este cea corect.
Controalele folosite la nivelul programului sunt ferestrele, i meniurile orizonatale i
verticale.
Programul ncepe cu prezentarea unei ferestre principale care afieaz dou opiuni de
meniu (de ieire aplicatie i de intrare n aplicaie).
Intrarea n aplicaie afieaz o a doua fereastr n care se permite alegerea unei probleme
dintr-un set de 10 probleme. Afiarea setului se realizeaz printr-un meniu vertical ( POPUP )
care are ca opiuni valorile cmpului nr_crt din baza de date.
Enunurile, precum i rezolvrile problemelor sunt nregistrate n baza de date
probleme.dbf ca date de tip MEMO. Structura bazei de date este relativ simpl:
probleme.dbf (nr_crt N, enunt M, rezolvare M)
Nr_crt exprim numrul unei proleme din baza de date. Acest cmp poate lua valori ntre
1 i 10.
Enun conine ca valori enunuri de probleme.
Rezolvare conine ca valori rezolvrile problemelor al cror enun a fost dat.

Deoarece un enun, respectiv o rezolvare presupune folosirea mult mai multor caractere
dect n cazul unei variabile de tip ir de caractere, am ales ca tipul acestor variabile s fie
MEMO. Datele de tip memo sunt fiiere de memorie separate de baza de date efectiv. Ele pot fi
accesate prin stabilirea de ctre calculator a unei adrese de memorie disponibil care s pointeze
spre adresa de memorare a unor date de acest tip. Introducerea informaiei ntr-un fiier de tip
MEMO se face cu dublu clic pe tipul MEMO din dreptul cmpului respectiv, n fereastra de
adugare sau modificare a nregistrrilor din baza de date.
Alegerea unei probleme determin afiarea unei ferestre standard, n care apar afiate
textul problemei, rezolvarea problemei i 3 opiuni de meniu orizontal (creare fiier, ruleaz
fiier i ieire din fereastra problemei).

Utilizatorul poate citi textul problemei, poate s ncerce rezolvarea acesteia, timp n care
programul l ateapt. Odat hotrt s-i verifice enunul, apas tasta TAB, care realizeaz
trecerea ctre codul surs care permite executarea respectivului enun. Enunul poate fi selectat
cu combinaia standard de taste SHIFT+sgeat jos i copiat cu combinaia de taste CTRL+C.
Ieirea din fereastra de cod afiat se face cu dezactivarea ferestrei de cod prin CTRL+W.

Opiunea Creare Fisier creaz un fiier n care utilizatorul i lipete codul copiat prin
CTRL+V. Salvarea fiierului se realizeaz cu CTRL+W.
Opiunea Execuie Fisier ruleaz fiierul creat, rezultatul acestuia fiind afiat ntr-o alt
fereastr.
Opiunea Inapoi determin nchiderea ferestrei asociate problemei i revenirea n
fereastra setului de probleme, oferind posibilitatea de alegere a unei alte probleme sau a ieirii n
fereastra de deschidere a aplicaiei.

Problemele din baza de date propuse spre rezolvare nu sunt de complexitate sporit. Ceea
ce este relevant este ideea de implementare a unui verificator de probleme i mai puin a
complexitii problemelor. Complexitatea acestora poate fi orict sporit prin noi adugri de
probleme n baza de date, mpreun cu rspunsurile asociate acestora. n acest fel, programul se
desprinde puternic de baza de date, orice modificare adus bazei de date nemodificnd
programul de aplicaie.
n continuare este prezentat codul surs i coninutul fiierelor MEMO.

CODUL SURS
clear
set escape off
set talk off
define window fer from 1,1 to 23,79 double
activate window fer
@ 0,0 say replicate(' ',77) color g+/b
@ 20,0 say replicate(' ',77) color g+/b
for i=1 to 15
@ 2,i-1 say ' '
@ 2,i say 'O baza de date de probleme FoxPro' color rgb(255,0,0,0,0,155)
wait ' ' timeout 0.00001
endfor
for i=1 to 25
@ 4,i-1 say ' '
@ 4,i say 'Candidat: ARMULESCU ADELINA' color rgb(0,255,0,0,0,155)
wait ' ' timeout 0.00001
endfor
for i=1 to 35
@ 6,i-1 say ' '
@ 6,i say 'Grupul Scolar "Domunl Tudor"' color rgb(255,0,0,0,0,155)
wait ' ' timeout 0.00001
endfor
for i=1 to 5
@ 15,i-1 say ' '
@ 15,i say 'Profesor indrumator: BUZATU CARMEN' color rgb(0,255,0,0,0,155)
wait ' ' timeout 0.00001
endfor
define menu meniu
define pad op1 of meniu prompt '\<Inainte' at 18,3
define pad op2 of meniu prompt 'I\<esire' at 18,64
on selection pad op1 of meniu do inainte
on selection pad op2 of meniu do exit
activate menu meniu
procedure exit
deactivate window fer
deactivate menu
return
procedure inainte
define window fer1 from 5,20 to 18,60 double
activate window fer1
do deschidere
return
procedure deschidere
define menu meniu1
define pad op1 of meniu1 prompt '\<Alege problema' at 2,3

define pad op2 of meniu1 prompt 'I\<napoi' at 10,27


on selection pad op1 of meniu1 do alege
on selection pad op2 of meniu1 do inapoi
activate menu meniu1
return
procedure inapoi
deactivate window fer1
deactivate menu
show menu meniu
return
procedure alege
use probleme
define popup pop prompt fields nr_prob from 2,19 to 4,22
on selection popup pop do sel
activate popup pop
return
procedure sel
for i=1 to reccount()
if prompt()=str(i,2)
set color to r+/b
define window w from 1,1 to 23,79 title 'Problema'+str(i,1) double color r+/b
activate window w
@ 1,3 say 'Enunt:' color w+/b
@ 1,15 edit enunt size 10,50 nomodify
read
@ 8,3 say 'Daca doriti, puteti testa problema! ' color w+/b
@ 9,3 say 'Trebuie doar sa selectati textul rezolvarii!' color w+/b
@ 11,3 say 'Rezolavre:'
@ 11,15 edit rezolvare size 6,50 nomodify
read
define menu proba
define pad op1 of proba prompt '\<Creare fisier' at 20,3
define pad op2 of proba prompt '\<Executie fisier' at 20,30
define pad op3 of proba prompt '\<Inapoi' at 20,60
on selection pad op1 of proba modify comm fis
on selection pad op2 of proba do fi1
on selection pad op3 of proba deactivate menu
activate menu proba
deactivate window w
set color to
endif
endfor
deactivate popup
return
procedure fi1
define window w1 from 1,30 to 15,78 double
activate window w1
fis=rezolvare
do fis
delete file fis.prg
wait ' '
deactivate window w1

return

CONINUTUL FIIERELOR MEMO

1. S se realizeze urmtorul desen:


*
***
*****
*******
*********
***********
Rezolvare:
for i=1 to 4
@ i,30-2*i say replicate('* ',2*i-1)
endfor
2. S se realizeze urmtorul desen:
*
**
***
****
*****
******
Rezolvare:
for i=1 to 6
@ i,30-2*i-1 say replicate('* ',i)
endfor

3. S se realizeze urmtorul desen:


1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
Rezolvare:
for i=1 to 6
for j=1 to i
@ i,3+3*j say str(i*(i-1)/2+j,2)
endfor
endfor
4. S se realizeze urmtorul desen:
0
02
036
0 4 8 12

0 5 10 15 20
Rezolvare:
for i=1 to 5
for j=1 to i
@ i,3+3*j say str(i*(j-1),2)
endfor
endfor
5. Sa se realizeze urmatorul desen:
* * *
* * *
* * *
* * *
* * *
* * *
Rezolvare:
for i=1 to 6
for j=1 to 6
if (i+j) % 2=0
@ i,2*j say '*'
else
@ i,2*j say ''
endif
endfor
endfor
6. S se realizeze urmtoarea afiare:

Rezolvare:
for i=1 to 6
for j=i to 2*i
@ i,2*j say ''
endfor
endfor
7. S se realizeze urmtorul desen:

Rezolvare:
for i=1 to 6
for j=1 to i-1
@ i,i+j say ' '
endfor
endfor
8. S se realizeze urmtorul desen:
1
3
5 6
7 8
9 10 11
11 12 13
13 14 15 16
Rezolvare:
for i=1 to 8
for j=1 to i/2
@ i,10+3*j say str(2*i+j-4,2)
endfor

endfor
9. S se realizeze urmtoarea afiare:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
Rezolvare:
for i=1 to 6
for j=1 to 6
@ i,10+3*j say str((i-1)*6+j,2)
endfor
endfor
10. S se realizeze urmtoarea afiare:
1+2+3+4+5+6+7
Rezolvare:
for i=1 to 6
@ 5,3*i say str(i,1)+'+'
endfor
@ 5,21 say '7''

3. CAMPIONAT DE FOTBAL N FOXPRO


PREZENTAREA LUCRRII
Subiectul ales Campionat de fotbal n FoxPro vine s prezinte Campionatul de Fotbal
al Romniei n Divizia A. n baza de date echipe.dbf sunt nregistrate cele 16 echipe din divizia
A. Acestea urmeaz s parcurg mai multe etape, ca n final s avem finalist. Echipele Diviziei
A joac optimile de final i pot ajunge n sferturi de final, semifinal sau final. n cazul n
care baza de date echipe.dbf nu este creat, programul permite crearea acesteia (atenie se vor
introduce exact 16 echipe).
Lucrarea ncepe cu o interfa n FoxPro cu dou opiuni de meniu: Intrare i Ieire.
Opiunea Intrare deschide pagina n care sunt prezentate etapele cupei. Opiunea Optimi
deschide o fereastr n care sunt afiate etapele: Tragerea la sori!; Meciul tur (Se joac acas la

prima echip); Meciul retur (Se joac acas la cea de-a doua echip); Clasament; Ieirea din
fereastr. Opiunea Ieire nchide optimile de final i trimite aplicaia ctre sferturile de final.
O fereastr de aplicaie prezint corespondenele echipelor. nainte de optimi, sferturi i
semifinale, stabilirea meciurilor se face prin tragerea la sori. n turul optimilor se joac 8
meciuri, iar rezultatul acestora are o importan major att n retur ct i n calificarea n faza
urmtoare a Cupei. n returul optimilor se desfaoar meciurile decisive pentru avansarea n faza
urmatoare a Cupei, rezultatele fiind finale. n optimi sunt prezente 16 echipe, din care, dup
terminarea meciurilor (tur, retur) vor rmane doar primele 8 echipe cu cel mai mare punctaj
stabilit. n aceast Cup, sunt prezente toate echipele din Divizia A din Romnia, echipe ce
reprezint nregistrrile tabelei bazei de date echipe.dbf.
Programul este realizat astfel nct s ncepem campionatul cu prima etap a diviziei A, i
anume, Optimile de Final. Nu putem intra n sferturi de final, n semifinal sau n final dac
nu am parcurs cronologic etapele. Fiecare dintre etapele diviziei A presupune jucarea mai multor
meciuri stabilite aleator. Pentru generarea aleatoare a meciurilor, am folosit funcia RAND( ). n
optimile de final intr toate cele 16 echipe. Generarea unui meci n optimi se realizeaz prin
alegerea aleatoare a dou echipe fiecare avnd asociat un numr aflat ntre 1 i 16, generat de
expresia (161)*rand ( )+1. Odat stabilite cele 8 relaii, meciurile se vor juca n tur i retur.
Meciul tur se joac acas la prima echip afiat ntr-o interfa. Meciul retur se joac acas la
cea de-a doua echip.

Clasamentul n optimi poate fi aflat dup jucarea meciurilor tur i retur de ctre fiecare
echip. Se observ c este activ doar opiunea Meciul Tur. Un gol n deplasare valoreaz dou
puncte.

n fereastra de mai sus s-au introdus rezultatele meciurilor din turul acestei etape, n urma
accesrii opiunii Meciul Tur. Dup jucarea meciului tur, se va juca meciul retur. Acest lucru este
permis de tabul Meciul Retur. Utilizatorul va introduce rezultatele meciurilor retur.

Regula de calcul a punctajului este urmatoarea: la fiecare gol marcat n deplasare se


acumuleaz 2 puncte, iar la fiecare gol marcat pe teren propriu se acumuleaz 1 punct de echipa
n cauz.

Dup optimi ncepe urmtoarea faz, sferturile de final. n sferturi vor merge primele 8
echipe cu cel mai mare punctaj, n ordinea n care acestea se afl n baza de date. Att n turul ct
i n returul sferturilor se joac cte 4 meciuri, fiind de asemenea foarte importante n avansarea
ctre urmtoarea faz a competiiei. n sferturi, are loc tragerea la sori a echipelor prin accesarea
opiunii de meniu Tragere la sori, care stabilete aleatoriu meciurile, prin asignarea unui numr
fiecrei echipe, numr cuprins ntre 1 i 8, folosind funcia RAND(). n urma stabilirii meciurilor,
se pot juca meciurile tur, respectiv retur, urmnd acumularea de puncte n baza de date. La
finalul meciurilor din sferturi, se poate vedea clasamentul n sferturi, apoi urmeaz semifinala.

Dup ce se joac toate meciurile din sferturi de final, vor mai rmne doar 4 echipe
calificate. Urmtoarea faz a Cupei prezentat de acest program este semifinala. Semifinala este

jucat de cele 4 echipe care s-au calificat dup meciurile din ptrimi (sferturi). Prin tragerea la
sori se decid meciurile din semifinal.

Aceast faz este vital pentru ajungerea n faza cea mai important a Cupei, Finala. De
asemenea, n semifinal, meciurile se joac tur i retur. Ctigtoarele meciurilor din semifinal
vor disputa cel mai important meci al competiiei, Finala. n final se joac doar un singur meci,
nemaijucndu-se meciurile tur i retur. Dup acest meci se va afla ctigtoarea Cupei. Meciurile
tur, retur si afiarea clasamentului nu sunt posibile dac nu s-a fcut tragerea la sori. Meciul
retur nu se poate juca dac nu s-a jucat meciul tur. Clasamentul nu poate fi afiat dac nu s-au
jucat meciurile. Toate aceste restricii sunt gestionate prin bare de meniuri orizontale i clauze ale
acestora.

Finala campionatului se joac ntr-un singur meci ntre ctigtoarele din semifinal. Se
introduce scorul pentru cele dou echipe i programul genereaz finalista.

Tabela baz de date ECHIPE are urmatoarea structur: ECHIPE (numeechipa C( 20 ),


scor N( 2 ), op N( 1 ))
Numeechipa este cmpul bazei de date care conine ca valori cele 16 presupuse echipe ale
Diviziei A: FC Arge, FC Naional, FC Farul Constana, Dinamo, Steaua, Craiova, FC Iai, Poli
Timioara, Oelul Galai, Gloria Bistria.
Op este un cmp de tip numeric care joac rol de variabil boolean.
Scor este cmpul bazei de date care reine punctajul pentru fiecare din cele 16 echipe din
baza de date echipe.dbf n urma disputrii fiecrui meci. Este foarte important de menionat c
valorile cmpului scor n baza de date la nceperea campionatului s fie 0, urmnd ca acestea s
fie actualizate pe parcursul disputrii meciurilor. De aceea, la ieirea din execuia programului,
coninutul cmpului scor este rescris pentru toate nregistrrile acestei tabele baz de date la
valoarea 0. Dac nu am rescrie coninutul cmpului scor, n tabela echipe.dbf vor rmne
scorurile calculate de execuia anterioar a programului, prin urmare, ar genera eroare.
De remarcat n codul surs c programul lucreaz pe mai multe tabele baz de date,
fiecare dintre acestea fiind generat plecnd de la tabela principal echipe.dbf. Aceste tabele sunt
create pentru a reine meciurile care se disput n fiecare dintre etapele campionatului (optimi,
sferturi, semifinal). Actualizrile privind scorul se realizeaz pe baza de date echipe.dbf, n
cmpul scor al acesteia.
Ca obiecte de interfa n FoxPro, s-au folosit ferestrele i meniurile orizontale. O serie
de variabile numerice, folosite ca variabile booleene (aa cum este cmpul op din baza de date),
bifeaz echipele alese n meciuri, nepermind alegerea acestora i n alte meciuri ale aceleiai
etape (sferturi, semifinal, final). Dac o echip a fost respins ntr-una din cele 4 etape, nu
poate merge ntr-o faz superioar a diviziei.
Programul folosete proceduri definite de programator care pot fi executate prin debifarea
opiunilor de meniu corespunztoare.
CODUL SURS
clear
set talk off
set safety off
for i=1 to 10
define window fer from (10-i),2*(10-i) to 13+i,79-2*(10-i) color g+/b double
activate window fer
@ 1,2 say 'Atestat 2007' color rgb(0,255,200,0,0,155)
@ 2,4 say 'Sesiunea MAI' color rgb(0,255,200,0,0,155)
@ 3,6 say 'Liceul Teoretic "Serban Cioculescu"' color rgb(0,255,200,0,0,155)
wait '' timeout 0.01
endfor
define window fer1 from 7,2 to 22,77 double color r+/b

activate window fer1


for i=1 to 5
@ 3,i-1 say ' '
@ 3,i say 'Candidat: PISTRITU CATALIN' color rgb(0,255,255,0,0,155)
wait '' timeout 0.01
endfor
for i=1 to 20
@ 6,i-1 say ' '
@ 6,i say 'Tema: Campionat de fotbal in FoxPro ' color rgb(100,0,255,0,0,250)
wait '' timeout 0.01
endfor
for i=1 to 35
@ 11,i-1 say ' '
@ 11,i say 'Profesor indrumator: CHIRFOT CARMEN ' color rgb(0,255,200,100,0,155)
wait '' timeout 0.01
endfor
wait '' timeout 0.10
deactivate window fer1
deactivate window fer
define window fer2 from 1,1 to 23,79 color r+/b title ' Campionat ' footer ' Fotbal ' double
o=0
s=0
sem=0
define menu meniu
define pad op1 of meniu prompt '\<Echipe' message 'Echipele care joaca in optimi.' at 2,4 skip for file('echipe.dbf')
define pad op2 of meniu prompt '\<Optimi' at 4,4 skip for o=1
define pad op3 of meniu prompt 'Sfer\<turi de finala' at 6,4 skip for (o=0) or (s=1)
define pad op4 of meniu prompt '\<Semifinala' at 8,4 skip for (s=0) or (o=0) or (sem=1)
define pad op5 of meniu prompt '\<Finala' at 10,4 skip for sem=0
define pad op6 of meniu prompt '\<Iesire' at 12,4
on selection pad op1 of meniu do creare
on selection pad op2 of meniu do optimi
on selection pad op3 of meniu do sferturi
on selection pad op4 of meniu do semifinala
on selection pad op5 of meniu do finala
on selection pad op6 of meniu do iesire
activate window fer2
activate menu meniu
clear
procedure iesire
deactivate window fer2
deactivate menu
use echipe
replace all scor with 0
close all
return
procedure creare
create table echipe (numeechipa C(20), op N(1), scor N(2))
return
procedure finala
define window final from 4,4 to 18,68 title 'Finala campionatului de fotbal' footer 'Vom avea invingator!' color r+/b
activate window final
use echipe
sort on numeechipa/d to scorsort
use scorsort
a=numeechipa
skip
b=numeechipa
@ 4,4 say 'Rezultatul intre '+alltrim(a)+' si '+alltrim(b)+' este:' color g+/b
x=0
y=0
@ 6,20 get x picture '9'
@ 6,40 get y picture '9'
read

use echipe
locate for numeechipa=a
replace scor with scor+x
locate for numeechipa=b
replace scor with scor+y
if x>=y
@ 9,20 say 'Finalista este '+alltrim(a)
else
@ 9,20 say 'Finalista este '+alltrim(b)
endif
wait ''
deactivate window final
return
procedure semifinala
clsa=0
set heading off
define window fer3 from 1,5 to 20,73 double
activate window fer3
use echipe
t=0
t2=0
t3=0
t4=0
define menu men
define pad op1 of men prompt '\<Tragere la sorti' message 'Stabilirea meciurilor din optimi' at 2,4 skip for t2=1
define pad op2 of men prompt '\<Meciul Tur' at 5,4 skip for (t=0 or t3=1)
define pad op3 of men prompt 'Meciul \<Retur' at 8,4 skip for (t3=0 or t4=1)
define pad op4 of men prompt '\<Clasamentul in semifinala' at 11,4 skip for clsa=0
define pad op5 of men prompt '\<Iesire din pagina' at 14,4
on selection pad op1 of men do sortisemi
on selection pad op2 of men do tursemi
on selection pad op3 of men do retursemi
on selection pad op4 of men do classemi
on selection pad op5 of men do iesiresem
activate menu men
return
procedure iesiresem
deactivate window fer3
sem=1
deactivate menu
return
procedure tursemi
define window fersfer from 1,1 to 23,79 title 'Se joaca acasa la prima echipa' footer 'Sefinala' color r+/b
activate window fersfer
select 1
use semiechi
i=0
nr=1
scan
@ 3*i+3,3 say alltrim(str(nr,2))+'. '+alltrim(echipa1) color g+/b
@ 3*i+3,40 say alltrim(echipa2) color g+/b
x=0
y=0
@ 3*i+3,25 get x color g+/b picture '9'
@ 3*i+3,55 get y color g+/b picture '9'
aux1=echipa1
select 2
use echipe
replace scor with scor+x for numeechipa=aux1
use
select 1
read
aux2=echipa2
select 2
use echipe

replace scor with scor+2*y for numeechipa=aux2


use
select 1
i=i+2
nr=nr+1
endscan
wait ''
t3=1
deactivate window fersfer
activate window fer3
return
procedure retursemi
define window fersfer from 1,1 to 23,79 title 'Se joaca acasa la a doua echipa' footer 'Semifinala' color r+/b
activate window fersfer
select 1
use semiechi
i=0
nr=1
scan
x=0
@ 3*i+3,3 say alltrim(str(nr,2))+'. '+alltrim(echipa1)
@ 3*i+3,40 say alltrim(echipa2)
y=0
@ 3*i+3,25 get x color g+/b picture '9'
@ 3*i+3,55 get y color g+/b picture '9'
read
aux1=echipa1
select 2
use echipe
replace scor with scor+2*x for numeechipa=aux1
use
select 1
aux2=echipa2
select 2
use echipe
replace scor with scor+y for numeechipa=aux2
use
select 1
i=i+2
nr=nr+1
endscan
wait ''
t4=1
deactivate window fersfer
activate window fer3
clsa=1
return
procedure classemi
define window feropt from 1,1 to 23,79 title 'Clasamentul in semifinala' footer 'Sefinala campionatului de fotbal'
color r+/b
activate window feropt
select 1
use echipe
sort on scor/d to scorsort
use scorsort
list fields numeechipa, scor
wait ''
clear
@ 3,3 say 'Echipele care merg in finala:' color r+/b
go top
display fields numeechipa
a=numeechipa
skip
display fields numeechipa
b=numeechipa
wait ''

deactivate window feropt


activate window fer3
return
procedure sortisemi
define window feropt from 1,1 to 23,79 title 'Semifinala' footer 'Tragere la sorti' color r+/b
activate window feropt
select 2
create table semiechi (echipa1 C(20), echipa2 C(20), tur C(3), retur C(3))
select 1
use semifinala
go top
@ 1,3 say 'Echipele care joaca in semifinala:' color r+/b
for i=1 to reccount()
@ 2*i+3,3 say alltrim(str(i,2))+'. '+alltrim(numeechipa) color g+/b
skip
endfor
wait ''
clear
@ 1,3 say 'Sa stabilim meciurile prin tragere la sorti!' color r+/b
use semifinala
ok=1
do while ok=1
a=int(3*rand()+1)
b=int(3*rand()+1)
go record a
n1=op
go record b
n2=op
if (a<>b) and (n1=0) and (n2=0)
ok=0
go record a
replace op with 1
a=numeechipa
go record b
replace op with 1
b=numeechipa
endif
enddo
@ 6,3 say 'Meciul 1 se joaca intre '+alltrim(a)+' si '+alltrim(b) color g+/b
select 2
use semiechi
append blank
replace echipa1 with a, echipa2 with b
use
select 1
use semifinala
locate for op=0
a=numeechipa
continue
b=numeechipa
@ 9,3 say 'Meciul 2 se joaca intre '+alltrim(a)+' si '+alltrim(b) color g+/b
select 2
use semiechi
append blank
replace echipa1 with a, echipa2 with b
use
t=1
select 1
use semifinala
replace all op with 0
t2=1
wait ''
deactivate window feropt
activate window fer3
return

procedure optimi
set heading off
define window fer3 from 1,5 to 20,73 double
activate window fer3
use echipe
t=0
t2=0
t3=0
t4=0
clsa=0
define menu men
define pad op1 of men prompt '\<Tragere la sorti' message 'Stabilirea meciurilor din optimi' at 2,4 skip for t2=1
define pad op2 of men prompt '\<Meciul Tur' at 5,4 skip for (t=0 or t3=1)
define pad op3 of men prompt 'Meciul \<Retur' at 8,4 skip for (t3=0 or t4=1)
define pad op4 of men prompt '\<Clasamentul in optimi' at 11,4 skip for clsa=0
define pad op5 of men prompt '\<Iesire din pagina' at 14,4
on selection pad op1 of men do sortiopt
on selection pad op2 of men do turopt
on selection pad op3 of men do returopt
on selection pad op4 of men do clasopt
on selection pad op5 of men do iesire1
activate menu men
return
procedure sferturi
clsa=0
set heading off
define window fer3 from 1,5 to 20,73 double
activate window fer3
use echipe
t=0
t2=0
t3=0
t4=0
define menu men
define pad op1 of men prompt '\<Tragere la sorti' message 'Stabilirea meciurilor din sferturi' at 2,4 skip for t2=1
define pad op2 of men prompt '\<Meciul Tur' at 5,4 skip for (t=0 or t3=1)
define pad op3 of men prompt 'Meciul \<Retur' at 8,4 skip for (t3=0 or t4=1)
define pad op4 of men prompt '\<Clasamentul in sferturi' at 11,4 skip for clsa=0
define pad op5 of men prompt '\<Iesire din pagina' at 14,4
on selection pad op1 of men do sortisfer
on selection pad op2 of men do tursfer
on selection pad op3 of men do retursfer
on selection pad op4 of men do classfer
on selection pad op5 of men do iesiresf
activate menu men
return
procedure iesiresf
deactivate window fer3
s=1
deactivate menu
return
procedure classfer
define window feropt from 1,1 to 23,79 title 'Clasamentul in sferturi' footer 'Sferturi de finala' color r+/b
activate window feropt
select 1
use echipe
sort on scor/d to scorsort
use scorsort
list fields numeechipa, scor
create table semifinala (numeechipa C(20), op N(1), scor N(2))
use sferturi
select 1
use scorsort

scan for recno()<=4


a=numeechipa
select 2
use semifinala
append blank
replace numeechipa with a
use
select 1
endscan
replace all op with 0
use
wait ''
clear
@ 3,3 say 'Echipele care merg in semifinala:' color r+/b
use semifinala
list fields numeechipa
wait ''
deactivate window feropt
activate window fer3
return
procedure retursfer
define window fersfer from 1,1 to 23,79 title 'Se joaca acasa la a doua echipa' footer 'Optimi de finala' color r+/b
activate window fersfer
select 1
use sferechi
i=0
nr=1
scan
@ 2*i+3,3 say alltrim(str(nr,2))+'. '+alltrim(echipa1) color g+/b
@ 2*i+3,40 say alltrim(echipa2) color g+/b
x=0
y=0
@ 2*i+3,25 get x color g+/b picture '9'
@ 2*i+3,55 get y color g+/b picture '9'
read
aux1=echipa1
select 2
use echipe
replace scor with scor+2*x for numeechipa=aux1
use
select 1
aux2=echipa2
select 2
use echipe
replace scor with scor+y for numeechipa=aux2
use
select 1
i=i+2
nr=nr+1
endscan
wait ''
t4=1
deactivate window fersfer
activate window fer3
clsa=1
return
procedure tursfer
define window fersfer from 1,1 to 23,79 title 'Se joaca acasa la prima echipa' footer 'Sferturi de finala' color r+/b
activate window fersfer
select 1
use sferechi
i=0
nr=1
scan
@ 2*i+3,3 say alltrim(str(nr,2))+'. '+alltrim(echipa1) color g+/b
@ 2*i+3,40 say alltrim(echipa2) color g+/b

x=0
y=0
@ 2*i+3,25 get x color g+/b picture '9'
@ 2*i+3,55 get y color g+/b picture '9'
read
aux1=echipa1
select 2
use echipe
replace scor with scor+x for numeechipa=aux1
use
select 1
aux2=echipa2
select 2
use echipe
replace scor with scor+2*y for numeechipa=aux2
use
select 1
i=i+2
nr=nr+1
endscan
wait ''
t3=1
deactivate window fersfer
activate window fer3
return
procedure sortisfer
define window feropt from 1,1 to 23,79 title 'Sferturi de finala' footer 'Tragere la sorti' color r+/b
activate window feropt
select 2
create table sferechi (echipa1 C(20), echipa2 C(20), tur C(3), retur C(3))
select 1
use sferturi
go top
@ 1,3 say 'Echipele care joaca in sferturi:' color r+/b
for i=1 to reccount()
@ i+3,3 say alltrim(str(i,2))+'. '+alltrim(numeechipa) color g+/b
skip
endfor
wait ''
clear
@ 1,3 say 'Sa stabilim meciurile prin tragere la sorti!' color r+/b
for i=1 to 3
use sferturi
ok=1
do while ok=1
a=int(7*rand()+1)
b=int(7*rand()+1)
go record a
n1=op
go record b
n2=op
if (a<>b) and (n1=0) and (n2=0)
ok=0
go record a
replace op with 1
a=numeechipa
go record b
replace op with 1
b=numeechipa
endif
enddo
@ 2*i+3,3 say 'Meciul '+alltrim(str(i,2))+' se joaca intre '+alltrim(a)+' si '+alltrim(b) color r+/b
select 2
use sferechi
append blank
replace echipa1 with a, echipa2 with b
use

select 1
endfor
use sferturi
locate for op=0
a=numeechipa
continue
b=numeechipa
@ 11,3 say 'Meciul 4 se joaca intre '+alltrim(a)+' si '+alltrim(b) color r+/b
select 2
use sferechi
append blank
replace echipa1 with a, echipa2 with b
use
t=1
select 1
use sferturi
replace all op with 0
t2=1
wait ''
deactivate window feropt
activate window fer3
return
procedure clasopt
define window feropt from 1,1 to 23,79 title 'Clasamentul in optimi' footer 'Optimi de finala' color r+/b
activate window feropt
select 1
use echipe
sort on scor/d to scorsort
use scorsort
list fields numeechipa, scor
create table sferturi (numeechipa C(20), op N(1))
use sferturi
select 1
use scorsort
scan for recno()<=8
a=numeechipa
select 2
use sferturi
append blank
replace numeechipa with a
use
select 1
endscan
replace all op with 0
use
wait ''
clear
@ 3,3 say 'Echipele care merg in sferturi:' color r+/b
use sferturi
list fields numeechipa
wait ''
deactivate window feropt
activate window fer3
return
procedure turopt
define window feropt from 1,1 to 23,79 title 'Se joaca acasa la prima echipa' footer 'Optimi de finala' color r+/b
activate window feropt
select 1
use optimi
i=0
nr=1
scan
@ i+3,3 say alltrim(str(nr,2))+'. '+alltrim(echipa1) color g+/b
@ i+3,40 say alltrim(echipa2) color g+/b
x=0
y=0

@ i+3,25 get x color g+/b picture '9'


@ i+3,55 get y color g+/b picture '9'
read
aux1=echipa1
select 2
use echipe
replace scor with scor+x for numeechipa=aux1
use
select 1
aux2=echipa2
select 2
use echipe
replace scor with scor+2*y for numeechipa=aux2
use
select 1
i=i+2
nr=nr+1
endscan
wait ''
t3=1
deactivate window feropt
activate window fer3
return
procedure returopt
define window feropt from 1,1 to 23,79 title 'Se joaca acasa la a doua echipa' footer 'Optimi de finala' color r+/b
activate window feropt
select 1
use optimi
i=0
nr=1
scan
@ i+3,3 say alltrim(str(nr,2))+'. '+alltrim(echipa1) color g+/b
@ i+3,40 say alltrim(echipa2) color g+/b
x=0
y=0
@ i+3,25 get x color g+/b picture '9'
@ i+3,55 get y color g+/b picture '9'
read
aux1=echipa1
select 2
use echipe
replace scor with scor+2*x for numeechipa=aux1
use
select 1
aux2=echipa2
select 2
use echipe
replace scor with scor+y for numeechipa=aux2
use
select 1
i=i+2
nr=nr+1
endscan
wait ''
t4=1
deactivate window feropt
activate window fer3
clsa=1
return
procedure iesire1
deactivate window fer3
o=1
deactivate menu
return
procedure sortiopt

define window feropt from 1,1 to 23,79 title 'Optimi de finala' footer 'Tragere la sorti' color r+/b
activate window feropt
select 2
create table optimi (echipa1 C(20), echipa2 C(20), tur C(3), retur C(3))
select 1
use echipe
replace all scor with 0
go top
@ 1,3 say 'Echipele care joaca in optimi:' color r+/b
for i=1 to reccount()
@ i+3,3 say alltrim(str(i,2))+'. '+alltrim(numeechipa) color g+/b
skip
endfor
wait ''
clear
@ 1,3 say 'Sa stabilim meciurile prin tragere la sorti!' color r+/b
for i=1 to 7
use echipe
ok=1
do while ok=1
a=int(15*rand()+1)
b=int(15*rand()+1)
go record a
n1=op
go record b
n2=op
if (a<>b) and (n1=0) and (n2=0)
ok=0
go record a
replace op with 1
a=numeechipa
go record b
replace op with 1
b=numeechipa
endif
enddo
@ i+3,3 say 'Meciul '+alltrim(str(i,2))+' se joaca intre '+alltrim(a)+' si '+alltrim(b) color r+/b
select 2
use optimi
append blank
replace echipa1 with a, echipa2 with b
use
select 1
endfor
use echipe
locate for op=0
a=numeechipa
continue
b=numeechipa
@ 11,3 say 'Meciul 8 se joaca intre '+alltrim(a)+' si '+alltrim(b) color r+/b
select 2
use optimi
append blank
replace echipa1 with a, echipa2 with b
use
t=1
select 1
use echipe
replace all op with 0
t2=1
wait ''
deactivate window feropt
activate window fer3
return

Observaie: mbuntii aplicaia, astfel nct aceasta s acorde dou puncte la fiecare victorie
obinut de o echip n deplasare i un punct la fiecare victorie pe teren propriu.

4. EVIDENA DOSARELOR NTR-UN TRIBUNAL


ARGUMENT
Prezenta lucrare i propune s descrie n mare lucrul cu bazelor de date. Deoarece
informaia este mult valorificat n lumea n care trim, circuitul acesteia fiind indispensabil
comunicrii i datorit volumului mare de informaie care exist, s-a considerat necesar
organizarea structurat a acesteia, astfel nct s fie uor de gsit ceea ce ne trebuie atunci cnd
avem nevoie.
n acest scop, bazele de date prelucrate automat sunt o form tipic de organizare a
informaiei, organizaii i firme din ntreaga lume folosindu-le. Pentru a decrie n mare acest
proces, prezenta lucrare vine s simuleze lucrul cu o baz de date, prezentnd operaiile care pot
fi efectuate.
Prelucrarea cu ajutorul calculatorului reduce timpul de cutare, fiind o caracteristic
important a bazelor de date. De asemenea, separarea structurii de populaia acesteia a
determinat operaii complexe asupra bazelor de date.
Limbajul gazd ales este FoxPro i aplicaia gestioneaz dosarele dintr-un tribunal,
permindu-ne s interferm cu tribunalul electronic.

PREZENTAREA LUCRRII
Tema aleas este prezentat n limbajul FoxPro, un sistem de gestiune al bazelor de date.
Acest SGDB este nc folosit astzi de multe societi sau firme, precum CFR, bnci, coli,
tribunale etc, chiar dac tendina de a fi nlocuit este foarte mare.
Baza de date folosit de problem este dosare.dbf cu urmtoarea structur:
dosare (nr_crt N(4,0), data_int D, optiune c(10), hotarare M, nr_hot N(4,0), termen D).
Cmpul nr_crt are ca valori numere de dosar, aflate n arhiva tribunalului. Cmpul
data_int conine datele de nregistrare a dosarelor n tribunal. Optiune este cmpul bazei de date
care presupune tipul de operaie care urmeaz s se relizeze asupra dosarului i are ca valori:
termen sau hotrre. Nr_hot este numrul hotrrii pentru un anumit dosar. Un dosar poate s
aib pn la 3 hotrri. Termen este cmpul bazei de date care conine ca valori date
calendaristice la care urmeaz s se dezbat dosarul.
Lucrarea i propune s simuleze operaiile care se pot face asupra dosarelor dintr-un
tribunal, reflectnd asupra nscrierii acestora, a listrii acestora i asupra finalizrii acestora.
n acest scop, sunt prezentate o mulime de ferestre descrise n program pentru diferite
operaii ale interfeei. Fereastra principal prezint aplicaia i conine dou opiuni de meniu:
intrare n aplicaie i ieire din aplicaie. Ieirea din aplicaie se poate realiza numai din aceast
fereastr. Butonul de intrare permite activarea unei ferestre n care se prezint principalele
operaii care se fac asupra dosarelor din aceast aplicaie: adugarea unui dosar, listarea tuturor
dosarelor i tergerea unui dosar.
Opiunea de adugare deschide o fereastr n care se citesc numrul unui dosar, data de
intrare, o list cu dou opiuni (termen i hotrre), n funcie de care se introduce un termen la
care s se dezbat dosarul sau o hotrre dat n urma dezbaterii dosarului. Un dosar nu poate fi
hotrt dac nu are termen de dezbatere. Cnd se nregistreaz dosarul, prima opiune care se
alege este un termen care se fixeaz pentru prezentarea dosarului. Se pot introduce oricte
termene prin activarea pad-ului TERMEN.

n urma alegerii unui termen, se afieaz lista termenelor stabilite pentru acel proces.

Dac la termenul ales se emite o hotrre, aceasta se introduce direct de ctre utilizator de
la tastatur.

Dac una din pri nu este mulumit de hotrrea emis, se poate face apel la hotrre.
Apelul este prezentat ntr-o alt fereastr, cu posibilitate de renunare. Dac nu se renun, se
face dezbaterea dosarului i se emite o hotrre tehnoredactat de utilizator.

n urma acestei hotrri, se poate face recurs. Se deschide o alt fereastr, n care o list
cu dou opiuni permite renunarea la recurs sau naintarea recursului. n urma recursului, se
emite o hotrre de recurs care este i hotrrea final. Fiecare hotrre are un numr, numr care
este alocat automat de ctre program.
Operaia de adugare a unui dosar sau a unui act n plus la acel dosar se ncheie cu
prezentarea celor 3 hotrri, atunci cnd toate acestea exist.

Operaia de listare prezint o list a dosarelor, fiecare dosar fiind prezentat cu termenele
i hotrrile pe care le conine la un moment dat. Fiecare dosar are asociate una sau mai multe
pagini de prezentare. Trecerea la urmtoarea pagin se face prin apsarea tastei ENTER.

Operaia de tergere realizeaz tergerea unui dosar din lista de dosare. Pentru
evidenierea acestui lucru, se poate da o nou listare. Programul nu permite editarea unei hotrri
vide, aa cum este normal, nu permite introducerea unui termen de dat calendaristic mai mic
dect data de intrare a dosarului, iar n cazul n care utilizatorul alege mai nti o hotrre i nu
termen, se afieaz un avertisment care i evideniaz greala i nu i permite accesul la operaii
asupra bazei de dosare, deoarece ncercarea era un eec.
CODUL SURS
set talk off
set safety off
clear
define window principal from 1,1 to 23,79 title 'La tribunalul automatic!' color r+/b
activate window principal
for i=1 to 20
@ 4,i-1 say ' '
@ 4,i say 'TEMA: EVIDENTA DOSARELOR LA TRIBUNAL' color rgb(0,255,0,0,0,155)

wait ' ' timeout 0.00001


endfor
for i=1 to 20
@ 11,i-1 say ' '
@ 11,i say 'Sustinator: UDREA COSTEL - CATALIN' color rgb(0,255,0,0,0,155)
wait ' ' timeout 0.00001
endfor
for i=1 to 10
@ 18,i-1 say ' '
@ 18,i say 'Sesiunea MAI 2005' color rgb(0,255,0,0,0,155)
wait ' ' timeout 0.00001
endfor
use dosare
h=0
scan for not empty(hotarare)
h=h+1
endscan
use
define menu p1
define pad op1 of p1 prompt 'Intrare' at 18, 45
define pad op2 of p1 prompt 'Iesire'at 18,65
on selection pad op1 of p1 do intrare
on selection pad op2 of p1 do ies
activate menu p1
procedure ies
deactivate window principal
deactivate menu p1
return
procedure intrare
define window w1 from 5,20 to 18,59
activate window w1
define menu meniu
define pad op1 of meniu prompt '\<Creare' skip for file('dosare.dbf') at 2,2
define pad op2 of meniu prompt '\<Adaugare' at 4,2
define pad op3 of meniu prompt '\<Listare' at 6,2
define pad op4 of meniu prompt '\<Stergere' at 8,2
define pad op5 of meniu prompt '\<Iesire' at 10,2
on selection pad op1 of meniu do creare
on selection pad op2 of meniu do adaugare
on selection pad op3 of meniu do listare
on selection pad op4 of meniu do stergere
on selection pad op5 of meniu do iesire
activate menu meniu
return
procedure iesire
deactivate window w1
deactivate menu
return
procedure creare
create table dosare (nr_crt N(4,0),data_int D, optiune c(10), hotarare M, nr_hot N(4,0),termen D)
return
procedure adaugare
define window adaug from 4,20 to 20,59
use dosare
append blank
nr_crt=0
activate window adaug
@ 2,2 say 'Numar inregistrare ' get nr_crt picture '9999' valid nr_crt>=1 error 'nr_crt>=1'
read
x=nr_crt
data_int={00/00/00}
@ 4,2 say 'Data inregistrarii ' get data_int valid data_int>={01/01/00} error 'Formatul datei este MDY'
read

y=data_int
t=y
optiune=0
@ 6,2 say 'Alegeti optiunea ' get optiune function '^T Termen;Hotarare'
read cycle
z=optiune
if optiune='Hotarare '
b=.F.
scan for nr_crt=x
if termen<>{ / / }
b=.T.
endif
endscan
if b=.T.
go bottom
h=h+1
replace nr_hot with h
@ 10,2 say 'Tehnoredactarea hotararii cu numarul '+str(h,2)
@ 11,2 edit hotarare size 4,15 valid not empty(hotarare) error 'Scrieti hotararea!' color r+/b
read
do alege
else
define window aver from 2,40 to 8,79 double color r+/b
activate window aver
@ 1,1 say' Nu se poate da o hotarare deoarece' color g+/b
@ 3,1 say ' dosarul nu are termen!' color g+/b
go bottom
delete
pack
wait ''
deactivate window aver
endif
else
do terme
endif
deactivate window adaug
use
return
procedure listare
use dosare
define window fer from 1,1 to 23,79 title 'Dosarele de la tribunal!'
activate window fer
for i=1 to reccount()
&&@ 2,4 say 'Numarul dosarului ' get nr picture '9999'
&&read
&&locate for nr_crt=nr
@ 4,4 say 'Dosarul '+str(nr_crt,3)+' contine:' color r+/b
if termen<>{ / / }
@ 6,4 say 'Numar dosar:'+str(nr_crt,4) color g+/b
@ 8,4 say 'Data inregistrare:'+dtoc(data_int)
@ 10,4 say 'Termene:'+dtoc(termen)
if nr_hot=0
@ 12,4 say 'Dosarul nu s-a dezbatut, deci nu avem hotarare!'
else
@ 12,4 say 'Numar hotarare:'+str(nr_hot)
endif
endif
skip 1
wait ''
clear
endfor
deactivate window fer
use
return
procedure alege
define window apel from 1,1 to 23,79 double footer 'Hotararea de apel'

activate window apel


da=0
@ 5,5 say 'Faceti apel in urma acestei hatarari? ' get da function '^ Da;Nu'
read
if da=2
@ 9,5 say 'Ati renuntat la apel!' color g+/b
@ 11,20 say 'Insemna ca sunteti multumit!' color g+/b
else
append blank
replace nr_crt with x, data_int with y, optiune with z
h=h+1
@ 9,5 say 'Hotararea '+str(h,3)+' data in urma apelului!'
replace nr_hot with h
@ 10,5 edit hotarare size 5,15 valid not empty(hotarare) error 'Scrieti hotararea!' color r+/b
read
define window recurs from 3,3 to 20,75 title 'Hotarare de recurs!'
activate window recurs
re=0
@ 2,7 say 'Faceti recurs la aceasta hotarare?' get re function '^T Da;Nu'
read cycle
if re=2
@ 5,7 say 'Ati renuntat la recurs!'
@ 11,20 say 'Inseamna ca ati inteles decizia si sunteti de acord!!'
else
append blank
replace nr_crt with x, data_int with y, optiune with z
h=h+1
@ 5,7 say 'Hotararea '+str(h,3)+' in urma acestui recurs:'
replace nr_hot with h
@ 6,7 edit hotarare size 5,15 valid not empty(hotarare) error 'Scrieti hotararea!' color r+/b
read
@ 12,7 say 'Dosarul pleaca pentru a se judeca la Cutea de Apel!'
&&@ 11,7 say 'Dati numarul hotararii!'
define window curte from 6,10 to 18,69 title 'La Curtea de Apel!'
activate window curte
append blank
replace nr_crt with x, data_int with y, optiune with z
@ 3,5 say 'Hotararea emisa de Curtea de Apel:'
&&h=h+1
&&replace nr_hot with h
@ 4,5 edit hotarare size 4,15 valid not empty(hotarare) error 'Scrieti hotararea!' color r+/b
read
define window tot from 1,1 to 23,79 title 'Hotararile din acest dosar!' color g+/b
activate window tot
locate for (nr_crt=x) and (nr_hot<>0)
@1,2 say 'Prima hotarare!'
@2,2 edit hotarare size 6,30 disable color g+/b
read
continue
@1,40 say 'A doua hotarare!'
@2,40 edit hotarare size 6,30 disable color g+/b
read
continue
@12,0 say replicate('*',77)
@14,2 say 'A treia hotarare!'
@15,2 edit hotarare size 6,30 disable color g+/b
read
continue
@14,40 say 'Hotararea finala!'
@15,40 edit hotarare size 6,30 disable color g+/b
read
wait ''
deactivate window tot
deactivate window curte
endif
deactivate window recurs
endif
deactivate window apel

return
procedure terme
append blank
replace nr_crt with x, data_int with y, optiune with z
@ 10,2 say 'Urmatorul termen ' get termen valid termen>=t
read
t=termen
define window fer from 5,20 to 19,59
activate window fer
sort on termen/A to bazasort for (nr_crt=x) and (termen<>{ / / })
use bazasort
if reccount()>=1
skip 1
endif
for i=1 to reccount()-1
?'Termenul '+str(i,2),' a fost ',termen
skip 1
wait ''
endfor
deactivate window fer
use dosare
return
procedure stergere
use dosare
define window ste from 5,20 to 18,59 title 'Stergere dosar!'
activate window ste
nr=0
@ 2,4 say 'Numarul dosarului ' get nr picture '9999'
read
scan for nr_crt=nr
delete
endscan
pack
@ 4,4 say 'Dosarul a fost sters!'
deactivate window ste
use
return
procedure listare1
define window fer from 1,1 to 23,79
activate window fer
nr=0
@ 2,4 say 'Numarul dosarului ' get nr picture '9999'
read
locate for nr_crt=nr
if (termen={ / / }) and (nr_hot=0)
@ 4,4 say 'Dosarul '+str(nr,4)+' nu exista!'
else
if termen<>{ / / }
@ 4,4 say 'Dosarul '+str(nr,4)+' contine doar termene'
else
@ 6,4 say 'Dosarul '+str(nr,4)+' contine termenele '
endif
endif
deactivate window fer
return

5. VREI S FII MILIARDAR ?


PREZENTAREA LUCRRII
Prezenta lucrare se dorete a fi un minitest de ntrebri de cultur general, pe care
utilizatorul le poate rezolva n stil gril, prin bifarea rspunsului corect. Tema aleas este
rezultatul dorinei de a realiza un test gril n prelucrare automat, astfel nct s nu mai fie
nevoie de foie, de pix i de grila de rspunsuri, ci doar de un sistem de calcul pentru aflarea
rspunsului corect.

Limbajul ales este FoxPro, un limbaj de gestiune al bazelor de date, dar tema se
desprinde de o astfel de gestiune, folosind din limbaj doar posibilitatea de a realiza uor o
interfa prietenoas ntre aplicaie i utilizator. Aceast interfa se realizeaz printr-o serie de
controale implementate n limbaj, pentru realizarea lucrrii fiind necesare doar cunoaterea
comenzilor care le realizeaz. Procednd analog, dar respectnd codul unui alt limbaj, aplicaia
poate fi implementat la fel de uor ntr-un alt mediu de programare sau modelare.
Lucrarea este accesibil, amprenta punndu-se la nivelul interfeei i a ideii de gril i
mai puin asupra ntrebrilor.

Folosind posibilitile aduse de limbaj, ntr-o interfa generat printr-un joc de ferestre,
am figurat o serie de ntrebri la care utilizatorul poate raspunde n stil gril, putnd opta pentru
una dintre cele trei variante de rspuns. Rspunsurile sunt definite la nivel de memorie prin
mecanismul GET READ cu opiunea pentru butoane radio. Acest lucru presupune c rspunsul
nu poate fi dect unic. Ieirea din aceast comand este permis doar alegnd una dintre opiuni.
Altfel, utilizatorul se gndete.
La nivel de program se contorizeaz rspunsurile i dac toate rspunsurile sunt corecte,
utilizatorul devine miliardar. Dac 2 rspunsuri au fost greite, concurentul primete, de
asemenea, o sum de bani, cte 1000000 lei pentru fiecare rspuns corect. n cea de-a treia
variant, concurentul se alege i el cu o sum de bani, dar rspunsurile sale nu au fost
satisfactoare.
La final de concurs, participantul poate afla o prere obiectiv despre modul su de
comportare n cadrul jocului.

Programul ofer posibilitatea ca testul s poat fi reluat. Pentru testarea corectitudinii


programului, este indicat ca rspunsurile n noua testare s fie puin diferite de cele din primul
test.
Variabila de memorie cu numele r reine ordinul butonului radio (1, 2 sau 3) ales n
momentul execuiei programului ca rspuns la o anumit ntrebare. Corectitudinea unui rspuns
este controlat, deci, de aceast variabil de memorie. Fiecare rspuns este automat interpretat ca
fiind corect sau nu, folosind o fereastr de afiaj.
CODUL SURS
clear
set talk off
define window w from 0,0 to 23,79 color r+/b panel title 'Atestat' footer 'Cipere Ionut'
define menu meniu
define pad op1 of meniu prompt 'Incepe concursul!' at 20,3
define pad op2 of meniu prompt 'Renunta la concurs!'at 20,54
on selection pad op1 of meniu do program
on selection pad op2 of meniu do iesire
activate window w
@ 0,0 say replicate('*',78)
@ 1,0 say replicate('*',78)
@ 2,2 say 'Tema: VREI SA FII MILIARDAR?' color g+/b
@ 4,2 say 'Candidat: CIPERE IONUT' color g+/b
@ 6,2 say 'Unitatea de Invatamant: GRUPUL SCOLAR "DOMNUL TUDOR"' font 'ROMAN',30 color g+/b
@ 8,2 say 'Profesor indrumator: BUZATU CARMEN' color g+/b
@ 10,0 say replicate('*',78)
@ 11,0 say replicate('*',78)
@ 12,0 say replicate('*',78)
@ 14,2 say 'Remarca: Daca raspunzi corect la toate intrebarile, castigi 1 MILIARD LEI!' color r+/b
@ 16,2 say '
(100 000 LEI GREI)' color r+/b
activate menu meniu
procedure iesire
deactivate window w
deactivate menu
return
procedure program
deactivate window w
set border to 5,5,5,5,5,5,5,5,1,1,240,240,240,240,240,240
define window w1 from 0,0 to 23,79 color r+/b
define window av from 6,45 to 12,75 color g+/b panel
activate window w1
s=0

@ 1,2 say '1.Ce a fost Blaise Pascal?'


r=0
@ 2,2 get r function '*RHT Fizician;Chimist;Biolog'
read cycle
if (r=3) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 4,2 say '2.Cine a descoperit America?'
r=0
@ 5,2 get r function '*RHT Columb;Bruno;Nefertiti'
read cycle
if (r=3) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 7,2 say '3.Ce a fost Emil Racovita?'
r=0
@ 8,2 get r function '*RHT Fizician;Biolog;Compozitor'
read cycle
if (r=1) or (r=3)
do avergr
else
s=s+1
do averbun
endif
@ 10,2 say '4.Care este cea mai vorbita limba?'
r=0
@ 11,2 get r function '*RHT Engleza;Chineza;Spaniola'
read cycle
if (r=2)
s=s+1
do averbun
else
do avergr
endif
@ 13,2 say '5.Cine a inventat barometrul?'
r=0
@ 14,2 get r function '*RHT Bernuli;Newton;Toriceli'
read cycle
if (r=1) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 16,2 say '6.Care este tara lalelelor?'
r=0
@ 17,2 get r function '*RHT Belgia;Franta;Olanda'
read cycle
if (r=1) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 19,2 say '7.De unde izvoraste Dunarea?'
r=0
@ 20,2 get r function '*RHT Muntii Padurea-Neagra;Alpii Francezi;Danemarca'

read cycle
if (r=2) or (r=3)
do avergr
else
s=s+1
do averbun
endif
clear
@ 1,2 say '8.Care este cea mai apropiata planeta de Soare?'
r=0
@ 2,2 get r function '*RHT Jupiter;Venus;Marte'
read cycle
if (r=1) or (r=3)
do avergr
else
s=s+1
do averbun
endif
@ 4,2 say '9.Care este cel mai intins stat al Africii?'
r=0
@ 5,2 get r function '*RHT Sudan;Algeria;Zair'
read cycle
if (r=3) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 7,2 say '10.Care dintre urmatoarele metale este lichid in stare pura?'
r=0
@ 8,2 get r function '*RHT Litiul;Mercurul;Toriul'
read cycle
if (r=1) or (r=3)
do avergr
else
s=s+1
do averbun
endif
@ 10,2 say '11.Care dintre urmatoarele plante nu face parte din familia cartofului?'
r=0
@ 11,2 get r function '*RHT Morcovul;Ardeiul gras;Rosia'
read cycle
if (r=1)
s=s+1
do averbun
else
do avergr
endif
@ 13,2 say '12.Cine a pictat "Carul cu boi"?'
r=0
@ 14,2 get r function '*RHT Grigorescu;Brancusi;Andreescu'
read cycle
if (r=3) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 16,2 say '13.Cine a fost primul care a ajuns pe Luna?'
r=0
@ 17,2 get r function '*RHT Michael Collins;Edwin Aldrin;Neil Armstrong'
read cycle

if (r=1) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 19,2 say '14.Care dintre functiile trigonometrice are valoarea 1/2?'
r=0
@ 20,2 get r function '*RHT cos 30;sin 30;tg 30'
read cycle
if (r=1) or (r=3)
do avergr
else
s=s+1
do averbun
endif
clear
@ 1,2 say '15.Cum este secretia gastrica?'
r=0
@ 2,2 get r function '*RHT Acida;Alcalina;Neutra'
read cycle
if (r=3) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 4,2 say '16.Care este microorganismul aflat la baza regnurilor animal si vegetal?'
r=0
@ 5,2 get r function '*RHT Taraxacum officinale;Amoeba Proteus;Euglena Verde'
read cycle
if (r=1) or (r=2)
do avergr
else
s=s+1
do averbun
endif
@ 7,2 say '17.Care dintre plante nu face parte din familia Liliaceelor?'
r=0
@ 8,2 get r function '*RHT Ceapa;Crinul;Liliacul'
read cycle
if (r=1) or (r=2)
do avergr
else
s=s+1
do averbun
endif
if s=17
for i=1 to 65
@ 11,i say ' '
@ 11,1+i say 'Ai castigat 1 MILIARD LEI!' color rgb(255,0,0,0,0,155)
wait '' timeout 0.01
endfor
else
if s>=16
for i=1 to 14
@ 11,i say ' '
@ 11,1+i say 'Ai castigat 500 000 000 lei!' color rgb(255,0,0,0,0,155)
wait '' timeout 0.01
endfor
else
for i=1 to 70
@ 11,i say ' '

@ 11,1+i say 'Ai castigat 1 000 000 lei pentru raspuns corect, adica '+str(s*1000000,8)+' LEI!' color
rgb(255,0,0,0,0,155)
wait '' timeout 0.01
endfor
endif
endif
@ 16,0 say replicate('',78)
wait window 'Ati totalizat '+str(s,2)+' puncte.'
com='Da'
@ 17,2 say 'Va intereseaza o parere obiectiva despre raspunsuri?' color g+/b
@ 19,2 get com function '*HT Da'
@ 19,63 get com function '*HT Nu'
read
if com='Da'
define window rezultat from 3,40 to 10,70 color g+/b panel
activate window rezultat
if s<=14
@ 2,2 say 'Mai trebuie sa cititi!'
else
if s<=16
@ 2,2 say 'Va descurcati!'
else
@ 2,2 say 'Sunteti de admirat!'
endif
endif
wait ' '
deactivate window rezultat
&&activate window w1
endif
deactivate window w1
activate window w
@ 0,0 say replicate('*',78)
@ 1,0 say replicate('*',78)
@ 2,2 say 'Tema: VREI SA FII MILIARDAR?' color g+/b
@ 4,2 say 'Candidat: CIPERE IONUT' color g+/b
@ 6,2 say 'Unitatea de Invatamant: GRUPUL SCOLAR "DOMNUL TUDOR"' font 'ROMAN',30 color g+/b
@ 8,2 say 'Profesor indrumator: BUZATU CARMEN' color g+/b
@ 10,0 say replicate('*',78)
@ 11,0 say replicate('*',78)
@ 12,0 say replicate('*',78)
return
procedure avergr
activate window av
@ 2,7 say 'Raspuns gresit!'
wait ' '
deactivate window av
return
procedure averbun
activate window av
clear
@ 1,8 say 'Raspuns Corect!'
@ 2,4 say 'Ati castigat un punct!'
wait ' '
deactivate window av
return

6. OPERAII CU PERMUTRI N FOXPRO


ARGUMENT
Se preconizeaz c profesorul, att de indispensabil n ziua de azi n predarea leciei, va fi
nlocuit n bun parte de calculator, dar nu definitiv. Aceast nlocuire va consta n sistematizarea
automat a leciei, asftel nct elevul s citeasc lecia, s rezolve chestionarele care urmeaz
prii teoretice, s-i consulte gradul de nelegere a leciei i s primeasc o not automat. Rolul

profesorului va fi secundar, el intervenind atunci cnd este necesar, cnd partea de teorie nu i
este accesibil elevului, cnd acesta nu se poate descurca.
ncercrile de astfel de programe care s simuleze prezentarea unei lecii sunt foarte
numeroase i vin n ajutorul unora deja existente, reiau idei deja existente sau sunt inedite
(diferite de toate cele deja existente).
Acest proiect simuleaz operaii cu permutri, chiar dac aspectul lucrrii poate fi mult
mbuntit. Se demonstreaz prin exemple nmulirea unor permutri i descompunerea n
transpoziii a unei permutri. Procedeul de calcul folosit este cel obinuit din matematic.

PREZENTAREA LUCRRII
Operaiile de generare a permutrilor, a combinrilor, a aranjamentelor sunt cunoscute n
informatic, n principal din tehnica Backtraking de calcul automat. De aceast dat, nu ne
intereseaz generarea acestora, ci compunerea a dou permutri i descompunerea unei
permutri n produs de transpoziii.
Pentru compunerea a dou permutri, avem nevoie de doi vectori. Valorile vectorului nu
reprezint altceva dect indicii acestuia ntr-o anumit ordine. Dac primul vector are elementele
a[1], a[2], a[3], a[4], , a[n], iar cel de-al doilea b[1], b[2], b[3], b[4], , b[n], atunci
permutarea rezultat din compunerea lui a i b este a[b[1]], a[b[2]], a[b[3]], , a[b[n]].

Aceast problem se rezolv la nivel de aplicaie printr-o procedur de compunere de


permutri, care citete cele dou permutri i afieaz ntr-un ciclu for valorile a[b[i]], i=1..n.
Atenie la ordinea de compunere, cci compunerea nu este comutativ! Procedura este apelat de
pad-ul unui meniu principal i face citirea celor dou permutri printr-o fereastr pentru fiecare
din cele dou permutri, iar permutarea rezultat o afieaz ntr-o a treia fereastr.

A doua problem const n descompunerea n transpoziii a unei permutri (a[1], a[2],


a[3], , a[n]). Procedeul este acela prin care nmulim repetat la stnga cu cte o transpoziie,
pn cnd dm peste o transpoziie. Apoi nmulim la stnga cu aceleai transpoziii gsite, n
ordinea invers n care acestea au aprut. Pentru a convinge utilizatorul, programul afieaz i
nmulirea la stnga i afiarea permutrii n produs de transpoziii. Alegerea permutrii se face
prin determinarea primei perechi (i, a[i]), i = 1..n astfel nct i<>a[i]. n acelai timp, se numr
perechile (i, a[i]) , i = 1..n, i <> a[i]. Dac numrul acestora este 2, atunci permutarea reprezint
o transpoziie, deci nu mai necesit descompunere. Dac nu se gsete nici o astfel de pereche (i,

a[i]) , i = 1..n, i <> a[i], atunci am descoperit permutarea identitate i nu o mai descompunem,
cci permutarea identitate reprezint un produs al oricarei transpoziii de ordinul n cu ea nsi.

Aplicaia ncepe cu deschiderea unei ferestre Atestat. Ferestrele w0, w1, w2 permit citirea
ordinului permutrilor care opereaz la compunere, citirea primei permutri, respectiv a celei dea doua. Meniul Meniu se activeaz n fereastra Atestat. Cele trei opiuni ale meniului meniu,
cunoscute la nivel de memorie ca op1, op2 i op3 determin prezentarea i rezolvarea celor dou
probleme i ieirea din aplicaie. Opiunea de ieire este obligatorie n orice meniu, cci un
meniu activat trebuie neaprat dezactivat. Altfel, meniul nu mai poate fi dezactivat.
CODUL SURS
clear
set talk off
define window atestat from 0,0 to 24,79 title 'Atestat' footer 'Barbu Adrian-------------------------Domnul Tudor'
double color g+/b
define window w0 from 1,1 to 10,19 panel title 'Citire' footer 'n' color g+/b
define window w1 from 1,21 to 10,54 panel title 'Citire' footer 'Prima permutare' color g+/b
define window w2 from 1,56 to 10,79 panel title 'Citire' footer 'A doua permutare' color g+/b
define window w4 from 12,1 to 22,79 panel title 'Permutarea produs' color g+/b
activate window atestat
define menu meniu
define pad op1 of meniu prompt 'Descompunere in produs de transpozitii' at 3,3 color g+/b
define pad op2 of meniu prompt 'Compunere de permutari' at 7,3 color g+/b
define pad op3 of meniu prompt 'Iesire'at 11,3 color g+/b
on selection pad op1 of meniu do proc1
on selection pad op2 of meniu do proc2
on selection pad op3 of meniu deactivate menu
dimension a(10),b(10),c(10),d(10)
&&ncarc vectorii declarai cu valoarea 0, &&cci n urma declarrii, acetia se &&ncarc cu valoarea .F.
store 0 to a

store 0 to b
store 0 to c
store 0 to d
activate menu meniu
deactivate window atestat
procedure proc1
activate window w0
@ 2,2 say 'n=' get n default 0 picture '9'valid (n>=1) and (n<=5) error '(n>=1) si (n<=5)'
read
define window w3 from 1,1 to 23,78 color g+/b double
activate window w1
&& Aici se citeste b
do citire_permutare with b
activate window w3
&& Se afiseaza permutarea pe care o descompunem
for i=1 to n-1
@ 4,2+71-4*i say str(n+1-i,1)+' '
endfor
@ 4,2+71-4*n say str(1,1)
for i=1 to n-1
@ 6,2+71-4*i say str(b[n+1-i],1)+' '
endfor
@ 6,2+71-4*n say str(b[1],1)
x=n+1
c=0
i=1
do while (i=b[i]) and (i<=n)
i=i+1
c=c+1
enddo
p=60
if i=n+1
@ 8,2 say 'Permutarea este permutarea identitate!'
else
if c<=n-3
@ 2,0 say 'Inmultim la stanga cu transpozitii pana cand obtinem permutarea identitate!'
@ 8,2 say 'Descompunerea in produs de transpozitii este urmatoarea!' color g+/b
y=0
do while c<=n-3
&& Aici se incarca transpozitia
for j=1 to n
a[j]=j
endfor
a[i]=b[i]
a[b[i]]=i
y=y+1
@ 10,2+5*y say '('+str(i,1)+' '+str(b[i],1)+')'
do afisare
do compunere with a,b
i=1
c=0
do while (i=b[i]) and (i<=n)
i=i+1
c=c+1
enddo
if c=n-2
wait ' '
y=y+1
@ 10,2+5*y say '('+str(i,1)+' '+str(b[i],1)+')'
do afisare
endif
wait ' '
enddo

for i=1 to n-1


@ 4,2+71-5*x-4*i say str(n+1-i,1)+' '
endfor
@ 4,2+71-5*x-4*n say str(1,1)
for i=1 to n-1
@ 6,2+71-5*x-4*i say str(b[n+1-i],1)+' '
endfor
@ 6,2+71-5*x-4*n say str(b[1],1)
else
@ 8,2 say 'Permutarea este o transpozitie!'
endif
endif
wait ' '
deactivate window w3,w1,w0
return
procedure citire_permutare
parameters d
for i=1 to n-1
@ 2,2+4*i say str(i,1)+' '
endfor
@ 2,2+4*n say str(n,1)
for i=1 to n
@ 4,2+4*i get d[i] picture '9' error 'a['+str(i,1)+'] este gresit!' valid diferit(d[i],i) color 3
read
endfor
return
function diferit
parameters a1,i
diferit=.T.
if (a1<=0) or (a1>=(n+1))
diferit=.F.
else
for j=1 to i-1
if (d[j]=a1)
diferit=.F.
endif
endfor
endif
return diferit
procedure proc2
clear
activate window w0
@ 2,2 say 'n=' get n default 0 picture '9' valid (n>=1) and (n<=4) error '(n>=1) si (n<=4)'
read
activate window w1
do citire_permutare with a
activate window w2
do citire_permutare with b
activate window w4
for i=1 to n-1
@ 2,2+4*i say str(i,1)+' '
endfor
@ 2,2+4*n say str(n,1)
for i=1 to n-1
@ 4,2+4*i say str(a[b[i]],1)+' '
endfor
@ 4,2+4*n say str(a[b[n]],1)
wait ' '
deactivate window w4,w2,w1,w0
return

procedure compunere
parameters a,b
for i=1 to n
b[i]=a[b[i]]
endfor
return
procedure afisare
@ 4,73-5*x say '('+str(i,1)+' '+str(b[i],1)+')'
x=x+1
return

7. CALCULUL MATRICELOR I
DETERMINANILOR N FOXPRO
ARGUMENT
Folosirea att de frecvent a stucturilor de tip vectori i prelucrarea automat a matricelor
mult ntlnit n orele de laborator, a fost unul dintre argumentele alegerii acestei teme.
Implementarea acestora n Pascal sau C/C++ este mult aplicat, prin urmare am preferat
implementarea acestora n limbajul FoxPro. Am ncercat s problematizez o astfel de tem i s
ncerc s rezolv unele aspecte legate de matrici. Ca la orice subiect ales, extinderea poate s fie
orict de mare, dar am decis cci operaiile alese sunt suficiente pentru a da contur lucrrii.
Principala caracteristic a acestui limbaj o reprezint bazele de date, dar permite ntr-un
mod elegant i implementarea acestor tipuri de structuri. Operaiile nu difer de cele folosite n
alte limbaje, dar difer interfaa. Consider c limbajul FoxPro permite realizri de interfee
prietenoase ntr-un timp nu prea ndelungat. Principalul joc al acestui program s-a redus la lucrul
cu ferestre i alte obiecte de control specifice limbajului, precum i jonglarea instruciunilor
specifice programrii structurate.

PREZENTAREA LUCRRII
Controalele folosite la nivelul programului sunt ferestrele, declanatoarele i meniurile
orizonatale.
Programul ncepe cu prezentarea unei ferestre principale care afieaz dou opiuni (de
ieire aplicaie i de intrare n aplicaie), opiuni exprimate prin dou declanatoare, definite prin
comanda GET, clauza FUNCTION *HT (H = pentru afiarea orizontal a acestora, T = pentru a
se iei din list atunci cnd se apas ENTER) i citite prin comanda READ. Inaintarea n
aplicaie afieaz o a doua fereastr i un meniu cu trei opiuni: operaii pe o singur matrice,
operaii cu dou matrice i ntoarcerea la fereastra principal. Operaiile au fost mprite n
aceste dou categorii pentru a deosebi cele dou categorii de operaii: dac avem o singur
matrice, nu putem face operaii pe dou matrici, iar dac avem dou matrici, nu putem face n
acelai timp operaii ca sum de elemente, produs de elemente pentru fiecare dintre acestea (nti
o operm pe prima i apoi pe a doua).

Operaiile pe o matrice sunt afiate ntr-o a treia fereastr i constau n: citire, calcul i
ntoarcerea la fereastra de separare a operaiilor. Se observ c la intrarea n aceast fereastr,
opiunea de calcul a meniului care declaneaz aceste rezolvri este inactiv. Ideea de inactivare
este c dac nu avem ncrcat o matrice (ordinul ei este 0), nu avem asupra cui s operm, i
mai mult, generm eroare, cci incercm s lucrm cu indicele 0 al uni tablou fr elemente.
n urma citirii matricei, se activeaz i acest pad. Operaiile pe care le propunem spre
rezolvare sunt: Maximul pe o linie, Suma, Produs, Transpusa, Determinant, Ieire.

Maximul pe o linie rezolv problema calculului maximului pe linia l, dat de utilizator. Linia
este citit doar dac aceasta reprezint o linie a unei matrici. Dac nu, utilizatorul este invitat s
aleag o alt linie.
Suma este un alt pad care declaneaz prin intermediul unei proceduri mai multe operaii:
suma pe diagonala principal, suma deasupra diagonalei principale, suma sub diagonala
principal. Pad-ul sum este inactiv dac matricea nu este ptratic, cci ntr-un astfel de caz nu
putem vorbi de diagonala principal. Procedurile care calculeaz sumele de pe diagonala
principal, de sub diagonala principal i deasupra diagonalei principale sunt rezolvate prin
cicluri for.

Opiunea Produs rezolv produsul elementelor de pe o linie valid a matricei. Opiunea


Transpusa afieaz transpusa unei matrici. Toate acete operaii au ferestre proprii de afiare a
operaiilor pe care le declaneaz. n acest set de operaii intr i calculul determinantului prin
metoda cu pivot a lui Gauss. Opiunea Determinant permite utilizatorului s calculeze un
determinant de un anumit ordin, folosind o metod de calcul numeric. Metoda const n
transformri elementare asupra liniilor i transform determinantul din forma iniial ntr-un
determinant triunghiular, cu elemente de 0 sub diagonala principal. n acest mod, valoarea
determinantului este dat de produsul elementelor de pe diagonala principal. Aceast metod
poart numele de Metoda lui Gauss. Transformrile asupra liniilor pot fi observate progresiv,
ntruct programul nu afieaz direct valoarea determinantului ci afieaz cte o transformare
liniar la un moment dat. n final, se afieaz valoarea final a acestuia.

Clasa operaiilor pe dou matrice deschide fereastra cu meniul format din trei paduri cu
urmtoarele prompt-uri: citire, calcul si ieire. De asemenea, calculul este inactiv, att timp ct
nu avem citire, iar citirea declaneaz operaiile de sum i produs ntre dou matrici. Dac
matricile nu sunt de aceeai clas (numrul de linii al primei matrice nu este egal cu numrul de
linii al celei de-a doua matrice sau numrul de coloane al primei matrice este diferit de numrul
de coloane al celei de-a doua matrice), atunci se afieaz mesajul corespunztor, i anume, c
matricile nu pot opera la sum. Dac numrul de coloane al primei matrici este diferit de
numrul de linii al celei de-a doua matrice, se afieaz mesajul c matricile nu pot opera la
produs. Dac nu intrm ns pe aceste cazuri, calculul sumei i produsului se pot realiza.
Gradul matricelor este ales cel mult 6, pentru a nu avea probleme la afirile SAY.

Opiunea Citire realizeaz ncrcarea elemenetelor celor dou matrici, folosind interfaa
de mai sus. Prin urmare, deoarece matricele au acelai ordin, opiunea Suma va furniza rezultatul
de mai jos.

CODUL SURS
set border to 157,157,157,157,3,3,3,3
set mouse off
set escape off
set talk off
close all
clear
DEFINE WIND fer2 FROM 1,1 TO 23,79 TITLE ' Calcul matricial in FOXPRO ' FOOTER ' Operatii matrice '
DIMENSION a(20,20),b(20,20),s(20,20),p(20,20)
n=0
m=0
store 0 to a
store 0 to b
store 0 to s
store 0 to p
p=0

r=0
lo=.F.
DEFINE MENU meniu
DEFINE PAD op1 OF meniu PROMPT '\<Citire' AT 3,3
DEFINE PAD op2 OF meniu PROMPT '\<Calcul' AT 5,3 skip for lo=.F.
DEFINE PAD op3 OF meniu PROMPT '\<Iesire' AT 7,3
ON SELECTION PAD op1 OF meniu DO citire
ON SELECTION PAD op2 OF meniu DO calcul
ON SELECTION PAD op3 OF meniu do ie
ACTIVATE WIND fer2
for i=1 to 5
@ 2,i-1 say ' '
@ 2,i say 'TEMA: Calcul matricial in FoxPro' color rgb(120,100,40,0,240,240)
wait ' ' timeout 0.00001
endfor
for i=1 to 15
@ 5,i-1 say ' '
@ 5,i say 'Grupul Scolar "Domnul Tudor"' color rgb(0,255,0,0,0,155)
wait ' ' timeout 0.001
endfor
for i=1 to 25
@ 11,i-1 say ' '
@ 11,i say 'Candidat: OPRENESCU ANA-MARIA' color rgb(255,255,0,0,0,155)
wait ' ' timeout 0.001
endfor
for i=1 to 25
@ 14,i-1 say ' '
@ 14,i say 'Profesor coordonator: ----------------------------' color rgb(0,255,0,0,0,155)
wait ' ' timeout 0.001
endfor
define menu principal
define pad op1 of principal prompt 'Continuare' at 18,5
define pad op2 of principal prompt 'Iesire' at 18,63
on selection pad op1 of principal do ape1
on selection pad op2 of principal do ape2
activate menu principal
procedure ape1
set border to 247,247,247,247,247,247
define window w from 5,20 to 18,59 double color g+/b
activate window w
define menu mei
define pad op1 of mei prompt '\<Operatii pe o matrice' at 3,3
define pad op2 of mei prompt 'O\<peratii cu doua matrice' at 6,10
define pad op3 of mei prompt '\<Iesire' at 9,3
on selection pad op1 of mei do una
on selection pad op2 of mei do doua
on selection pad op3 of mei do iesr
activate menu mei
return
procedure ape2
deactivate wind fer2
deactivate menu
return
procedure una
lo=.F.
set border to 248,248,248,248,248,248,248,248
define window fer from 3,30 to 21,70 title ' Operatii pe o matrice ' footer ' Matrice '
activate window fer
ACTIVATE MENU meniu
return
procedure ie
deactivate window fer

deactivate menu
return
procedure iesr
deactivate window w
deactivate menu
return
procedure doua
lo=.F.
define window fer1 from 3,30 to 21,70 title ' Operatii cu doua matrice '
define menu mei1
define pad op1 of mei1 prompt '\<Citire' at 3,3
define pad op2 of mei1 prompt 'C\<alcul' at 5,3 skip for lo=.F.
define pad op3 of mei1 prompt '\<Iesire'at 7,3
on selection pad op1 of mei1 do citire1
on selection pad op2 of mei1 do operatii
on selection pad op3 of mei1 do iesdoua
activate window fer1
activate menu mei1
return
procedure iesdoua
deactivate window fer1
deactivate menu
return
procedure citire1
DEFINE WIND fer3 FROM 3,10 to 21,70 TITLE ' CITIRE ' FOOTER ' MATRICE ' SHADOW
ACTIVATE WIND fer3
m=0
n=0
p=0
r=0
@ 1,4 SAY 'Numar de linii=' GET n PICTURE '99' valid (n>=1) and (n<=7) error '(n>=1) and (n<=7)'
@ 1,30 SAY 'Numar de coloane=' GET m PICTURE '99'valid (m>=1) and (m<=7) error '(m>=1) and (m<=7)'
@ 3,4 SAY 'Numar de linii=' GET p PICTURE '99' valid (p>=1) and (p<=7) error '(p>=1) and (p<=7)'
@ 3,30 SAY 'Numar de coloane=' GET r PICTURE '99' valid (r>=1) and (r<=7) error '(r>=1) and (r<=7)'
read
FOR i=1 TO n
for j=1 to m
a[i,j]=0
endfor
endfor
FOR i=1 TO n
for j=1 to m
@2*i+2,4*j get a[i,j] picture '99'
read
endfor
endfor
FOR i=1 TO p
for j=1 to r
@2*i+2,4*j+26 get b[i,j] picture '99'
read
endfor
endfor
wait ' '
deactivate window fer3
lo=.T.
return
procedure operatii
define wind fer4 from 3,10 to 20,70 title ' Calcul ' footer ' Matrice ' shadow
activate wind fer4
define menu meniu3
define pad op2 of meniu3 prompt '\<Suma' at 3,12
define pad op3 of meniu3 prompt '\<Produs' at 7,12

define pad op5 of meniu3 prompt '\<Iesire' at 11,12


on selection pad op2 of meniu3 do s1
on selection pad op3 of meniu3 do p1
on selection pad op5 of meniu3 do iesire4
activate menu meniu3
return
procedure iesire4
deactivate window fer4
deactivate menu
return
Procedure citire
DEFINE WIND fer3 FROM 3,10 to 21,70 TITLE ' CITIRE ' FOOTER ' MATRICE ' SHADOW
ACTIVATE WIND fer3
@ 1,8 SAY 'n=' GET n DEFAULT 0 PICTURE '99' valid (n>=1) and (n<=6) error '(n>=1) and (n<=6)'
@ 1,32 SAY 'm=' GET m DEFAULT 0 PICTURE '99'valid (m>=1) and (m<=6) error '(m>=1) and (m<=6)'
read
FOR i=1 TO n
for j=1 to m
@2*i+2,4*j+4 get a[i,j] picture '99'
read
endfor
endfor
lo=.T.
define menu meniu2
define pad op1 of meniu2 prompt'\<Iesire' at 14,40
on selection pad op1 of meniu2 do iesire
activate menu meniu2
return
procedure iesire
deactivate wind fer3
deactivate menu meniu2
return
procedure calcul
define wind fer4 from 3,10 to 20,70 title ' Calcul ' footer 'Matrice' shadow
activate wind fer4
define menu meniu3
define pad op1 of meniu3 prompt '\<Maximul pe o linie' at 3,12
define pad op2 of meniu3 prompt '\<Suma' at 5,12 skip for m<>n
define pad op3 of meniu3 prompt '\<Produs' at 7,12
define pad op4 of meniu3 prompt '\<Transpusa' at 9,12
define pad op5 of meniu3 prompt '\<Determinant' at 11,12
define pad op6 of meniu3 prompt '\<Iesire' at 13,12
on selection pad op1 of meniu3 do max
on selection pad op2 of meniu3 do suma
on selection pad op3 of meniu3 do p2
on selection pad op4 of meniu3 do transpusa
on selection pad op5 of meniu3 do determinant
on selection pad op6 of meniu3 do iesire4
activate menu meniu3
procedure iesire4
deactivate window fer4
deactivate menu
return
procedure max
define window fer5 from 3,10 to 22,70 title ' Elementul maxim de pe o linie ' footer ' Matrice ' shadow
activate wind fer5
max=0
FOR i=1 TO n
for j=1 to m
@2*i+2,3*j+4 say str(a[i,j],2)
endfor

endfor
@ 2*(n+1)+2,8 say 'Linia ' get l default 0 picture '99' valid (l>=1) and (l<=n) error '(l>=1) and (l<=n)'
read
max=a[l,1]
for j=2 to m
if max<a[l,j]
max=a[l,j]
endif
endfor
@ 2*(n+2),8 say 'Maximul pe linia '+str(l,1)+' este '+str(max,3)
wait ''
deactivate window fer5
return
procedure suma
define wind fer6 from 3,10 to 20,70 title ' Suma ' footer ' Matrice ' shadow
activate wind fer6
define menu meniu6
define pad op2 of meniu6 prompt 'S\<uma elem de pe diag principala' at 4,12
define pad op3 of meniu6 prompt 'Su\<ma elem deasupra diag principale' at 6,12
define pad op4 of meniu6 prompt 'Sum\<a elem de sub diag principala' at 8,12
define pad op5 of meniu6 prompt '\<Iesire'at 10,12
on selection pad op2 of meniu6 do s2
on selection pad op3 of meniu6 do s3
on selection pad op4 of meniu6 do s4
on selection pad op5 of meniu6 do iesire6
activate menu meniu6
return
procedure iesire6
deactivate window fer6
deactivate menu
return
procedure s1
DEFINE WIND fer3 FROM 3,10 to 21,70 TITLE ' SUMA ' FOOTER ' MATRICE ' SHADOW
ACTIVATE WIND fer3
if (n=p) and (m=r)
for i=1 to n
for j=1 to m
s[i,j]=a[i,j]+b[i,j]
endfor
endfor
FOR i=1 TO n
for j=1 to m
@2*i+2,5*j+30 say str(a[i,j]+b[i,j],4)
endfor
endfor
wait ''
else
@ 2*(n+1),4 say 'Cele doua matrice nu opereaza la suma!'
wait ''
endif
deactivate window fer3
return
procedure s2
define wind fer7 from 3,10 to 21,70 title ' Suma pe diag principala ' footer ' Matrice ' shadow
activate wind fer7
FOR i=1 TO n
for j=1 to m
@2*i+2,3*j+4 say str(a[i,j],2)
endfor
endfor
s=0
for i=1 to n
s=s+a[i,i]
endfor

@ 2*(n+2),4 say 'Suma elementelor de pe diagonala principala este ' +str(s,3)


wait ' '
deactivate window fer7
return
procedure s3
define wind fer8 from 3,10 to 21,70 title ' Suma deasupra diag principala ' footer ' Matrice ' shadow
activate wind fer8
FOR i=1 TO n
for j=1 to m
@2*i+2,3*j+4 say str(a[i,j],2)
endfor
endfor
s=0
for i=1 to n
for j=i+1 to m
s=s+a[i,j]
endfor
endfor
@ 2*(n+2),4 say 'Suma elementelor deasupra diagonalei principala este ' +str(s,3)
wait ' '
deactivate window fer8
return
procedure sum1
dimension a(10,10)
s=0
for i= 1 to n
for j=1 to i-1
s=s+a[i,j]
endfor
endfor
return
procedure s4
define wind fer8 from 3,10 to 21,70 title ' Suma sub diagonala principala ' footer ' Matrice ' shadow
activate wind fer8
FOR i=1 TO n
for j=1 to m
@2*i+2,3*j+4 say str(a[i,j],2)
endfor
endfor
s=0
for i=1 to n
for j=1 to i-1
s=s+a[i,j]
endfor
endfor
@ 2*(n+2),6 say 'Suma elementelor de sub diagonala principala este ' +str(s,3)
wait ' '
deactivate window fer8
return
procedure sum2
dimension a(10,10)
s=0
for i=1 to n
for j=1 to n
if i>j
s=s+a[i,j]
endif
endfor
endfor
return
procedure produs
define wind fer9 from 3,10 to 20,70 title ' Produs ' footer ' Matrice 'shadow
activate wind fer9

define menu meniu7


define pad op2 of meniu7 prompt 'Produsul elementelor de pe o linie' at 9,12
define pad op3 of meniu7 prompt 'Iesire' at 11,12
on selection pad op2 of meniu7 do p2
on selection pad op3 of meniu7 do iesire7
activate menu meniu7
return
procedure iesire7
deactivate window fer9
deactivate menu
return
procedure p1
define wind fer10 from 3,10 to 20,70 title ' Produs intre 2 matrici ' footer ' Matrice ' shadow
activate wind fer10
dimension pp(10,10)
if m=p
for i=1 to n
for j=1 to r
pp[i,j]=0
for k=1 to m
pp[i,j]=pp[i,j]+a[i,k]*b[k,j]
endfor
endfor
endfor
for i=1 to n
for j=1 to r
@ 2*i,6*j say str(pp[i,j],5)
endfor
endfor
else
@2*n,4 say 'Cele doua matrici nu opereaza la inmultire!'
endif
wait ' '
deactivate window fer10
return
procedure p2
define wind fer11 from 3,10 to 20,70 title ' Produsul elementelor de pe o linie ' footer 'Matrice' shadow
activate wind fer11
l=0
for i=1 to n
for j=1 to m
@ 2*i,4*j say str(a[i,j],3)
endfor
endfor
@ 2*(n+1),4 say ' Linia=' get l picture '99' valid (l<=n) and (l>=1) error (l<=n) and (l>=1)
read
p=1
for i=1 to m
p=p*a[l,i]
endfor
for i=1 to m
@ 2*(n+1),4 say 'Produsul elementelor de pe linia '+str(i,1)+' este '+str(p,4)
endfor
wait ' '
deactivate window fer11
&&deactivate window fer9
return
procedure transpusa
define wind fer12 from 3,10 to 21,70 title ' Transpusa ' footer ' Matrice ' shadow
activate wind fer12
for i=1 to n
for j=1 to m
p[i,j]=a[i,j]
endfor

endfor
for i= 1 to n
for j= 1 to i-1
aux=p[i,j]
p[i,j]=p[j,i]
p[j,i]=aux
endfor
endfor
@ 0,4 say 'Matricea initiala!' color r+/b
for i=1 to n
for j=1 to m
@ 2*i,4*j say str(a[i,j],2)
endfor
endfor
@ 0,18+3*(n+1) say 'Matricea transpusa!' color r+/b
for i=1 to m
for j=1 to n
@ 2*i,4*(j-1)+4*n+8 say str(p[i,j],3)
endfor
endfor
wait ' '
deactivate window fer12
return
procedure determinant
dimension ret(10,10)
store 0 to ret
define window f from 3,3 to 20,75 title ' Calcul determinant '
activate window f
if m=n
for i=1 to n
for j=1 to n
ret[i,j]=a[i,j]
endfor
endfor
r=0
for k=1 to n
if ret[k,k]=0
for j=k+1 to n
if ret[j,k]<>0
exit
endif
endfor
if j=n+1
u=0
exit
else
r=r+1
endif
for c=1 to n
aux=ret[k,c]
ret[k,c]=ret[j,c]
ret[j,c]=aux
endfor
endif
for i=k+1 to n
m=-ret[i,k]/ret[k,k]
for j=k to n
ret[i,j]=ret[i,j]+ret[k,j]*m
endfor
for l=1 to n
for u=1 to n
@ 2*l,6*u-5 say str(ret[l,u],5,2)
endfor
endfor
endfor
wait ' '

endfor
u=1
for i=1 to n
u=u*ret[i,i]
endfor
if r%2=1
u=-u
endif
@ 2*(n+1),3 say 'Valoarea determinantului este '+str(u,5)
m=n
else
@ 2*(n+1),3 say 'Matricea nu are determinant, caci nu este patratica!'
endif
wait ''
deactivate window f
return

8. PROBLEME DE MATEMATIC REZOLVATE


N STIL GRIL
ARGUMENT
Prezenta lucrare se dorete a fi unu minitest de probleme de matematic, pe care
utilizatorul le poate rezolva n stil gril, prin bifarea rspunsului corect.
Tema aleas este rezultatul dorinei de a realiza un test gril n prelucrare automat, astfel
nct s nu mai fie nevoie de foie, de pix i de grila de rspunsuri, ci doar de un sistem de calcul
pentru aflarea rspunsului corect.
Limbajul ales este FoxPro, un limbaj de gestiune al bazelor de date, dar tema se
desprinde de o astfel de gestiune, folosind din limbaj doar posibilitatea de a realiza uor o
interfa prietenoas ntre aplicaie i utilizator. Aceast interfa se realizeaz printr-o serie de
controale implementate n limbaj, pentru realizarea lucrrii fiind necesare doar cunoaterea unor
comenzi de afiare pe ecran.
Lucrarea este accesibil, amprenta punndu-se la nivelul interfeei i a ideii de gril i
mai puin asupra problemelor.

PREZENTAREA LUCRRII
Controalele folosite la nivelul programului sunt ferestrele, declanatoarele, butoanele
radio i meniurile orizonatale.
Programul ncepe cu afisarea unei ferestre principale care afieaz dou opiuni (de ieire
aplicatie i de intrare n aplicaie), opiuni exprimate prin dou declanatoare, definite prin
comanda GET, clauza FUNCTION *HT (H = pentru afiarea orizontal a acestora, T = pentru a
se iei din list atunci cnd se apas ENTER) i citite prin comanda READ. naintarea n
aplicaie afieaz o a doua fereastr n care este afiat un set de 8 probleme, putnd s alegem
spre rezolvare o singur problem la un moment dat.

De exemplu, alegerea primei probleme deschide o fereastr n care este afiat ipoteza problemei
i un set de rspunsuri, utilizatorul putnd s-i testeze cunotiinele n legatur cu metodele de
calcul elementar.

Problemele alese solicit totui o ciorn i un pix, astfel nct utilizatorul s-i poat
efectua calculele, putnd apoi ca acesta s se verifice.

Nivelul de dificultate al problemelor este relativ sczut (calcule elementare), aplicaia


avnd ca scop un minitest de probleme de matematic n stil gril i nu dificultatea problemelor
alese.

CODUL SURS
clear
set blink off
set talk off
set border to 15,15,15,15,15,15,15,15
set color to rgb(100,255,0,0,255,255)
for i=1 to 10
define window f from 10-i,2*(10-i) to 23-(10-i),79-2*(10-i) color b+/r title 'Atestat' footer 'Domnul Tudor' shadow
deactivate window f
activate window f
wait '' timeout 0.1
endfor
@ 4,2 say 'Tema: PROBLEME REZOLVATE IN STIL GRILA' color
rgb(0,100,255,50,50,50)
@ 6,2 say 'Candidat: PLOSCARU ANDREEA' color
rgb(0,100,255,50,50,50)
@ 8,2 say 'Unitatea de invatamant: LICEUL TEORETIC "SERBAN CIOCULESCU"'color rgb(0,100,255,50,50,50)
define menu meniu
define pad op1 of meniu prompt 'Next' at 20,3
define pad op2 of meniu prompt 'Exit' at 20,64
on selection pad op1 of meniu do p1
on selection pad op2 of meniu do iesire
activate menu meniu
procedure iesire
deactivate window f
deactivate menu
return
procedure p1
deactivate window f
set color to rgb(0,0,100,0,255,255)
define window pro from 1,1 to 23,78 title 'Test' footer 'Probleme' color g+/b
activate window pro
@ 2,3 say 'Alege problema'
r=space(9)
@ 4,10 get r function '*RT Problema1'
@ 4,40 get r function '*RT Problema2'
@ 7,10 get r function '*RT Problema3'
@ 7,40 get r function '*RT Problema4'
@ 10,10 get r function '*RT Problema5'
@ 10,40 get r function '*RT Problema6'
@ 13,10 get r function '*RT Problema7'
@ 13,40 get r function '*RT Problema8'

read cycle
if r='Problema1'
do pr1
endif
if r='Problema2'
do pr2
endif
if r='Problema3'
do pr3
endif
if r='Problema4'
do pr4
endif
if r='Problema5'
do pr5
endif
if r='Problema6'
do pr6
endif
if r='Problema7'
do pr7
endif
if r='Problema8'
do pr8
endif
@ 2,3 say 'Alege problema'
r=space(9)
@ 4,10 get r function '*RT Problema1' disable color r+/b
@ 4,40 get r function '*RT Problema2' disable color r+/b
@ 7,10 get r function '*RT Problema3' disable color r+/b
@ 7,40 get r function '*RT Problema4' disable color r+/b
@ 10,10 get r function '*RT Problema5' disable
@ 10,40 get r function '*RT Problema6' disable
@ 13,10 get r function '*RT Problema7' disable
@ 13,40 get r function '*RT Problema8' disable
read
m=space(4)
@ 18,3 get m function '* Next'
@ 18,30 get m function '* Home'
@ 18,60 get m function '* Exit'
read cycle
if m='Next'
do p1
else
if m='Home'
deactivate window pro
activate window f
@ 4,2 say 'Tema: PROBLEME REZOLVATE IN STIL GRILA' color rgb(0,100,255,50,50,50)
@ 6,2 say 'Candidat: PLOSCARU ANDREEA' color rgb(0,100,255,50,50,50)
@ 8,2 say 'Unitatea de invatamant: LICEUL TEORETIC "SERBAN CIOCULESCU"'color rgb(0,100,255,50,50,50)
@ 10,2 say 'Sesiunea 2003'
@ 12,20 say 'Profesor coordonator: Chirfot Carmen - Victorita'
show menu meniu
else
deactivate window pro
deactivate menu
clear all
cancel
endif

endif
return
procedure pr1
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 1' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',79)
@ 3,2 say 'ENUNT: Sa se calculeze suma S=1+2+3+...+n, n dat de la tastatura.'color g+/b
@ 5,0 say replicate('*',77)
@ 7,0 say '**n=' get n default 0 picture '99'valid (n>=0) and (n<=10) color g+/b
read
@ 9,0 say replicate('*',77)
@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT '+str(n*(n+1)/2-1,2)
@ 15,30 get com2 function '*RHT '+str(n*(n+1)/2,2)
@ 15,60 get com3 function '*RHT '+str(n*(n+1)/2+1,2)
read cycle
if com2=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
procedure pr2
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 2' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',79)
@ 3,2 say 'ENUNT: Sa se calculeze suma S=2+4+6+...+2*n, n dat de la tastatura.'color g+/b
@ 5,0 say replicate('*',77)
@ 7,0 say '**n=' get n default 0 picture '99'valid (n>=0) and (n<=9) color g+/b error n<=9
read
@ 9,0 say replicate('*',77)
@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT '+str(n*(n+1),2)
@ 15,30 get com2 function '*RHT '+str(n*(n+1)+1,2,0)
@ 15,60 get com3 function '*RHT '+str(n*(n-1)-1,2,0)
read cycle
if com1=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
procedure pr3
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 3' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',79)
@ 3,2 say 'ENUNT: Sa se calculeze suma S=1!*1+2!*2+3!*3+...+n!*n, n dat de la tastatura.'color g+/b
@ 5,0 say replicate('*',77)
@ 7,0 say '**n=' get n default 0 picture '99' valid (n>=0) and (n<=5) error n<=5 color g+/b
read

@ 9,0 say replicate('*',77)


@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RT '+str(fact(n+1),3)
@ 15,30 get com2 function '*RT '+str(fact(n+1)+1,3)
@ 15,60 get com3 function '*RT '+str(fact(n+1)-1,3)
read cycle
if com3=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
function fact
parameters a
nr=1
for i=2 to a
nr=nr*i
endfor
fact=nr
return fact
procedure pr4
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 4' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',79)
@ 3,2 say 'ENUNT: Sa se calculeze suma S=1+2+3+...+n, n dat de la tastatura.'color g+/b
@ 5,0 say replicate('*',77)
@ 7,0 say '**n=' get n default 0 picture '99' valid (n>=0) and (n<=6) color g+/b error n<=6
read
@ 9,0 say replicate('*',77)
@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT '+str(n*(n+1)*(2*n+1)/6-1,2)
@ 15,30 get com2 function '*RHT '+str(n*(n+1)*(2*n)/6+1,2,0)
@ 15,60 get com3 function '*RHT '+str(n*(n+1)*(2*n+1)/6,2,0)
read cycle
if com3=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
procedure pr5
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 5' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',77)
@ 3,46 say 'b' color g+/b
@ 4,0 say '**ENUNT: Sa se calculeze integrala definita I=(x+1)dx' color g+/b
@ 5,46 say 'a' color g+/b
@ 6,0 say replicate('*',77)
@ 7,0 say '**a=' get a default 0 picture '99' color g+/b
read
@ 9,0 say '**b=' get b default 0 picture '99' color g+/b

read
@ 10,0 say replicate('*',77)
@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT '+str(integrala(a,b)-1,5,2)
@ 15,30 get com2 function '*RHT '+str(integrala(a,b)+1,5,2)
@ 15,60 get com3 function '*RHT '+str(integrala(a,b),5,2)
read cycle
if com3=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
function integrala
parameters a,b
integrala=b*b*b/3+b-a*a*a/3-a
return integrala
procedure pr6
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 6' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',77)
@ 4,0 say '**ENUNT: A={xR(x-1)*(x+1)=0}' color g+/b
@ 6,0 say replicate('*',77)
@ 9,0 say replicate('*',77)
@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT x=1'
@ 15,25 get com2 function '*RHT (x=1) or (x=-1)'
@ 15,60 get com3 function '*RHT x=-1'
read cycle
if com2=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
procedure pr7
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 7' footer 'Probleme' color r+/b
activate window f1
dimension a(3,3)
store 0 to a
@ 0,0 say replicate('*',77)
@ 2,0 say '**ENUNT: a11 a12 a13' color g+/b
@ 3,9 say 'a21 a22 a23
= ' color g+/b
@ 4,9 say 'a31 a32 a33' color g+/b
@ 6,0 say replicate('*',77)
for i=1 to 3
for j=1 to 3
@ 1+i,40+3*j get a[(i-1)*3+j] picture '99'
read
endfor
endfor

@ 10,0 say replicate('*',77)


@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT '+str(calc(a[1,1],a[1,2],a[1,3],a[2,1],a[2,2],a[2,3],a[3,1],a[3,2],a[3,3]),5)
@ 15,25 get com2 function '*RHT '+str(calc(a[1,1],a[1,2],a[1,3],a[2,1],a[2,2],a[2,3],a[3,1],a[3,2],a[3,3])+1,5)
@ 15,60 get com3 function '*RHT '+str(calc(a[1,1],a[1,2],a[1,3],a[2,1],a[2,2],a[2,3],a[3,1],a[3,2],a[3,3])-1,5)
read cycle
if com1=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return
function calc
parameters a,b,c,d,;
e,f,g,h,i
p1=a*e*i
p2=d*h*c
p3=g*b*f
r1=c*e*g
r2=f*h*a
r3=i*b*d
calc=p1+p2+p3-r1-r2-r3
return calc
procedure pr8
deactivate window pro
define window f1 from 1,1 to 23,79 title 'Problema 8' footer 'Probleme' color r+/b
activate window f1
@ 2,0 say replicate('*',77)
@ 4,0 say '**ENUNT: Sa se rezolve x-3*x+2=0 ' color g+/b
@ 6,0 say replicate('*',77)
@ 9,0 say replicate('*',77)
@ 12,0 say '**Alege raspunsul corect!' color g+/b
com1=0
com2=0
com3=0
@ 15,2 get com1 function '*RHT x=1'
@ 15,20 get com2 function '*RHT (x=1) and (x=2)'
@ 15,55 get com3 function '*RHT (x=2) sau (x=1)'
read cycle
if com3=1
wait window 'Raspuns corect!'
else
wait window 'Raspunsul este gresit!'
endif
wait ' '
deactivate window f1
activate window pro
return

8. PREZENTAREA LICEULUI TEORETIC


ERBAN CIOCULESCU
PREZENTAREA LUCRRII
Aplicaia prezint n fereastra implicit FoxPro un set de 5 butoane de meniu orizontal
etichetate: Director, Specializari-Clase, Cadre didactice, Secretariat, Iesire.

Accesarea opiunii Director deschide o fereastr n care se prezint conducerea colii


(directorul principal i directorul adjunct).

Accesarea opiunii Specializari-Clase deschide un meniu vertical cu 4 opiuni de meniu,


n care sunt etichetate clasele de zi existente n cadrul acestei instituii (clasa a IX-a, a X-a, a XIa, a XII a). Un clic pe una dintre barele de meniu afieaz ntr-o alt fereastr elevii clasei
respective.

Accesarea opiunii Cadre didactice deschide un meniu vertical cu dou opiuni de meniu,
n care sunt etichetate cadrele didactice ale colii (titulari, suplinitori). Un clic pe una dintre
barele de meniu afieaz ntr-o alt fereastr profesorii colii.

Opiunea Secretariat afieaz ntr-o fereastr personalul din cadrul serviciului secretariat
al colii.
Optiunea Ieire realizeaz ieirea din meniul orizontal i nchide cele dou ferestre n care
se realizeaz prezentarea lucrrii.
CODUL SURS
set talk off
clear
define popup profi from 6,23 to 9,55
define bar 1 of profi prompt "Titulari"
define bar 2 of profi prompt "Suplinitori"
on selection bar 1 of profi do titulari
on selection bar 2 of profi do suplinitori
define popup clase from 3,23 to 8,55
define bar 1 of clase prompt "Clasa a IX-a"
define bar 2 of clase prompt "Clasa a X-a"
define bar 3 of clase prompt "Clasa a XI-a"
define bar 4 of clase prompt "Clasa a XII-a"
on selection bar 1 of clase do clasaIX
on selection bar 2 of clase do clasaX
on selection bar 3 of clase do clasaXI
on selection bar 4 of clase do clasaXII
define window ferest from 1,1 to 22,79 title "Atestat la Informatica" footer 'Liceul Teoretic "Serban Cioculescu"'
double color g/b
define window fer23 from 5,4 to 18,70 title "Candidat: Strinoiu Marian - Alin" footer "Sesiunea MAI 2007" double
activate window ferest
@1,2 say 'Tema: Prezentarea Liceului Teoretic "Serban Cioculescu"' color g/b
activate window fer23
define menu meniu
define pad op0 of meniu prompt "Director" at 1,3
define pad op1 of meniu prompt "Specializari-Clase" at 4,3
define pad op2 of meniu prompt "Cadre didactice" at 7,3
define pad op3 of meniu prompt "Secretariat" at 10,3
define pad op4 of meniu prompt "Iesire" at 10,50
on selection pad op0 of meniu do director
on selection pad op1 of meniu activate popup clase
on selection pad op2 of meniu activate popup profi

on selection pad op3 of meniu do secretariat


on selection pad op4 of meniu do iesiref
activate menu meniu
procedure iesiref
deactivate window fer23
deactivate window ferest
deactivate menu
return
activate menu meniu
procedure clasaXII
define window fer from 3,3 to 20,70 title "Elevii calsei a XII-a A" footer "Specializarea Matematica-Informatica"
double
activate window fer
@ 1,3 say "1. Adam Constantin" color g/b
@ 2,3 say "2. Alexandru Diana Roxana" color g/b
@ 3,3 say "3. Balasoiu Marius Ionut" color g/b
@ 4,3 say "4. Balasoniu Cristian" color g/b
@ 5,3 say "5. Bizera Cristina Virginia" color g/b
@ 6,3 say "6. Caramidaru Cristian" color g/b
@ 7,3 say "7. Croitoru Georgiana" color g/b
@ 8,3 say "8. Gheorghe Danut Liviu" color g/b
@ 9,3 say "9. Gimoiu Daniela Nicoleta" color g/b
@ 10,3 say "10. Ionele Andreea Alina" color g/b
@ 11,3 say "11. Ionescu Radu Iont" color g/b
@ 12,3 say "12. Isache Catalin" color g/b
@ 13,3 say "13. Margulescu Gabriel Marian" color g/b
@ 14,3 say "14. Pica Robert Alexandru" color g/b
@ 15,3 say "15. Pistritu Virgil Daniel" color g/b
@ 1,35 say "16. Ploscaru Andreea" color g/b
@ 2,35 say "17. Raduica Stefanin Madalin" color g/b
@ 3,35 say "18. Roman Alexandra" color g/b
@ 4,35 say "19. Rotaru Florina Andreea" color g/b
@ 5,35 say "20. Roua Roxana Madalina" color g/b
@ 6,35 say "21. Stoicheci Alina Maria" color g/b
@ 7,35 say "22. Strinoiu Marian Alin" color g/b
@ 8,35 say "23. Talposel Ionela Marinela" color g/b
@ 9,35 say "24. Teghiu Loredana Mihaela" color g/b
@ 10,35 say "25. Vizante Florin Cosmin" color g/b
@ 11,35 say "26. Margarita Elena Andreea" color g/b
@ 12,35 say "27. Pica Robert" color g/b
@ 13,35 say "28. Nedelcia Gabriela" color g/b
@ 14,35 say "29. Negrea Silvana" color g/b
wait " "
deactivate window fer
return
procedure clasaX
define window fer from 3,3 to 20,70 title "Elevii calsei a X-a A" footer "Specializarea Matematica-Informatica"
double
activate window fer
@ 1,3 say "1. Boroata Ciprian-Flavius" color g/b
@ 2,3 say "2. Cauc Alexandru-Sebastian" color g/b
@ 3,3 say "3. Cocoroiu Andrea-Daniela" color g/b
@ 4,3 say "4. Mangu Bogdan-Alexandru" color g/b
@ 5,3 say "5. Miu Nicusor-Alexandru" color g/b
@ 6,3 say "6. Nedelcu Ana-Maria" color g/b
@ 7,3 say "7. Nicola-Altaras Alexandra-Adelheid" color g/b
@ 8,3 say "8. Oproiu Cristina-Margareta" color g/b
@ 9,3 say "9. Schinteie Roxana-Elisabeta" color g/b
@ 10,3 say "10. Tacota Camelia-Raluca" color g/b
@ 11,3 say "11. Turlea Bianca-Sania" color g/b
wait " "
deactivate window fer
return
procedure clasaXI

define window fer from 3,3 to 20,70 title "Elevii calsei a XI-a A" footer "Specializarea Matematica-Informatica"
double
activate window fer
@ 1,3 say "1. Cojocaru Dragos-Eduard" color g/b
@ 2,3 say "2. Iacobescu Corina Mihaela" color g/b
@ 3,3 say "3. Jianu Andreea" color g/b
@ 4,3 say "4. Lacatusu Elena-Loredana" color g/b
@ 5,3 say "5. Morie Eugen-Adrian" color g/b
@ 6,3 say "6. Nuta Daniela" color g/b
@ 7,3 say "7. Oborocea Stefania-Simona" color g/b
@ 8,3 say "8. Pitroaca Mihai" color g/b
@ 9,3 say "9. Pribeagu Paul-Octavian" color g/b
@ 10,3 say "10. Purcaru Bianca-Carmen" color g/b
@ 11,3 say "11. Surugiu Simona-Alexandra" color g/b
@ 12,3 say "12. Serban Cristina-Elena" color g/b
@ 13,3 say "13. Vizitiu Mihai-Dorin" color g/b
@ 14,3 say "14. Zgarcea Mihaela-Elena" color g/b
wait " "
deactivate window fer
return
procedure clasaIX
define window fer from 3,3 to 20,70 title "Elevii calsei a IX-a A" footer "Specializarea Matematica-Informatica"
double
activate window fer
@ 1,3 say "1. Balaci Cosmin-Florian" color g/b
@ 2,3 say "2. Buse Ecaterina-Larisa" color g/b
@ 3,3 say "3. Florescu Ionut-Valentin" color g/b
@ 4,3 say "4. Gherasim Critina-Larisa" color g/b
@ 5,3 say "5. Merai Thomas-Mark" color g/b
@ 6,3 say "6. Preda Alexandra-Elena" color g/b
@ 7,3 say "7. Stanciulescu Marian-Catalin" color g/b
@ 8,3 say "8. Traila Amalia-Alexandra" color g/b
wait " "
deactivate window fer
return
procedure director
define window fer from 5,10 to 15,60 title "Directiunea" footer 'Liceul Teoretic "Serban Cioculescu"' double
activate window fer
@ 2,4 say "1. Director General: Prof. Nanuti Ion" color g/b
@ 5,4 say "2. Director Adjunct: Prof. Telea Luminita" color g/b
wait " "
deactivate window fer
return
procedure titulari
define window fer from 3,3 to 20,70 title "Profesori titulati" footer 'Liceul Teoretic "Serban Cioculescu"' double
activate window fer
@ 1,3 say "1. Telea Carmen-Luminita Specializarea: Limba Romana" color g/b
@ 3,3 say "2. Amza Sabina-Mihaela
Specializarea: Limba romana" color g/b
@ 5,3 say "3. Albuletu Alina-Angela
Specializarea: Limba Engleza " color g/b
@ 7,3 say "4. Tache Oana
Specializarea: Matematica" color g/b
@ 9,3 say "5. Simcelescu Melania
Specializarea: Fizica" color g/b
@ 11,3 say "6. Nistor Valeria-Anisoara Specializarea: Chimie" color g/b
wait " "
deactivate window fer
return
procedure suplinitori
define window fer from 3,3 to 20,75 title "Profesori suplinitori" footer 'Liceul Teoretic "Serban Cioculescu"' double
activate window fer
Observaie: n aceast procedur am ters numele profesorilor suplinitori, aplicaia urmrindu-i doar scopul de
prezentare, fr a intra n posesia datelor private acestei instituii de nvmnt.
wait " "
deactivate window fer
return

procedure secretariat
define window fer2 from 3,3 to 15,50 title 'Secretarul Liceului "Serban Cioculescu"' double
activate window fer2
@ 2,2 say "Secretar Sef: Traila Jean Florentin" color g/b
wait ""
deactivate window fer2
return

Bibliografie:

[1]. Informatic - Manual pentru clasa a XII-a - Varianta Visual FoxPro, Mariana
Panru, Ionu Panru, Irina Ioana Panru; Editura L&S Infomat, Bucureti 2002.
[2]. Informatic - FOXPRO, Teorie i Aplicaii, Eugen Popescu, Doina Preda,
Mihaela Coldre, Editura ELSE 2005.
[3]. Informatic economic FoxPro Manual pentru clasele a XI-a i a XII-a,
Ctlin Frncu; Editura L&S Informat 2000.
[4]. Laborator de informatic n cadrul celor dou instituii de nvmnt.

Você também pode gostar