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

> Прочтите прежде чем задавать вопрос!

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

> Графы. Фундаментальная система циклов связного графа
Юлия92
сообщение 6.05.2012 14:25
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский
Реальное имя: Джули

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


Написала программу по псевдокоду...Но результат работы процедур не выдается....Не пойму в чем проблема...Пседокод прилагаю..заранее благодарю за помощь))

uses crt;
const
max=50;
type
TMatrix = array [1..max,1..max] of byte;
TArray = array [1..max] of integer;

var
i,j,m,k,z : integer;
num,ftr,masQ: TArray;
Matrix : TMatrix; {матрица смежности}
n ,nz: integer; {количество вершин графа}

procedure save(i,j,nz:integer);
begin
z:=i;
while z<>j do
begin
masQ[nz]:=z;
z:=ftr[z];
masQ[nz]:=j;
masq[nz]:=i;
end;
end;
procedure cicle(i:integer);
var
j:integer;

begin
k:=k+1;
num[i]:=k;
for j:=1 to n do
begin
if (Matrix[i, j]<>0) and (num[j]=0) then
begin
ftr[j]:=i;
cicle(j);
end
else if ftr[i]<>j then
begin
nz:=nz+1;
save(i,j,nz);
end;
end;
end;

begin
clrscr;

writeln('=======Фундаментальная система циклов связного графа====');

write('Введите количество вершин графа:');
readln(n);
writeln('Заполнение матрицы смежности');
for i:=1 to n do
for j:=1 to n do
begin
Write('(',i,',',j,')=');
read(Matrix[i,j]);
if Matrix[i,j] <> 0 then Matrix[i,j]:=1;
end;
{$endif}
//вывод матрицы смежностиж;
writeln('Матрица смежности');
for i:=1 to n do
begin
for j:=1 to n do
write(Matrix[i,j],' ');
writeln;
end;
writeln;


writeln('Результат :');
n:=0; m:=0;
for i:=1 to n do
begin
num[i]:=0; {ни одна вершина не посещалась}
ftr[i]:=0;
n:=n+1;
m:=m+(n*n);
m:= round(m / 2);
k:=1;
end;
for i:=1 to m-n+1 do
begin
masQ[i]:=0;
k:=0;
nz:=0;
cicle(i);

//вывод массивов num ftr;
write('num: ');
for i:=1 to n do
write(num[i]:3);
writeln;
write('ftr: ');
for i:=1 to n do
write(ftr[i]:3);
writeln;
write('masQ: ');
for i:=1 to n do
write(masQ[i]:3);
writeln;
write('nz: ');
write(nz);
writeln;
readln;
end;
end.

Прикрепленное изображение


--------------------
ДЖУЛИ
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Федосеев Павел
сообщение 6.05.2012 21:11
Сообщение #2


Бывалый
***

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

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


1. Обрати внимание, что в этой задаче граф предлагается задавать не матрицей смежности, а списками смежности. Соответственно при инициализации в цикле m:=m+n*n; - совсем ахинея, не считая ввода матрицы смежностей. Хотя подойдёт и матрица, но в методичке предлагается научиться работать со списками.
2. Кроме того, masQ - это не массив чисел, а массив стеков. И в процедуре SAVE операция masQ[nZ]<=i означает занесение числа i в вершину стека (стека под номером nZ в массиве стеков masQ), а не примитивное присвоение. Соответственно и вывод на экран из стека и массива стеков будет иным.
3. В SAVE строка с номером 5 вне тела цикла.

Внимательно прочти теорию.

Нечестно манипулировать форумчанами выдавая механический перевод псевдокода за попытку разобраться в теме. Хотя несомненно много лучше постановки задачи с последующим "разрешением" сделать всё "под ключ".

Предвидя вопрос о стеке...
Стек можно реализовать в виде массива [0..max]. В [0] элементе будет храниться глубина стека, а начиная с 1-го элемента будет располагаться сам стек. Соответственно, массив стеков становится двумерным массивом. Занесение в стек номер nZ числа i будет
Inc(masQ[nZ][0]);
x:=masQ[nZ][0];
masQ[nZ][x]:=i;

И лучше всего эти строки оформить процедурой.

Или же стек можно реализовать в виде динамической структуры.

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

Сообщений в этой теме
Юлия92   Графы. Фундаментальная система циклов связного графа   6.05.2012 14:25
Федосеев Павел   1. Обрати внимание, что в этой задаче граф предлаг...   6.05.2012 21:11
Юлия92   спасибо большое за помощь,просто мне преподаватель...   8.05.2012 20:41
Федосеев Павел   Если непонятно - задавай вопросы. Конечно, если во...   8.05.2012 21:33
Юлия92   Если быть честной непонятно мне вообще в процедуре...   9.05.2012 11:26
Федосеев Павел   Я вижу так:procedure Save(i, j, nZ : integer); var...   9.05.2012 13:52
Юлия92   спасибо за помощь...как отблагодарить не знаю... :...   9.05.2012 17:55
Федосеев Павел   Недорого - 3 месяца активной помощи (ответов) стра...   9.05.2012 18:47
Юлия92   Ой этим я и так занимаюсь....помогаю бедным и обез...   10.05.2012 15:28
Юлия92   uses crt; const max=50; type TMatrix = arra...   10.05.2012 15:59
Федосеев Павел   masQ? Он представляет из себя массив от 1 до nZ - ...   10.05.2012 18:47
Юлия92   Павел это снова я с вопросами...))))Почему n потом...   16.05.2012 14:28
Федосеев Павел   Юль, ты делаешь все механически, не вникая. Мне пр...   16.05.2012 18:42
Юлия92   Спасибо тебе большое,но я вникала я перерыла все у...   17.05.2012 18:21


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

 



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