Root /ArchiveAbout
()

Series 12 - 16

Series 12 - 16

Характерной особенностью этой группы заданий является то, что все рассматриваемые здесь последовательности оканчиваются нулем. Таким образом, количество вводимых элементов наперед не известно.

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 647 A **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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **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 - с помощью генератора псевдослучайных чисел: