1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 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.pascalnet.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.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой