Содержание:
Цикл со счетчиком в Паскаль (цикл for)
Цикл со счетчиком или, как он еще называется — цикл с параметром в Паскале служит для организации повторений (итераций) с заранее известным их количеством, т.е. когда точно известно, сколько раз должны выполниться операторы тела цикла.
Блок-схема, соответствующая циклу For:
Ну или если на простом примере:
Паскаль цикл For: синтаксис:
Прямое направление цикла (от меньшего значения к большему):
{при движении от меньшего значения к большему, например, от 1 до 10} for счетчик:=значение to конечное_значение do тело_цикла;Обратное направление (от большего к меньшему):
{при движении от большего значения к меньшему, например, от 10 до 1} for счетчик:=значение downto конечное_значение do тело_цикла;
Оператор в теле конструкции может быть одиночным или составным оператором.
Счетчик цикла или параметр цикла — это обычная переменная, которая может быть только порядкового (целочисленного, символьного, логического) или перечислимого типа.
При прямом направлении цикла счетчик в каждой итерации увеличивается на единицу, при обратном направлении — уменьшается на единицу.
PascalABC.NET
:
for [var] i: integer := 1 to 5 do <оператор> |
for var i := 1 to 5 do <оператор> |
Рассмотрим на решенном примере, как используется в Паскаль цикл for:
Pascal | PascalABC.NET | ||||
|
|
Более детально цикл со счетчиком в Паскале рассмотрен в видеоуроке:
youTube
Решение на Паскале:
Вариант 1 | Вариант 2 |
[Название файла:
L3task8.pas
]
[Название файла:
L3task9.pas
]
Решение:
Вариант 1 неэффективное решение |
Вариант 2 эффективное решение |
Вариант 3 эффективное решение |
|
Pascal: выход из цикла
Break и Continue
Для выхода из цикла предусмотрена процедура break
в Паскале. Break
досрочно прекращает выполнение циклов while
, repeat
и for
.
Процедура Continue
досрочно выходит из текущей итерации цикла, но, не завершая его, а переходя к следующей итерации.
Рассмотрим использование процедур выхода из цикла Continue и Break в Паскале (будем использовать цикл while
):
break
и continue
1 2 3 4 5 6 7 8 9 10 11 | var a:integer; begin a:=1; while a<1000 do begin a:=a*2; if a=64 then continue; if a=256 then break; write(a:4); {4 позиции на вывод каждого числа} end; end. |
В результате программы на экране будут напечатаны: 2 4 8 16 32 128.
Число 64 пропущено, так как при условии a=64
происходит выход из текущей итерации (continue
) и число не выводится на экран, а при a=256
выполнение цикла прерывается окончательно (break
), так и не распечатав число 256.
break
и continue
для циклов repeat
и for
[Название файла:
L3task10.pas
]
Произвольный шаг в цикле for
Выполнить: Выведите все двухзначные нечетные числа от 11 до 21.
Примерный результат:
11 13 15 17 19 21
✍ Алгоритм:
- Решение 1. С циклом
loop
- Решение 2. С циклом
for
loop
Выполнить: Выведите последовательность 3 5 7 9 … 21 (от 3 до 21 с шагом = 2). Выполнить дважды: с циклом
loop
и циклом for
.
Фрагмент программы:
begin println('результат с циклом loop'); var ...; loop ...; ... println('результат с циклом FOR'); for var ... ... end. |
[Файл: task-01step.pas
]
Выполнить: Вывести последовательность: 20 18 16 … 2 (от 20 до 2 с шагом = 2). Выполнить дважды: с циклом
loop
и циклом for
.
[Файл: task-02step.pas
]
Выполнить: Вывести последовательность: 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0.
✍ Алгоритм:
- Решение 1. С циклом
loop
- Решение 2. С циклом
for
Выполнить: Вывести последовательность 0.1 0.3 0.5 0.7 0.9 1.1. Выполнить дважды: с циклом
loop
и циклом for
.
Примерный результат:
0.1 0.3 0.5 0.7 0.9 1.1
[Файл: task-03step.pas
]
Табулирование функции на отрезке с заданным шагом
* Следует учесть, что эта тема не обязательна для школьного курса информатики, в основном предполагается ознакомление студентами.
f(x)=x2+Ln|x|
и вывести на печать значения этой функции.
Алгоритм:
Для решения задачи в области определения функции вводится сетка – совокупность точек:
{x0, x1, x2, …, xi}, где x0 = а, x1= x0+h, …, xi = xi-1+h, xn = b.
Тогда задача сводится к вычислению функции f в точках xi, то есть нужно вычислить:
f(x0), f(x1), …, f(xi), f(xn)
✍ Решение:
Pascal | PascalABC.NET | ||||
|
|
0.15x + a y= ----------- a2 + x2
где начальное значение а=0.14х, шаг Δа=0.22
Результаты для x = 2:
a =0.28 y = 0.142212632404865 a =0.5 y = 0.188235294117647 a =0.72 y = 0.225743626062323 a =0.94 y = 0.253911049225981 a =1.16 y = 0.273121819814427 a =1.38 y = 0.284533568186437 a =1.6 y = 0.289634146341463
✍ Решение:
var x, a, y, h: real; i:integer; begin writeln('ведите x'); readln(x); h:=0.22; a := 0.14*x; for i:=1 to 7 do begin y := (0.15*x + a)/(sqr(a)+sqr(x)); writeln('a =', a, ' y = ', y); a := a + h; end end. |
f=x2+ln|y|
.Например:
если xn = 2; xk = 3 уn = -1; yk = 1 шаг Δх = 1, шаг Δy = 0.5 то f1 = 22+ln|-1| = 4 f2 = 22+ln|-0.5|= 3.30685281944005 ...
Результат:
x= 2 y= -1 f= 4 x= 2 y= -0.5 f= 3.30685281944005 x= 2 y= 0 f= -∞ x= 2 y= 0.5 f= 3.30685281944005 x= 2 y= 1 f= 4 x= 3 y= -1 f= 9 x= 3 y= -0.5 f= 8.30685281944005 x= 3 y= 0 f= -∞ x= 3 y= 0.5 f= 8.30685281944005 x= 3 y= 1 f= 9
✍ Решение:
var xn, xk, yn, yk, f, hx, hy,x,y: real; begin writeln('отрезок для x от ... и до ...'); readln(xn, xk); writeln('отрезок для y от ... и до ...'); readln(yn, yk); writeln('шаг для x'); readln(hx); writeln('шаг для y'); readln(hy); x := xn; y := yn; while x <= xk do begin while y <= yk do begin f := sqr(x) + ln(abs(y)); writeln('x= ', x, ' y= ', y, ' f= ', f); y := y + hy; end; x := x + hx; y:=yn; end end. |
Вычислить значение функции:
z(x, у) = sin x + cos y
при всех х, изменяющихся на интервале [-1, 1] с шагом Δх = 0.2, и у, изменяющихся на интервале [0, 1] с шагом Δу = 0.1.
Результат:
x=-1.00 y=0.00 z=0.16 x=-1.00 y=0.10 z=0.15 x=-1.00 y=0.20 z=0.14 x=-1.00 y=0.30 z=0.11 x=-1.00 y=0.40 z=0.08 x=-1.00 y=0.50 z=0.04 x=-1.00 y=0.60 z=-0.02 x=-1.00 y=0.70 z=-0.08 x=-1.00 y=0.80 z=-0.14 x=-1.00 y=0.90 z=-0.22 x=-1.00 y=1.00 z=-0.30 x=-0.80 y=0.00 z=0.28 ...
Дополните код в местах, где стоят троеточия:
var x, y, z: real; // описание переменных begin writeln('x y z(x,y)'); x := -1.0; y := ...; // начальное значение while (x <= 1) do begin while (...) do //запуск внутреннего цикла begin z := sin(x) + cos(y); write(' x=', x:3:2, ' y=', y:3:2, ' z=', z:3:2 ); y := y + ...; writeln(); end; writeln(); x := ...; // изменение параметра х на шаг y:= 0; end end. |
[Название файла: L3task11.pas
]
Exit и Halt
Процедура Pascal Exit
служит для завершения работы того программного блока, в котором она используется (условный оператор, цикл, процедура…). Если Exit
вызывается внутри процедуры или функции, то завершается работа данной процедуры/функции. Если процедура Exit
находится в основном блоке программы, то это приводит к ее завершению.
Процедура halt
в pascal завершает работу программы.
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:
непойму тогда зачем a2:=a1*a
это в какой задаче?
Пример: Вывести на экран квадраты и кубы нечётных целых чисел от 1 до 9.i :=i+2;? мы же не можем менять параметр в теле цикла?
Цикл же по переменной k
да, там счетчик цикла — k, не i