Помощь - Поиск - Пользователи - Календарь
Полная версия: !Графы Pascal!
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Tako
Здравствуйте ув. Форумчане, имеется задача -

"Проверьте, содержит ли граф, заданный с помощью списков
инцидентности, вершину, в которую входят дуги от всех остальных
вершин графа, но из которой не исходит ни одна дуга."

есть примерный код -

 Program SIAOD_LAB_7;
uses crt;
type list=^S;
S=record
inf:word;
adr1:list;
adr2:list;
end;
var graf:array[1..10] of list;
i,j,k,k1,o,os:integer;
kolver:integer;
PrSpis,PrSpisInc:list;
NeSpis:list;
ObSpis,NeObSpis:List;

procedure Spisok1(inf:Word);
var Spis:list;
begin
New(Spis);
Spis^.inf:=inf;
Spis^.Adr1:=Nil;
Spis^.Adr2:=Nil;
PrSpis^.Adr1:=Spis;
PrSpis:=Spis;
If k=0 Then NeSpis:=Spis;
Inc(k);
end;

procedure Spisok2(inf:Word);
var Spis:list;
begin
New(Spis);
Spis^.inf:=inf;
Spis^.Adr1:=Nil;
Spis^.Adr2:=Nil;
PrSpisInc^.Adr2:=Spis;
PrSpisInc:=Spis;
Inc(k1);
end;


procedure SpisokInc;
var ve,re:Integer; Spis:list;
begin
k:=0;
NeSpis:=Nil;
Spis:=NeSpis;
Write('Vvedite kol-vo vershin: ');
Read(kolver);
for i:=1 to kolver do
begin
Spisok1(i);
Write('Vvedite kol-vo reber dla vershini ', i,'= ');
Readln(re);
PrSpisInc:=PrSpis;
k1:=0;
for j:=1 to re do
begin
Write('Vvedite vershiny, v = ');
Readln(ve);
Spisok2(ve);
end;
end;
end;

procedure obhod;
var f:boolean; Spis, Spp:list; ve:integer;
begin
f:=false;
Spis:=NeSpis;
ve:=Spis^.inf;
Spp:=NeSpis;
for i:=1 to kolver do
begin
собственно начиная от сюда
if Spis^.inf=0 then
begin
writeln ('Y vershini net dug')
end
else
begin
writeln ('Dygi est');
end;
{while (Spis<>Nil) do
begin
ve:=Spis^.inf;
if not obhod(ve) then writeln('Vvvvvv');
Spis:=Spis^.Adr2;
end;
Spis:=Spp^.Adr1;
Spp:=Spis;}
И заканчивая тут я делаю что то не то....
end;
end;

begin
clrscr;
spisokinc;
if kolver<>0 then
begin

obhod;
end
else
Writeln('Versin net');
writeln('Nagmite klavishu');
repeat until keypressed;
END.



Вопрос - в чём тут ошибка, почему он не компилируется?


Федосеев Павел
Это ваша программа или "приобретённая" в интернете?

Так по ней замечаний порядком.
1. Выделяются две строки, которые не должны компилироваться:
- "собственно начиная от сюда"
- "И заканчивая тут я делаю что то не то...."
Если их удалить или закомментировать компиляция выполнится.
2. Воспользуйтесь форматтером исходного кода JCF
Форматтер кода
http://forum.sources.ru/index.php?showtopic=373648
3. Использование глобальных переменных ведёт к трудноуловимым побочным эффектам. Нужно избавиться от глобальных переменных.
4. Собственно не прослеживается алгоритм поиска компонент связности - не реализован сам поиск.
Tako
Здравствуйте, огромное спасибо за подробный комментарий, Вы можете сделать данные исправления в моём коде?

Добавлено через 9 мин.
Вот собственно эта ошибочка -



Нажмите для просмотра прикрепленного файла
Федосеев Павел
Форматировать код вы можете самостоятельно - скачайте JCF, настройте и форматируйте.
Удалить или сделать комментариями две строки - вы можете сделать самостоятельно.
Написать функцию поиска компонент связности для графа - я бы мог, но у меня начинается рабочая неделя, я в жизни обычный рабочий, без интернета на рабочем месте, с полной занятостью в течение дня. Да и стиль программирования у меня совершенно иной - я не делаю сразу мегапрограммы, создаю и отлаживаю по подпрограмме, потом стараюсь свести к обоснованному минимуму количество глобальных переменных, разделяю обработку и взаимодействие с пользователем.

Это к тому - если бы нужно было бы найти неточность в готовом алгоритме - помог бы сегодня, но полноценная программа - это долго. Постарайтесь решить самостоятельно, в вашем стиле. Алгоритм я описал на другом форуме - нет нужды повторяться. Что не будет получаться - помогу.

К тому же, я не понимаю назначение типов, переменных, процедур.

Код ошибки 217 - обращение по ненастроенному указателю в запрещённую область памяти. Если пойти пошаговой отладкой - можно увидеть строку, вызывающую ошибку. Проанализировать и устранить ошибку.

Если проблемы со структурами типа список - посмотрите в разделе FAQ FAQ.

Не делайте мегакод, отлаживайте по частям (как у нас на работе называют - выполнение по узловой наладки). У вас проблемы с вводом списков (судя по рисунку).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.