Решенные задачи Pascal: операторы цикла
Содержание:
Pascal операторы цикла — Repeat
Repeat 1: Даны положительные числа A и B (A>B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.
Рекомендации: для проверки правильности внесенного диапазона используйте оператор
Рекомендации: для проверки правильности внесенного диапазона используйте оператор
assert
с сообщением ошибки исключения:
assert(a>b,'введите a > b'); |
Пример вывода:
A=15 B=4 result: 3
[Название файла: L3Repeat1.pas
]
Pascal операторы цикла — While
While 1: Определите значение переменной P после выполнения следующего фрагмента программы:
1 2 3 4 5 | 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 после выполнения следующего фрагмента программы:
1 2 3 4 5 | 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, а также остаток от этого деления.
Рекомендации: для проверки правильности внесенного диапазона используйте оператор
Рекомендации: для проверки правильности внесенного диапазона используйте оператор
assert
с сообщением ошибки исключения:
assert(n>k,'введите n > k'); |
Пример вывода:
N: 15 K: 4 частное: 3 остаток: 3
[Название файла: L3While3.pas
]
Решение данного задания смотрите в видео уроке по Паскалю:
youTube
While 4: Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE, если нет — вывести FALSE.
Пример вывода:
Пример вывода:
введите целое число (number>0) >>54 False
[Название файла: L3While4.pas
]
While 5:
Дано целое число N (>1). Найти наибольшее целое число K, при котором выполняется неравенство
Пример выполнения:
Дано целое число N (>1). Найти наибольшее целое число K, при котором выполняется неравенство
3K<N
Пример выполнения:
Введите N: 96 4
[Название файла: L3While5.pas
]
Предлагаем посмотреть разбор задачи на видео:
youTube
While 6:
Дано число A (
Пример выполнения:
Дано число A (
>1
). Вывести наибольшее из целых чисел K, для которых сумма 1+1/2+…+1/K будет меньше A, и саму эту суммуПример выполнения:
Введите A: 10 12366 9.99996214792161
[Название файла: L3While6.pas
]
While 7:
Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе, меньших K
[Название файла:
Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе, меньших K
[Название файла:
L3While7.pas
]
Проверить:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var i,R,K:Longint; begin write('Введите 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 (вещественное число).
[Название файла:
Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0<P<50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).
[Название файла:
L3While8.pas
]
Проверить:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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. |
Pascal операторы цикла — For
For 1: Дано вещественное число — цена 1 кг конфет. Вывести стоимость 0.1, 0.2, …, 1 кг конфет.
Пример выполнения:
Пример выполнения:
Цена? 45.7 цена за 0.1 кг = 4.57 цена за 0.2 кг = 9.14 цена за 0.3 кг = 13.71 цена за 0.4 кг = 18.28 цена за 0.5 кг = 22.85 цена за 0.6 кг = 27.42 цена за 0.7 кг = 31.99 цена за 0.8 кг = 36.56 цена за 0.9 кг = 41.13 цена за 1 кг = 45.7
[Название файла: L3For1.pas
]
For 2: Даны два целых числа A и B ( A<B ). Вывести в порядке убывания все целые числа, расположенные между A и B (не включая числа A и B), а также количество N этих чисел.
Пример выполнения:
Пример выполнения:
A: 4 B: 18 17 16 15 14 13 12 11 10 9 8 7 6 5 кол-во: 13
[Название файла: L3For2.pas
]
For 3:
Дано целое число N>0. Найти сумму
Пример выполнения:
Дано целое число N>0. Найти сумму
Пример выполнения:
Введите N: 30 65255
[Название файла: L3For3.pas
]
Сейчас предлагаем решить сложную олимпиадную задачу на Паскале:
Пять делителей: Найти сумму всех чисел от 1 до заданного n, имеющих ровно пять делителей. Единица и само число входят в число его делителей
Проверить:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var c,n,s,k,i:integer; begin c:=0; s:=0; readln(n); for i:=2 to n do begin k:=i; while k>0 do begin if i mod k = 0 then c:=c+1; k:=k-1; end; if c= 5 then s:=s+i; c:=0; end; writeln(s); end. |
Добрый вечер. В первом задании у вас не правильный код. Постоянно 1 выдаёт.
У меня получился вот такой:
var a,b,k:integer;
begin
write(‘Введите длину отрезка А (a>b) — ‘);
readln(a);
write(‘Введите длину отрезка Б (b<b) — ');
readln(b);
k:=0;
repeat
a:=a-b;
inc(k);
until a<b;
writeln('На отрезке A находится ',k,' отрезков Б');
end.
ваш код в задачке while 4 на числа, начинающиеся на двойку(например 233) выдаёт false. я написал так(про булеан ещё не знал, ведь он в следующей главе):
var a,a1,z,i,j,i2:integer;
begin
write(‘vvedite chislo:’);
readln(a);
i:=1;
a1:=a;
z:=0;
while a1>=10 do begin
a1:=a1 div 10;
inc(i);
end;
a1:=a;
while i>0 do begin
i2:=1;j:=1;
while i2<i do begin
j:=j*10;
inc(i2);
end;
a1:=a div j;
a:=a mod j;
dec(i);
if a1=2 then begin
z:=1;break;
end;
end;
if z=1 then writeln('true')else
writeln('false');
end.
Молодец!
Найти сумму элементов в матрице из отрезка [50; 80]