Цикл в цикле repeat

Цикл в цикле repeat thumbnail

Паскаль - Урок 6: Циклы while, for, repeat

Вчера мы узнали о понятии циклы в паскале в общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием, цикл for с параметром и цикл repeat – until с постусловием.

1. Цикл с параметром в Паскале – FOR

Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта – счетчик который обычно обозначается буквой i или j.

Внешний вид цикла с параметром в паскале:

for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, …, n

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to – это до .. в порядке возрастания, также есть downto – до .. в порядке убывания.

Блок – схема цикла с параметром:

2. Цикл с предусловием в Паскале – WHILE

Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если некоторое логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в начале, тело цикла может не выполнится ни одного разу.

Структура цикла с предусловием:

WHILE   DO
        begin
                
        end;

– логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

– любые выполняемые операторы языка.

Порядок выполнения цикла:

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

Блок – схема цикла с предусловием:

Паскаль - Урок 6: Циклы while, for, repeat

Примечание: в прямоугольных блоках показано любое действие, которое выполняется в цикле или после него (шаг цикла), в овалах – начало или конец всей программы или её части. Главную роль в данной блок – схеме играет её центральная часть.

Пример:

Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

program example-while;

var
   sum:real;
   n:real;
BEGIN
   sum:=0;
   n:=1;
   while n

3. Цикл с постусловием – Repeat – until.

Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.

Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.

Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, цикл завершается. В противном случае – тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.

Блок – схема цикла с постусловием:

Формат записи, структура цикла:

REPEAT

UNTIL  ;

Program test2;
Var b:Real;
Begin
b:=100;
Repeat b:=b/2;
Until b

Выводы:

1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

Предыдущий урок

Дата: 2012-01-06 19:31:43   Просмотров: 272910

Теги: Паскаль Pascal циклы уроки

Источник

Здравствуйте, любители программирования и читатели сайта progmatem.ru. На одной из предыдущих страниц мы рассмотрели оператор цикла с параметром, поэтому пришло время изучить другие типы циклов – операторы while и repeat.

✎ Операторы цикла while и repeat используются тогда, когда заранее не известно общее количество итераций (повторений вычислений) цикла, а завершение вычислений зависит от некоего условия. Если условие ставится вначале цикла (на входе), то используется оператор While, если на выходе – Repeat.

А теперь расшифруем сказанное: сначала while, а потом ниже repeat.

Оператор цикла while имеет такую структуру:

while условие do
оператор

Это надо понимать так: пока истинно условие, стоящее между while и do, выполняется оператор после do, называемый телом цикла. Перед каждым заходом в цикл проверяется условие: если оно истинно, то выполняется оператор, если ложно, то автоматически осуществляется выход из цикла.

Если оператор в цикле состоит из нескольких операторов, то поместить их нужно в операторные скобки begin – end (сравните оператор цикла for). Не стоит также забывать, что сами операторы разделяются оператором “точка с запятой” (но перед закрывающим END в конце ставить её не обязательно).

while условие do
begin
оператор 1;
оператор 2;
оператор 3;
………..
оператор N
end;

Продемонстрируем сказанное на примере вычисления суммы кубов всех чисел от 1 до 10. Из кода видно, что пока b ≤ 10 (строка 7), будем выполнять тело цикла, в котором на каждой итерации к сумме sum прибавляем b3. При последнем вычислении при b=10 вычислим сумму (строка 9), а ниже увеличим b на 1: b=11, поэтому следующим шагом будет выход из цикла, поскольку условие входа b ≤ 10 нарушится.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
var
b, sum: integer;

begin
b := 1;
sum := 0; // начальная сумма
while b <= 10 do
begin
sum := sum + b*b*b;
inc(b)
end;
writeln(‘sum = ‘, sum); // выводим результат
readln
end.

Рассмотрим хорошо известный пример с разложением функции ex в ряд Тейлора:

Будем вычислять его значение с точностью, например, 0.000001 (одна миллионная), а само значение обозначим как S. как видно, первое значение ряда (суммы) равно a0=1, а для вычисления каждого последующего члена an+1 предыдущий an нужно умножить на x и разделить на n. Действительно, an+1 = xn+1/(n+1)! = xn·x/(n!·n) = an·x/n. Это и продемонстрировано в программе ниже.

Смысл таков: пока члены ряда больше 0.000001, будет выполняться тело цикла, в котором вычисляется указанная сумма. Как только член ряда a станет меньше или равен 0.000001, происходит выход из цикла, и в конце выводится результат.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
var
a, x, S: real;
n: integer;

begin
x := 0.5;
n := 0; // начальный номер
a := 1; // начальное значение члена ряда
S := 0; // начальная сумма
while a > 0.0000001 do
begin
S := S + a;
inc(n);
a := a * x / n
end;
writeln(‘S = ‘, S:0:6);
readln
end.

Нужно избегать случая, когда условие входа в цикл всегда истинно, ибо в тогда программа зациклится. Такая ситуация называется “бесконечным циклом”.

Приведем пример.

Код Pascal

1  
2  
3  
4  
begin
while 1 < 100 do
writeln(‘Hello!’)
end.

Данная программа будет выводить приветствие “Hello!” бесконечно, то есть до тех пор, пока вы её не остановите. Происходит это потому, что условие 1 < 100 всегда истинно.

Посмотрите ещё пример с гармоническим рядом или другие программы из раздела While задачника Абрамяна.

Выведите наименьший делитель числа x, отличный от 1

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
var
x, d: integer;

begin
write(‘Введите x –> ‘);
readln(x);
d := 2; { <- минимальный делитель отличный от 1 }
while (x mod d <> 0) do inc(d);
writeln(‘d = ‘, d);
readln
end.

Напечатать минимальное число, большее 200, которое нацело делится на 17

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
var
n: integer;

begin
n := 201; { <- минимальное число большее 200 }
while (n mod 17 <> 0) do inc(n);
writeln(‘Ответ: ‘, n);
readln
end.

Оператор цикла repeat имеет такую структуру:

repeat
оператор
until условие;

Отличие оператора цикла repeat от while состоит в том, что в нем условие проверяется на выходе из цикла: если оно не выполняется, то цикл продолжается, если выполнится – сразу выход из цикла. Таким образом, пока условие истинно, программа идет на следующую итерацию, условие нарушается – выходим. Поэтому оператор repeat ещё называют оператором выхода. Ещё в операторе repeat не нужны операторные скобки begin – end для нескольких операторов:

repeat
оператор 1;
оператор 2;
оператор 3;
………..
оператор N
until условие;

Ещё одной особенностью оператора repeat – until является то, что по крайней мере один раз оператор в теле цикла выполнится, поскольку условие выхода проверяется в конце. Эта особенность приводит к тому, что любой оператор с предусловием while легко может быть преобразован в оператор с послеусловием repeat, а вот далеко не каждый оператор repeat легко записывается с помощью while.

Вычислить корень квадратный из введенного с клавиатуры числа. Запустите программу и попробуйте ввести отрицательное число: каждый раз вас будет возвращать в начало цикла, поскольку выйти из цикла можно, если ввести неотрицательное число x: x >= 0.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
var
x: integer;

begin
repeat
readln(x)
until x >= 0; { <– выходим, если x>=0 }
writeln(‘Квадратный корень: ‘, sqrt(x):0:4);
readln
end.

Вводить с клавиатуры числа до тех пор, пока их сумма не превысит заданное наперед число. Как видим в строке 11, если сумма sum превысит число М, то выходим из цикла и выводим результат:

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
var
x, M, sum: real;

begin
write(‘Введите контрольное число –> ‘);
readln(M);
sum := 0; { <- начальное значение суммы }
repeat
readln(x); { <- вводим x }
sum := sum + x { <- к сумме прибавляем x }
until sum > M; { <== выходим, если сумма превысит M }
writeln(‘Результат: ‘, sum);
readln
end.

Вводится последовательность чисел, 0-конец последовательности. Определить, содержит ли последовательность хотя бы два равных соседних числа.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
var
n, pre: integer;
twoEqual: boolean;

begin
twoEqual := false; { <- нету пока равных чисел }
pre := 0; { <- начальное значение предыдущего числа }
writeln(‘Введите элементы последовательности:’);
repeat
read(n);
{ Вычисление twoEqual имеет смысл, если мы ещё не встретили два
равных соседних числа (т.е. при twoEqual=false). В таком случае,
если последнее введенное число n равно предыдущему pre (pre=n),
то индикатор twoEqual станет истинным и больше не изменится: }
if not twoEqual then twoEqual := (n = pre);
pre := n { <- предыдущим pre становится n }
until n = 0; { <- выходим при вводе 0 }
writeln;
if twoEqual then writeln(‘Содержит’)
else writeln(‘Не содержит’);
readln
end.

Вводится последовательность из N целых чисел. Найти наибольшее из всех отрицательных чисел. Первый вариант решения.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
var
N, i, a, maxNegNum: integer;

begin
i := 0; { <– Номера вводимых чисел }
N := 10; { <– Количество вводимых чисел }
{ Начальное значение максимального отрицательного числа: }
maxNegNum := -MaxInt-1;
repeat
inc(i); { <– Увеличиваем номер вводимого числа }
read(a); { <– Ввордим число }
{ Поскольку нужно найти максимальное число только среди
отрицательных элементов, то положительные или нулевые
элементы нас не интересуют: для этого достаточно добавить
условие a<0. Потом при каждой итерации будем сравнивать
введенное число а с максимальным maxNegNum: если оно(число)
больше максимального, то заменим ним максииальное: maxNegNum=а. }
if (a < 0) and (a > maxNegNum) then maxNegNum := a
until i = N; { <– Выходим из цикла, если введены все N чисел }
writeln(‘Ответ: ‘, maxNegNum); { <– Выводим результат }
readln
end.

Вводится последовательность из N целых чисел. Найти наибольшее из всех отрицательных чисел. Второй вариант решения.

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
var
N, i, a, maxNegNum: integer;

begin
i := 0; { <– Количество введенных чисел }
N := 10; { <– Количество чисел для ввода }
maxNegNum := 0;{ <– Максимальное значение }
writeln(‘Введите ‘, N, ‘ целых чисел:’);
repeat
inc(i);
write(i, ‘) ‘);
readln(a);
if (a < 0) then { <– Проверяем только отрицательные числа }
{ Когда в наборе мы нашли первое отрицательное число,
величина maxNegNum равна 0, поэтому меняем её на а – это
и будет первое ненулевое значение для maxNegNum: }
if maxNegNum = 0 then maxNegNum := a
else { В остальных случаях maxNegNum сравниваем с а и находим большее: }
if (a > maxNegNum) then maxNegNum := a
until i = N; { <– Выходим, когда введены все числа }
{ Когда переменная maxNegNum отрицательная, то это означает, что в наборе
чисел есть отрицательные – тогда выводим максимальное из них, в противном
случае сообщаем об отсутствии отрицательных чисел: }
if maxNegNum < 0 then writeln(‘Максимальное отрицательное число: ‘, maxNegNum)
else writeln(‘В последовательности нет отрицательных чисел’);
readln
end.

Вводится последовательность из N целых чисел. Найти наибольшее из всех отрицательных чисел. Третий способ решения.

Этот вариант решения – это по сути перефразировка предыдущего способа, только здесь используется дополнительная логическая переменная-индикатор bln для указания присутствия или отсутствия отрицательных чисел. Сначала bln ставим false (строка 8). Заходим в цикл, вводим числа, и как только нашли отрицательное число (строка 14), первый раз, когда ещё bln=false, (или not bln), запоминаем это число как maxNegNum, а значение логической переменной меняем: bln=true (строки 15 – 18), что означает наличие отрицательных чисел в наборе. Для остальных отрицательных элементов сравниваем введенное а и maxNegNum, и запоминаем максимальное из них как maxNegNum – оно и будет максимальным среди отрицательных (строки 19 – 20).

Код Pascal

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
var
N, i, a, maxNegNum: integer;
bln: boolean;

begin
i := 0;
N := 10;
bln := false;
writeln(‘Введите ‘, N, ‘ целых чисел:’);
repeat
inc(i);
write(i, ‘) ‘);
readln(a);
if (a < 0) then
if not bln then begin
maxNegNum := a;
bln := true
end
else
if (a > maxNegNum) then maxNegNum := a
until i = N;
if not bln then writeln(‘Нет отрицательных чисел’)
else writeln(‘Ответ: ‘, maxNegNum);
readln
end.

Это коротко об операторах цикла while и repeat. Что еще упущено выше, так это возможность каждый цикл с параметром for преобразовать в оператор с предусловием while или послеусловием repeat. Другие задачи на использование этих операторов вы найдете в разделе while по ссылке Задачник, или разделе Proc (процедуры и функции) того же раздела. Если что не понятно, то комментарии находятся ниже.

Источник

Циклы с предусловием (while), с постусловием (repeat), циклы со счетчиком (for)

Цикл с предусловием (while) в Pascal abc.net

    Синтаксис цикла while:

    while <условие> do // заголовок цикла
    <оператор> // тело цикла

    ::=

    Цикл while на блок-схеме

    Цикл с предусловием (while) в Pascal abc.net

  • Итерация — однократное повторение тела цикла.
  • В цикле while тело может не выполниться ни разу.

Пример: Вычислить сумму четных чисел от 2 до 20.

✍ Решение: 

    sum := 0;
    x := 2;
    while x <= 20 do
    begin
    sum += x;
    x += 2;
    end;

Задание: Определите наименьшее натуральное число, квадрат которого больше заданного целого числа. Стандартную функцию извлечения квадратного корня не использовать.

Пример: Даны положительные числа A и B (A ≥ B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

✍ Решение: 

Begin
var (a,b):=readInteger2;
assert(a>=b);
var k:=0;
var s:=0;
while s<=a do begin
inc(k);
s+=b
end;
writeln(k-1)
End.

Оператор break в цикле while

Оператор break предназначен для экстренного выхода из цикла. Обычно используется в условном операторе: при выполнении условия — выход из цикла.

Как работать с последовательностями чисел?

Например, в случае, когда последовательность чисел должна заканчиваться нулем, то примерный код обработки последовательности может быть таким:

begin
// …
while True do // бесконечный цикл
begin
// ввод очередного элемента последовательности
var b := ReadInteger; // или ReadReal
if b = 0 then
break; // выход из цикла при вводе элемента, равного нулю
// обработка очередного элемента последовательности
end;
// вывод результатов
end.

Задание: Дана последовательность целых чисел, признак завершения которой — число (оно не считается элементом последовательности). Вывести номера чётных чисел последовательности (числа нумеровать с 1). Если последовательность не содержит чётных элементов, выводить ничего не нужно.

Цикл с постусловием (repeat) в Pascal abc.net

    Синтаксис цикла repeat:

    repeat // заголовок цикла
    <операторы> // тело цикла
    until <условие>

    Цикл repeat на блок-схеме

    Цикл с постусловием (repeat) в Pascal abc.net

  • В цикле repeat тело выполнится хотя бы один раз.

Пример: Вычислить сумму четных чисел от 2 до 20.

✍ Решение: 

    sum := 0;
    x := 2;
    repeat
    sum += x;
    x += 2;
    until x = 22;

Оператор цикла со счетчиком (for) в Pascal abc.net

    Синтаксис цикла for:

    выглядит так:
    for := do

    выглядит так:

    выглядит так:
    to | downto

  • переменная-счетчик должна иметь порядковый тип (целый, символьный или перечислимый);
  • переменная-счетчик цикла for не должна меняться внутри цикла for;
  • Новое в Pascal abc.net:

  • описание переменной цикла в его заголовке:
  • for [var] i: integer := 1 to 5 do
    <оператор>
  • автоопределение типа при описании:
  • for var i := 1 to 5 do
    <оператор>

    Значение переменной цикла после завершения цикла будет не определено (локальная).

Пример: Даны целые числа A и B (A ). Вывести в порядке возрастания все целые числа, расположенные между A и B (не включая сами числа A и B), а также количество N этих чисел.

✍ Решение: 

    begin
    var (a, b) := readinteger2(‘Введите два целых числа. Первое должно быть меньше второго:’);
    assert(a < b); // проверка действительно ли a < b
    for var i := (a + 1) to (b – 1) do
    println(i);
    println(b – a – 1); // количество чисел
    end.

Задание: Даны два целых числа A и B. Выведите квадраты всех целых чисел, расположенных между A и B, в порядке возрастания чисел и включая сами эти числа.

Задание: Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1.2, 1.4, …, 2 кг конфет.

Пример: Используя один цикл, вычислить значение суммы, заданной следующей формулой (N > 0):

✍ Решение: 

    Begin
    var n:=readInteger(‘N = ‘);
    assert(n>0);
    var x:=readReal(‘X = ‘);
    var sum:=0.0;
    var f:=-1.0;
    var num:=1.0;
    for var i:=1 to n do begin
    num*=x;
    sum+=(x+f*num)/i;
    f*=-1.0;
    end;
    writeln(sum)
    End.

Задание: Используя один цикл, вычислить значение суммы, заданной следующей формулой (N > 0):

Не забудьте, что использование функции возведения в степень запрещено.

Как работать с последовательностью чисел?

Например, если необходимо как-то обработать последовательность чисел с заданным количеством элементов, то примерный код может быть таким:

begin
// предварительные действия
N := ReadInteger; // или Read(N);
for var i := 1 to N do
begin
// ввод очередного элемента
var b := ReadInteger; //или ReadReal, или Read(b);
// обработка очередного элемента
end;
// вывод результатов обработки
end.

Задание: Дано целое число N (N ≥ 0) и последовательность из N целых чисел. Найти количество отрицательных чисел в этой последовательности.

Упрощенный цикл LOOP

Для того, чтобы реализовать цикл с конкретным числом итераций, не используя счетчик цикла, возможен упрощенный вариант:
  

Пример:

// Выводить 5 раз слово “Привет!”
loop 5 do
begin
println(‘Привет!’);
end;
// …

Обработка цифр числа

О том, как выделять из числа отдельные его разряды Вы ознакомились в предыдущем уроке.
Теперь рассмотрим более сложный вариант с обработкой цифр числа.

Пример: Дано натуральное число N — количество цифр и последовательность из N цифр. Сформировать положительное число, состоящее из этих цифр, начиная со старшего разряда.

Пример:

кол-во; цифры => результат
N = 3; 3,7,0 => M = 370
N = 1; 0 => M = 0
N = 5; 0,7,0,1,6 => M = 7016
N = 1; 2 => M = 2
N = 2; 0,2 => M = 2

Замечание: В решении должен использоваться один цикл, запрещено использовать математические функции наподобие power или ln.

✍ Решение: 

    begin
    var n := readinteger(‘Введите количество цифр N:’);
    var num := 0;
    assert(n > 0);
    println(‘Введите цифры:’);
    loop n do
    begin
    var a := readinteger;
    num += a;
    num := num * 10;
    end;
    println(num div 10);
    end.

Задание: Дано целое число. Найти количество его цифр и их сумму.
  

Пример:

N = 1205 => Count = 4, Sum = 8
N = -111 => Count = 3, Sum = 3
N = 0 => Count = 1, Sum = 0

Замечание: В решении должен использоваться только один цикл, запрещено использовать математические функции наподобие power или ln.

Пример: Задается целое число. Получить новое число, первый (старший) разряд которого равен последнему (младшему) разряду исходного числа, второй разряд равен предпоследнему разряду исходного числа и т.п.

Пример:

N = 1205 => M = 5021
N = -950 => M = -59
N = 0 => M = 0
N = -4 => M = -4

✍ Решение: 

    begin
    println(‘Введите целое число:’);
    var n := readinteger;
    var (newnum, sign) := (0, sign(n));
    n := abs(n);
    while n > 0 do
    begin
    newnum += (n mod 10);
    newnum *= 10;
    n := n div 10;
    end;
    println(sign * (newnum div 10));
    end.

Задание: Задаются два числа целого типа одинаковой разрядности. Получить из них новое положительное число, разряды которого — есть наибольшее из соответствующих разрядов исходных чисел.

Пример:

N1 = 29, N2 = -31 => M = 39
N1 = 111, N2 = 103 => M = 113
N1 = -50, N2 = 20 => M = 50

Вложенные циклы

Пример: Дано целое число K > 0, а также K наборов ненулевых целых чисел. Признак завершения каждого набора — число . Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.
  

Пример:

Введите число: 3
7 8 6 0
4 5 4 3 1 0
4 5 6 9 0
Кол-во элементов для каждого: 3 5 4
Всего элементов: 12

✍ Решение: 

    begin
    var k:=ReadInteger(‘Введите число’);
    assert(k>0);
    var st:=”;
    assert(k>0);
    var c:=0;
    for var i:=1 to k do
    begin
    var count:=0;
    var x:=ReadInteger;
    while x<>0 do
    begin
    count+=1;
    read(x);
    end;
    st+=count.ToString+’ ‘;
    c+=count;
    end;
    Println(‘Кол-во элементов для каждого =’,st);
    println(‘Всего элементов’,c);
    end.

Задание: Даны целые числа K > 0, N ≥ 0, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести .
 

Пример:

K = 3, N = 5;
набор 1: 6 4 2 -3 2
набор 2: -1 5 6 3 49
набор 3: 31 7 7 -8 12

Правильный ответ: 1 набор.

Источник

Читайте также:  Теория и циклы модернизации