Код
{******PROGRAMMA*DLYA*IZOBRAZHENIYA*GRAFA*PO*SMEZHNOI*MATRICE***************}
{******************************************************}
uses Crt, Graph; {biblioteki}
{*****************************CONSTANTS*************************************}
const pi=3.1415; {chislo pi}
rad=120; {rasstoyanie ot centra do vershin
v pixelakh (luchshe menshe 200)}
cf=0; {cvet fona}
c1=5; {osnovnoi cvet dug}
c2=3; {cvet concov dug}
cv=1; {cvet vershin}
ct=7; {cvet teksta}
cn=4; {cvet nomerov vershin}
xt=10;yt=10; {koordinaty matricy}
d=0.1; {dlina konchikov}
u=0.2; {ugol(v radianakh)}
pet=0.2; {radius po otn. k petle}
shag=10; {rasst.m/u bukvami v matrice}
k=15; {max kol-vo vershin}
{*****************************TYPES*****************************************}
type koord=record{tip-koordinaty tochki}
x:real; {*}
y:real {*}
end; {*}
{*****************************VARIANTS**************************************}
var {*}
Gd, Gm: Integer; {graficheskie peremennye}
t:real; {parametr}
a:array[1..k,1..k]of integer;{matricy smezhnosti i incidentnosti}
b:array[1..k]of koord;{koordinatnye polozheniya vershin}
x,y:integer; {seredina ekrana}
i,j,j1:byte; {schetchiki}
n:integer; {kolichestvo vershin}
s:string; {dlya perevoda integer->string}
xt1,yt1:integer; {*}
c:char; {*}
x0,y0:real; {*}
alfa:real; {*}
z:char; {*}
p:integer; {*}
l1,l2:array[1..k*k]of boolean; {*}
{******************************MAIN*****************************************}
begin {*}
{---------------------------------------------------------------------------}
clrscr;
randomize; {generator sluch.chisel}
repeat {cikl zanovo}
clrscr;
writeln('Vyberite deistvie!');
writeln('S - vvesti matricu smezhnosti;');
writeln('I - vvesti matricu incidentnosti;');
writeln('Drugie knopki - sgenerirovat sluchainuiu matricu;');
writeln('Q - vychod iz programmy;');
z:=readkey;
if z='q' then break;
{------------------------Vvod-kolichestva-vershin---------------------------}
repeat
clrscr; {ochistka ekrana}
write('Vvedite kolichestvo vershin: ');
readln(n); {vvod kolichestva vershin}
until (n>0)and(n<k+1);{*}
{------------------------Vvod-matricy-smezhnosti---------------------------}
if z='s' then
for j:=1 to n do
for i:=1 to n do
begin
repeat
write('Vvedite A(',i,',',j,')=');
c:=readkey;
until (c='0')or(c='1');
writeln(c);
val(c,a[j,i],p);
end;
{------------------------Vvod-matricy-incidentnosti------------------------}
if z='i' then
begin
write('Vvedite kolichestvo dug: ');
readln(p);
for i:=1 to p do
begin
repeat
write('Vvedite nomer ishodnoi vershiny dugi nomer ',i,': ');
readln(j);
until (j>0)and(j<=n);
repeat
write('Vvedite nomer konechnoi vershiny dugi nomer ',i,': ');
readln(j1);
until (j1>0)and(j1<=n);
a[j,j1]:=1;
end;
end;
{------------------------Vvod-sluchainoi-matrici---------------------------}
if (z<>'s')and(z<>'i') then
for i:= 1 to n do {cikl strok}
begin {*}
write('('); {*}
for j:=1 to n do {cikl stolbtsov}
begin {*}
a[i,j]:=random(2);{generiruem chisla v matrice}
write(a[i,j]:2,' '){vyvodim matricu}
end; {*}
write(');'); {okonchanie stroki}
writeln; {*}
end; {*}
readkey; {programma ozhidaet nazhatie}
{-------------------------Vkluchaem-grafiky---------------------------------}
Gd := Detect; {vkluchaetsya graf.rezhim}
InitGraph(Gd, Gm, 'c:\TP\BGI'); {*}
if GraphResult <> grOk then {*}
Halt(1); {*}
setbkcolor(cf); {cvet fona}
{---------------------------------------------------------------------------}
y:=(getmaxy div 2); {nahodim \/}
x:=(getmaxx div 2); {centr ekrana}
{--------------------Zanosim-koordinaty-vershin-v-otdelnuyu-matricu---------}
for i:=0 to n-1 do {cikl-vvod koordinat dlya vershin}
begin {*}
t:=(2*pi*i)/n; {vychislenie parametra}
b[i+1].x:=cos(t); {ordinata}
b[i+1].y:=sin(t); {abcissa}
end; {*}
{--------------------Chertim-osnovnye-linii---------------------------------}
setcolor(c1); {cvet linii}
for i:=1 to n do {cikly dlya chercheniya osnovhykh linii\/}
for j:=1 to n do {i chercheniya petel}
begin {*}
if a[i,j]=1 then {nahozhdenie edinic v matrice}
begin {*}
if i<>j then {esli ne petlya -> to}
begin {*}
line( round(x+b[j].x*rad), {liniya}
round(y+b[j].y*rad), {formula\/}
round(x+b[i].x*rad), {<centr>+<koord.vershiny>*<rasst.do centra>}
round(y+b[i].y*rad)); {*}
end {*}
else circle( round(x+b[j].x*rad*(1+pet)),{petlya(okruzhnost)}
round(y+b[j].y*rad*(1+pet)),{*}
round(rad*pet));{radius petli}
end; {*}
end; {*}
{---------------------Chertim-koncy-----------------------------------------}
setlinestyle(0,0,2);{menyaem stil linii na tolstyi}
setcolor(c2); {cvet koncov vektora}
for i:=1 to n do {novyi cikl dlya chercheniya koncov}
for j:=1 to n do {*}
if (a[i,j]=1)and(i<>j) then {esli ne petlya}
begin {*}
y0:=b[i].y-b[j].y;x0:=b[i].x-b[j].x;{*}
if x0<>0 {esli m/o delit}
then {*}
if x0>0 then alfa:=arctan(y0/x0) {sprava ot ordinaty}
else alfa:=pi+arctan(y0/x0) {sleva ot ordinaty}
else if y0>0 then alfa:=pi/2 else alfa:=3*pi/2;{nuli}
line( round(x+b[j].x*rad),{liniya 1}
round(y+b[j].y*rad),{*}
round(x+b[j].x*rad+((cos(alfa-u))*(d)*rad)),{*}
round(y+b[j].y*rad+((sin(alfa-u))*(d)*rad)));{*}
line( round(x+b[j].x*rad),{liniya 2}
round(y+b[j].y*rad),{*}
round(x+b[j].x*rad+((cos(alfa+u))*(d)*rad)),{*}
round(y+b[j].y*rad+((sin(alfa+u))*(d)*rad)));{*}
end; {*}
{--------------------Vyvodim-nomera-vershin---------------------------------}
for j:=1 to n do {novyi cikl dlya vivoda nomerov vershin}
begin {*}
setcolor(cn); {cvet nomerov vershin}
str(j,s); {*}
outtextxy(round(x+(b[j].x)*rad+3),round(y+(b[j].y)*rad+3), s);{*}
setcolor(cv); {cvet vershin}
circle(round(x+(b[j].x)*rad),round(y+(b[j].y)*rad),1){*}
end; {*}
{-------------------Vyvodim-matricu-v-graf.-rezhime-------------------------}
setcolor(ct); {cvet matrici}
outtextxy(xt,yt+round(((n-1)/2)*shag),'A(G)=');{vyvod 'A(G)='po vert.c-ru}
yt1:=yt; {ordinata sovpadaet}
for i:=1 to n do {novyi cikl vyvoda matrici}
begin{*}
xt1:=xt+5*shag; {shtoby ne bylo nalozheniya na 'A(G)='}
for j:=1 to n do {*}
begin {*}
str(a[i,j],s); {znachenie v stroku}
outtextxy(xt1,yt1, s);{vyvod po koordinatam}
xt1:=xt1+shag; {perehod po x}
end; {*}
yt1:=yt1+shag; {perehod po y}
end; {*}
setlinestyle(0,0,1);{*}
line(xt+(5+n)*shag-2,yt,xt+(5+n)*shag-2,yt+(n)*shag-2);{*}
line(xt+5*shag-2,yt,xt+5*shag-2,yt+(n)*shag-2);{*}
{-------------------Zavershenie---------------------------------------------}
setcolor(ct);
outtextxy(10,getmaxy-10,'Esche?(y,n) ');
repeat
c:=readkey;
until (c='n')or(c='y');
CloseGraph; {konec grafiki}
until c='n'; {*}
end. {vykhod}
{***************************END*OF*FILE*************************************}
{******************************************************}
uses Crt, Graph; {biblioteki}
{*****************************CONSTANTS*************************************}
const pi=3.1415; {chislo pi}
rad=120; {rasstoyanie ot centra do vershin
v pixelakh (luchshe menshe 200)}
cf=0; {cvet fona}
c1=5; {osnovnoi cvet dug}
c2=3; {cvet concov dug}
cv=1; {cvet vershin}
ct=7; {cvet teksta}
cn=4; {cvet nomerov vershin}
xt=10;yt=10; {koordinaty matricy}
d=0.1; {dlina konchikov}
u=0.2; {ugol(v radianakh)}
pet=0.2; {radius po otn. k petle}
shag=10; {rasst.m/u bukvami v matrice}
k=15; {max kol-vo vershin}
{*****************************TYPES*****************************************}
type koord=record{tip-koordinaty tochki}
x:real; {*}
y:real {*}
end; {*}
{*****************************VARIANTS**************************************}
var {*}
Gd, Gm: Integer; {graficheskie peremennye}
t:real; {parametr}
a:array[1..k,1..k]of integer;{matricy smezhnosti i incidentnosti}
b:array[1..k]of koord;{koordinatnye polozheniya vershin}
x,y:integer; {seredina ekrana}
i,j,j1:byte; {schetchiki}
n:integer; {kolichestvo vershin}
s:string; {dlya perevoda integer->string}
xt1,yt1:integer; {*}
c:char; {*}
x0,y0:real; {*}
alfa:real; {*}
z:char; {*}
p:integer; {*}
l1,l2:array[1..k*k]of boolean; {*}
{******************************MAIN*****************************************}
begin {*}
{---------------------------------------------------------------------------}
clrscr;
randomize; {generator sluch.chisel}
repeat {cikl zanovo}
clrscr;
writeln('Vyberite deistvie!');
writeln('S - vvesti matricu smezhnosti;');
writeln('I - vvesti matricu incidentnosti;');
writeln('Drugie knopki - sgenerirovat sluchainuiu matricu;');
writeln('Q - vychod iz programmy;');
z:=readkey;
if z='q' then break;
{------------------------Vvod-kolichestva-vershin---------------------------}
repeat
clrscr; {ochistka ekrana}
write('Vvedite kolichestvo vershin: ');
readln(n); {vvod kolichestva vershin}
until (n>0)and(n<k+1);{*}
{------------------------Vvod-matricy-smezhnosti---------------------------}
if z='s' then
for j:=1 to n do
for i:=1 to n do
begin
repeat
write('Vvedite A(',i,',',j,')=');
c:=readkey;
until (c='0')or(c='1');
writeln(c);
val(c,a[j,i],p);
end;
{------------------------Vvod-matricy-incidentnosti------------------------}
if z='i' then
begin
write('Vvedite kolichestvo dug: ');
readln(p);
for i:=1 to p do
begin
repeat
write('Vvedite nomer ishodnoi vershiny dugi nomer ',i,': ');
readln(j);
until (j>0)and(j<=n);
repeat
write('Vvedite nomer konechnoi vershiny dugi nomer ',i,': ');
readln(j1);
until (j1>0)and(j1<=n);
a[j,j1]:=1;
end;
end;
{------------------------Vvod-sluchainoi-matrici---------------------------}
if (z<>'s')and(z<>'i') then
for i:= 1 to n do {cikl strok}
begin {*}
write('('); {*}
for j:=1 to n do {cikl stolbtsov}
begin {*}
a[i,j]:=random(2);{generiruem chisla v matrice}
write(a[i,j]:2,' '){vyvodim matricu}
end; {*}
write(');'); {okonchanie stroki}
writeln; {*}
end; {*}
readkey; {programma ozhidaet nazhatie}
{-------------------------Vkluchaem-grafiky---------------------------------}
Gd := Detect; {vkluchaetsya graf.rezhim}
InitGraph(Gd, Gm, 'c:\TP\BGI'); {*}
if GraphResult <> grOk then {*}
Halt(1); {*}
setbkcolor(cf); {cvet fona}
{---------------------------------------------------------------------------}
y:=(getmaxy div 2); {nahodim \/}
x:=(getmaxx div 2); {centr ekrana}
{--------------------Zanosim-koordinaty-vershin-v-otdelnuyu-matricu---------}
for i:=0 to n-1 do {cikl-vvod koordinat dlya vershin}
begin {*}
t:=(2*pi*i)/n; {vychislenie parametra}
b[i+1].x:=cos(t); {ordinata}
b[i+1].y:=sin(t); {abcissa}
end; {*}
{--------------------Chertim-osnovnye-linii---------------------------------}
setcolor(c1); {cvet linii}
for i:=1 to n do {cikly dlya chercheniya osnovhykh linii\/}
for j:=1 to n do {i chercheniya petel}
begin {*}
if a[i,j]=1 then {nahozhdenie edinic v matrice}
begin {*}
if i<>j then {esli ne petlya -> to}
begin {*}
line( round(x+b[j].x*rad), {liniya}
round(y+b[j].y*rad), {formula\/}
round(x+b[i].x*rad), {<centr>+<koord.vershiny>*<rasst.do centra>}
round(y+b[i].y*rad)); {*}
end {*}
else circle( round(x+b[j].x*rad*(1+pet)),{petlya(okruzhnost)}
round(y+b[j].y*rad*(1+pet)),{*}
round(rad*pet));{radius petli}
end; {*}
end; {*}
{---------------------Chertim-koncy-----------------------------------------}
setlinestyle(0,0,2);{menyaem stil linii na tolstyi}
setcolor(c2); {cvet koncov vektora}
for i:=1 to n do {novyi cikl dlya chercheniya koncov}
for j:=1 to n do {*}
if (a[i,j]=1)and(i<>j) then {esli ne petlya}
begin {*}
y0:=b[i].y-b[j].y;x0:=b[i].x-b[j].x;{*}
if x0<>0 {esli m/o delit}
then {*}
if x0>0 then alfa:=arctan(y0/x0) {sprava ot ordinaty}
else alfa:=pi+arctan(y0/x0) {sleva ot ordinaty}
else if y0>0 then alfa:=pi/2 else alfa:=3*pi/2;{nuli}
line( round(x+b[j].x*rad),{liniya 1}
round(y+b[j].y*rad),{*}
round(x+b[j].x*rad+((cos(alfa-u))*(d)*rad)),{*}
round(y+b[j].y*rad+((sin(alfa-u))*(d)*rad)));{*}
line( round(x+b[j].x*rad),{liniya 2}
round(y+b[j].y*rad),{*}
round(x+b[j].x*rad+((cos(alfa+u))*(d)*rad)),{*}
round(y+b[j].y*rad+((sin(alfa+u))*(d)*rad)));{*}
end; {*}
{--------------------Vyvodim-nomera-vershin---------------------------------}
for j:=1 to n do {novyi cikl dlya vivoda nomerov vershin}
begin {*}
setcolor(cn); {cvet nomerov vershin}
str(j,s); {*}
outtextxy(round(x+(b[j].x)*rad+3),round(y+(b[j].y)*rad+3), s);{*}
setcolor(cv); {cvet vershin}
circle(round(x+(b[j].x)*rad),round(y+(b[j].y)*rad),1){*}
end; {*}
{-------------------Vyvodim-matricu-v-graf.-rezhime-------------------------}
setcolor(ct); {cvet matrici}
outtextxy(xt,yt+round(((n-1)/2)*shag),'A(G)=');{vyvod 'A(G)='po vert.c-ru}
yt1:=yt; {ordinata sovpadaet}
for i:=1 to n do {novyi cikl vyvoda matrici}
begin{*}
xt1:=xt+5*shag; {shtoby ne bylo nalozheniya na 'A(G)='}
for j:=1 to n do {*}
begin {*}
str(a[i,j],s); {znachenie v stroku}
outtextxy(xt1,yt1, s);{vyvod po koordinatam}
xt1:=xt1+shag; {perehod po x}
end; {*}
yt1:=yt1+shag; {perehod po y}
end; {*}
setlinestyle(0,0,1);{*}
line(xt+(5+n)*shag-2,yt,xt+(5+n)*shag-2,yt+(n)*shag-2);{*}
line(xt+5*shag-2,yt,xt+5*shag-2,yt+(n)*shag-2);{*}
{-------------------Zavershenie---------------------------------------------}
setcolor(ct);
outtextxy(10,getmaxy-10,'Esche?(y,n) ');
repeat
c:=readkey;
until (c='n')or(c='y');
CloseGraph; {konec grafiki}
until c='n'; {*}
end. {vykhod}
{***************************END*OF*FILE*************************************}