- •Билет 1. Базовые понятия пpогpамиpования. Действие, процесс, алгоритм, программа.
- •Билет 2. Функциональная структура эвм. Основные устройства эвм, их функциональные характеристики.
- •Билет 3. Представление данных в памяти эвм. Понятие переменной, константы, типа, диапазона значений.
- •Билет 4. Требования к качеству программного продукта. Основные критерии качества.
- •Билет 5. Этапы разработки программ. Роль каждого этапа в получении качественного программного продукта. Технология программирования.
- •Билет 6. Главная метафора процедурно-ориентированных языков. Стиль программирования.
- •Билет 7. Внешняя спецификация задачи, ее роль в процессе разработки программы. Состав внешней спецификации, структура документа.
- •Билет 8. Состав языка программирования. Синтаксис и семантика языка. Метаязык для записи синтаксических правил.
- •Билет 9. Структурные уровни языка программирования. Уровни языка Паскаль. Особенности языка Паскаль.
- •Билет 10. Простейшие конструкции языка Паскаль. Основные символы, слова, выражения.
- •Билет 11. Элементарные инструкции языков программирования. Особенности кодирования инструкции на язык Паскаль.
- •Билет 12. Кодирование арифметических, логических и литерных инструкций на язык Паскаль.
- •Билет 13. Организация ввода данных из стандартного файла input. Процедуры ввода.
- •Билет 14. Ввод данных из текстового файла в Турбо-среде.
- •Билет 15. Вывод данных в текстовый файл в среде Турбо-Паскаль.
- •Билет 16. Концепция структурного программирования. Принцип Дейкстры.
- •Билет 17. Основные правила композиции структурированных программ. Базисы Вирта и Дейкстры. Эквивалентность базисов.
- •Билет 18. Последовательность действий. Особенность реализации в языке Паскаль.
- •Билет 19. Альтернативные действия. Альтернатива и полуальтернатива. Особенность реализации в языке Паскаль. Синтаксис и семантика.
- •Билет 20. Повторяемые действия. Реализация итерационных циклов пока и до в языке Паскаль. Синтаксис и семантика, особенность реализации.
- •Билет 21. Реализация параметрического цикла в языке Паскаль. Синтаксис и семантика, ограничения при использовании.
- •Билет 22. Выбор из нескольких альтернатив. Реализация в стандартном и Турбо-Паскале.
- •Билет 23. Скалярные типы данных в языке Паскаль. Упорядоченные и неупорядоченные типы.
- •Билет 24. Структурный тип данных "массив". Реализация массивов переменной длины.
- •Билет 25. Правила записи программного модуля.
- •Билет 26. Основные стратегии проектирования алгоритмов, их сравнительная характеристика.
- •Билет 27. Основные декомпозиционные структуры программ. Сегменты-блоки и сегменты-процедуры, их спецификация.
- •Билет 32. Функции. Правила описания и использования.
- •Билет 33. Чистые процедуры. Правила и способы подстановки параметров. Механизм подстановки.
- •Билет 34. Структура программы. Локализация объектов.
- •Билет 35. Побочный эффект. Причины возникновения и правила предупреждения.
- •Билет 36. Цель и содержание отладки программы. Классификация ошибок. Уровни корректности программы в процессе отладки.
- •Билет 37. Основные действия при отладке. Контроль программы. Фазы контроля.
- •Билет 38. Характеристика восходящего и нисходящего способов отладки.
- •Билет 39. Локализация и исправление ошибок в процессе отладки в Турбо-среде.
- •Билет 40. Функциональное и структурное тестирование. Метод тестовых счетчиков.
- •Билет 41. Документирование программ в процессе разработки. Состав документации.
- •Билет 42. Классификация алгоритмов внутренней сортировки. Сравнительная оценка методов сортировки.
- •Билет 43. Эффективность программы. Средства стандартного и Турбо-Паскаля для повышения эффективности.
- •Билет 44. Надежность программы. Организация надежного ввода. Средства Паскаля для повышения надежности.
- •Билет 45. Эргономичность программы. Роль структурного программирования в повышении эргономичности.
- •Билет 46. Мобильность программ. Отличие версии Турбо-Паскаль от стандартного Паскаля.
- •Билет 47. Метод бисекции (деления пополам). Использование его в алгоритмах сортировки и решения уравнений.
- •Билет 48. Способы организации надежного ввода из стандартного файла, влияние на структуру программы.
- •Билет 49. Организация массива из текстового файла. Процедуры, обеспечивающие различную степень зависимости от входных данных.
- •Билет 50. Локализация процедур Паскаля. Внешние процедуры.
- •Билет 51. Структурирование циклов. Метод объединения условий при решении задачи информационного поиска в файле.
- •Билет 59. Метод трассировки при визуальном и компьютерном способах отладки.
Билет 41. Документирование программ в процессе разработки. Состав документации.
Документирование программы:
Правильно построенный процесс разработки программ позволяет получать документацию параллельно, так что к окончанию отладки получается почти вся необходимая документация.
Документация на разработанную программу включает следующие части:
1. Постановка задачи (спецификация задачи): В спецификации различают две существенно разные ее части: функциональную и эксплуатационную спецификацию.
Функциональная спецификация описывает объекты, участвующие в задаче, входные и выходные данные, связь между ними, реакции на аномалии, разбиение задачи на подзадачи.
Эксплуатационная спецификация содержит требования к скорости работы программы и используемым ресурсам памяти, характеристиками ЭВМ, на которой программа должна работать, специальные требования к надежности и безопасности программы.
Очевидно, чем сложнее и больше решаемая задача, тем труднее составить исчерпывающие спецификации. Возможно, что некоторые требования придется уточнить после следующих этапов - проектирования и кодирования);
2. Проект алгоритма и структур данных (на псевдокоде);
3. Текст программы на языке программирования;
4. Отладочные тесты и результаты их работы (по мере тестирования заносятся в документацию);
5. Доказательство корректности (если оно является необходимой фазой отладки);
6. Руководство пользователю программы (на естественном языке). Составляется как правило самом в конце, как итог, основываясь на уже полученной документации.
Билет 42. Классификация алгоритмов внутренней сортировки. Сравнительная оценка методов сортировки.
Внутренняя сортировка - ориентирована на сортировку массивов. Разделение на сложные (модифицированные) и простые связано с оценкой эффективности алгоритмов по двум основным параметрам: число сравнений ключей элементов и число перестановок элементов. Для простых методов сортировки эти параметры имеют порядок в среднем n2, а для сложных (модифицированных) - n*logn, где n-количество сортируемых ключей:
1) Простые методы:
1. Метод простого обмена - проверяются пары ключей, и если они не упорядочены, то элементы взаимно меняются местами.
Простая обменная сортировка ("метод пузырька") для массива a[1], a[2], ..., a[n] работает следующим образом. Начиная с конца массива сравниваются два соседних элемента (a[n] и a[n-1]). Если выполняется условие a[n-1] > a[n], то значения элементов меняются местами. Процесс продолжается для a[n-1] и a[n-2] и т.д., пока не будет произведено сравнение a[2] и a[1]. Понятно, что после этого на месте a[1] окажется элемент массива с наименьшим значением. На втором шаге процесс повторяется, но последними сравниваются a[3] и a[2]. И так далее. На последнем шаге будут сравниваться только текущие значения a[n] и a[n-1]. Понятна аналогия с пузырьком, поскольку наименьшие элементы (самые "легкие") постепенно "всплывают" к верхней границе массива.
Шейкер-сортировка — разновидность пузырьковой сортировки. Отличается тем, что просмотры элементов выполняются один за другим в противоположных направлениях, при этом большие элементы стремятся к концу массива, а маленькие — к началу.
2. Метод простого выбора - происходит выбор элементов в порядке возрастания ключей. Сначала выбирается элемент с наименьшим ключом, затем выбирается элемент с наименьшим ключом из оставшихся и т. д. до тех пор, пока в неотсортированной последовательности не останется ни одного элемента. В результате в отсортированной последовательности элементы распологаются в том порядке, в котором они были выбраны.
В этом методах массив также делится на уже отсортированную часть A[1], ..., A[k-1] и не отсортированную A[k], ..., A[n]. Из не отсортированной части на каждом шаге извлекается минимальный элемент. Он будет максимальным элементом отсортированной части, так как все меньшие его элементы извлечены на предыдущих шагах, поэтому извлеченный элемент ставится в конец отсортированной части.
В начальный момент при k = 1 отсортированная часть будет пустой.
3. Метод простого включения - элементы неотсортированной последовательности рассматриваются по очереди, и каждый вставляется на соответствующее ему место в отсортированной последовательности.
При сортировке исходный массив разбивается на две части:
A[1], A[2], ..., A[k-1] - отсортированную часть
A[k], ...,A[n] - не отсортированную часть.
На k - м шаге элемент A[k] включается в отсортированную часть, на соответствующее место. При этом часть элементов, больших A[k], (если таковые есть) сдвигаются на одну позицию правее, чтобы освободить место для элемента A[k]. Прежде чем производить сдвиг элементов необходимо сохранить значение A[k] во временной переменной B.
Так как массив из одного элемента можно считать отсортированным, алгоритм начинается с k=2.
2) Сложные методы:
1. Сортировка Шелла (включение).
Метод построен на основе метода вставки с минимизацией промежуточных шагов. Сначала выполняется сортировка элементов, отстоящих друг от друга на три позиции. После этого сортируются элементы, отстоящие друг от друга на две позиции. Наконец выполняется сортировка смежных элементов.
2. Сортировка с разделением (быстрая сортировка).
"Быстрая сортировка", хоть и была разработана более 40 лет назад, является наиболее широко применяемым и одним их самых эффективных алгоритмов.
Метод основан на подходе "разделяй-и-властвуй". Общая схема такова:
1. из массива выбирается некоторый опорный элемент a[i],
2. запускается процедура разделения массива, которая перемещает все ключи, меньшие, либо равные a[i], влево от него, а все ключи, большие, либо равные a[i] - вправо,
3. теперь массив состоит из двух подмножеств, причем левое меньше, либо равно правого,
4. для обоих подмассивов: если в подмассиве более двух элементов, рекурсивно запускаем для него ту же процедуру.
В конце получится полностью отсортированная последовательность.
3. Сортировка Флойда (с помощью дерева).
