Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ графика Turbo Pascal 7.0

Автор: Kaktus71 31.05.2016 2:03

Всем привет , нужна помощь в корректировке программы , Смысл такой нужно отобразить Точки пересечения графиков нулевой и третий мигающим цветом лимонным) Программа прилагается =)
uses Graph, Strings;
var
pm: array[0..9] of byte;
procedure Pix(xx,yy: integer;c:byte);
var
nb,np,mp:byte;
begin;
for np:=0 to 3 do
begin
nb:=7-np;
mp:=1 shl np;
if (c AND mp) = 0 then pm[nb]:=$00
else pm[nb]:=$80;
end;
putimage(xx,yy,pm,orput);
end;
procedure lin(x1,y1,x2,y2, c:integer);
var
x,y,dx,dy:integer;
k,b:real;
begin
dx:=x2-x1;
dy:=y2-y1;
if dx<>0 then k:=dy/dx
else
begin
if dy>0 then
for y:=y1 to y2 do
Pix(x1,y,c)
else
for y:=y2 to y1 do
Pix(x1,y,c);
exit;
end;
b:=y1-k*x1;
if dy=0 then
begin
if dx>0 then
for x:=x1 to x2 do
Pix(x,y1,c)
else
for x:=x2 to x1 do
Pix(x,y1,c);
exit;
end;
if abs(k)<=1 then
begin
if dx>0 then
for x:=x1 to x2 do
begin
y:=round(k*x+b);
Pix(x,y,c);
end
else
for x:=x2 to x1 do
begin
y:=round(k*x+b);
Pix(x,y,c);
end;
exit;
end;
if abs(k)>1 then
begin
if dy>0 then
for y:=y1 to y2 do
begin
x:=round((y-b)/k);
Pix(x,y,c);
end
else
for y:=y2 to y1 do
begin
x:=round((y-b)/k);
Pix(x,y,c);
end;
exit;
end;
end;
var
i,j, s, yap:integer;
cc:byte;
am, ya: real;
grDriver: Integer;
grMode: Integer;
Pal: PaletteType;
ss: string[1];
begin
grDriver := EGA;
grMode := EGAHI;
InitGraph(grDriver, grMode,'d:\tp7\bgi');
for i:=0 to 9 do
pm[i]:=0;
for s:=0 to 1 do
begin
setactivepage(s);
setvisualpage(s);
for j:=0 to 3 do
begin
am:=170./(s+1)/(j+1);
i:=0;
while (i<639) do
begin
cc:=1 shl j;
ya:=am*sin(2.*pi*i/(640.0/((j+1)*(s+1))));
lin(i-1,174-yap,i,174-round(ya),cc);
lin(i-1,175-yap,i,175-round(ya),cc);
lin(i-1,176-yap,i,176-round(ya),cc);
i:=i+1;
yap:=round(ya);
end;
SetTextStyle(0, HorizDir,10);
Str(j, ss);
Port[$3C5]:=cc;
outtextxy(560,0,ss);
Str(s, ss);
Port[$3C5]:=cc;
outtextxy(480,0,ss);
Readln;
end;
end;
getpalette(pal);
for s:=0 to 1 do
begin
setvisualpage(s);
for j:=0 to 3 do
begin
cc:=1 shl j;
for i:=0 to 15 do
if (cc AND i) <> 0 then pal.colors[i]:=63
else pal.colors[i]:=0;
setallpalette(pal);
Readln;
end;
end;
end.

Автор: Федосеев Павел 31.05.2016 2:38

В вашей программе обращения к портам. Мой FreePascal такое не поддерживает. Так что даже помочь не смогу.