Урок 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
- 1767 reads