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

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

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

> Лабиринт, ПОмогите пожалуйста с лабиринтом
keng
сообщение 11.09.2011 11:42
Сообщение #1





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

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


Здравствуйте!Помогите пожалуйста с курсовым по Паскалю!Задание примерно состоит в том чтобы сделать программу которая ищет выход из лабиринта.Самому простейшему варианту буду очень рад(желательно с комментариями)Заранее спасибо!
PS Очень оЧЕНЬ надо А я в Паскале не бум бум)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
keng
сообщение 15.09.2011 10:07
Сообщение #2





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

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


Все таки вот этот меня зацепил чем то)Я попробывал прокоментировать :

uses
CRT; //ПОдключаем модуль с текстом

const
mx=100; nx=100;//задаем максимальный размер лабиринта
Left=1; Right=-1;//как вот это обозвать не знаю((
Trace=-1;

type
tLabyrinth=array[0..mx,0..nx]of integer;//Создаем тип лабиринт

var
m,n,m1,n1,x,y,dx,dy,k,l,x0,i,j:integer;//Описываем переменные
Lab:tLabyrinth;//привсваеваем Lab наш тип
f:text;//переменная файла
c:char;//символ

procedure Show;//процедура вывода на экран
var
i,j:integer;
begin
for j:=0 to n1 do begin
for i:=0 to m1 do begin//считываем матрицу
l:=Lab[i,j];//присваеваем переменной L каждый елемент массива
if l>0 then begin//если L больше нуля тогда закрашиваем этот елемент и рисуем звездочку
TextColor(l+7);
Write('*');
TextColor(7)
end
else if l=0 then Write(' ')\\если равно нулю то осавляем пустое место
else Write('#');//если больше нуля то пишем решетку
end;
WriteLn
end
end;


procedure Turn(dir:integer; var x,y:integer);//процедура поворота как она работает!?
var
z:integer;
begin
z:=x;//
x:=dir*y;//дир в будующем является const я правильно понимаю?!
y:=-dir*z
end;


procedure Step(var x,y,dx,dy:integer);//ПРоцедура шага
begin
Turn(Left,dx,dy);//идем на лево
while Lab[x+dx,y+dy]>0 do Turn(Right,dx,dy);//пока элементы не равны нулю (мы ходим только по нулям) поворачиваем вправо вправо
x:=x+dx;
y:=y+dy \\ эти две переменные для шага вперед при повороте правильно?
end;


begin
{Read the data file}
Assign(f,'labyrinth_0_0.dat');
ReSet(f);//считываем из файла лабиринт
m1:=-1;// у нас лабиринт окружен бордюрами поэтому ставим минус один
while not EoLn(f) do begin
Read(f,c);
Inc(m1);\\тут определяется количество столбцов
case c of
'1',' ': Lab[m1,0]:=1;
'0': Lab[m1,0]:=0
end
end;
ReadLn(f);
n1:=0;
while not EoF(f) do begin
Inc(n1);//определяем количество столбцов
for i:=0 to m1 do begin
Read(f,c);
case c of
'1',' ': Lab[i,n1]:=1;
'0': Lab[i,n1]:=0
end
end;
ReadLn(f)
end;//заполняем массив
m:=m1-1; n:=n1-1;//это тоже для бордюров или как?!
Close(f);

{Passing}
k:=0;//это переменная означет какой именно вход по счету
WriteLn('Labyrinth ',m,'x',n);
{Probing all the entries}


ВОт тут ваще запара))
for x0:=m downto 1 do if Lab[x0,0]=0 then begin ///мы ищем все входы в лабиринт
Inc(k);
x:=x0;
y:=1;
dx:=0;
dy:=1;\\\Объясните пожалуйста зачем мы вот это присваеваем все
while (y>0)and(y<n1) do begin\\\тут я так понимаю мы делаем так чтобы он просмотривал все лабиринты
Inc(Lab[x,y],Trace);\\\тут чтобы они не пересекались
Step (x,y,dx,dy);///действуем согласно основному алгоритму процедуры Step
end;
Write('Entry ',k,': ');\\\выводим номер лабиринта
if y=0 then WriteLn('No way!') else WriteLn('Passed.');\\\\ПОчему ве зависит от Y?????
for j:=1 to n do for i:=1 to m do if Lab[i,j]<0 then Lab[i,j]:=k+1;\\\это делается для выведения(для Show) а что именно тут происходит?
Show;\\выводим
Write('Press Enter..');
ReadLn;
WriteLn
end;
WriteLn('Done.')
end.




Люди помогите разобраться очень хочеться)))я конечно понимаю что половина моих коментариев полный бред прошу не судить строго))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
keng   Лабиринт   11.09.2011 11:42
TarasBer   1. Изучи основы Паскаля (время у тебя есть). 2. Из...   11.09.2011 12:28
Lapp   сделать программу которая ищет выход из лабиринта....   12.09.2011 3:36
keng   keng, давай начнем с описания лабиринта. Уточни ...   12.09.2011 16:04
TarasBer   Ну на один вопрос ты ответил, ладно. Остался второ...   12.09.2011 16:28
keng   У меня есть некоторые мысли но нужно в одну их соб...   13.09.2011 10:15
TarasBer   Надо дописать в начало процедуры вот это, иначе бу...   13.09.2011 11:26
keng   Да оставил если не сдам отчислят(( А как это все о...   13.09.2011 11:44
TarasBer   Ну пишешь всё это и в конце пишешь begin xk :=...   13.09.2011 12:57
keng   uses wincrt; label 1,2,3; var f:text; i,j,k,xn,jn,...   13.09.2011 13:07
Гость   uses CRT; const mx=100; nx=100; Left=1; Rig...   13.09.2011 14:24
Lapp   Я попробую сделать свой Ловлю на слове ). Я думаю...   13.09.2011 22:49
Lapp   [color=#009900]На всякую гениальную программу найд...   14.09.2011 4:00
keng   Все таки вот этот меня зацепил чем то)Я попробывал...   15.09.2011 10:07
TarasBer   > //дир в будующем является const Чего? Проце...   15.09.2011 10:19
keng   TarasBer Спасибо!Теперь это мне понятно!А ...   15.09.2011 10:59
Lapp   Послушай, keng, это же совсем (ну, хорошо, не совс...   16.09.2011 4:52


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

 



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