В чём можно запустить эту программу? - Pascal
Формулировка задачи:
В чём это можно запустить
{uses crt;} const n=100; type used=array[1..n] of boolean; var t:byte; graf:array[1..n,1..n] of byte; cherga:array[1..n] of byte; d1,d2,u:used; i,j,k,g,h:integer; dvodolnyj:boolean; procedure rec(x:byte; first:boolean); begin if dvodolnyj then begin u[x]:=true; for i:=1 to n do if graf[x,i]=1 then begin if not(u[i]) then begin if first then d2[i]:=true else d1[i]:=true; rec(i,not first); end else if (d1[x] AND d1[i]) OR (d2[x] AND d2[i]) then begin writeln('Graf NE dvodolnyj!'); dvodolnyj:=false; readln; exit; end; end; end; end; procedure vGlyb; begin dvodolnyj:=true; d1[1]:=true; rec(1,true); if dvodolnyj then begin writeln('Graf dvodolnyj'); for i:=1 to n do if d1[i] then write(i:2); writeln; for i:=1 to n do if d2[i] then write(i:2); readln; end; end; procedure zero_Vglyb; begin t:=1; for i:=1 to n do begin u[i]:=false; d1[i]:=false; d2[i]:=false; end; for i:=1 to n do for j:=1 to n do graf[i,j]:=0; end; procedure push(x:byte); var i:integer; begin cherga[t]:=x; inc(t); end; function pop:byte; var i,x:byte; begin x:=cherga[1]; for i:=2 to n do cherga[i-1]:=cherga[i]; dec(t); pop:=x; end; function emptyqq:boolean; begin if t=1 then emptyqq:=true else emptyqq:=false; end; procedure vShyrynu; var x,i,j:byte; begin dvodolnyj:=true; push(1); d1[1]:=true; u[1]:=true; while not emptyqq do begin x:=pop; for i:=1 to n do if graf[x,i]=1 then begin if not(u[i]) then begin if d1[x] then d2[i]:=true else d1[i]:=true; u[i]:=true; push(i); end else if (d1[x] AND d1[i]) OR (d2[x] AND d2[i]) then begin writeln('Graf NE dvodolnyj!'); readln; exit; end; end; end; writeln('Graf dvodolnyj'); for i:=1 to n do if d1[i] then write(i:2); writeln; for i:=1 to n do if d2[i] then write(i:2); readln; end; procedure zero_Vshur; var i,j:byte; begin t:=1; for i:=1 to n do begin u[i]:=false; d1[i]:=false; d2[i]:=false; end; for i:=1 to n do begin cherga[i]:=0; for j:=1 to n do graf[i,j]:=0; end; end; procedure test; var k:integer; begin Write('Vvedit kilkist reber: '); readln(k); for i:=1 to k do begin Write('Vvedit cherez probil vershunu ',i,' rebra: '); Readln(g,h); graf[g,h]:=1; graf[h,g]:=1; end; end; var key:char; BEGIN while key<>'3' do begin { clrscr;} writeln('1. V SHURUNY'); writeln('2. V GLYBUNY'); writeln('3. EXIT'); write('>>>'); read(key); case key of '1':begin { clrscr;} zero_Vglyb; test; vGlyb; end; '2':begin {clrscr;} zero_Vshur; test; vShyrynu; end; end; end; END.
Решение задачи: «В чём можно запустить эту программу?»
textual
Листинг программы
{uses crt;} const n = 100; type used = array[1..n] of boolean; var t: byte; graf: array[1..n, 1..n] of byte; cherga: array[1..n] of byte; d1, d2, u: used; i, j, k, g, h: integer; dvodolnyj: boolean; procedure rec(x: byte; first: boolean); var i: integer; begin if dvodolnyj then begin u[x] := true; for i := 1 to n do if graf[x, i] = 1 then begin if not (u[i]) then begin if first then d2[i] := true else d1[i] := true; rec(i, not first); end else if (d1[x] AND d1[i]) OR (d2[x] AND d2[i]) then begin writeln('Graf NE dvodolnyj!'); dvodolnyj := false; readln; exit; end; end; end; end; procedure vGlyb; var i: integer; begin dvodolnyj := true; d1[1] := true; rec(1, true); if dvodolnyj then begin writeln('Graf dvodolnyj'); for i := 1 to n do if d1[i] then write(i:2); writeln; for i := 1 to n do if d2[i] then write(i:2); readln; end; end; procedure zero_Vglyb; var i, j: integer; begin t := 1; for i := 1 to n do begin u[i] := false; d1[i] := false; d2[i] := false; end; for i := 1 to n do for j := 1 to n do graf[i, j] := 0; end; procedure push(x: byte); var i: integer; begin cherga[t] := x; inc(t); end; function pop: byte; var i, x: byte; begin x := cherga[1]; for i := 2 to n do cherga[i - 1] := cherga[i]; dec(t); pop := x; end; function emptyqq: boolean; begin if t = 1 then emptyqq := true else emptyqq := false; end; procedure vShyrynu; var x, i, j: byte; begin dvodolnyj := true; push(1); d1[1] := true; u[1] := true; while not emptyqq do begin x := pop; for i := 1 to n do if graf[x, i] = 1 then begin if not (u[i]) then begin if d1[x] then d2[i] := true else d1[i] := true; u[i] := true; push(i); end else if (d1[x] AND d1[i]) OR (d2[x] AND d2[i]) then begin writeln('Graf NE dvodolnyj!'); readln; exit; end; end; end; writeln('Graf dvodolnyj'); for i := 1 to n do if d1[i] then write(i:2); writeln; for i := 1 to n do if d2[i] then write(i:2); readln; end; procedure zero_Vshur; var i, j: byte; begin t := 1; for i := 1 to n do begin u[i] := false; d1[i] := false; d2[i] := false; end; for i := 1 to n do begin cherga[i] := 0; for j := 1 to n do graf[i, j] := 0; end; end; procedure test; var k, i: integer; begin Write('Vvedit kilkist reber: ');readln(k); for i := 1 to k do begin Write('Vvedit cherez probil vershunu ', i, ' rebra: ');Readln(g, h); graf[g, h] := 1; graf[h, g] := 1; end; end; var key: char; begin while key <> '3' do begin { clrscr;} writeln('1. V SHURUNY'); writeln('2. V GLYBUNY'); writeln('3. EXIT'); write('>>>'); read(key); case key of '1': begin { clrscr;} zero_Vglyb; test; vGlyb; end; '2': begin {clrscr;} zero_Vshur; test; vShyrynu; end; end; end; end.
Объяснение кода листинга программы
- Объявляются константа
n
со значением 100 и типused
- массивboolean
от 1 доn
- Объявляются переменные:
t
- байт,graf
- массив от 1 доn
и от 1 доn
байтов,cherga
- массив от 1 доn
байтов,d1
,d2
,u
- массивused
,i
,j
,k
,g
,h
- целые числа,dvodolnyj
- булево значение - Объявляются процедуры:
rec
,vGlyb
,zero_Vglyb
,push
,pop
,emptyqq
,vShyrynu
,zero_Vshur
,test
- Объявляется переменная
key
- символьное значение - В цикле
while
выполняются действия пока значение переменнойkey
не равно '3' - Выполняется вывод на экран пунктов меню и ввод значения
key
(выбор пункта меню) - В зависимости от выбранного пункта выполняются различные процедуры:
zero_Vglyb
,test
,vGlyb
,zero_Vshur
,vShyrynu
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д