Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 13.04.2015
Сообщений: 1

Лабиринт задан двумерным массивом. Из левого верхнего угла лабиринта пройти в правый нижний

13.04.2015, 21:29. Показов 2740. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Лабиринт задан двумерным массивом. Из левого верхнего угла лабиринта пройти в правый нижний. Массив задается вводом. Элементы, по которым можно пройти, обозначаются "1", а по которым нельзя проходить - "0". Если проход возможен, то координаты каждого шага вывести на экран. Если пройти нельзя, то выдать соответствующее сообщение. Проход по диагонали невозможен. Программу я написал.Помогите переделать часть с выводом массива на экран из рекурсии.(Выделено красным)
П.С. она работает, но преподаватель придрался,что рекурсия не может вызывать вывод.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
uses
  crt;
 
const
  maxn = 20;
  dx: array [1..4] of integer = (-1,  0,  1,  0);
  dy: array [1..4] of integer = (0, -1,  0,  1);
  sx = 1;
  sy = 1;
 
type
  mas = Array [0..maxn + 1, 0..maxn + 1] of integer;
//процедура ввода значений
procedure input(var shah: mas; var n, m, finisj, finisi: integer; var done: boolean);
var
  err, i, j: integer;
  str: string;
begin
  for i := 0 to maxn + 1 do 
    for j := 0 to maxn + 1 do
      shah[i, j] := -1;
  write('n(количество строк) = ');
  repeat
    readln(str);
    val(str, n, err);
    if (n < 2) or (n > 20) or (err <> 0) then writeln('Некорректные данные, повторите ввод');
  until (n >= 2) and (n <= 20) and (err = 0);
  finisj := n;
  write('m(количество столбцов) = '); 
  repeat
    readln(str);
    val(str, m, err);
    if (m < 2) or (m > 20) or (err <> 0) then writeln('Некорректные данные, повторите ввод');
  until (m >= 2) and (m <= 20) and (err = 0);
  finisi := m;
  
  for i := 1 to m do
    for j := 1 to n do
    begin
      write('a[', i, ', ', j, '] = ');
      repeat
        readln(str);
        val(str, shah[i, j], err);
        if (shah[i, j] < 0) or (shah[i, j] > 1) or (err <> 0) then writeln('Некорректные данные, повторите ввод');
      until (shah[i, j] >= 0) and (shah[i, j] <= 1) and (err = 0);
    end;
  writeln;
  done := false;
end;
//процедура вывода массива на экран
procedure vivod_lab(var shah: mas; var n, m: integer;var done:boolean);
var
  i, j: integer;
begin
  writeln;
  done := true;
    writeln('vivod:');
  for i := 1 to n do
  begin
    for j := 1 to m do
      write(shah[i, j]:4);
    writeln;
  end;
end;
//рекурсивная процедура перехода по лабиринту
procedure search(xkor, ykor, def, n, m, finisj, finisi: integer; shah: mas;done:boolean);
var
  i: integer;
begin
  shah[ykor, xkor] := def;                         
  
  if (xkor = finisj) and (ykor = finisi) then         
    [B][COLOR="Red"]vivod_lab(shah, n, m,done)[/COLOR] [/B]                   
  else
    for i := 1 to 4 do                  
      if shah[ykor + dy[i], xkor + dx[i]] = 1 then   
        search(xkor + dx[i], ykor + dy[i], def + 1, n, m, finisj, finisi, shah,done);  
  shah[ykor, xkor] := 1;                         
end;
 
var
  shah: mas;
  n, m, finisj, finisi: integer;
  done: boolean;
 
begin
  clrscr;
  input(shah, n, m, finisi, finisj, done);
  vivod_lab(shah, n, m,done);
  search(sx, sy, 1, n, m, finisj, finisi, shah,done);
  if not done then writeln('Net takih.');
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2015, 21:29
Ответы с готовыми решениями:

Минимальное нахождение пути из верхнего левого угла в правый нижний
Помогите решить задачу на C# Windows Forms Произошло радиоактивное заражение местности. Составлена карта зараженности. Она...

Перемещение картинки по диагонали с верхнего левого угла в нижний правый и обратно
как сделать чтоб картинка перемещалась по диагонали с верхнего левого угла в нижний правый и обратно? при помощи таймера и цикла?

Программа, где точка перемещается из левого верхнего угла в правый нижний угол
Помогите написать программу, где точка пробегает из левого верхнего угла в правый нижний угол.

1
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
14.04.2015, 10:48
Цитата Сообщение от methanol Посмотреть сообщение
П.С. она работает, но преподаватель придрался,что рекурсия не может вызывать вывод.
странная придирка...
тогда заводи отдельный массив, в него вываливай ходы и в конце печатай или его или выхода нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2015, 10:48
Помогаю со студенческими работами здесь

Сколько различных путей существует добраться из левого верхнего угла в правый нижний?
Всем привет! Недавно решал одну любопытную задачу, но к сожалению не смог решить на 100%. Вот условие: В индийском храме пол квадратной...

Создать прямоугольник через канвас и задать его перемещение с левого верхнего угла в правый нижний
Требуется создать прямоугольник через канвас и задать его перемещение с левого верхнего угла в правый нижний, используя цикл. Путь...

Найти кратчайший путь из левого верхнего в правый нижний элемент матрицы
Во входном файле задается число n&lt;=200, равное размерности квадратной матрицы. Матрица заполняется случайными числами. Найти кротчайший...

Определить, сколько существует различных маршрутов, ведущих из левого верхнего в правый нижний угол
Дана прямоугольная доска N × M (N строк и M столбцов). В левом верхнем углу находится шахматный конь, которого необходимо переместить в...

Изобразить шарик двигающийся из левого верхнего угла экрана в правый верхний угол
1.изобразить шарик двигающийся из левого верхнего угла экрана в правый верхний угол; 2.Изобразить шарик,двигающийся из левого верхнего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru