Задачи Урок 13.1
Primary tabs
1) Выведите на экран таблицу умножения используя только циклы вида repeat/until.
Начинаться вывод таблицы должен как-то так:1x1 = 1 1x2 = 2 ......
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;
writeln();
until a > 9;
end.
2) Выведите на экран таблицу умножения используя только циклы вида while.
var a, b : integer;
begin
a := 1;
while a <= 9 do
begin
b := 1;
while b <= 9 do
begin
write(a, '*', b, '=', a*b, ' ');
b := b + 1;
end;
a := a + 1;
writeln();
end;
end.3) Выведите на экран таблицу умножения используя один цикл while и один repeat-until.
var a, b : integer;
begin
a := 1;
while a <= 9 do
begin
b := 1;
repeat
write(a, '*', b, '=', a*b, ' ');
b := b + 1;
until b > 9;
a := a + 1;
writeln();
end;
end.
4) Пользователь вводит числа до тех пор пока не введёт число меньшее 1. В ответ на каждое введённое им число выводите на экран все нечетные числа от 1 до это числа, при этом делящиеся на 5. Если же пользователь ввел число меньшее 1, то завершите программу.
var i, n : integer;
begin
repeat
write('введите число:');
readln(n);
if (n < 1) then
writeln('пока!')
else
begin
for i := 1 to n do
begin
if (i mod 2 = 1) and (i mod 5 = 0) then
write(i, ' ');
end;
writeln();
end;
until n < 1;
readln();
end.
5) Пользователь вводит первое целое число-ограничитель m. А затем начинает вводить целые числа по одному, пока не введёт число большее числа-ограничителя. Если очередное целое число больше 1, то в ответ на каждое такое число программа должна выводить все целые числа от единицы до этого числа.
Примечание: это задача на вложенные циклы, в качестве внешнего надо использовать while, а в качестве внутреннего можно использовать или for или while.
var m, n, i : integer;
begin
writeln('введите число-ограничитель');
readln(m);
while n <= m do
begin
writeln('введите число');
readln(n);
if n > 1 then
begin
i := 1;
while i <= n do
begin
write(i, ' ');
i := i + 1;
end;
writeln();
end;
end;
writeln('пока!');
end.
6) Пользователь вводит целое положительное число, если оно не соответствует критериям (то есть не является положительным), выведите сообщение об ошибке, в противном случае выведите на экран все числа от 1 до введённого пользователем.
var a, i : integer;
begin
writeln('введите целое положительное число');
readln(a);
if a < 0 then
writeln('ошибка!')
else
begin
for i := 1 to a do
write(i, ' ');
end;
end.
7) Пользователь вводит целое положительное число, если оно не соответствует критериям (то есть не является положительным), выведете сообщение об ошибке, в противном случае выведете на экран все четные числа от 1 до введённого пользователем.
var a, i : integer;
begin
writeln('введите целое положительное число');
readln(a);
if a < 0 then
writeln('ошибка!')
else
begin
for i := 1 to a do
begin
if i mod 2 = 0 then
write(i, ' ');
end;
end;
end.
8)Выведете на экран числа от 1 до 5 два раза с помощью вложенных циклов. Так чтобы в консоли было:1 2 3 4 5 1 2 3 4 5
var i, j : integer;
begin
for i := 1 to 2 do
begin
for j := 1 to 5 do
write(j, ' ');
writeln();
end;
end.
9) Есть исходный код:var i,m:integer; begin i:=1; m:=1; repeat repeat write('# '); m:=m+1; until(m=13); i:=i+1; writeln(); until(i=9); readln(); end.-- в нем сделана попытка вывести квадрат символов # размерами 13 на 9.
Но цикл оказывается бесконечным, разберитесь почему (напишите текстовое описание причины) и исправьте ошибку в коде, ответьте на вопросы:
1) На каком витке внешнего и внутреннего цикла (укажите номера витков) программа впервые начинает выводить не то, что ожидалось
2) Какой из двух циклов - внешний или внутренний оказывается бесконечным и почему (состояние переменных)
1) - Внешний цикл: на 2 итерации (i = 2)
- Внутренний цикл: на 2 итерации внешнего цикла(внутренний цикл пропускается)
2) Бесконечным циклом становится внешний цикл, потому что внутренний цикл перестает выполняться. Переменная m не срабатывается и условие until(m = 13) сразу выполняется.
10) M раз выведите на экран числа от 1 до N с помощью вложенных циклов. Так чтобы в консоли было:
1 ... N }M раз
1 ... N
var i, j, n, m : integer;
begin
writeln('введите число n');
readln(n);
writeln('введите число m');
readln(m);
for i := 1 to m do
begin
for j := 1 to n do
write(j, ' ');
writeln();
end;
end.
11) Модифицируйте предыдущую задачу так, чтобы в каждой чётной (той, у которой номер чётный) строке выводилось N символов, а в каждой нечетной N/2 символов (сделайте проверку того, что N/2 больше нуля)
var i, j, n, m : integer;
begin
writeln('введите число n');
readln(n);
writeln('введите число m');
readln(m);
for i := 1 to m do
begin
if i mod 2 = 0 then
begin
for j := 1 to n do
write(j, ' ');
end
else
begin
if n div 2 > 0 then
begin
for j := 1 to n div 2 do
write(j, ' ');
end;
end;
writeln();
end;
end.12) Пользователь вводит числа до тех пор пока им не будет передан ноль. В ответ на каждое число программа должна сообщать чётное оно или нет.
var n : integer;
begin
writeln('введите число');
readln(n);
while n <> 0 do
begin
if n mod 2 = 0 then
writeln('четное')
else
writeln('нечетное');
readln(n);
end;
writeln('пока!');
end.
13) Пользователь вводит четное целое число (если нечетное сообщите об ошибке). Делите это число в цикле на 2 до тех пор пока оно делится, выводя каждый промежуточный результат, например для 12 в консоли получим:6 3А для 8:
4 2 1
var n : integer;
begin
writeln('введите четное целое число');
readln(n);
if n mod 2 = 1 then
writeln('ошибка!')
else
begin
while n mod 2 = 0 do
begin
n := n div 2;
writeln(n);
end;
end;
writeln('пока!');
end.
14) Пользователь вводит два целых числа M и N, если M четное, делайте то же, что и в предыдущей задаче, а если нечётное, то умножайте M в цикле на 3 до тех пор пока результат не станет больше N (и выводите каждый из промежуточных результатов умножения на экран), например для:M := 3; N := 15;Получим:
9 27
var m, n : integer;
begin
writeln('введите целое число');
readln(m);
writeln('введите целое число');
readln(n);
if m mod 2 = 0 then
while m mod 2 = 0 do
begin
m := m div 2;
writeln(m);
end
else
while m <= n do
begin
m := m * 3;
writeln(m);
end;
writeln('пока!');
end.
15) С помощью вложенных циклов выведите на экран таблицу деления чисел от 1 до 9.
var i, j : integer;
begin
for j := 1 to 9 do
begin
for i := 1 to 9 do
begin
write(i*j, ':', i, '=', j, ' ');
end;
writeln();
end;
end.
16) Пользователь вводит целое положительное число N большее или равное 8, если оно не соответствует этим критериям (то есть не является положительным и большим или равным 8), выведете сообщение об ошибке, в противном случае выведите на экран все числа последовательности, не большие N.
Например, для N=20 получим результат:8 10 3 12 14 3 16 18 3 20-- то есть всё начинается с восьмерки, затем число увеличивается на 2, затем выводится тройка и ещё пара увеличенных на 2 чисел и т.д. пока не дойдем до N.
ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно).
Решите указанными двумя способами.
1) способ с 1 циклом:
var n, i : integer;
begin
writeln('введите положительное число > 8');
readln(n);
if n < 8 then
writeln('ошибка!')
else
begin
i := 8;
while i <= n do
begin
write(i, ' ');
if i + 2 <= n then
write(i + 2, ' ');
write(3, ' ');
i := i + 4;
end;
writeln();
end;
writeln('пока!');
end.2) способ с вложенными циклами:
var n, i, j: integer;
begin
writeln('Введите целое положительное число > 8');
readln(n);
if n < 8 then
begin
writeln('ошибка!');
end
else
begin
i := 8;
while i <= n do
begin
j := 0;
while (j < 2) and (i + j * 2 <= n) do
begin
write(i + j * 2, ' ');
j := j + 1;
end;
if i + 4 <= n then
write(3, ' ');
i := i + 4;
end;
writeln();
end;
writeln('пока!');
end.17) Пользователь вводит целое положительное число N большее или равное 8, если оно не соответствует этим критериям (то есть не является положительным и большим или равным 8), выведите сообщение об ошибке. Также пользователь вводит второе число M, которое отвечает за длину возрастающего фрагмента, например для M=4, выведите все числа до N таким образом:
8 10 12 14 3 16 18 20 22 3...3.... и т.д.
4 числа 4 числаЕсли же число M было зафиксировано как = 2 то получаем:
8 10 3 14 16 3 ....3..... и т.д.
2 числа 2 числа
var n, m, i, c : integer;
begin
writeln('введите целое положительное число > 8');
readln(n);
writeln('введите длину фрагмента');
readln(m);
if (n < 8) or (m <= 0) then
begin
writeln('ошибка!');
end
else
begin
i := 8;
while i <= n do
begin
c := 0;
while (c < m) and (i <= n) do
begin
write(i, ' ');
i := i + 2;
c := c + 1;
end;
if i <= n then
write(3, ' ');
end;
writeln();
end;
writeln('пока!');
end.
18) Модифицируйте решение предыдущей задачи, так, чтобы длина возрастающего фрагмента каждый раз увеличивалась на единицу (начиная с двух):
8, 10 3 10 12 14 3 16 18 20 22 3 .... 3.... и т.д.
2 числа 3 числа 4 числаПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно), при этом решение одним циклом можно сделать, как используя делимость нацело (для определения момента вывода тройки), так и не используя.
Решите всеми тремя способами.
1) c вложенными циклами:
var n, i, f, c : integer;
begin
writeln('введите целое положительное число > 8');
readln(n);
if n < 8 then
begin
writeln('ошибка!');
end
else
begin
i := 8;
f := 2;
while i <= n do
begin
c := 0;
while (c < f) and (i <= n) do
begin
write(i, ' ');
i := i + 2;
c := c + 1;
end;
if i <= n then
write(3, ' ');
f := f + 1;
end;
writeln();
end;
writelN('пока!');
end.
2) с использованием 1 цикла (с делимостью):
var n, i, t, f : integer;
begin
writeln('введите целое положительное число > 8');
readln(n);
if n < 8 then
begin
writeln('ошибка!');
end
else
begin
i := 8;
f := 2;
t := 0;
while i <= n do
begin
write(i, ' ');
i := i + 2;
t := t + 1;
if t mod f = 0 then
begin
if i <= n then
write(3, ' ');
t := 0;
f := f + 1;
end;
end;
writeln();
end;
writeln('пока!');
end.
3) c использованием 1 цикла (без делимости):
var n, i, t, f : integer;
begin
writeln('введите целое положительное число > 8');
readln(n);
if n < 8 then
begin
writeln('ошибка!');
end
else
begin
i := 8;
f := 2;
t := 0;
while i <= n do
begin
write(i, ' ');
i := i + 2;
t := t + 1;
if t = f then
begin
if i <= n then
write(3, ' ');
t := 0;
f := f + 1;
end;
end;
writeln();
end;
writeln('пока!');
end.
19) Пользователь передает целое положительное число N, выведете на экран последовательность из единиц в количестве N "ёлочкой", например для N=18:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно). Решите указанными двумя способами.
1) С вложенными циклами:
var n, i, j, c : integer;
begin
writeln('введите целое положительное число');
readln(n);
if n <= 0 then
begin
writeln('ошибка!');
end
else
begin
c := 1;
i := 0;
while i < n do
begin
for j := 1 to c do
begin
if i < n then
begin
write('1');
i := i + 1;
end;
end;
writeln();
c := c + 1;
end;
end;
writeln('пока!');
end.2) с 1 циклом:
var n, i, j, c : integer;
begin
writeln('введите целое положительное число');
readln(n);
if n <= 0 then
begin
writeln('ошибка!');
end
else
begin
c := 1;
j := 0;
i := 0;
while i < n do
begin
write('1');
i := i + 1;
j := j + 1;
if c = j then
begin
writeln();
c := c + 1;
j := 0;
end;
end;
end;
writeln('пока!');
end.20) Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N "ёлочкой", например для N=18:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно).
Решите указанными двумя способами.
1) с вложенными циклами:
var n, i, j, r : integer;
begin
writeln('Введите целое положительное число');
readln(n);
if n <= 0 then
begin
writeln('ошибка!');
end
else
begin
i := 1; //первое число
j := 1; //длина первой строки
while i <= n do
begin
r := 0; //счетчик чисел в текущей строке
while (r < j) and (i <= n) do
begin
write(i, ' ');
i := i + 1;
r := r + 1;
end;
writeln();
j := j + 1;
end;
writeln('пока!');
end;
end.2) с 1 циклом:
var n, i, j, r : integer;
begin
writeln('Введите целое положительное число');
readln(n);
if n <= 0 then
begin
writeln('ошибка!');
end
else
begin
i := 1;
j := 1;
r := 0;
while i <= n do
begin
write(i, ' ');
i := i + 1;
r := r + 1;
if r = j then
begin
writeln();
j := j + 1;
r := 0;
end;
end;
writeln();
end;
writeln('пока!');
end.21) Модифицируйте предыдущий вывод "ёлочкой" так, чтобы в каждой нечетной (относительно исходного варианта, где мы выводим все числа) строке выводились только четные числа, а в каждой четной только нечетные, например для N=17:3 4 6 7 9 12 14 17
var n, i, j, r, f: integer;
begin
writeln('введите целое положительное число');
readln(n);
if n <= 0 then
begin
writeln('ошибка!');
end
else
begin
i := 1; //первое число
j := 1; //длина первой строки
f := 1; //номер текущей строки
while i <= n do
begin
r := 0; //счетчик чисел в текущей строке
while (r < j) and (i <= n) do
begin
if f mod 2 = 1 then
begin
if i mod 2 = 1 then
begin
write(i, ' ');
r := r + 1;
end;
end
else
begin
if i mod 2 = 0 then
begin
write(i, ' ');
r := r + 1;
end;
end;
i := i + 1;
end;
writeln();
j := j + 1;
f := f + 1;
end;
end;
writeln('пока!');
end.
22) Пользователь передает целые положительные число N и M, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" увеличивалась до M чисел, то уменьшалась до 1. Например, для M=3 и N=19 получим:
1
2 3
4 5 6 - максимум 3 числа
7 8
9
10 11
12 13 14 - снова 3 числа
15 16
17
18 19.....
var n, m, i, j, d, r : integer;
begin
writeln('Введите целое положительное число');
readln(n);
writeln('Введите целое положительное число');
readln(m);
if (n <= 0) or (m <= 0) then
begin
writeln('ошибка!');
end
else
begin
i := 1; //первое число
j := 1; //начальная длина строки
d := 1; //направление изменения ширины
while i <= n do
begin
r := 0; //счетчик чисел в текущей строке
while (r < j) and (i <= n) do
begin
write(i, ' ');
i := i + 1;
r := r + 1;
end;
writeln();
if d = 1 then
begin
if j < m then
j := j + 1
else
d := - 1;
end
else
begin
if j > 1 then
j := j - 1
else
d := 1;
end;
end;
writeln('пока!');
end;
end.23) Пользователь передает целое положительное число N, выведете на экран последовательность от 1 до N, так чтобы ширина "ёлочки" росла волнами.
Например, для N=49 получим:
1
2 3 - сначала до двух
4
5 6
7 8 9 - потом до трех
10 11
12 - возвращаемся к одному
13 14
15 16 17
18 19 20 21 - тут уже четыре
22 23 24
25 26 - снова убывает
27
28 29
30 31 32
33 34 35 36
37 38 39 40 41
42 43 44 45
46 47 48
49
var n, i, j, d, r, m : integer;
begin
writeln('Введите целое положительное число');
readln(n);
if n <= 0 then
begin
writeln('ошибка!');
end
else
begin
i := 1; //первое число
j := 1; //начальная длина строки
d := 1; //направление изменения ширины
m := 1; //макс. ширина текущей волны
while i <= n do
begin
r := 0; //счетчик чисел в текущей строке
while (r < j) and (i <= n) do
begin
write(i, ' ');
i := i + 1;
r := r + 1;
end;
writeln();
if d = 1 then
begin
if j < m then
j := j + 1
else
begin
d := -1;
end;
end
else
begin
if j > 1 then
j := j - 1
else
begin
d := 1;
m := m + 1;
end;
end;
end;
writeln('пока!');
end;
end.
- Log in to post comments
- 393 reads