CATEGORII DOCUMENTE |
-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.
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 |
Vizualizari: 2247
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved