Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Rammstalex
1 / 1 / 1
Регистрация: 06.11.2012
Сообщений: 46
#1

Пояснить код и его суть - Turbo Pascal

07.06.2013, 18:32. Просмотров 444. Ответов 4
Метки нет (Все метки)

Обьясните пожалуйста что делает эта программа, пожалуйста подробнее, если нетрудно:


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
max: byte;
xf, yf: longint;
k: longint;
 
procedure c(x, y, step: shortint);
begin
if abs(x - xf) + abs(y - yf) <= max - step then
if (x = xf) and (y = yf) and (step = max) then begin inc(k); exit; end else
begin
c(x + 1, y, step + 1);
c(x - 1, y, step + 1);
c(x, y + 1, step + 1);
c(x, y - 1, step + 1);
end;
end;
 
begin
readln(max);
readln(xf, yf);
c(0, 0, 0);
if k <> 0 then writeln(k) else writeln('Impossible');
end.
Добавлено через 1 час 30 минут
*тему в шапку*

Добавлено через 1 час 2 минуты
вроде бы здесь что то про робота
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2013, 18:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Пояснить код и его суть (Turbo Pascal):

Пояснить суть структуры список
дошел до понимания необходимости знания про структуру список, хто знает как...

Пояснить суть алгоритма поиска с возвратом
Здравствуйте) Ни как не могу понять &quot;смысл&quot; алгоритма с возвратом... :( Какая у...

Нужно пояснить код программы
Необходимо пояснение некоторых строчек программы Program matritca; var a:...

Получить последовательность, которая состоит из нулей и единиц - пояснить код
Дано натуральное число n, действительная матрица размером n*2n, действительное...

Пояснить код программы
Описать процедуру, которая меняет в матрице местами столбцы с заданными...

Пояснить код работы с матрицей
Доброго времени суток. Учусь писать на Pascale, интересно, но есть много...

4
Mysterious Light
Эксперт по математике/физике
3924 / 1903 / 379
Регистрация: 19.07.2009
Сообщений: 2,914
Записей в блоге: 21
07.06.2013, 19:32 #2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Фразу «тема в шапку» не понял.
Если так перепишу код, понятно будет?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
max: byte;
xf, yf: longint;
 
(* мы можем прийти в точку (xf,yf) из (x,y) не более чем за max шагов *)
function c(x, y, step: shortint): boolean;
var A, B: boolean;
begin
  (* отстоит ли (x,y) от (xf,yf) менее чем на max-step *)
  A := abs(x - xf) + abs(y - yf) <= max - step;
  (* равны ли эти точки *)
  B := (x = xf) and (y = yf) and (step = max);
  (* мы пришли в точку (xf,yf) или можем в неё прийти, двигаясь одним из 4 направлений *)
  c := A and (B or
      c(x+1, y, step+1) or c(x-1, y, step+1) or 
      c(x, y+1, step+1) or c(x, y-1, step+1));
end;
 
begin
readln(max);
readln(xf, yf);
if c(0, 0, 0) then writeln(k) else writeln('Impossible');
end.
Если нет препятствий, можно эту программу написать проще.
0
Rammstalex
1 / 1 / 1
Регистрация: 06.11.2012
Сообщений: 46
07.06.2013, 19:49  [ТС] #3
Всеравно немного не понял.Тоесть вначале вводятся координаты откуда робот должен начать шаги и количество этих шагов? а в конце что выводится?Куда он должен прийти?
0
Mysterious Light
Эксперт по математике/физике
3924 / 1903 / 379
Регистрация: 19.07.2009
Сообщений: 2,914
Записей в блоге: 21
07.06.2013, 21:03 #4
Ой, недоглядел, там k выводится.
Я переписал функцию так, чтобы небыло ветвлений и прочих управляющих конструкций. В таком виде понятно, что завершается она, когда робот (или что там у нас) приходит в указанную точку.
В исходном же коде у нас при достижении (xf,yf) увеличивается k. Поэтому k имеет смысл количества путей, которыми может робот дойти из (0,0) в (xf,yf), с длиной, не превышающей max.
1
Rammstalex
1 / 1 / 1
Регистрация: 06.11.2012
Сообщений: 46
07.06.2013, 21:18  [ТС] #5
Большое вам спасибо, все доступно объяснили)))
0
07.06.2013, 21:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2013, 21:18
Привет! Вот еще темы с решениями:

Разобрать код транспонирования матрицы и пояснить результат
Почему две программы работают одинаково? var a: array of integer; ...

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

Найти n-ый элемент последовательности Фибоначчи и выяснить является ли он простым числом (Пояснить код)
Найти n-ый элемент последовательности Фибоначчи и выяснить является ли он...

Дан символ C. Вывести его код (то есть его номер в кодовой таблице)
Дан символ C. Вывести его код (то есть его номер в кодовой таблице).


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru