Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Програмирование. Структурное програмирование, подпрограммы, строки. Учебное пособие
.pdf
if x > y then
Exchange(x,y);//x = min(x,y)
if x > z then
Exchange(x,z);//x = min(x,y,z)
if y > z then
Exchange(y,z);//x <= y <= z
end;
//-----------------------------------var
x,y,z: Real;
begin
write('x = ');readln(x);
write('y = ');readln(y);
write('z = ');readln(z);
//-----------вызов процедуры---------
Reorder3(x,y,z);
write('x = ',x:6:2,' y = ',y:6:2,' z = ',z:6:2);
readln;
end.
Тестирование процедуры
Будем тестировать процедуру методом тестирования путей. Существуют восемь путей выполнения разработанной процедуры. Необходимо подобрать исходные данные для выполнения процедуры по каждому из возможных путей.
Набор тестов для тестирования разработанной процедуры представлен в таблице.
Номер
теста
Исходные данные
1 x = 1, y = 2, z = 3 x = 1, y = 2, z = 3
2 x = 3, y = 2, z = 1 x = 1, y = 2, z = 3
3 x = 2, y = 1, z = 3 x = 1, y = 2, z = 3
4 x = 3, y = 1, z = 2 x = 1, y = 2, z = 3
5 x = 2, y = 3, z = 1 x = 1, y = 2, z = 3
Ожидаемый
результат
81
Путь прохождения
Левая, левая, левая ветвь
IFTHEN
Правая, правая, правая
ветвь IFTHEN
Правая, левая, левая ветвь
IFTHEN
Правая, правая, левая
ветвь IFTHEN
Левая, правая, правая
ветвь IFTHEN

Окончание таблицы
Номер
теста
Исходные данные
6 x = 1, y = 3, z = 2 x = 1, y = 2, z = 3
7 x = 1, y = 2, z = 1 x = 1, y = 2, z = 3
8 x = 4, y = 1, z = 3 x = 1, y = 2, z = 3
Ожидаемый
результат
Путь прохождения
Левая, правая, левая ветвь
IFTHEN
Левая, левая, правая ветвь
IFTHEN
Правая, левая, правая
ветвь IFTHEN
Тема. ПОДПРОГРАММЫ ДЛЯ РАБОТЫ
С ОДНОМЕРНЫМИ МАССИВАМИ
Задачи
1. Написать и протестировать функцию. Функция получает через
параметр одномерный вещественный массив и возвращает сумму элементов массива.
2. Написать и протестировать функцию. Функция получает через
параметр одномерный массив целых переменных и возвращает сумму
четных значений компонентов массива.
3. Написать и протестировать функцию
. Функция получает через
параметр одномерный вещественный массив и возвращает сумму компонентов массива с нечетными значениями индексов.
4. Написать и протестировать функцию. Функция получает через
параметр одномерный массив вещественных переменных и возвращает
компонент массива с максимальным значением среди всех компонентов массива.
5. Написать и протестировать функцию. Функция получает через
параметр одномерный вещественный массив и возвращает минимальный по значению элемент этого массива и номер его индекса.
6. Написать и протестировать процедуру. Процедура получает че-
рез параметр одномерный вещественный массив. В полученном массиве процедура переставляет значения компонентов массива в обратном
порядке.
7. Написать и протестировать процедуру. Процедура получает че-
параметр одномерный вещественный массив. Процедура изменяет
рез
массив путем циклического сдвига его элементов влево на одну позицию.
82

8. Написать и протестировать процедуру. Процедура получает че-
рез параметр одномерный вещественный массив и целое – параметр
сдвига. Процедура изменяет массив путем циклического сдвига его
элементов вправо на число позиций, равное параметру сдвига.
9. Написать и протестировать процедуру. Процедура получает че-
рез параметр одномерный вещественный массив и целое – параметр
сдвига. Процедура
изменяет массив путем циклического сдвига его элементов на заданное число позиций, равное параметру сдвига в указанном направлении. Направление сдвига задается знаком параметра сдвига: вправо, если параметр больше нуля, влево, если он отрицателен.
10. Написать и протестировать процедуру. Процедура получает через параметр одномерный массив вещественных переменных. Процедура изменяет массив путем упорядочения его элементов по возрастанию в сторону больших значений индексов компонентов.
11. Написать и протестировать функцию. Функция получает через параметр одномерный массив вещественных переменных (типа Vector).
Вычисляет и возвращает максимальное значение среди элементов массива с четными значениями индекса и значение индекса (через параметр).
Например:
Const
Columns = 5;//компонентов в массиве
Type
Index = 0.. Columns - 1;
Vector = array [Index] of real;
Var
A: Vector = (1, 5, -3, 2, 7);// массив нициированный
// и начальными значениями
Исходный массив
Компоненты A[0] A[1] A[2] A[3] A[4]
Значения 1 5 –3 2 7
Максимальное
значение
Индекс компонента 4
7
12. Написать и протестировать функцию. Функция получает через
параметр одномерный массив вещественных переменных (типа Vector)
83

и возвращает минимальное значение среди элементов массива с нечетными значениями индекса и значение индекса (через параметр).
Например:
Const
Columns = 5; //компонентов в массиве
Type
Index = 0.. Columns - 1;
Vector = array [Index] of real;
Var
A: Vector = (1, 5, -3, 2, 7);// массив инициированный
//начальными значениями
Исходный массив
Элемент A[0] A[1] A[2] A[3] A[4]
Значение 1 5 –3 2 7
Минимальное значение 2
Индекс элемента 3
Примеры решений задач
Задача 1
Условие
Написать и протестировать функцию. Функция получает через параметр одномерный вещественный массив и возвращает сумму элементов массива.
Решение
Для вычисления суммы компонентов массива необходимо перебрать все компоненты, добавляя их значения к счетчику. Перед началом цикла значение счетчика необходимо установить в 0. Для организации цикла воспользуемся управляющей структурой FORDO.
Блок-схема решения показана на рисунке.
Функция, реализующая вычисления суммы компонентов одномерного вещественного массива, представлена ниже.
//----------------------------------------------------function Sum(const a: array of real): Real;
//Возвращает сумму значений компонентов одномерного массива.
//------------------------------------------------------
84

var i: integer;
begin
result:= 0;
for i:= Low(a) to high(a) do
result:= result + a[i]
end;
//------------------------------------------------------
Sum:= 0
I:= 0,
N – 1, 1
Sum:= Sum + A[I]
I – индекс цикла;
N – число компо-
нентов массива A
Задача 3
Условие
Написать и протестировать функцию. Функция получает через параметр одномерный вещественный массив и возвращает сумму компонентов массива с нечетными значениями индексов.
Решение
Для нахождения суммы значений компонентов с нечетными значениями индексов необходимо перебрать все компоненты массива, начиная с первого. Значение компонента добавляется к сумме, если
его индекс – нечетное значение. Перед началом цикла в значение суммы
необходимо установить значение 0. Для просмотра значений компонентов массива следует организовать цикл. Для этой цели воспользуемся управляющей структурой FORDO.
85

Блок схема-решения представлена на рисунке.
Sum:= 0
I – индекс цикла;
N – число компонен-
тов массива A
I:= 0,
N – 1, 1
I –
нечётно
И
Sum := Sum + A[I]
Функция, реализующая вычисления суммы значений компонентов
одномерного вещественного массива с нечетными значениями индексов, показана ниже.
//--------------------------------------------------function SumOdd(const a: array of real): Real;
//Возвращает сумму значений компонентов с нечетными
//индексами.
var i: integer;
begin
result:= 0;
for i:= Low(a) to high(a) do
if Odd(i) then result:= result + a[i]
end;
//------------------------------------------------------
86

Задача 6
Условие
Написать и протестировать процедуру. Процедура получает через
параметр одномерный вещественный массив. В полученном массиве
процедура переставляет значения компонентов массива в обратном
порядке. Вспомогательный массив не использовать.
Исходный
массив
Элемент A[0] A[1] A[2] A[3] A[4]
Значение 1 5 –3 2 7
Элемент A[0] A[1] A[2] A[3] A[4]
Массив
результата
Значение 7 2 –3 5 1
Решение
Для перестановки значений компонентов массива в обратном порядке необходимо перебрать компоненты массива, начиная с первого и
до среднего (от 0 до N div 2 – 1), исключая его, если он имеется, обменивая значениями компоненты массива с индексами I и (N – I – 1). Обмениваются значениями компоненты слева и справа массива, отстоящие
от центра на одинаковом расстоянии. В случае
четного числа компонентов в массиве обмениваются значениями все компоненты. В случае нечетного числа компонентов в массиве центральный компонент массива
остается неизменным. Индексация компонентов массива начинается
от 0. Для просмотра значений компонентов массива воспользуемся
управляющей структурой FORDO. Рисунок, иллюстрирующий алгоритм, представлен ниже.
Обмениваем значениями компоненты массива с индексами I и (N – I – 1),
i изменяется от 0 до (N div 2 – 1)
2 7 9 3 5
0 1 2 3 4
87
компоненты
индексы

Обмениваем значениями компоненты массива с индексами I и (N – I – 1),
i изменяется от 0 до (N div 2 – 1)
2 7 9 3 1 5
0 1 2 3 4 5
компоненты
индексы
Блок-схема решения показана на рисунке ниже.
N:= High(A) + 1
I – индекс цикла;
N – число компонен-
тов массива A
I:= 0, N
div 2 – 1,
1
Обменять значениями A[I]
и A[N – I – 1]
Функция, реализующая перестановку значений компонентов одномерного вещественного массива в обратном порядке, представлена
ниже.
//----------------------------------------------------procedure Reorder(var a: array of real);
//Переставляет значения компонентов массива в обратном
порядке.
var
i,n: integer;
begin
n:= high(a) + 1;
for i:= 0 to n div 2 - 1 do
swap(a[i],a[n - i -1]);
end;
//------------------------------------------------------
88

Тема. СТРОКИ
Задачи
1. Написать и протестировать функцию. Функция получает через
параметр строку и возвращает строку, полученную из исходной, путем
удаления из нее всех подряд идущих с левого края пробелов.
Например:
Исходная строка ‘ QWERTY’
Строка результата ‘QWERTY’
2. Написать и протестировать функцию. Функция получает через
параметр строку и возвращает строку, полученную из исходной, путем
удаления из нее всех подряд идущих с правого края пробелов.
Например:
Исходная строка ‘QWERTY ’
Строка результата ‘QWERTY’
3. Написать и протестировать функцию. Функция получает через
параметр строку (Str) и подстроку (SubStr) и возвращает строку, полученную из исходной, путем удаления из нее всех вхождений подстроки
(SubStr).
Например:
Исходная строка Str ‘QWERTYQWERQW’
Подстрока SubStr ‘QW’
Строка результата ‘ERTYER’
4. Написать и протестировать функцию. Функция получает через
параметр строку (Str) и подстроку (SubStr) и возвращает число вхождений подстроки (SubStr) в строку (Str).
Например:
Исходная строка Str ‘QWERTYQWERQW’
Подстрока SubStr ‘QW’
Число вхождений 3
5. Написать и протестировать функцию. Функция получает через
параметр строку (Str) и две подстроки (SubStr1, SubStr2) и возвращает
строку, полученную из исходной, путем замены в ней всех вхождений
подстроки (SubStr1) на строку (SubStr2).
89

Например:
Исходная строка Str ‘QWERTYQWERQW’
Подстрока SubStr1 ‘QW’
Подстрока SubStr2 ‘zx’
Строка результата ‘zxERTYzxERzx’
6. Написать и протестировать функцию. Функция получает через
параметр строку и возвращает строку, полученную из исходной, путем
перестановки в ней литер в обратном порядке.
Ограничение. Вспомогательную строку не использовать.
Например:
Исходная строка QWERTY
Строка результата YTREWQ
7. Написать и протестировать подпрограмму. Подпрограмма осу-
ществляет циклический сдвиг литер в строке Str вправо на одну позицию.
Например:
Исходная строка QWERTY
Строка результата YQWERT
8. Написать и протестировать подпрограмму. Подпрограмма осу-
ществляет циклический сдвиг литер в строке Str влево на одну позицию.
Например:
Исходная строка QWERTY
Строка результата WERTQ
9. Написать и протестировать подпрограмму. Подпрограмма осу-
ществляет циклический сдвиг литер в строке Str вправо на заданное
число позиций.
Например:
Исходная строка QWERTY
Строка результата YQWERT
10. Написать и протестировать подпрограмму. Подпрограмма осу-
ществляет циклический сдвиг литер в строке Str влево на заданное
число позиций.
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
