Урок 13.1 (Решенные задачи)
Primary tabs
Урок 13.1 (Решешенные задачи)
1)Выведите на экран таблицу умножения используя только циклы вида repeat/until.
var a, b: integer;
begin
a := 1;
repeat
b := 1;
repeat
write(a, '*', b, '=',a * b, ' ');
b := b + 1;
until (b > 9);
a := a + 1;
until (a > 9);
end.
2) Выведите на экран таблицу умножения используя только циклы вида while.
end.
var a,b: integer;
begin
b := 1;
while(a < 9) do
begin
a := a + 1;
b := 1;
while (b <= 9) do
begin;
write(a, '*', b, '=', a*b, ' ');
write();
b := b + 1;
end;
end;
end.
3)Выведите на экран таблицу умножения используя один цикл while и один repeat-until.
var a, b: integer;
begin
a := 1;
b := 1;
repeat
while (b <= 9) do
begin
write(a, '*', b, '=', a*b, ' ');
b := b + 1;
end;
a := a + 1;
b := 1;
until (a > 9);
end.
5) Пользователь вводит первое целое число-ограничитель m. А затем начинает вводить целые числа по одному, пока не введёт число большее числа-ограничителя.
Если очередное целое число больше 1, то в ответ на каждое такое число программа должна выводить все целые числа от единицы до этого числа.Примечание: это задача на вложенные циклы, в качестве внешнего надо использовать while, а в качестве внутреннего можно использовать или for или while.
var m,i: integer;
begin
writeln('vvedite cislo m');
readln(m);
writeln('vvedite cislo i');
readln(i);
while (i <> m) do
begin
while (i >= 1) do
begin
writeln(i, ' ');
i := i - 1;
end;
writeln('vvedite cislo');
readln(i);
end;
end.6) Пользователь вводит целое положительное число, если оно не соответствует критериям (то есть не является положительным), выведете сообщение об ошибке, в противном случае выведете на экран все числа от 1 до введённого пользователем.
var i: integer;
begin
writeln('vvedite cislo');
readln(i);
while (i > 1) do
begin
writeln('vvedite cislo');
readln(i);
for i := 1 to i do
writeln(i, ' ');
end;
writeln('osibka');
end.
7) Модифицируйте предыдущую задачу так, чтобы в случае, если число удовлетворяет требованиям (целое, положительное), то на экран выводились четные числа.
var i: integer;
begin
writeln('vvedite cislo');
readln(i);
while(i > 1) do
begin
writeln ('vvedite cislo');
readln(i);
for i:= 1 to i do
if ((i mod 2)=0) then
writeln(i, ' ');
end;
writeln('osibka');
end.
8) Выведете на экран числа от 1 до 5 два раза с помощью вложенных циклов. Так чтобы в консоли было:
?
1
21 2 3 4 5
1 2 3 4 5
var i, a: integer;
begin
i := 1;
a := 1;
repeat
while (i <= 5) do
begin
write(i, ' ');
i := i + 1;
end;
writeln();
i := 1;
a := a + 1;
until (a > 2);
end.
9) M раз выведете на экран числа от 1 до N с помощью вложенных циклов. Так чтобы в консоли было:
1......N}M раз
var M,N: integer;
begin
writeln('vvedite cislo M');
readln(M);
writeln('vvedite cislo N');
readln(N);
while (M <> 0) do
begin
for N := 1 to N do
write(N, ' ');
M := M - 1;
writeln();
end;
end.
10) Модифицируйте предыдущую задачу так, чтобы в каждой чётной (той, у которой номер чётный) строке выводилось N символов, а в каждой нечетной N/2 символов (сделайте проверку того, что N/2 больше нуля)
var M, N, a: integer;
begin
writeln('vvedite M');
readln(M);
writeln('vedite N');
readln(N);
while (M <> 0) do
begin
if ((M mod 2) = 1) then
begin
a := N;
for a:= 1 to a div 2 do
write(N, ' ');
M := M - 1;
writeln();
end
else
begin
for N:= 1 to N do
write(N, ' ');
M := M - 1;
writeln();
end;
end;
end.
11) Пользователь вводит числа до тех пор пока им не будет передан ноль. В ответ на каждое число программа должна сообщать чётное оно или нет.
var a: integer;
begin
writeln('vveidte cislo');
readln(a);
while (a <> 0) do
if ((a mod 2) = 0) then
begin
writeln('cislo - hetnoe');
writeln('vvedite cislo');
readln(a);
end
else
begin
writeln('cislo ne hetnoe');
writeln('vvedite cislo');
readln(a);
end;
writeln('programma zavrhena');
end.
12) Пользователь вводит четное целое число (если нечетное сообщите об ошибке). Делите это число в цикле на 2 до тех пор пока оно делится, выводя каждый промежуточный результат, например для 12 в консоли получим:
6 3 А для 8: 4 2 1
var a: integer;
begin
writeln('vvedite cislo');
readln(a);
if (a mod 2) = 0 then
while ((a mod 2) <> 1) do
begin
a := a div 2;
writeln(a);
end
else
writeln('osibka');
end.
13) Пользователь вводит два целых числа M и N, если M четное, делайте то же, что и в предыдущей задаче, а если нечётное, то умножайте M в цикле на 3 до тех пор пока результат не станет больше N (и выводите каждый из промежуточных результатов умножения на экран), например для:
1 2 M := 3; N := 15;
var M,N: integer;
begin
writeln('vvedite cislo M');
readln(M);
writeln('vvedite cislo N');
readln(N);
if ((M mod 2) = 0) then
while (M > 1) do
begin
M := M div 2;
writeln(M);
end
else
while (M < N) do
begin
M := M * 3;
writeln(M);
end;
end.
14)С помощью вложенных циклов выведите на экран таблицу умножения числе от 1 до 9, начнётся она как-то так:
1x1 = 1 1x2 = 2 ......
var a, b: integer;
begin
a := 1;
b := 1;
repeat
while (b <= 9) do
begin
writeln(a, 'x', b, '=', a*b, ' ');
b := b + 1;
end;
a := a + 1;
b := 1;
until (a > 9);
end.
15) С помощью вложенных циклов выведите на экран таблицу деления чисел от 1 до 9.
var a, b: integer;
begin
a := 1;
b := 1;
repeat
while (b <= 9) do
begin
writeln(a, ':', b, '=', a div b, ' ');
b := b + 1;
end;
a := a + 1;
b := 1;
until (a > 9);
end.
16)Пользователь вводит целое положительное число N, если оно не соответствует критериям (то есть не является положительным), выведете сообщение об ошибке, в противном случае выведите на экран все числа последовательности, не большие N, сформированной следующим образом:
8 10 3 12 14 3 16 18 3 20 22 3 и т.д.
var N,a: integer;
begin
writeln('vvedite cislo N');
readln(N);
if (N > 0) then
while (a < N) do
begin
a := a + 2;
writeln(a);
a := a + 2;
writeln(a);
writeln(3);
end
else
writeln('osibka');
end.
17) Модифицируйте решение предыдущей задачи. так чтобы пользователь вводил второе число M, которое отвечало бы за длину возрастающего фрагмента.
var N,M,a,b: integer;
begin
a := 0;
writeln('vvdeite cislo N');
readln(N);
if (N > 0) then
begin
writeln('vvedite M');
readln(M);
b := M;
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if (M = 0) then
begin
write(3, ' ');
M := b;
end;
end;
end
else
writeln('osibka');
end.
18) Модифицируйте решение предыдущей задачи, так, чтобы длина возрастающего фрагмента каждый раз увеличивалась на единицу (начиная с двух):
ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно), при этом решение одним циклом можно сделать, как используя делимость нацело (для определения момента вывода тройки), так и не используя.
Решите всеми тремя способами.
Первый способ (без вложенных циклов и без деления нацело).
var N,M,a,b: integer;
begin
a := 0;
writeln('vvedite cislo N');
readln(N);
if (N > 0) then
begin
writeln('vvedite cislo M');
readln(M);
b := M;
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if (M = 0) then
begin
write(3, ' ');
M := b + 1;
b := M;
end;
end;
end
else
writeln('osibka');
end.
Второй способ (без вложенных циклов с использованием проверки деления нацело).
var N,M,a,b: integer;
begin
a := 0;
writeln('vvedite cislo N');
readln(N);
if (N > 0) then
begin
writeln('vvedite cislo M');
readln(M);
b := M;
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if ((M div 1) = 0 ) then
begin
write(3, ' ');
M := b + 1;
b := M;
end;
end;
end
else
writeln('osibka');
end.
Третий способ (С двумя вложенными циклами)
var N,M,a,b: integer;
begin
a := 0;
writeln('vvedite cislo N');
readln(N);
writeln('vvedite cislo M');
readln(M);
while (N > 0) do
begin
b := M;
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if ((M div 1) = 0 ) then
begin
write(3, ' ');
M := b + 1;
b := M;
end;
end;
end;
writeln('osibka');
end.
19)Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N "ёлочкой", например для N=17:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно), при этом решение одним циклом можно сделать, как используя делимость нацело, так и не используя.
Решите всеми тремя способами.
Превый способ (с использованием деления нацело)
var N,M,a,b: integer;
begin
a := 0;
writeln('vvedite cislo N');
readln(N);
M := 1;
while (N > 0) do
begin
b := M;
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if ((M div 1) = 0 ) then
begin
writeln();
M := b + 1;
b := M;
end;
end;
end;
writeln('osibka');
end.
Второй способ (без использования деления нацело)
var N,M,a,b: integer;
begin
a := 0;
writeln('vvedite cislo N');
readln(N);
M := 1;
while (N > 0) do
begin
b := M;
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if (M = 0) then
begin
writeln();
M := b + 1;
b := M;
end;
end;
end;
writeln('osibka');
end.
Третий способ (с использованием двух цилов)
var N,M,a,b: integer;
begin
a := 0;
b := 1;
writeln('vvedite cislo N');
readln(N);
M := 1;
while (N > 0) do
begin
while (a < N) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
if ((M div 1) = 0 ) then
begin
writeln();
M := b + 1;
b := M;
end;
end;
end;
writeln('osibka');
end.
20)Модифицируйте предыдущий вывод "ёлочкой" так, чтобы в каждой нечетной строке выводились только четные числа, а в каждой четной только нечетные.
var N,M,a,b: integer;
begin
a := 0;
writeln('vvedite cislo N');
readln(N);
M := 1;
while (N > 0) do
begin
b := M;
while (a < N) do
begin
while ((M mod 2) = 1) do
begin
a := a + 1;
write(a, ' ');
M := M - 1;
end;
while (M <> 0) do
begin
a := a + 2;
write(a, ' ');
M := M - 1;
end;
if (M = 0) then
begin
writeln();
M := b + 1;
b := M;
end;
end;
end;
writeln('osibka');
end.
21) Пользователь передает целые положительные число N и M, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" увеличивалась до M чисел, то уменьшалась до 1.
(Не получилось сделать плавный переход, чтобы числа шли по убыванию, и лесенка уменьшалась. У меня она доходит до числа M и стартует с единицы снова до M.)
var M,N, a,b,c: integer;
begin
b := 1;
writeln('vvedite cislo N');
readln(N);
writeln('vvedite cislo M');
readln(M);
c := M;
while (a < N) do
begin
a := a + 1;
write(a, ' ');
M := M - 1;
if (M = 0 ) then
begin
writeln();
M := b + 1;
b := M;
if (b > c) then
begin
M := 1;
b := 1;
end;
end;
end;
end.
22) Пользователь передает целые положительные число N, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" росла волнами.
(Возникла та же проблема, что и в предыдущей задаче)
var M,N,a,b,v: integer;
begin
a := 0;
writeln('vedite cislo N');
readln(N);
M := 1;
b := 1;
v := 2;
while (a < N) do
begin
a := a + 1;
write(a, ' ');
M := M - 1;
if (M = 0) then
begin
writeln();
M := b + 1;
b := M;
if(b = v) then
begin
b := 0;
v := v + 1;
end;
end;
end;
end.
- Log in to post comments
- 2173 reads