Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы программирования. Учебное пособие-1

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
951 Кб
Скачать

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

Выделение основных подзадач, которые надо решить, чтобы достичь результата.

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

Этот подход позволяет разбить решение задачи на части, каждая из которых решает самостоятельную подзадачу. В результате решение сложной задачи разбивается на решение более простых подзадач, которые можно решать независимо друг от друга. Решение каждой подзадачи можно оформить в виде отдельных подпрограмм. Связи по управлению между ними осуществляются посредством обращений к ним, передача данных от одной подпрограммы к другой производится через параметры.

Структуры данных

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

21

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

Внутреннее представление данных – это представление в оперативной памяти (ОП) компьютера средствами языка программирования. Внутреннее представление должно отвечать требованиям эффективности алгоритма, оно влияет как на время решения задачи, так и на объем используемой ОП. Надлежащий выбор внутреннего представления данных, как правило, обеспечивает более эффективный способ обращения к данным (например, при использовании массивов прямой способ обращения) и меньший объем используемой памяти. В ПЗ требуется использовать статические типы данных. Например, в задаче «Определить радиус и центр окружности, на которой лежит наибольшее число точек заданного на плоскости множества точек» внутреннее представление количества точек – это простая переменная целого типа, а множества точек – это двумерный массив (матрица), первая строка которой содержит абсциссы, а вторая – ординаты точек, количество столбцов соответствует количеству точек множества. Максимальный размер массива ограничивается доступным размером оперативной памяти.

Выбор форм представления исходных данных и результатов задачи необходимо обосновать, отметив их достоинства и недостатки.

Описание алгоритма

На разработку алгоритма существенное влияние оказывает следующее.

1. Средства, предоставляемые тем языком, на котором алгоритм будет запрограммирован. Поэтому правильное использование управляющих структур обеспечивает получение хорошо структурированного

22

алгоритма и программы, которая наглядна, легко читается и понимается не только автором, но и другими программистами (в частности, преподавателем).

2. Внутреннее представление данных (типы данных), которое будет использовано для отображения исходных данных и результатов задачи.

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

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

На каждом шаге декомпозиции алгоритм необходимо описывать. Важно понимать, что это описание предназначено для человека. По этому описанию человек должен получить представление об общей структуре алгоритма, смысле его шагов и их логической взаимосвязи. Сохранение достаточно высокого уровня описания алгоритма облегчает его обоснование. Шаги алгоритма должны описываться в терминах тех объектов и отношений между ними, о которых идет речь в формулировкезадачи(наязыкепредметнойобласти).Алгоритмможетбытьописан на языке блок-схем или псевдоязыке (псевдо C). Степень детализации при описании алгоритма определяется так, чтобы было ясно, какие действия надо выполнять, реализуя выбранный метод решения, и в чем заключаются основные проблемы данной задачи. Например, для задачи «Определить радиуси центр окружности, на которой лежит наибольшее число точек заданного на плоскости множества точек» шаги алгоритма следует описывать как действия над точками множества, но не как действия с внутренним представлением множества точек, например с двумерным массивом, в котором хранятся абсциссы и ординаты точек.

23

Разработка и структура программы

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

Принципы модульного программирования являются поддержкой пошаговой разработки алгоритма. Применение декомпозиции при решении задачи дает некоторое число отдельных подзадач. Полученные при пошаговой разработке подзадачи необходимо оформить в виде отдельных подпрограмм. Следует стремиться к тому, чтобы каждая подпрограмма имела один вход и один выход и выполняла самостоятельное действие, которое можно описать одной фразой. Необходимо стремиться к тому, чтобы подпрограммы были максимально гибкими. В частности, они не должны иметь глобальных объектов, за исключением общих для всех подпрограмм переменных. Операции по вводу-вы- воду не должны быть рассеяны по всей программе и должны быть отделены от ее частей с вычислениями.

Главную подпрограмму нужно рассматривать как краткое описание решения всей задачи. Ее действия – это вызовы подпрограмм, реализующих решение отдельных подзадач.

Для повышения наглядности программы рекомендуется следующее.

снабжать текст программы комментариями, кратко и точно поясняющими основное назначение фрагмента программы (не следует делать их слишком длинными и частыми);

использовать содержательно осмысленные (но не чрезвычайно длинные) имена переменных и функций;

при расположении операторов, реализующих базовые управляющие структуры, использовать отступы в три пробела для выделения внутренней конструкции управляющей структуры, и пустую строку – для отделения одной управляющей структуры от другой (это позволяет структурировать сам текст программы);

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

Описание структуры программы включает описание ее составных частей – подпрограмм. Оно позволяет проконтролировать взаимодействие отдельных частей программы. Описание каждой функции включает ее

24

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

Отладка программы

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

Набор тестов должен быть необходимым и достаточным, включающим общие, частные и особые случаи решения. Тесты перечисляются, как правило, от простых к сложным. При выполнении ПЗ считается, что входные данные корректны. Как правило, сложная задача не всегда имеетрешение,поэтомудолжны бытьтестыдляслучаев,когдарешение есть и когда его нет. Когда в задаче используются сложные данные, то возможно много вариантов их значений. Например, если входные данные – это множество точек на плоскости, то это множество может быть пустым или непустым и состоящим только из одной точки или нескольких точек. В случае пустого множества задача, как правило, не имеет решения. В случае множества, состоящего из одной точки, решение может быть получено более простым способом (частное решение), чем для множества, число точек в котором больше единицы. Таким образом, одна из задач, которая решается при построении набора тестов, состоит в том, чтобы проверить адекватность разработанного алгоритма возможному разнообразию входных данных.

Есливпрограммеестьветвления(циклы),тодолжныбытьтестыдля прохождения каждой из ветвей (условий управления циклом).

Другой важный вопрос, решаемый при выборе тестов, это количественные ограничения на размеры используемых в программе данных и на величину значений (ограничения сверху для корректно заданных данных). Обязательно должны быть тесты, в которых проверяется поведение программы при граничных значениях. Но следует отказаться от тестов, для которых время решения не укладывается в разумные рамки (не более 20 мин для ПЗ).

25

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

ОФОРМЛЕНИЕ ОТЧЕТА И ЗАЩИТА ПЗ

Отчет включает следующие разделы.

1.Условие задачи.

2.Анализ задачи.

3.Структуры данных.

4.Алгоритм решения задачи.

5.Структура программы.

6.Текст программы.

7.Набор тестов.

8.Результаты работы программы.

Отчет оформляется на стандартных листах бумаги формата А4

(297 210 мм) в напечатанном виде. Записи ведутся только на одной стороне листа.

Титульный лист может быть оформлен по образцу, приведенному на рисунке. Однако рекомендуется использовать образец титульного листа, опубликованный на личной странице преподавателя в системеЦИУ НГТУ.

Отчет по ПЗ сдается преподавателю на проверку в соответствии с графиком выполнения ПЗ (график смотрите в описании ЭУМК по дисциплине, п. 5).

Защита ПЗ состоит в ответе на вопросы по каждому пункту отчета. К защите допускаются студенты, выполнившие задание в срок, установленный графиком, и оформившие отчет по работе в соответствии с требованиями.

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

Среднее количество баллов выставляется, если студент выполнил ПЗ без замечаний и грамотно ответил на 50 % вопросов преподавателя.

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

26

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ

Практическое задание по дисциплине «Основы программирования»

Факультет:

ПМИ

Группа:

ПМ-71

Студент:

Иванов А.А.

Преподаватель:

Петров В.В.

НОВОСИБИРСК

2020

Образец титульного листа

27

ВАРИАНТЫ ДЛЯ ПЗ

Геометрия

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

2.Определить радиус и центр окружности, на которой лежит наибольшее число точек заданного на плоскости множества точек.

3.Задано множество М точек на плоскости. Определить, верно ли,

что для каждой точки A M существует точка B M (A B ) такая,

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

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

5.В множестве точек на плоскости найти пару точек с максимальным расстоянием между ними.

6.Расстояние между двумя множествами точек – это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние между двумя заданными множествами точек на плоскости.

7.Многоугольник(необязательновыпуклый)заданнаплоскостиперечислением координат вершин в порядке обхода его границы. Определить площадь многоугольника.

8.Задано множество точек М в трехмерном пространстве. Найти такую из них, что шар заданного радиуса с центром в этой точке содержит максимальное число точек из М.

9.Задано множество прямых на плоскости (коэффициентами своих уравнений). Подсчитать количество точек пересечения этих прямых.

10.В трехмерном пространстве задано множество материальных точек. Найти ту из них, которая наиболее близко расположена к центру тяжести этого множества.

11.В трехмерном пространстве задано множество материальных точек. Каждая из точек с максимальной массой исчезает, теряя десятую

28

часть своей массы и раздавая оставшуюся массу поровну всем остальным, более «легким» точкам. Определить суммарную массу множества материальных точек в тот момент, когда все оставшиеся в ней точки имеют одинаковую массу.

12.Заданы два множества точек на плоскости. Построить пересечение и разность этих множеств.

13.Множество точек на плоскости назовем регулярным, если вместе

скаждой парой различных точек оно содержит также еще одну – третью вершину правильного треугольника с вершинами в этих точках. Определить, регулярно ли заданное множество точек.

14.На плоскости задано п множеств по m точек в каждом. Среди точек первого множества найти такую, которая принадлежит наибольшему количеству множеств.

15.На плоскости заданы множество точек А и множество окружностей В. Найти две такие различные точки из A, что проходящая через них прямая пересекается с максимальным количеством окружностей из В.

16.На плоскости заданы множество точек А и множество прямых В. Найти две такие различные точки из A, что проходящая через них прямая параллельна наибольшему количеству прямых из В.

17.На плоскости заданы множество точек А и точка d вне его. Подсчитать количество (неупорядоченных) различных троек точек a, b, c из А таких, что четырехугольник abcd является параллелограммом.

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

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

20.Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через которые проходит каждая из плоскостей. Выбрать максимальное подмножество попарно непараллельных плоскостей.

21.Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно п точек этого множества.

29

22.Выбрать три разные точки заданного на плоскости множества точек, составляющие треугольник наибольшего периметра.

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

24.Дано 3n точек на плоскости, причем никакие три из них не лежат на одной прямой. Построить множество n треугольников с вершинами

вэтих точках так, чтобы никакие два треугольника не пересекались и не содержали друг друга.

25.Задано множество точек на плоскости. Выбрать из них четыре разные точки, которые являются вершинами квадрата наибольшего периметра.

26.Из заданного множества точек на плоскости выбрать три разные точки А, В, С так, чтобы внутри треугольника ABC содержалось максимальное количество точек этого множества.

27.Из заданного множества точек на плоскости выбрать две различные точки так, чтобы окружности заданного радиуса с центрами в этих точках содержали внутри себя одинаковое количество заданных точек.

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

29.Даны два непересекающихся конечных множества точек на плоскости. Определить окружность, проходящую через k (k 3) точек каждого из множеств.

30.Даны два множества точек на плоскости. Из первого множества выбрать три различные точки так, чтобы треугольник с вершинами в этих точках содержал (строго внутри себя) равное количество точек первого и второго множеств.

31.Даны два множества точек на плоскости. Найти центр и радиус окружности, проходящей через k (k 3) точек первого множества и содержащей строго внутри себя m точек второго множества,

32.На плоскости задано множество попарно различных прямых (коэффициентамисвоихуравнений).Указатьсрединихтупрямую,которая имеет максимальное число пересечений с остальными прямыми.

33.Даны два множества точек на плоскости. Указать центр и радиус окружности, проходящей через k (k 3) точек первого множества и содержащей строго внутри себя равное число точек первого и второго множеств.

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]