Задача про ферзей

Разработка программы в среде Pascal ABC.NET, которая обеспечит расстановку ферзей таким образом, что будут пробиваться все свободные позиции. Составление листинга реализации программы. Тестирование разработанного продукта и устранение его погрешностей.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 09.12.2013
Размер файла 19,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ

УНИВЕРСИТЕТ»

Факультет информационных технологий

Кафедра технологий программирования

РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА

по предмету «Структуры и алгоритмы обработки данных»

Тема: «Задача про ферзей»

Проверил: С.В. Кухта

Выполнила: студентка гр. 09-ИТ-3

Е.Л. Радченко

Новополоцк 2010

Содержание

1. Анализ задания и постановка задачи

1.1 Задание расчётно-графической работы

1.2 Проектирование программы

2. Реализация программы

3. Тестирование программы

Список используемой литературы

рascal программа ферзь

1. Анализ задания и постановка задачи

1.1 Задание расчетно-графической работы:

Имеется клеточное поле размером N*M, в некоторых позициях которого расставлено К чёрных фигур. Необходимо расставить минимальное количество белых ферзей, чтобы пробивались все свободные позиции поля.

1.2 Проектирование программы

Заданием расчётно-графической работы является создание программы, которая обеспечит расстановку ферзей таким образом, что будут пробиваться все свободные позиции.

Средой программирования выбран Pascal ABC.NET.

Проведя анализ поставленной задачи, для её решения будем использовать метод ветвей и границ. Все перебираемые варианты следует разбить на классы (блоки), сделать оценку для всех решений из одного класса, и если она больше ранее полученной, то отбросить все варианты из этого класса.

Алгоритм данной задачи следующий:

Задаются две матрицы: первая (главная или основная) матрица, на которой будут расставляться фигуры и вторая(побочная) - на которой будут производиться расчёты.

Первую матрицу заполняем “нулями”, которые показывают, что шахматное поле пустое и “минус единицами”, которые показывают, в каких позициях расставлены черные фигуры. Задание размеров матрицы и само заполнение матрицы происходит в результате считывания данных из текстового файла.

Далее делается проверка на пробиваемость клеток (подсчёт количества пробиваемых позиций) с каждой свободной позиции поля и значения которых записывается во вторую матрицу. В этой матрице производится поиск и максимального числа и координаты данной клетки. После того, как найдена клетка с наибольшей пробиваемостью, запомнив её позицию, в главное и побочное поле ставится ферзь. Производится очистка матрицы от лишних(ненужных) значений.

Поставив на главное поле ферзя, помечаем все его пробиваемые позиции “единицами”. Далее производится проверка на оставшиеся пустые клетки.

Если все клетки помечены, т.е. их значения равны “единицам”, то это значит, что поле полностью пробивается и расставлено минимальное количество ферзей - цель данной задачи достигнута и задача решена.

Если же помечены не все клетки, то проходим ещё раз по алгоритму (циклу), пока все клетки поля не станут помеченными. Для этого делается проверка на количество оставшихся “нулей” и далее производится подсчёт пробивания пустых клеток только с этих позиций. Следуя по алгоритму, находим минимальное количество ферзей и расставляем на шахматную доску.

2. Реализация программы

В результате считывания данных из текстового файла, задаётся матрица размером N*M, где в неё расставляются K чёрныx фигур с координатами(y,x).

В данной программе используются следующие процедуры:

Procedure Zapolnenie_PobPolya - процедура заполнения подсчётов во вторую матрицу. При использовании данной процедуры также использовалась процедура proxod(y,x,l,field);

Procedure proxod(y,x:integer; var l:integer; var field:TField) (листинг 1) - процедура подсчёта пробиваний свободных клеток с определенной позиции ;

Листинг 1 - Procedure proxod(y,x,l, field);

Procedure proxod(y,x:integer; var l:integer; var field:TField);

var y1,x1:integer;

begin

l:=0;

{proverka probivaniya po vertikali i gorizontali}

y1:=y-1;

while (field[y1,x]=0) or (field[y1,x]=1) do begin

field[y1,x]:=1;

inc(l); dec(y1);

end;

y1:=y+1;

while (field[y1,x]=0) or (field[y1,x]=1) do begin

field[y1,x]:=1;

inc(l); inc(y1);

end;

x1:=x-1;

while (field[y,x1]=0) or (field[y,x1]=1) do begin

field[y,x1]:=1;

inc(l); dec(x1);

end;

x1:=x+1;

while (field[y,x1]=0) or (field[y,x1]=1) do begin

field[y,x1]:=1;

inc(l); inc(x1);

end;

{proverka probivaniya po diagonalyam}

y1:=y-1; x1:=x-1;

while (field[y1,x1]=0) or (field[y1,x1]=1) do begin

field[y1,x1]:=1;

inc(l);dec(y1); dec(x1);

end;

y1:=y+1; x1:=x-1;

while (field[y1,x1]=0) or (field[y1,x1]=1) do begin

field[y1,x1]:=1;

inc(l);inc(y1); dec(x1);

end;

y1:=y-1; x1:=x+1;

while (field[y1,x1]=0) or (field[y1,x1]=1) do begin

field[y1,x1]:=1;

inc(l);dec(y1); inc(x1);

end;

y1:=y+1; x1:=x+1;

while (field[y1,x1]=0) or (field[y1,x1]=1) do begin

field[y1,x1]:=1;

inc(l);inc(y1); inc(x1);

end;

end;

Procedure Poisk_Max(bfield:TField) - процедура поиска клетки с максимальным пробиванием и вставка ферзя;

Procedure Ochistka(листинг 2) - процедура очистки полей от расчётов;

Листинг 2 - Procedure Ochistka;

Procedure Ochistka;

var y,x:integer;

begin

{ochistka polei ot informacii o probivanii}

for y:=1 to N do begin

for x:=1 to M do begin

if ((bfield[y,x]<>0)and(bfield[y,x]<>-1)and(bfield[y,x]<>-2)) then

bfield[y,x]:=0;

if ((field[y,x]<>-1)and(field[y,x]<>-2)) then

field[y,x]:=0;

end;

end;

end;

Procedure Posstanovka - процедура расстановки пометок (единиц) в пробиваемые позиции;

Procedure Proverka(var st:boolean) - процедура проверки на оставшиеся пустые клетки (равные нулю).

Если при проверке st=true, то алгоритм закончен и производится вывод на экран (в виде матрицы). Если при проверке выдается false, то идет Procedure Peremena (листинг 3);

Листинг 3 - Peremena;

Procedure Peremena; //preobrazovanie matrici dlya dalneishih raschetov

var x,y, y1, x1:integer;

Begin

for y:=1 to N do

for x:=1 to M do begin

if field[y,x]=0 then

field[y,x]:=2;

end;

for y:=1 to N do begin

for x:=1 to M do

if field[y,x]=2 then begin

l:=0;y1:=y;x1:=x;

proxodXY(y1,x1,l,field); //podschet probivaemih znachenui

bfield[y,x]:=l;

end;

end;

End;

И далее переходим обратно к процедуре Poisk_Max(bfield). Идем по циклу до тех пор, пока все клетки не станут помеченными, т.е. пробиваемыми.

3. Тестирование программы

В ходе тестирования программы обнаружились некоторые погрешности в расстановке минимального количества ферзей. После некоторых исправлений (вставки нескольких проверок) в процедуре Poisk_Max(bfield:TField), все погрешности были исправлены. Теперь данная программа работает нормально.

Список используемой литературы

1. Кормен Т., Лейзер Ч. Алгоритмы. Построение и анализ.

2. Зубов B.C. «Справочник программиста. Базовые методы решения графовых задач и сортировки»

3. Окулов «Программирование в алгоритмах»

4. Справка Pascal.ABC.NET

Размещено на Allbest.ru


Подобные документы

  • Методика и основные этапы разработки программы, которая бы наглядно продемонстрировала варианты размещения ферзей на шахматной доске, удовлетворяя правилам задачи. Исследование свойств расстановок мирных ферзей. Написание текста программы и ее листинг.

    контрольная работа [81,1 K], добавлен 29.04.2011

  • Разработка и тестирование программы на языке Pascal для поиска, вывода на экран и сохранения в файл списка книг с фамилиями авторов в алфавитном порядке, изданных после 2012 года. Разработка алгоритма и его описание. Инструкции по эксплуатации приложения.

    курсовая работа [903,0 K], добавлен 13.06.2013

  • Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.

    контрольная работа [360,4 K], добавлен 13.06.2012

  • Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.

    курсовая работа [446,0 K], добавлен 19.06.2014

  • Разработка программы в среде программирования Borland Pascal, которая является электронным тестирующим пособием в области химии для 8-10 классов. Написание алгоритма решения задачи, определение необходимых функций, процедур, модулей, файловых переменных.

    контрольная работа [389,3 K], добавлен 19.09.2010

  • Особенности поиска среднеарифметического значения элементов массива. Общая характеристика проблем разработки в среде Turbo Pascal программы упорядочивания массива по возрастанию. Рассмотрение основных этапов разработки программы на языке PASCAL.

    курсовая работа [896,7 K], добавлен 18.05.2014

  • Разработка программы построения графика экспериментальных точек и полинома регрессии второй степени в среде Turbo Pascal. Блок-схемы алгоритмов используемых процедур. Листинг программы. Составление вектора свободных членов и матрицы коэффициентов.

    курсовая работа [46,6 K], добавлен 24.11.2013

  • Описание этапов разработки программы "Справочник покупателя" в среде Turbo Pascal, которая может быть использована, как обычными покупателями, так и организациями. Проектирование интерфейса программы, запросов пользователя, руководства по использованию.

    курсовая работа [237,8 K], добавлен 11.01.2011

  • Составление программы на алгоритмическом языке Turbo Pascal. Разработка блок-схемы алгоритма её решения. Составление исходной Pascal-программы и реализация вычислений по составленной программе. Применение методов Рунге-Кутта и Рунге-Кутта-Мерсона.

    курсовая работа [385,0 K], добавлен 17.09.2009

  • Разработка алгоритма поставленной задачи по обработке числовой информации в среде Turbo Pascal 7.0 с базовым языком программирования Pascal, отладка программы, реализующей разработанный алгоритм. Описание структуры программы, ее вспомогательных процедур.

    курсовая работа [668,0 K], добавлен 25.02.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.