С процедурами я вроде бы разобралась, но вот сам вывод графика что-то не получается... точки он выводит верно, но вот линии от одной точки до другой выводяться неправильно, но что хуже он рисует от последней выведенной точки линию вниз к оси (но ее быть не должно)... время поджимает, а никак понять не могу в чем тут дело?
Цитата
Program Grafic;
Uses Crt, Graph;
Const n=20;
Type
MasData = Array[1..n] of Integer;
MasMax = Array[1..35] of Real;
MasMin = Array[1..35] of Real;
MasSred = Array[1..35] of Real;
Var
x: integer;
b: MasData;
d: MasData;
e: MasData;
c : MasMax;
k:MasMin;
l: MasSred;
y:real;
St : String[4];
A,i, Mx, Mx01, Mx09, Msx, My, My09, My005, Msy : Integer;
F1: Text;
{-------Выход из графического режима----------}
PROCEDURE grafika_off;
BEGIN
closegraph;
END;
{-------Переход в графический режим----------}
PROCEDURE grafika_on;
var
Ga, Gm, Error : Integer;
BEGIN
Ga := Detect;
Gm := Detect;
InitGraph (Ga, Gm, 'c:\bp\bgi');
Error := GraphResult;
If Error <> Grok Then
Begin
Writeln('Ошибка!Графический драйвер не найден',#10#13,GraphErrorMSG (Error));
Halt;
End;
End;
{-------Вывод данных из файла----------}
Procedure Vivod(var b: MasData;c: MasMax;d: MasData;k:MasMin;e: MasData;l: MasSred);
Begin
Assign (F1, 'c:\Vivod.txt');
Reset (F1);
While Not EOF (F1) do
begin
For i:=1 to n do
Read(F1,b[i],c[i]);
LineTo(round(Mx01+Msx*b[i]), round(My09-Msy*c[i]),100);
Read(F1,d[i],k[i]);
LineTo(round(Mx01+Msx*d[i]), round(My09-Msy*k[i]),10);
Read(F1,e[i],l[i]);
LineTo(round(Mx01+Msx*e[i]), round(My09-Msy*l[i]),10);
end;
Close (F1);
End;
{-------Определение используемых значений----------}
procedure Opredelenie;
Begin
Mx := GetMaxX;
Mx01 := Round (0.1* Mx);
Mx09 := Round (0.9* Mx);
My := GetMaxY;
My09 := Round (0.9*My);
My005 := Round (0.05* My);
SetColor (12);
end;
{-------Вывод осей координат----------}
procedure osikoord;
begin
Line (20, My09, Mx-10, My09);
Line (Mx01, My005, Mx01, My-9);
{Risovanie strelok}
Line (Mx-20, My09-3, Mx-10, My09);
Line (Mx-20, My09+3, Mx-10, My09);
Line (Mx01, My005, Mx01-3, My005+10);
Line (Mx01, My005, Mx01+3, My005+10);
{Nadpisi po osam X u Y}
SetTextStyle (0, 0, 2);
SetColor(14);
OutTextXY (Mx01-40, My005, ' Y ');
OutTextXY (Mx-40, My09-25, ' X ');
SetTextStyle (0, 0, 1);
SetColor(12);
End;
{-------Разметка осей----------}
procedure Razmetka;
begin
{Разметка оси Y}
Msy := Round (My09 / 40);
y := 1;
While y<=35 Do
Begin
Str (Y, St);
A := Round (My09 - Msy * y);
Line (Mx01+2, A, Mx01-2, A);
OutTextXY (Mx01-40, A-2, St);
y := y+1;
End;
{Разметка оси x}
Msx := Round (Mx09 / 20);
x := 1;
While x<=n Do
Begin
Str (x+1, St);
A := Round (Mx01 + Msx * x);
Line (A, My09+3, A, My09-3 );
OutTextXY (A, My09+5, St);
x := x + 1;
end;
SetColor(2);
end;
{-------Вывод графика----------}
Procedure VivodGraph;
Begin
Opredelenie;
osikoord;
Razmetka;
Vivod(b,c,d,k,e,l);
readln;
End;
{-------Основная программа----------}
BEGIN
grafika_on;
VivodGraph;
grafika_off;
END.