Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

LUCRARE DE OBTINERE A ATESTATULUI IN INFORMATICA - OPERATII CU POLINOAME

calculatoare



+ Font mai mare | - Font mai mic



Colegiul National "B.P.Hasdeu" Buzau



LUCRARE DE OBTINERE A ATESTATULUI IN INFORMATICA

-OPERATII CU POLINOAME-

1.Justificare Teoretica

Prezentul atestat este o aplicatie cu implicatii in lumea matematicii. Tema aleasa se refera la operatii cu polinoame, dintre care am ales cele mai importante operatii cunoscute, ce vor fi prezentate in capitolul urmator. Aplicatia a fost aleasa avand in vedere faptul ca limbajul Turbo Pascal se preteaza foarte bine la realizarea de teme cu caracter stiintific, de acest gen.

Interfata cu utilizatorul a fost realizata utilizand meniuri simple realizate in mod grafic iar aplicatiilor le corespund cate un subprogram. Citirea datelor s-a realizat cu ajutorul tablourilor (desigur intr-o varianta ulterioara, modernizata acest lucru realizandu-se cu ajutorul programarii orientate obiect) iar operatiile au fost realizata cu functii si proceduri. Lucrarea se doreste a fi un instrument atat pentru cei ce doresc sa parcurga la orele de matematica realizarea operatiilor cu polinoame amintite cat si pentru cei ce doresc realizarea de programe educationale in care informatica reprezinta un bun suport pentru invatarea si aprofundarea altor materii. Atestatul poate fi folosit cu succes atat de elevi cat si de profesori ca suport pentru orele de curs putand fi instalat usor pe mai multe statii concomitent.

Necesita un spatiu de memorie minim (150k) si incape cu usurinta pe o discheta. Desigur sursele aplicatiei sunt oferite tuturor celor ce doresc sa consulte aplicatia iar parti din acest program pot fi utilizate partial sau complet in realizarea altor aplicatii de acest gen.

2. Descrierea aplicatiei

Acest atestat are drept scop realizarea unui instrument usor de manevrat in scopul intelegerii cat mai profunde a notiunilor legate de operatii cu polinoame. Astfel cu ajutorul acestui atestat se pot calcula :

valoarea unui polinom intr-un punct

valoarea derivatei unui polinom intr-un punct

coeficientul lui x la k dintr-un produs de n polinoame de gradul intai

produsul a doua polinoame

impartirea a doua polinoame

cel mai mare divizor comun a doua polinoame

Atestatul debuteaza cu o intefata grafica prietenoasa sub forma unui meniu din care se pot selecta una dintre optiunile asociate operatiilor descrise mai sus. La selectarea uneia dintre optiuni aplicatia schimba modul grafic pentru a citi mai usor de la tastatura datele de intrare, ce constau din gradul unui polinom si apoi se se citesc coeficientii polinomului, dupa care se afiseaza rezultatul corespunzator.

Introducerea coeficientilor se face incepand cu gradul minim tinandu-se desigur cont ca un polinom de grad n are n+1 coeficienti.

Prima optiune "valoarea unui polinom intr-un punct" citeste

suplimentar de la tastatura o valoare x reala si calculeaza valoarea polinomului in acel punct. Pe ecran sunt afisate atat valoarea calculata cat si polinomul initial. Datele se pot consulta si la apasarea oricarei taste meniul initial este reafisat

A doua optiune "valoarea derivatei unui polinom intr-un punct"

permite determinarea valorii derivatei unui polinom intr-un punct x citit de la tastaura. Dupa citirea polinomului se trece la calculul derivatei si apoi se calculeaza valoarea derivatei in acel punct.

Optiunea "coeficientul lui x la k dintr-un produs de n polinoame

de gradul intai" permite determinarea coeficientului unui monaom de grad k (citit de la tastura) dintr-un produs de n polinoame de grad intai. De la tastura se introduc n si coeficientii celor n polinoame de grad intai si in cele din urma k. Se vor afisa coeficientul cautat si produsul de polinoame.

Urmatoarele doua optiuni, "produsul a doua polinoame si impartirea a doua polinoame" permit calcularea produsului si impartirii a doua polinoame. Gradele celor doua polinoame pot fi diferite. In final se afiseaza polinomul produs sau catul si restul impartirii celor doua polinoame.

Ultima optiune permite determinarea celui mai mare divizor comun a doua polinoame citite de la tastatura conform algoritmului lui Euclid studiat la orele de matematica.

Programul ce este listat in continuare foloseste atat instructiuni grafice (pentru afisarea meniului initial) cat si operatii cu tablouri (utilizate la memorarea polinoamelor). Proiectul permite intr-o versiune ulterioare si adaugarea de alte operatii cu polinoame, precum si tratarea dinamica (cu liste inlantuite) a acestor operatii.

3. Program Turbo Pascal

program operatii_polinoame;

uses crt,graph;

const

d = 16;

x0 = 175;

y0 = 100;

cs = 4;

cf = 8;

l2 = 32;

l1 = 300;

type

polinom=array[-1..20] of real;

vector=array[1..20] of real;

var

opt:integer;

n,g,k:integer;

gd,gm:integer;

t:char;

ind:boolean;

v:polinom;

a,b,c:vector;

coef,prod:real;

procedure fer(x0,y0,l1,l2,cs,cf:integer);

begin

setcolor(cs);

setbkcolor(cf);

rectangle(x0,y0,x0+l1,y0+l2);

setcolor(WHITE);

end;

procedure fermesaj(x0,y0,l1,l2,cs,cf:integer;m:string);

begin

setcolor(cs);

setbkcolor(cf);

rectangle(x0,y0,x0+l1,y0+l2);

setcolor(WHITE);

settextstyle(1,0,2);

outtextxy(x0+16,y0,m);

end;

procedure valoare;

var

p:polinom;

i,n:integer;

v,px,x:real;

begin

restorecrtmode;

textcolor(red);

write('Dati gradul polinomului=');readln(p[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n:=trunc(p[-1]);

for i:=0 to n do

read(p[i]);

write('Dati x=');read(x);

v:=0;px:=1;

for i:=0 to n do

begin

v:=v+px*p[i];

px:=px*x;

end;

writeln('polinomul este=');

for i:=0 to n do

write(p[i]:7:2);

writeln;

write('valoarea polinomului in punctul=',x:7:2,' este=',v:7:2);

t:=readkey;

setgraphmode(2);

end;

procedure derivata;

var

p:polinom;

i,n:integer;

v,px,x:real;

begin

restorecrtmode;

textcolor(red);

write('Dati gradul polinomului=');readln(p[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n:=trunc(p[-1]);

for i:=0 to n do

read(p[i]);

write('Dati x=');read(x);

v:=0;px:=1;

for i:=1 to n do

begin

v:=v+i*px*p[i];

px:=px*x;

end;

writeln('polinomul este=');

for i:=0 to n do

write(p[i]:7:2);

writeln;

write('valoarea derivatei polinomului in punctul=',x:7:2,' este=',v:7:2);

t:=readkey;

setgraphmode(2);

end;

procedure urm;

var

i,j:byte;

label 1;

begin

if not ind then

begin

for i:=1 to g do c[i]:=i;

ind:=true;

goto 1;

end;

for i:=g downto 1 do

if c[i]<n+i-g then

begin

c[i]:=c[i]+1;

for j:=i+1 to g do c[j]:=c[j-1]+1;

goto 1;

end;

ind:=false;

1:end;

procedure produs (v:vector;var prod:real);

var i,j:byte;

d:boolean;

begin

prod:=1;

for i:=1 to n do

begin

d:=false;

for j:=1 to g do

if v[j]=i then

begin

prod:=prod*a[i];

d:=true;

end;

if not d then prod:=prod*b[i]

end;

end;

procedure coeficient;

var

i:integer;

begin

restorecrtmode;

write('n=');read(n);

writeln('Dati coeficientii=');

for i:=1 to n do readln (a[i], b[i]);

writeln ('Polinomul este:');

for i:=1 to n do

begin

write ('(',a[i]:3:1,'*x');

if b[i]>=0 then write ('+');

write (b[i]:3:1,')');

end;

writeln;write('k=');read(g);

coef:=0;ind:=false;

if g=0 then

begin

coef:=1;

for i:=1 to n do

coef:=coef*b[i];

end

else

repeat

urm;

if ind then

begin

produs(c,prod);

coef:=coef+prod;

end;

until not ind;

write ('Coeficientul lui X^ ',g,'=' , coef:10:4);

t:=readkey;

setgraphmode(2);

end;

procedure produs_polinoame;

var

p,q,r:polinom;

i,j,n1,n2:integer;

begin

restorecrtmode;

textcolor(red);

write('Dati gradul primului polinom=');readln(p[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n1:=trunc(p[-1]);

for i:=0 to n1 do

read(p[i]);

write('Dati gradul celui de-al doilea polinom=');readln(q[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n2:=trunc(q[-1]);

for i:=0 to n2 do

read(q[i]);

for i:=0 to n1+n2 do r[i]:=0;

for i:=0 to n1 do

for j:=0 to n2 do

r[i+j]:=r[i+j]+p[i]*q[j];

writeln('primul polinom este=');

for i:=0 to n1 do

write(p[i]:7:2);

writeln;

writeln('al doilea polinom este=');

for i:=0 to n2 do

write(q[i]:7:2);

writeln;

writeln('polinomul produs=');

for i:=0 to n1+n2 do

write(r[i]:7:2);

t:=readkey;

setgraphmode(2);

end;

procedure impart(p,q:polinom;var c,r:polinom);

var

n1,n2,n3,n4:integer;

i,dg:integer;

l:real;

begin

n1:=trunc(p[-1]);

n2:=trunc(q[-1]);

n3:=n1;

for i:=0 to n3 do

r[i]:=p[i];

n4:=n3-n2;

repeat

l:=r[n3]/q[n2];

dg:=n3-n2;

c[dg]:=l;

for i:=0 to n2 do

r[n3-i]:=r[n3-i]-q[n2-i]*l;

n3:=n3-1;

until dg=0;

c[-1]:=n4;r[-1]:=n3;

end;

procedure impartire_polinoame;

var

p,q,c,r:polinom;

i,j,k,n1,n2,n3,n4,dg:integer;

l:real;

begin

restorecrtmode;

textcolor(red);

write('Dati gradul primului polinom=');readln(p[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n1:=trunc(p[-1]);

for i:=0 to n1 do

read(p[i]);

write('Dati gradul celui de-al doilea polinom=');readln(q[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n2:=trunc(q[-1]);

for i:=0 to n2 do

read(q[i]);

n3:=n1;

for i:=0 to n3 do

r[i]:=p[i];

n4:=n3-n2;

repeat

l:=r[n3]/q[n2];

dg:=n3-n2;

c[dg]:=l;

for i:=0 to n2 do

r[n3-i]:=r[n3-i]-q[n2-i]*l;

n3:=n3-1;

until dg=0;

c[-1]:=n4;r[-1]:=n3;

writeln('primul polinom este=');

for i:=0 to n1 do

write(p[i]:7:2);

writeln;

writeln('al doilea polinom este=');

for i:=0 to n2 do

write(q[i]:7:2);

writeln;

writeln('catul este=');

for i:=0 to n4 do

write(c[i]:7:2);

writeln;

writeln('restul este=');

for i:=0 to n3 do

write(r[i]:7:2);

t:=readkey;

setgraphmode(2);

end;

procedure euclid;

var

a,b,p,q,c,r:polinom;

i,j,k,n1,n2,n3,n4,dg:integer;

l:real;

begin

restorecrtmode;

textcolor(red);

write('Dati gradul primului polinom=');readln(p[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n1:=trunc(p[-1]);

for i:=0 to n1 do

read(p[i]);

write('Dati gradul celui de-al doilea polinom=');readln(q[-1]);

writeln('Dati coeficientii (incepand cu gradul minim)=');

n2:=trunc(q[-1]);

for i:=0 to n2 do

read(q[i]);

a:=p;b:=q;

repeat

impart(p,q,c,r);

p:=q;

q:=r;

until (r[-1]=0);

writeln('primul polinom este=');

for i:=0 to n1 do

write(a[i]:7:2);

writeln;

writeln('al doilea polinom este=');

for i:=0 to n2 do

write(b[i]:7:2);

writeln;

writeln('cmmdc este=');

if r[0]<>0 then

for i:=0 to trunc(r[-1]) do

write(r[i]:7:2)

else

for i:=0 to trunc(p[-1]) do

write(p[i]:7:2);

writeln;

t:=readkey;

setgraphmode(2);

end;

var

x,y:integer;

begin

gd:=detect;

initgraph(gd,gm,'c:radu');

x:=x0;y:=y0;opt:=1;

fermesaj(x0,y0,l1,l2,cs,cf,'Valoarea unui polinom intr-un punct');

fermesaj(x0,y0+1*(l2+d),l1,l2,cs,cf,'Valoarea derivatei intr-un punct');

fermesaj(x0,y0+2*(l2+d),l1,l2,cs,cf,'Coeficientul lui X la k');

fermesaj(x0,y0+3*(l2+d),l1,l2,cs,cf,'Produsul a doua polinoame');

fermesaj(x0,y0+4*(l2+d),l1,l2,cs,cf,'Impartirea a doua polinoame');

fermesaj(x0,y0+5*(l2+d),l1,l2,cs,cf,'Cel mai mare divizor comun');

t:=#75;

while (t<>#27) do

begin

fermesaj(x0,y0,l1,l2,cs,cf,'Valoarea unui polinom intr-un punct');

fermesaj(x0,y0+1*(l2+d),l1,l2,cs,cf,'Valoarea derivatei intr-un punct');

fermesaj(x0,y0+2*(l2+d),l1,l2,cs,cf,'Coeficientul lui X la k');

fermesaj(x0,y0+3*(l2+d),l1,l2,cs,cf,'Produsul a doua polinoame');

fermesaj(x0,y0+4*(l2+d),l1,l2,cs,cf,'Impartirea a doua polinoame');

fermesaj(x0,y0+5*(l2+d),l1,l2,cs,cf,'Cel mai mare divizor comun');

fer(x,y,l1,l2,1,cf);

t:=readkey;

if t=#0 then t:=readkey;

fer(x,y,l1,l2,cs,cf);

case t of

#80 : if (opt = 6) then begin y:=y0;opt:=1;end

else begin y:=y+l2+d;opt:=opt+1;end;

#72 : if (opt = 1) then begin y:=y+5*(l2+d);opt:=6;end

else begin y:=y-l2-d;opt:=opt-1;end;

#13 : begin

cleardevice;

case opt of

1 : begin

valoare;

end;

2 : begin

derivata;

end;

3 : begin

coeficient;

end;

4 : begin

produs_polinoame;

end;

5 : begin

impartire_polinoame;

end;

6 : begin

euclid;

end;

end;

end;

end;

end;

cleardevice;

end.

4.Bibliografie

1.Tudor Sorin - Tehnici de programare, Editura Teora, 1995

2.Maria Codrina - Bacalaureat la Informatica, Editura L&S Informat, 2002

3.Grigore Albeanu - Programarea in Turbo Pascal, Editura Tehnica, 1994

4.Andrei Cioroianu - Programe Turbo Pascal in detaliu, Editura Teora,1997

5.Gazeta de informatica - nr. 7/1992



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 2050
Importanta: rank

Comenteaza documentul:

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

Creaza cont nou

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