program Wykres;
uses Crt, Graph;
var a,b,c:integer;
i:integer;
min,max:real;
r:real;
pole:real;
x1,x2:real;
s:string;
ch:char;
const dokladnosc = 0.0001;
skalax = 6;
skalay = 6;
function f(x:real):real;
begin
f:=x*abs(x+1)-x;
end;
begin
while ch<>'0' do begin
ClrScr;
Writeln('1. Obliczanie pola pod wykresem funkcji');
Writeln('2. Pomoc');
Writeln;
Writeln('0. Wyjcie');
ch:=ReadKey;
if ch = '1' then begin
Writeln;
repeat
repeat
Writeln('Wprowad« przedzia minimalny:');
Readln(s);
Val(s, min, c);
if c <> 0 then begin
Writeln('Wprowadzone dane nie sĄ liczbĄ. Spr˘buj jeszcze raz');
Writeln;
end;
until c = 0;
repeat
Writeln('Wprowad« przedzia maksymalny:');
Readln(s);
Val(s, max, c);
if c <> 0 then begin
Writeln('Wprowadzone dane nie sĄ liczbĄ. Spr˘buj jeszcze raz');
Writeln;
end;
until c = 0;
if max <= min then begin
Writeln;
Writeln('Przedzia maksymalny nie moľe by† r˘wny/mniejszy od przedziau minimalnego');
Writeln;
end;
until max > min;
i:=0;
InitGraph(a,b,'');
SetBkColor(DarkGray);
SetColor(LightGray);
ClearViewport;
Line(GetMaxX div 2, 10, GetMaxX div 2, GetMaxY - 10);
Line(GetMaxX div 2, 10, GetMaxX div 2 + 10, 20);
Line(GetMaxX div 2, 10, GetMaxX div 2 - 10, 20);
Line(10, GetMaxY div 2, GetMaxX - 10, GetMaxY div 2);
Line(GetMaxX - 10, GetMaxY div 2, GetMaxX - 20, GetMaxY div 2 - 10);
Line(GetMaxX - 10, GetMaxY div 2, GetMaxX - 20, GetMaxY div 2 + 10);
SetLineStyle(DashedLn, 0, 1);
SetColor(LightGray);
Line(GetMaxX div 2 + round(min)*skalax, 10, GetMaxX div 2 + round(min)*skalax, GetMaxY - 10);
Line(GetMaxX div 2 + round(max)*skalax, 10, GetMaxX div 2 + round(max)*skalax, GetMaxY - 10);
SetColor(LightGreen);
SetLineStyle(SolidLn, 0, 1);
Line(GetMaxX div 2 + round(min)*skalax, GetMaxY div 2 - 1, GetMaxX div 2 + round(min)*skalax, GetMaxY div 2 - round(f(min)/skalay));
Line(GetMaxX div 2 + round(max)*skalax, GetMaxY div 2 - 1, GetMaxX div 2 + round(max)*skalax, GetMaxY div 2 - round(f(max)/skalay));
SetColor(Cyan);
Str(round(min), s);
OutTextXY(GetMaxX div 2 + round(min)*skalax - 7, GetMaxY div 2 + 5, s);
Str(round(max), s);
OutTextXY(GetMaxX div 2 + round(max)*skalax - 7, GetMaxY div 2 + 5, s);
i:=0;
MoveTo(GetMaxX div 2 + i*skalax, GetMaxY div 2 - round(f(i)/skalay));
while i <= 70 do begin
SetColor(Yellow);
LineTo(GetMaxX div 2 + i*skalax, GetMaxY div 2 - round(f(i)/skalay));
if (i > min) and (i < max) then begin
SetColor(Cyan);
Line(GetMaxX div 2 + i*skalax, GetMaxY div 2 - 1, GetMaxX div 2 + i*skalax, GetMaxY div 2 - round(f(i)/skalay)+1);
end;
i:=i+1;
end;
x1:=min;
SetColor(White);
pole:=0;
while x1 <= max-dokladnosc do begin
x2:=x1+dokladnosc;
pole:=pole + ((f(x1)+f(x2))*dokladnosc)/2;
x1:=x1+dokladnosc;
end;
Writeln('Pole pod krzywĄ: ', pole:0:5);
ReadKey;
CloseGraph;
end;
if ch = '2' then begin
ClrScr;
Writeln('Program oblicza pole pod wykresem funkcji okrelonej wzorem x*abs(x+1)-x.');
Writeln('Uľytkownik podaje minimalny i maksymalny przedzia,');
Writeln('w kt˘rym pole zostanie obliczone');
Writeln;
Writeln;
Writeln('Autor: Aleksandra Dzierľek');
ReadKey;
end;
end;
end.