Морской бой (расставить одиночные корабли) - Prolog

Узнай цену своей работы

Формулировка задачи:

Вводим :show(10, [[S,2,8],[S,1,1],[S, 4, 7]]) получаем: S _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S _ _ _ _ _ _ _ _ _ _ _ _ _ , ну и дальше, 5 пустых рядов Вот мой код:
Листинг программы
  1. show(N,Figures):- show_index(Figures,N,N,1).
  2. show_index(_,_,0,0):-!.
  3. show_index(Figures,W,I,J):-member([F,I,J],Figures),!,write(' '),write(F), J1=J+1, show_index(Figures,W,I,J1).
  4. show_index(Figures,W,I,W1):- 1=W1-W,!,nl,I1=I-1,show_index(Figures,W,I1,0).
  5. show_index(Figures,W,I,J):-write(' -'), J1=J+1, show_index(Figures,W,I,J1).
Писал на Swi Prolog. Что ни делал, застреваю на последней строчки Помогите, люди добрые!
Размерность я сохраняю, так как должна задаваться произвольно.

Решение задачи: «Морской бой (расставить одиночные корабли)»

textual
Листинг программы
  1. show(N, Figures):- show_index(Figures, 1, 1, N).
  2.  
  3. get_symbol(Figures, I, J, F):-
  4.     member([F, I, J], Figures),
  5.     !.
  6. get_symbol(_, _, _, '-').
  7.    
  8. show_index(_, I, _, N):-
  9.     I > N,
  10.     !.
  11. show_index(Figures, I, J, N):-
  12.     J > N,
  13.     !,
  14.     nl,
  15.     I1 is I+1,
  16.     show_index(Figures, I1, 1, N).
  17. show_index(Figures, I, J, N):-
  18.     get_symbol(Figures, I, J, F),
  19.     write(' '), write(F),  
  20.     J1 is J+1,  
  21.     show_index(Figures, I, J1, N).

Объяснение кода листинга программы

  1. В первой строке кода определена функция show(N, Figures), которая выводит расположение кораблей в виде фигур на игральной доске размером NxN.
  2. Вторая строка кода вызывает функцию show_index(Figures, 1, 1, N), которая выводит первую фигуру (корабль) на позиции (1,1) и является начальной точкой для рекурсивного вызова функции.
  3. Третья строка кода определяет функцию get_symbol(Figures, I, J, F), которая проверяет, есть ли символ F на позиции (I,J) в списке фигур Figures. Если символ найден, функция возвращает true, в противном случае возвращает false.
  4. Четвертая строка кода определяет символ '-' как отдельный случай для функции get_symbol.
  5. Пятая строка кода определяет функцию showindex(Figures, I, , N), которая проверяет, если позиция I больше N, то есть если мы вышли за пределы доски, то возвращает false и прерывает выполнение функции.
  6. Шестая строка кода вызывает функцию get_symbol(Figures, I, J, F), которая выводит символ F на позиции (I,J) и является начальной точкой для рекурсивного вызова функции.
  7. Седьмая строка кода определяет переменную J1 как J+1.
  8. Восьмая строка кода вызывает функцию show_index(Figures, I, J1, N), которая выводит символ F на следующей позиции (I,J+1) и является начальной точкой для рекурсивного вызова функции.
  9. Девятая строка кода определяет функцию show_index(Figures, I, J, N), которая выводит символ F на позиции (I,J) и является начальной точкой для рекурсивного вызова функции.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут