- •1.Технология программирования. Основные понятия и подходы 8
- •Технология программирования. Основные понятия и подходы
- •1.1. Технология программирования и основные этапы ее развития
- •1.2. Жизненный цикл и этапы разработки программного обеспечения
- •Контрольные вопросы
- •2.Разработкаструктуры программы и модульное программирование
- •2.1. Цель модульного программирования
- •2.2. Основные характеристики программного модуля
- •2.3. Методы разработки структуры программы
- •Контрольные вопросы
- •3.Тестирование и отладка программного средСтВа
- •3.1. Принципы и виды отладки программного средства
- •3.2. Заповеди отладки программного средства
- •3.3. Автономная отладка программного средства
- •3.3. Комплексная отладка программного средства
- •Контрольные вопросы
- •4. Обеспечение качества программного средства
- •4.1. Общая характеристика процесса обеспечения качества программного средства
- •4.2. Обеспечение легкости применения программного средства
- •4.3. Обеспечение эффективности программного средства
- •4.4. Обеспечение сопровождаемости программного средства
- •Контрольные вопросы
- •5. Документирование программных средств составление программной документации
- •5.1. Виды программных документов
- •5.2. Пояснительная записка
- •5.3. Руководство пользователя
- •5.4. Руководство системного программиста
- •5.5. Основные правила оформления программной документации
- •Контрольные вопросы
- •6. Объектный подход к разработке программных средств
- •6.1. Объекты и отношения в программировании. Сущность объектного подхода к разработке программных средств
- •6.2. Особенности объектного подхода к разработке внешнего описания программного средства
- •6.3. Особенности объектного подхода на этапе конструирования программного средства
- •Контрольные вопросы
- •7. Постановка и алгоритмизация задач
- •7.1. Понятие алгоритма
- •7.2. Способы описания алгоритмов
- •Условные обозначения блоков
- •7.3. Структурные схемы алгоритмов
- •Контрольные вопросы
- •8. Основы языка
- •8.1. Алфавит языка
- •8.2. Структура программы
- •Контрольные вопросы
- •9. Типы данных
- •9.1. Целые типы
- •9.2. Вещественные типы
- •9.3. Логический тип
- •9.4. Символьный тип
- •9.5. Выражения
- •Арифметические операции
- •Операция отрицания
- •Операции конъюнкция, дизъюнкция, «исключающее» или
- •Приоритет операций
- •9.6. Константы
- •9.7. Совместимость типов данных
- •Контрольные вопросы
- •10. Линейные алгоритмы
- •10.1. Пустой и составной операторы
- •10.2. Оператор присваивания
- •10.3. Простейший ввод и вывод
- •Контрольные вопросы
- •11. Разветвляющиеся алгоритмы
- •11.1. Оператор перехода
- •11.2. Условный оператор
- •11.3. Оператор выбора
- •Контрольные вопросы
- •12. Циклические алгоритмы
- •12.1. Циклы с параметром
- •12.2. Циклы с условием
- •Контрольные вопросы
- •13. Пользовательские типы данных
- •13.1. Перечисляемый тип
- •13.2. Тип - диапазон
- •13.3. Массивы
- •13.4. Записи
- •13.5. Множества
- •Контрольные вопросы
- •14. Работа со строками
- •Контрольные вопросы
- •15. Процедуры и функции
- •15.1. Параметры-значения
- •15.2. Параметры-переменные
- •15.3. Параметры-константы
- •15.4. Открытые параметры-массивы
- •15.5. Бестиповые параметры
- •15.6. Процедурные типы
- •15.7. Рекурсия
- •Контрольные вопросы
- •16. Типизированные константы
- •Контрольные вопросы
- •17. Модули
- •Interface
- •Implementation
- •Interface
- •18.2. Поиск с барьером
- •83.3. Двоичный (бинарный) поиск
- •Контрольные вопросы
- •19. Алгоритмы сортировки
- •19.1. Сортировка выбором
- •19.2.Сортировка обменом (методом «пузырька»)
- •19.3. Сортировка включением
- •Контрольные вопросы
- •20. Файлы
- •20.1. Текстовые файлы
- •20.2. Компонентные файлы
- •20.3. Бестиповые файлы
- •20.4. Последовательный и прямой доступ
- •Контрольные вопросы
- •21.Программирование с использованием динамической памяти
- •21.1. Указатели и операции над ними
- •21.2. Процедуры и функции, работающие с указателями
- •Контрольные вопросы
- •22. Модуль crt (основные возможности)
- •Контрольные вопросы
- •22. Модуль graph (основные возможности)
- •22.1. Базовые процедуры и функции
- •22.2. Экран и окно в графическом режиме
- •22.3. Вывод точки
- •22.4. Вывод линии
- •22.5. Построение прямоугольников
- •22.6. Построение многоугольников
- •22.7. Построение дуг и окружностей
- •22.8. Работа с текстом
- •Контрольные вопросы
- •Заключение
- •Библиографический список
Interface
const len = 100;
type vector = array[1..len] of integer;
implementation
end.
unit vectors;
interface
uses globals;
{находит максимальный элемент массива}
function max_v(a : vector; n : byte):integer;
{поэлементное сложение двух векторов}
procedure add_v(a, a : vector; n : byte; var c : vector);
{скалярное произведение векторов}
function scal_v(a, b : vector; n:byte):integer;
implementation
function max_v; {заголовок без параметров}
var i , max : integer;
begin
max:=a[1];
for i:=2 to n do if a[i]>max then max:=a[i];
max_v:=max;
end;
procedure add_v;
var i : integer;
begin
for i:=1 to n do c[i]:=a[i]+b[i];
end;
function scal_v(a,b:vector; n:byte):integer;
{заголовок из interface}
var s:integer; i:byte;
begin
s:=0;
for i:=1 to n do s:=s+a[i]*b[i];
scal_v:=s;
end;
end. {раздел инициализации модуля отсутствует}
Контрольные вопросы
Сформулируйте определение модуля.
Перечислите стандартные модули Turbo Pascal.
Опишите структуру модуля.
Приведите примеры использования модуля.
18. Алгоритмы поиска
Алгоритмы поиска применяются для нахождения, например, в массиве элемента с нужными свойствами. Обычно различают постановки задачи поиска для первого и последнего вхождения элемента. Во всех ниже изложенных алгоритмах будем считать, что производится поиск в массиве a из n целых чисел элемента, равного x.
18.1. Линейный поиск
Линейный поиск осуществляется циклом (while или repeat – until) с двойным условием. Первое условие контролирует индекс на принадлежность массиву, например, (i<=n). Второе условие – это условие поиска. В нашем случае в цикле while это условие продолжения поиска: (a[i]<>x), а в цикле repeat – until это условие завершения поиска: (a[i]=x). В теле цикла обычно пишется только один оператор: изменение индекса в массиве.
После выхода из цикла необходимо проверить, по какому из условий мы вышли. В операторе if обычно повторяют первое условие цикла. Можно говорить об успешном поиске с циклом while при выполнении этого условия, а с циклом repeat – until при его нарушении.
Пример 18.1: Линейный поиск
program poisk1;
var a : array[1..100] of integer;
n, x, i: integer;
begin
read(n); {n<=100}
for i:=1 to n do read(a[i]);
read(x);
i:=1; {i:=0;}
while (i<=n) and (a[i] <> x) do i:= i + 1;
{repeat i:=i + 1; until (i > n) or (a[i] = x);}
if i <= n then write('первое вхождение числа ',x,'
в массив a на ', i, ' месте')
else write('не нашли');
end.
При поиске последнего вхождения после ввода должны идти операторы:
i:=n; {i:=n + 1;}
while (i >= 1) and (a[i] <> x) do i:= i – 1;
{repeat i:=i – 1; until (i<1) or (a[i]=x);}
if i >= 1 then write('последнее вхождение числа ',x,' в массив a на ',i,' месте')
else write('не нашли'); end.
18.2. Поиск с барьером
Идея поиска с барьером состоит в том, чтобы не проверять каждый раз в цикле условие, связанное с границами массива. Это можно обеспечить, установив в массив, так называемый барьер: любой элемент, который удовлетворяет условию поиска. Тем самым будет ограничено изменение индекса.
Выход из цикла, в котором теперь остается только условие поиска, может произойти либо на найденном элементе, либо на барьере. Таким образом, после выхода из цикла проверяется, не барьер ли мы нашли? Вычислительная сложность поиска с барьером меньше, чем у линейного поиска, но также является величиной того же порядка, что и N – количество элементов массива.
Существует два способа установки барьера: дополнительным элементом или вместо крайнего элемента массива.
Пример 18.2: Поиск с барьером. Способ 1.
program poisk2a;
var a : array[1..101] of integer;
n, x, i : integer;
begin
read(n); {n<=100}
for i:=1 to n do read(a[i]);
read(x);
a[n+1]:=x; {установка барьера дополнительным элементом}
i:=1; {i:=0;}
while a[i] <> x do i:= i + 1;
{repeat i:=i + 1; until a[i] = x;}
if i <= n then write('первое вхождение числа ',x,' в массив a на ',i,' месте')
else write('не нашли');
end.
Способ 2.
program poisk2b;
var a : array[1..100] of integer;
n, x , i , y : integer;
begin
read(n); {n<=100}
for i:=1 to n do read(a[i]);
read(x);
y:=a[n]; {сохранение последнего элемента}
a[n]:=x; {установка барьера на последнее место массива}
i:=1; {i:=0;}
while a[i] <> x do i:= i + 1;
{repeat i:= i + 1; until a[i]=x;}
if (i < n) or (y = x) then
write('первое вхождение числа ',x,' в массив a на ',i,' месте')
else write('не нашли');
a[n]:=y; {восстановление последнего элемента массива}
end.