Инфопланета — Урок 33. Практическая работа № 9. Решение задач по разработке и выполнению программ в Паскаль

Рассмотрим еще один вид цикла оператор for to do на Паскале — цикл с параметром. Часто его называют циклом со счетчиком, его команды выполняются заданное число раз.

Pascal операторы цикла — Repeat

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

Проверить:
123456789101112131415 vara,b,temp,c:integer;flag: boolean;beginwriteln(‘A=’);readln(a);writeln(‘B=’);readln(b);temp:=a;repeat temp:=tempb; inc(c);until tempb>=0;writeln(‘result: ‘,c);end.

vara,b,temp,c:integer;flag: boolean;beginwriteln(‘A=’);readln(a);writeln(‘B=’);readln(b);temp:=a;repeat temp:=temp-b; inc(c);until temp-b>=0;writeln(‘result: ‘,c);end.

Простейшие алгоритмы

№1. Сумма вводимых целых чисел

begin var n := ReadInteger(‘Введите число слагаемых:’);   var s := 0.0; for var i:=1 to n do begin var x := ReadReal($‘Введите слагаемое №{i}:’); s += x; end;  Println($‘Сумма равна {s}’);end.

В алгоритме используются интерполированные строки вида $’Сумма равна {s}’.Они начинаются с $. Выражение в фигурных скобках, расположенное в такой строке, заменяется на его значение.

№2. Произведение целых чисел

begin var n := ReadInteger(‘Введите число множителей: ‘)var p := 1.0; for var i:=1 to n do begin var x := ReadReal(‘Введите множитель: ‘); p *= x; end;  Println($‘Произведение равно {p}’);end.

№3. Двойной факториал n!!=n*(n-2)*(n-4)*…*2 (или 1)

begin var x := ReadInteger(‘Введите x: ‘)var p := 1; while x>=2 do begin p *= x; x -= 2; end;  Println($‘Двойной факториал равен {p}’);end.

№4. Сколько нечетных среди n введенных

begin var n := ReadInteger(‘Введите n: ‘)var c := 0; for var i:=1 to n do begin var x := ReadInteger(‘Введите целое число: ‘); if x mod 2 <> 0 then c += 1; end;  println($‘Количество нечетных равно {c}’);end.

№5. Защита от неверного ввода

begin var x: real; repeat x := ReadReal(‘Введите x>0: ‘); if x<=0 then Println(‘Неверный ввод’); until x>0;end.

№6. Табулирование функции f(x) на отрезке в точках, разбивающих отрезок на N частей

Дан отрезок [a,b]

function f(x: real) := sin(x)*x; begin var N := ReadInteger(‘Введите N: ‘); Assert(N>0); var (a,b) := ReadReal2(‘Введите a и b: ‘)var h := (ba)/N; var x := a; loop N+1 do begin Writeln(x:5:2,f(x):10:4); x += h; end;end.

№6a. Решение, использующее while. Погрешность округления и вычислительная погрешность

function f(x: real): real:= sin(x)*x; begin var N:=ReadInteger(‘Введите N: ‘); Assert(N>0); var (a,b):=ReadReal2(‘Введите a и b: ‘)var h := (ba)/N; var x := a; while x <= b+h/2 do begin writeln(x:5:2,f(x):10:4); x += h; end;end.

Цикл For — схема работы

Цикл For также называют циклом с известным числом повторений.
Он обладает следующей структурой (изобразим её на блок-схеме):
Пасклаь структрура и работа цикла  FOR блок схема

Как видим на схеме, в цикле for имеются:

  1. Заголовок цикла (шестиугольный блок на схеме выше) — а котором описывается как именно будет изменяться счётчик цикла (на схеме выше это переменная $i$).

    Счетчик цикла — это специальная переменная (типа integer), для которой на основании правой и левой границы цикл for определяет ряд значений, которые она «проходит» при выполнении цикла.
    В примере на схеме в качестве левой и правой границы указаны числа $1$ и $10$, то есть переменная $i$ должна будет «пробежать» по ряду значений:

    1, 2, 3, 4, 5, 6, 7, 8, 9, 10

    — для каждого из этих значений тело цикла будет повторяться (в данном случае 10 раз). Правая и левая границы всегда должны обладать типом integer.

  2. Тело цикла — набор программных действий для, которых заголовок цикла определяет число повторений.

Сразу же приведём пример кода программы, цикл в которой соответствует блок схеме на рисунке выше:

var i, a:integer;begin for i:=1 to 10 do begin // начало тела цикла (у нас в нём будет 3 операции, как на блок-схеме выше) a := i; // получаем очередное значение счётчика (первый раз оно будет равно 1, а последний раз = 10) a := a + 2; // прибавляем к значению 2 write(a, ‘ ‘); // выводим с пробелом после значения end; // конец тела цикла readln();end.

— здесь в теле программы тоже три операции (но уже конкретные) и тот же диапазон значений счетчика, что и на блок-схеме. Запустите программу и посмотрите на результат.

Далее рассмотрим примеры решения задач, чтобы лучше понять как работает цикл for.

Оператор for to do — цикл со счётчиком

В сегодняшней статье разберем самый популярный вид цикла в языках программирования. Это цикл с параметром. У него есть и другие названия: цикл-для, цикл со счетчиком (оператор for to do, оператор цикла с параметром). Особенность данного цикла заключается в том, что использовать его нужно когда заранее известно количество повторений команд.

Посмотрите на рисунок ниже. Там представлена блок схема for (блок-схема цикла с параметром) и его запись на языке программирования Паскаль.
цикл с параметром паскаль цикл for блок схемы
Параметр это целая величина, которая обозначается любой латинской буквой. Чаще всего используют символ — i. Начальные и конечные значения параметра тоже целые числа. Счетчик цикла может работать в двух направлениях: увеличение или уменьшение значения параметра.

Как работает цикл с параметром ?

Разберемся, как работает for в паскале. Выполнение начинается с получения переменной i начального значения а.  Затем проверяется это значение с конечным значением n. Выполнение операторов цикла происходит в случае, когда i меньше или равно n (при положительном шаге счетчика) или i больше или равно n (при отрицательном шаге счетчика).

Электронное приложение к уроку

liniya 

liniya 

ppt.gif Презентация «Программирование циклических алгоритмов»

odp.jpg Презентация «Программирование циклических алгоритмов» (Open Document Format)

Свободное программное обеспечение:

  • PascalABC
    http://pascalabc.net/

Cкачать материалы урока

Глава Башкирии подписал указ о выплатах стобалльникам по ЕГЭ

Глава Башкирии Радий Хабиров подписал указ о единовременных выплатах для выпускников башкирских школ, набравших 100 баллов по ЕГЭ и поступивших в местные вузы, пишет Коммерсантъ.

Pascal операторы цикла — While

While 1:

Определите значение переменной

P

после выполнения следующего фрагмента программы:

12345 P:=1; i:=3;while i <= 9 do begin P := P * (i div 3); i := i + 1;end;

P:=1; i:=3;while i <= 9 do begin P := P * (i div 3); i := i + 1;end;

Варианты:
1) 1
2) 3
3) 9
4) 24

Проверить:

While 2:

Определите значение переменной S после выполнения следующего фрагмента программы:

12345 S:=0; i:=7;while i > 1 do begin S := S + i div 2; i := i 1;end;

S:=0; i:=7;while i > 1 do begin S := S + i div 2; i := i — 1;end;

Варианты:
1) S = 0
2) S = 7
3) S = 12
4) S = 24

Проверить:

While 3: Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.

Решение данного задания смотрите в видео уроке по Паскалю:

While 4: Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE, если нет — вывести FALSE.

Проверить:
1234567891011121314 varnumber:integer;flag: boolean;beginwriteln(‘введите целое число (number>0) number=’);readln(number);flag:=false;while (number div 10)>0 dobegin if (number mod 10) = 2 then flag:=true; number:=number div 10;end;writeln(flag);end.

varnumber:integer;flag: boolean;beginwriteln(‘введите целое число (number>0) number=’);readln(number);flag:=false;while (number div 10)>0 dobegin if (number mod 10) = 2 then flag:=true; number:=number div 10;end;writeln(flag);end.

While 5:
Дано целое число N (>1). Найти наибольшее целое число K, при котором выполняется неравенство 3K<N

* Из задачника М. Э. Абрамян (While10)

Предлагаем посмотреть разбор задачи на видео:

While 6:
Дано число A (>1). Вывести наибольшее из целых чисел K, для которых сумма 1+1/2+…+1/K будет меньше A, и саму эту сумму

* Из задачника М. Э. Абрамян (While14)

Проверить:
123456789101112131415 var Temp:Real; A,K :Integer;begin Write(‘Введите A: ‘); Readln(A); K:=0; Temp:=0; while Temp<=A do begin inc(K,1); Temp:=Temp+1/K; end; Writeln(K1,‘ ‘,Temp1/K);end.

var Temp:Real; A,K :Integer;begin Write(‘Введите A: ‘); Readln(A); K:=0; Temp:=0; while Temp<=A do begin inc(K,1); Temp:=Temp+1/K; end; Writeln(K-1,’ ‘,Temp-1/K);end.

While 7:
Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе, меньших K

* Из задачника М. Э. Абрамян (Series14)

Проверить:
1234567891011121314151617 var i,R,K:Longint;beginwrite(‘Введите K : ‘);readln(K);R:=1;i:=0; while(R<>0) do begin write(‘Введите число из набора: ‘); Readln(R); if R<K then i:=i+1; end; i:=i1; Writeln(i); readln;end.

var i,R,K:Longint;beginwrite(‘Введите K : ‘);readln(K);R:=1;i:=0; while(R<>0) do begin write(‘Введите число из набора: ‘); Readln(R); if R<K then i:=i+1; end; i:=i-1; Writeln(i); readln;end.

While 8:
Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0<P<50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).

* Из задачника М. Э. Абрамян (While16)

Проверить:
1234567891011121314151617 var P, S, D:Real; K :Integer;begin Write(‘Введите процент: ‘); Readln(P); K:=1; D:=10; S:=10; while S<=200 do begin inc(K,1); D:=D+D*P/100; S:=S+D; end; Writeln(K,‘ ‘,S);end.

var P, S, D:Real; K :Integer;begin Write(‘Введите процент: ‘); Readln(P); K:=1; D:=10; S:=10; while S<=200 do begin inc(K,1); D:=D+D*P/100; S:=S+D; end; Writeln(K,’ ‘,S);end.

Если правая граница счётчика меньше левой — downto

Если правая граница для счётчика цикла меньше чем левая то необходимо использовать вместо конструкции:

for i:=<леваяГраница> to <праваяГраница> do

конструкцию:

for i:=<леваяГраница> downto <праваяГраница> do

Задачи на циклы в паскале с решением 

Задание 1. Напишите программу, которая выводит на экран 10 строк следующего содержания: «**++==++**»

Решение:

program for1; { название программы }var i:integer; { описание переменных }begin { начало программы } for i:=1 to 10 do { цикл выполняется 10 раз } writeln(‘**++==++**’); {вывод строки символов экран }end. { конец программы }

Задание 2. Напишите программу, которая выводит значения функции y=kx+b на интервале [2,8] с шагом 1.

Решение:

program for2; { название программы }var x,a,n:integer; { x- параметр цикла, a,n — интервал}k,b:real; { коэффициенты функции}begin { начало программы } write(‘Введите значение k = ‘);readln(k); write(‘Введите значение b = ‘);readln(b); write(‘Введите значение начала интервала = ‘);readln(a); write(‘Введите значение конца интервала = ‘);readln(n); for x:=a to n do { цикл с параметром } writeln(‘x=’,x,‘ y=’,k*x+b); {вывод значений аргумента и функции }end. { конец программы }

В результате выполнения программы получим следующий вывод на экране

цикл for в паскале пример задачи

Задание for12 (электронный задачник). Дано целое число N (> 0). Найти произведение 1.1 · 1.2 · 1.3 · . . .(N сомножителей).

Решение:

uses PT4; var i,n:integer; p:real;begin Task(‘For12’); read(n); p:=1; {первоначальное произведение не должно быть нулевым} for i:=1 to n do p:=p*(1+i*0.1); { вычисление сомножителей} write(p);end.

Задание for13 (электронный задачник). Дано целое число N (> 0). Найти значение выражения 1.1 + 1.2 — 1.3 + . . .(N слагаемых, знаки чередуются). Условный оператор не использовать.

Решение:

uses PT4; var i,n,k:integer; s:real;begin Task(‘For13’); read(n); k:=1; {k — переменная, определяющая знак слагаемого} for i:=1 to n do begin s:=s+(1+i*0.1)*k; {вычисление суммы} k:=k*(1); {чередование знака слагаемого} end; write(s);end.

Вот так используется оператор цикла с параметром при решении задач.

Если у вас возникли трудности с пониманием решения, приведенных здесь задач, спрашивайте в комментариях.

Рекомендуем ознакомиться с темой Текстовые файлы в Pascal

Вариант ОГЭ по математике. Практика

Экзаменационная работа состоит из двух частей, включающих в себя 25 заданий. Часть 1 содержит 19 заданий, часть 2 содержит 6 заданий с развёрнутым ответом.

Поиск значения

№14. Есть ли среди введенных число k?

var n,k: integer;begin write(‘Введите целые числа n (n>0) и k: ‘); readln(n,k); assert(n>0)var Exists := false; for var i := 1 to n do begin write(‘Введите ‘, i, ‘ целое число: ‘); var x := ReadInteger; if x = k then begin Exists := true; break; end; endif Exists then writeln(‘Число ‘, k, ‘ было введено’) else writeln(‘Число ‘, k, ‘ не было введено’);end.

№14b. Есть ли среди введенных число k? (то же с использованием while)

var n,k: integer;begin write(‘Введите целые числа n (n>0) и k: ‘); readln(n,k); assert(n>0)var Exists := false; var i := 1; while (i <= n) and not Exists do begin write(‘Введите ‘, i, ‘ целое число: ‘); var x := ReadInteger; i += 1; if x = k then Exists := true; endif Exists then writeln(‘Число ‘, k, ‘ было введено’) else writeln(‘Число ‘, k, ‘ не было введено’);end.

№15. Является ли число N>1 простым?

begin write(‘Введите целое число N (N>1): ‘); var N := ReadInteger; assert(N>1)var IsPrime := True; for var i := 2 to round(sqrt(N)) do if N mod i = 0 then begin IsPrime := False; break; endif IsPrime then writeln(‘Число ‘, N, ‘ является простым’) else writeln(‘Число ‘, N, ‘ является составным’);end.
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: