IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> !Графы Pascal!, Проверьте, содержит ли граф, заданный с помощью списков инцидентности,
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Здравствуйте ув. Форумчане, имеется задача -

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

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

 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.



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




Сообщение отредактировано: Tako -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 475
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


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

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

Сообщение отредактировано: Федосеев Павел -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Здравствуйте, огромное спасибо за подробный комментарий, Вы можете сделать данные исправления в моём коде?

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



Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 475
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


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

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

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

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

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

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

Сообщение отредактировано: Федосеев Павел -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 16.07.2018 13:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"