Задачи Урок 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
- 102 reads