Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
return
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''
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.
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.
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
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
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
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.
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)
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'
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
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.
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
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]].
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
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.
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
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
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
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.
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
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
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
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.