Характерной особенностью этой группы заданий является то, что все рассматриваемые здесь последовательности оканчиваются нулем. Таким образом, количество вводимых элементов наперед не известно.
Series12. Дан набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе.
Сначала решим задание Series12 для ручного ввода (с клавиатуры). Последовательность действий здесь такова:
var
a, N: integer;
begin
N := 0; //начальное количество чисел в наборе
repeat
read(a); //вводим число
inc(N) //увеличиваем количество чисел
until a = 0; //если число=0, то выходим
writeln;
write('количество чисел = ', N)
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1 Для автоматического ввода нужно сначала инициализировать генератор псевдослучайных чисел randomize. Потом в пункте 2 предыдущего варианта решения вместо ввода переменной а с клавиатуры присвоить ей случайное число с интервала [-50, 49] и вывести на экран.
Series13. Дан набор ненулевых целых чисел; признак его завершения — число 0. Вывести сумму всех положительных четных чисел из данного набора. Если требуемые числа в наборе отсутствуют, то вывести 0.
Последовательность действий при вводе с клавиатуры:
var
a, S: integer;
begin
S := 0; //начальная сумма
repeat
read(a);
{ Если числа положительные и четные,
то увеличиваем их сумму: }
if (a > 0)and(a mod 2 = 0) then S := S + a
until a = 0; //если число=0, то выходим
writeln;
write('Результат: ', S)
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647A **mod** B
- остаток при целочисленном делении А на В Для автоматического ввода все то же самое, только перед циклом добавляем генератор псевдослучайных чисел randomize, а в цикле вместо read(a) переменной А присваиваем случайное число с диапазона [-10, 9] и выводим его.
Series14. Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе, меньших K.
Эту задачу решим с помощью случайного ввода. Порядок действий:
var
a, K, q: integer;
begin
write('K = ');
readln(K);
q := 0;//количество требуемых в условии чисел равно 0
randomize; //генератор псевдослучайных чисел
repeat
a := -25 + random(51); //случайное число [-25, 25]
write(a, ' ');
{ Если число a < K, то увеличиваем количество таких чисел: }
if a < K then inc(q)
until a = 0; //если число=0, то выходим
writeln;
write('Результат: ', q)
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1 Series15. Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести номер первого числа в наборе, большего K. Если таких чисел нет, то вывести 0.
Здесь будем искать номер FirstNumber - номер первого в списке числа, которое больше К. Порядок действий:
var
a, K, q, FirstNumber: integer;
begin
write('K = ');
readln(K);
q := 1; //номер числа = 1
FirstNumber := 0; //номер искомого числа = 0
repeat
read(a);
if FirstNumber = 0 then begin
//если a > K, то находим номер числа а:
if a > K then FirstNumber := q;
inc(q)
end
until a = 0; //если число = 0, то выходим
writeln;
writeln('Результат: ', FirstNumber)
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1 * * *
Второй вариант решения задачи Series15 при вводе элементов последовательности с клавиатуры. Этот пример отличается от предыдущего тем, что для запоминания номера элемента используется индикатор - переменная bln логического типа (сокр. от "boolean"), меняющая свое значение при достижении данного условия (номер первого в последов. числа большего К). Если bln = false, то такого немера ещё не найдено, bln = true - условие выполнено и найден номер нужного числа.
Порядок действий:
var
a, K, q: integer;
bln: boolean;
begin
write('K = ');
readln(K);
q := 0; //номер числа = 0
bln := false; //число ещё не найдено
repeat
read(a);
if bln = false then begin
if a > K then bln := true;//если a > K, то число найдено
inc(q)
end
until a = 0; //если число = 0, то выходим
writeln;
if bln = false then q := 0;
write('Результат: ', q)
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** boolean;
: Представляет логическое значение.**const** false = False;
: Представляет логическое значение.**const** false = False;
: Представляет логическое значение.**const** true = True;
: Представляет логическое значение.**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1**const** false = False;
: Представляет логическое значение. Для случайного ввода элементов вместо read(a) из предыдущего списка водим случайное число и выводим его:
Series16. Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести номер последнего числа в наборе, большего K. Если таких чисел нет, то вывести 0.
var
a, K, q, i: integer;
begin
write('K = ');
readln(K);
q := 0; //номер вводимого числа
i := 0; //номер последнего числа a > K
a := 1; //начальное значение для входа в цикл (любое число <> 0)
while a <> 0 do begin
inc(q);
read(a);
{ Проверяем условие a > K. Если оно
ни разу не выполнится, то i = 0: }
if a > K then i := q
end;
writeln;
write('Результат: ', i)//выводим номер числа
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** Inc(**var** i: integer);
: Увеличивает значение переменной i на 1 * * *
Второй вариант решения задачи Series16 - с помощью генератора псевдослучайных чисел: