1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здравствуйте!Помогите пожалуйста с курсовым по Паскалю!Задание примерно состоит в том чтобы сделать программу которая ищет выход из лабиринта.Самому простейшему варианту буду очень рад(желательно с комментариями)Заранее спасибо! PS Очень оЧЕНЬ надо А я в Паскале не бум бум)
На всякую гениальную программу найдется еще более гениальная! - (С) Lapp )) Вот, набросал еще один вариантик простейшего лабиринта (главным образом потому, что лень было разбираться с тем)).
На квадратной сетке, каждая ячейка есть либо стена, либо свободное пространство. Фомируется случайным образом с заданной плотностью стен. Принцип - правило одной руки (будем считать - левой). Реализовано оно тут примерно так.
Лабиринт - это массив m на n. Начальные значения задаются так: 0 - свободное пространство (а также - счетчик, сколько раз были на этой клетке). Wall (тут равно 8) - стена. При прохождении "свободное пространство" принимает значения от 0 до 4, увеличиваясь при каждом заходе на клетку. Суть в том, что если мы заходим на некоторую клетку более 4 раз (на самом деле, это может случиться только с начальной клеткой) - это значит, что лабиринт непроходим (т.к. мы уже перебрали все четыре пути, ведущие из нее).
Вот алгоритм: 1. Сначала входим на начальную клетку (она должна быть свободной) с произвольного направления (его можно выбирать случайно, но у меня просто постоянное). 2. Поворачиваемся налево. 3. Делаем шаг вперед. 4. Если оказались внутри стены (не пугайся, можешь считать, что ходишь по нарисованному лабиринту)), то поворачиваемся назад и переходим к п.3. 5. Если оказались в на свободном пространстве - проверяем, не финиш ли это (B). 6. Если финиш - подготавливаем сообщение и выходим из цикла. 7. Если не финиш - смотрим, сколько раз тут были (значение массива). 8. Если уже были тут 3 раза (то есть пришли в четвертый раз) - значит, лабиринт непроходим (подготавливаем сообщение и выходим из цикла). 9. Если меньше 3 раз, то увеличиваем значение массива. 10. Переходим к п.2
При плотности заполнения 35% получаются довольно интересные конфигурации иногда )). Вот, например, конфигурация непроходимая:
А вот код. Пока без комментов )). Давай договоримся так: попробуй сначала разобраться сам (используя алгоритм, приведенный выше). Можешь сделать свои комменты - я посмотрю, правильно или нет. Если не сможешь разобраться - задавай вопросы.
// The Simplest Maze Ever // Wall Follower, or one-hand rule // by Lapp, forum.pascal.net.ru // Sep 13, 2011
procedure Show; var i,j: integer; begin WriteLn; for i:=0 to m+1 do begin for j:=0 to n+1 do begin if (i=0) or (i>m) or (j=0) or (j>n) then Write(Chr(219)) else if (i=x1) and (j=y1) then Write('A') else if (i=x2) and (j=y2) then Write('B') else Write(Chars[Maze[i,j]]) end; Writeln end; WriteLn end;
var x,y,dx,dy,b: integer; s: string;
begin Randomize; for x:=1 to m do for y:=1 to n do if Random(100)<36 then Maze[x,y]:= Wall else Maze[x,y]:= 0; Maze[x1,y1]:= 0; Show; x:= x1; y:= y1; dx:= 0; dy:= 1; repeat if (x<1) or (y<1) or (m<x) or (n<y) or (Maze[x,y]=Wall) then begin dx:= -dx; dy:= -dy end else if (x=x2) and (y=y2) then begin s:= 'Escaped! :-) Hei stupid Minotaur - kiss my ass!'; break end else if Maze[x,y]=4 then begin s:= 'No way.. :-( The mean Minotaur got me..'; break end else begin Inc(Maze[x,y]); b:= dx; dx:= -dy; dy:= b end; x:= x+dx; y:= y+dy until false; Writeln(s); Show; Readln end.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой