Информатика
.pdfГлава 10. Примеры программ
{Основная программа задает стороны, вызывает функцию сравнения и выводит результат}
begin
a := 3.0; b := 4.0; c := 5.0; writeln;
writeln ('Стороны = ', a, b, c); {Контрольная точка A}
if (vid(a,b,c) = 1) then {Контрольная точка H}
writeln ('Треугольник прямоугольный') else
{Контрольная точка I}
writeln ('Треугольник не прямоугольный'); writeln;
end.
На листинге 16 представлена программа определения вида треугольника по сторонам для теста 1. Для тестирования программы тестами 2—4 необходимо в головной программе изменить значения сторон треугольника.
Результаты работы тестов 1—4 представлены в таблице 30.
Таблица 30. Значения данных в контрольных точках для четырех тестов
Контрольная |
|
Значения данных |
|
|
||
точка |
Тест 1 |
Тест 2 |
|
Тест 3 |
|
Тест 4 |
A |
a = 3, b = 4, c = 5 a = 3, b = 4, c = 6 a = 5, b = 3, c = 4 a = 4, b = 5, c = 3 |
|||||
B |
x = 3, y = 4, z = 5 x = 3, y = 4, z = 6 x = 5, y = 3, z = 4 x = 4, y = 5, z = 3 |
|||||
C |
x = 3, y = 4, z = 5, |
— |
|
— |
|
— |
vid = 1 |
|
|
||||
|
|
|
|
|
|
|
D |
— |
— |
x = 5, y = 3, z = 4, |
|
— |
|
|
vid = 1 |
|
||||
|
|
|
|
|
|
|
E |
— |
— |
|
— |
x = 4, y = 5, z = 3, |
|
|
|
vid = 1 |
||||
|
|
|
|
|
|
|
F |
— |
x = 3, y = 4, z = 6, |
|
— |
|
— |
vid = 0 |
|
|
||||
|
|
|
|
|
|
|
H |
a = 3, b = 4, c = 5, |
— |
a = 5, b = 3, c = 4, a = 4, b = 5, c = 3, |
|||
vid = 1 |
|
vid = 1 |
|
vid = 1 |
||
|
|
|
|
|||
I |
— |
a = 3, b = 4, c = 6, |
|
— |
|
— |
vid = 0 |
|
|
||||
|
|
|
|
|
|
|
|
Стороны = 3, Стороны = 3, Стороны = 5, Стороны = 4, |
|||||
|
4, 5 |
4, 6 |
3, |
4 |
5, |
3 |
|
Треугольник |
Треугольник |
Треугольник |
Треугольник |
||
|
прямоуголь- |
не |
прямоуголь- |
прямоуголь- |
||
|
ный |
прямоуголь- |
ный |
|
ный |
|
|
|
ный |
|
|
|
|
111
Часть II. Программирование
§29. Циклы
29.1.Сумма натурального ряда
Задача. Найти сумму первых n натуральных чисел.
Решение.
На листинге 17 приведена программа суммирования первых n натуральных чисел, полностью совпадающая с соответствующим алгоритмом из главы 8.
Результат работы теста представлен в таблице 31.
Листинг 17. Программа вычисления суммы первых n натуральных чисел
{Суммирование натурального ряда}
{Переменная целого типа} var n : integer;
{Функция summa суммирует ряд натуральных чисел} function summa (var k : integer) : integer;
var i, s : integer; begin
{Контрольная точка B} i := 0;
s := 0;
{Контрольная точка C} {Начало цикла}
while (i < k) do begin
i := i + 1; s := s + i;
{Контрольная точка D} end;
{Конец цикла} summa := s;
{Контрольная точка E} end;
{Основная программа задает число слагаемых в сумме, вызывает функцию суммирования и выводит результат}
begin
n := 5;
{Контрольная точка A} writeln;
write ('Сумма натуральных чисел от 1 до ', n); writeln (' = ', summa(n));
writeln;
end.
112
Глава 10. Примеры программ
Таблица 31. Значения данных в контрольных точках
Контрольная точка |
Значения данных |
A |
n = 5 |
B |
k = 5 |
C |
k = 5, i = 0, s = 0 |
D |
k = 5, i = 1, s = 1 |
D |
k = 5, i = 2, s = 3 |
D |
k = 5, i = 3, s = 6 |
D |
k = 5, i = 4, s = 10 |
D |
k = 5, i = 5, s = 15 |
E |
n = 5, i = 5, s = 15, summa = 15 |
Сумма натуральных чисел от 1 до 5 = 15
29.2. Сумма обратных величин натурального ряда
Задача. Найти сумму первых n обратных величин натуральных чисел.
Решение.
Листинг 18. Программа вычисления суммы первых n обратных величин натурального ряда
{Суммирование обратного натурального ряда}
{Переменная целого типа} var n : integer;
{Функция summa суммирует ряд обратных натуральных чисел} function summa (var k : integer) : real;
{Сумма должна быть вещественной переменной} var i : integer;
s : real; begin
{Контрольная точка B} i := 0;
s := 0.0; {Контрольная точка C} while (i < k) do begin
i := i + 1;
s := s + 1.0/i; {Контрольная точка D} end;
summa := s; {Контрольная точка E}
end;
113
Часть II. Программирование
{Основная программа задает число слагаемых в сумме, вызывает функцию суммирования и выводит результат}
begin
n := 3;
{Контрольная точка A} writeln;
write ('Сумма обратных натуральных чисел от 1 до ', n); writeln (' = ', summa(n));
writeln;
end.
На листинге 18 приведена программа суммирования первых n обратных натуральных чисел.
Результат работы теста представлен в таблице 32.
|
Таблица 32. Значения данных в контрольных точках |
||
|
|
|
|
Контрольная точка |
|
Значения данных |
|
A |
|
n = 3 |
|
B |
|
k = 3 |
|
C |
|
k = 3, i = 0, s = 0.0 |
|
D |
|
k = 3, i = 1, s = 1.0 |
|
D |
|
k = 3, i = 2, s = 1.5 |
|
D |
|
k = 3, i = 3, s = 1.833333 |
|
E |
|
k = 3, i = 3, s = 1.833333, summa = 1.833333 |
|
Сумма обратных натуральных чисел от 1 до 5 = 1.833333
29.3. Нахождение произведения нечетных чисел 1
Задача. Найти произведение n чисел вида 1 3 5 7 …
Решение.
Листинг 19. Программа вычисления произведения первых n нечетных натуральных чисел
{Произведение первых n нечетных натуральных чисел}
{Переменная целого типа} var n : integer;
{Функция pro перемножает первые нечетные натуральные числа} function pro (var k : integer) : real;
{Произведение лучше сделать вещественной переменной} var i : integer;
p : real;
114
Глава 10. Примеры программ
begin
{Контрольная точка B} i := 0;
p := 1.0; {Контрольная точка C} while (i < k) do begin
i := i + 1;
p := p * (2.0*i - 1); {Контрольная точка D} end;
pro := p; {Контрольная точка E}
end;
{Основная программа задает число сомножителей, вызывает функцию перемножения и выводит результат}
begin
n := 5;
{Контрольная точка A} writeln;
write ('Произведение первых ', n); write (' нечетных натуральных чисел'); writeln (' = ', pro(n));
writeln;
end.
На листинге 19 приведена программа нахождения произведения первых n нечетных натуральных чисел.
Результат работы теста представлен в таблице 33.
|
Таблица 33. Значения данных в контрольных точках |
||
|
|
|
|
Контрольная точка |
|
Значения данных |
|
A |
|
n = 5 |
|
B |
|
k = 5 |
|
C |
|
k = 5, i = 0, p = 1.0 |
|
D |
|
k = 5, i = 1, p = 1.0 |
|
D |
|
k = 5, i = 2, p = 3.0 |
|
D |
|
k = 5, i = 3, p = 15.0 |
|
D |
|
k = 5, i = 4, p = 105.0 |
|
D |
|
k = 5, i = 5, p = 945.0 |
|
E |
|
k = 5, i = 5, p = 945.0, pro = 945.0 |
|
Произведение первых 5 нечетных натуральных чисел = 945
115
Часть II. Программирование
29.4. Нахождение произведения нечетных чисел 2
Задача. Найти произведение n чисел вида 1 3 5 7 …
Решение.
Листинг 20. Программа вычисления произведения нечетных натуральных чисел
{Произведение первых n нечетных натуральных чисел}
var n : integer;
{Функция pro перемножает первые нечетные натуральные числа} function pro (var k : integer) : real;
var i,s : integer; p : real; begin
{Контрольная точка B}
i := 0; s := 1; p := 1.0; {Контрольная точка C} while (i < k) do
begin
i := i + 1; p := p * s; s := s + 2; {Контрольная точка D}
end;
pro := p; {Контрольная точка E}
end;
{Основная программа задает число сомножителей, вызывает функцию перемножения и выводит результат}
begin
n := 5;
{Контрольная точка A} writeln;
write ('Произведение первых ', n);
writeln (' нечетных натуральных чисел = ', pro(n)); writeln;
end.
|
Таблица 34. Значения данных в контрольных точках |
|||
|
|
|
|
|
Контрольная точка |
|
Значения данных |
||
A |
|
n = 5 |
|
|
B |
|
k = 5 |
||
C |
|
k = 5, i = 0, s = 1, p = 1.0 |
||
D |
|
k = 5, i = 1, s = 3, p = 1.0 |
||
D |
|
k = 5, i = 1, s = 5, p = 3.0 |
||
D |
|
k = 5, i = 1, s = 7, p = 15.0 |
||
D |
|
k = 5, i = 1, s = 9, p = 105.0 |
||
D |
|
k = 5, i = 1, s = 11, p = 945.0 |
||
E |
|
k = 5, i = 5, s = 11, p = 945.0, pro = 945.0 |
|
Произведение первых 5 нечетных натуральных чисел = 945
116
Глава 10. Примеры программ
§30. Массивы
30.1.Максимум данных положительных чисел. Версия 1
Задача. Найти максимальное число из n данных положительных чисел.
Решение.
Листинг 21. Программа вычисления максимума положительных чисел
{Максимум n положительных чисел}
var n,m : integer; k : array[0..5] of integer;
{Функция maxim ищет максимум в массиве положительных чисел} function maxim (var n,m : integer;
var k: array of integer) : integer; var i, max : integer;
begin
{Контрольная точка B} i := 0; max := 0; {Контрольная точка C} while (i < n) do begin
if (max < k[i]) then begin
max := k[i]; m := i+1; {Контрольная точка D}
end;
i := i + 1; {Контрольная точка E} end;
maxim := max; {Контрольная точка F}
end;
{Основная программа задает элементы массива и их число, вызывает функцию поиска максимума и выводит результат}
begin
n := 5;
k[0] := 10; k[1] := 8; k[2] := 7; k[3] := 3; k[4] := 9; writeln;
write ('Элементы массива длиной ', n, ' равны ');
writeln (k[0], ' ', k[1], ' ', k[2], ' ', k[3], ' ', k[4]); {Контрольная точка A}
write ('Максимальный элемент массива длиной ', n); write (' равен ', maxim(n,m,k));
writeln (' и имеет номер ', m); writeln;
{Контрольная точка G} end.
117
Часть II. Программирование
|
Таблица 35. Значения данных в контрольных точках: тест 1 |
|
|
|
|
Контрольная точка |
Значения данных |
|
A |
n = 5, k[1..5] = 10, 8, 7, 3, 9 |
|
B |
n = 5, k[1..5] = 10, 8, 7, 3, 9 |
|
C |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 0, i = 0 |
|
D |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 0, i = 1 |
|
E |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, i = 1, m = 1 |
|
D |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, i = 2, m = 1 |
|
E |
— |
|
D |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, i = 3, m = 1 |
|
E |
— |
|
D |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, i = 4, m = 1 |
|
E |
— |
|
D |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, i = 5, m = 1 |
|
E |
— |
|
F |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, i = 5, m = 1, maxim = 10 |
|
G |
n = 5, k[1..5] = 10, 8, 7, 3, 9, max = 10, m = 1, maxim = 10 |
|
Элементы массива длиной 5 равны 10 8 7 3 9 Максимальный элемент массива длиной 5 равен 10 и имеет номер 1
|
Таблица 36. Значения данных в контрольных точках: тест 2 |
|
|
|
|
Контрольная точка |
Значения данных |
|
A |
n = 5, k[1..5] = 1, 8, 7, 3, 9 |
|
B |
n = 5, k[1..5] = 1, 8, 7, 3, 9 |
|
C |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 0, i = 0 |
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 0, i = 1 |
|
E |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 1, i = 1, m = 1 |
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 1, i = 2, m = 1 |
|
E |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 8, i = 2, m = 2 |
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 8, i = 3, m = 2 |
|
E |
— |
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 8, i = 4, m = 2 |
|
E |
— |
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 8, i = 5, m = 2 |
|
E |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 9, i = 5, m = 5 |
|
F |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 9, i = 5, m = 5, maxim = 9 |
|
G |
n = 5, k[1..5] = 1, 8, 7, 3, 9, max = 9, m = 5, maxim = 9 |
|
Элементы массива длиной 5 равны 1 8 7 3 9 Максимальный элемент массива длиной 5 равен 9 и имеет номер 5
118
|
|
Глава 10. Примеры программ |
||
|
|
Таблица 37. Значения данных в контрольных точках: тест 3 |
||
|
|
|
|
|
|
Контрольная точка |
Значения данных |
||
|
A |
n = 5, k[1..5] = 1, 8, 7, 3, 2 |
|
|
|
B |
n = 5, k[1..5] = 1, 8, 7, 3, 2 |
||
|
C |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 0, i = 0 |
||
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 0, i = 1 |
||
|
E |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 1, i = 1, m = 1 |
||
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 1, i = 2, m = 1 |
||
|
E |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 8, i = 2, m = 2 |
||
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 8, i = 3, m = 2 |
||
|
E |
— |
||
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 8, i = 4, m = 2 |
||
|
E |
— |
||
|
D |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 8, i = 5, m = 2 |
||
|
E |
— |
||
|
F |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 8, i = 5, m = 2, maxim = 8 |
||
|
G |
n = 5, k[1..5] = 1, 8, 7, 3, 2, max = 8, m = 2, maxim = 8 |
|
Элементы массива длиной 5 равны 1 8 7 3 2 Максимальный элемент массива длиной 5 равен 8 и имеет номер 2
30.2. Максимум данных положительных чисел. Версия 2
Задача. Найти максимальное число из n данных положительных чисел.
Решение.
Листинг 22. Программа вычисления максимума положительных чисел
{Максимум n положительных чисел}
var n,m : integer; k : array[0..4] of integer;
{Функция maxim ищет максимум в массиве положительных чисел} function maxim (var n,m : integer;
var k: array of integer) : integer; var i, max : integer;
begin
{Контрольная точка B}
i := 1; max := k[0]; m := 1; {Контрольная точка C}
while (i < n) do begin
if (max < k[i]) then begin
max := k[i]; m := i + 1;
119
Часть II. Программирование
{Контрольная точка D} end;
i := i + 1; {Контрольная точка E} end;
maxim := max; {Контрольная точка F}
end;
{Основная программа задает элементы массива и их число, вызывает функцию поиска максимума и выводит результат}
begin
n := 5;
k[0] := 10; k[1] := 8; k[2] := 7; k[3] := 3; k[4] := 9; writeln;
write ('Элементы массива длиной ', n, ' равны ');
writeln (k[0], ' ', k[1], ' ', k[2], ' ', k[3], ' ', k[4]); {Контрольная точка A}
writeln;
write ('Максимальный элемент массива длиной ', n); write (' равен ', maxim(n,m,k));
writeln (' и имеет номер ', m); writeln;
{Контрольная точка G} end.
30.3. Нахождение количества элементов массива по условию Задача. Посчитать в массиве длины n число положительных чисел.
Решение.
Листинг 23. Программа вычисления количества положительных чисел
{Количество положительных чисел}
var n,m : integer; k : array[0..4] of integer;
{Функция kol определяет количество положительных чисел} function kol (var n : integer;
var k: array of integer) : integer; var i, m : integer;
begin
{Контрольная точка B} i := 0; m := 0; {Контрольная точка C} while (i < n) do begin
if (0 < k[i]) then m := m + 1;
{Контрольная точка D}
120