Содержание:
Цикл с предусловием (while) в Pascal abc.net
- Итерация — однократное повторение тела цикла.
- В цикле
while
тело может не выполниться ни разу.
while <условие> do // заголовок цикла <оператор> // тело цикла |
<условие>::= <логическое выражение>
✍ Решение:
sum := 0; x := 2; while x <= 20 do begin sum += x; x += 2; end; |
✍ Решение:
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. |
Цикл с постусловием (repeat) в Pascal abc.net
- В цикле
repeat
тело выполнится хотя бы один раз.
repeat // заголовок цикла <операторы> // тело цикла until <условие> |
✍ Решение:
sum := 0; x := 2; repeat sum += x; x += 2; until x = 22; |
Оператор цикла со счетчиком (for) в Pascal abc.net
- переменная-счетчик должна иметь порядковый тип (целый, символьный или перечислимый);
- переменная-счетчик цикла for не должна меняться внутри цикла for;
- описание переменной цикла в его заголовке:
- автоопределение типа при описании:
<заголовок цикла> <тело цикла>
<заголовок цикла> выглядит так: for <переменная>:=<выражение1> <направление> <выражение2> do <тело цикла> выглядит так: <оператор> <направление> выглядит так: to | downto
for [var] i: integer := 1 to 5 do <оператор> |
for var i := 1 to 5 do <оператор> |
✍ Решение:
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. |

✍ Решение:
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. |

Не забудьте, что использование функции возведения в степень запрещено.
Например, если необходимо как-то обработать последовательность чисел с заданным количеством элементов, то примерный код может быть таким:
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 = 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
Вложенные циклы
Пример:
Введите число: 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 = 3, N = 5; набор 1: 6 4 2 -3 2 набор 2: -1 5 6 3 49 набор 3: 31 7 7 -8 12 ... Правильный ответ: 1 набор.
Лилия
Добрый день! Спасибо за Ваш труд!
На этой странице действительно представлены коды Pascal abc.net?
Например, «newnum += (n mod 10); newnum *= 10;» ? Или это другой язык программирования?
С уважением.