Вопросы к экзамену. Паскаль 2023
Primary tabs
Ответы
Вопросы
- 1) Что такое операторные скобки? Какими они бывают? Что такое тело программы? Зачем нужны комментарии? Какие типы комментариев в коде вы знаете? Как их оформлять?
- 2) Литералы какого типа вы знаете? Чем строковые литералы отличаются от символьных? Что такое процедура? Что такое аргументы процедуры?
- 3) Что такое переменная? Чем она отличается от литерала?
- 4) Что такое оператор? Что такое операнд? Приведите примеры операторов и операндов.
- 5) Что такое инициализация переменной? Приведите примеры инициализаций.
- 6) Что такое выражение? Что такое арифметическое выражение? Что такое подвыражение? Приведите примеры
- 7) Какие выражения можно присваивать переменным целого типа? Какие операнды могут входить в эти выражения?
- 8) Что такое неявное приведение типа и когда оно работает? Приведите пример
- 9) Что такое и для чего нужен Readln()? Сколько аргументов может принимать Readln()?
- 10) Чтобы такое логический тип данных? Для чего он нужен? Какие литералы логического типа вы знаете? Сколько их?
- 11) Какие выражения могут возвращать логический тип данных?
- 12) Как работает операция AND? Сколько операндов она использует для получения результата? Какая у нее таблица истинности?
- 13) Как работает операция Not? Сколько операндов она использует для получения результата? Какая у нее таблица истинности?
- 14) Как работает операция OR? Сколько операндов она использует для получения результата? Какая у нее таблица истинности?
- 15) Зачем нужно форматирование кода? Что такое базовый отступ, приведите примеры правильного и неправильного форматирование кода для вложенных условных операторов if()
- 16) Для чего нужен оператор ветвления (условный оператор)?
Какие ветви условного оператора вы знаете?
Чем полная форма условного оператора отличается от неполной?
Когда нужны операторные скобки в ветвях оператора IF, а когда нет? Приведите примеры - 17) Операции div и mod - зачем они нужны и как работают? Зачем нужен цикл for?
Что такое заголовок цикла? - 18) Зачем нужен цикл for?Что такое счетчик цикла? Что такое тело цикла?
Переменной i в цикле for левую границу установили в 5, а правую в 12 -- сколько раз выполнится цикл? - 19) Как работает цикл while? Приведите пример. Чем он отличается от других циклов?
- 20) Как работает цикл repeat until? Приведите пример. Чем он отличается от других циклов?
- 21) Можно ли использовать while() как условный оператор if() в неполной форме? Если да, приведите пример кода
- 22) Чем процедура в Паскале отличается от функции, приведите примеры кода
- 23) Что такое вложенные циклы? Приведите пример кода
- 24) Зачем в принципе нужны цикла? Приведите пример кода. Какие циклические конструкции вы знаете
- 25) В консольных программах на паскале можно делать анимации и игры - каким способом там удается "обновлять кадры"? Какой вызов для этого используются?
- 26) Как возникают бесконечные циклы? Приведите пример кода для бесконечного цикла
- 27) Что такое отладка программы? Какие способы отладки программы вы знаете?
- 28) Что такое ООП? Приведите пример кода класса, приведите пример кода интерфейса и его реализации классом
- 29) Что такое ООП? Приведите пример кода наследования классов с переопределением метода.
- 30) Что такое ООП? Чем переопределение методов отличается от перегрузки. Приведите примеры кода.
Задачи
- 1) Пользователь вводит три числа, найдите из них максимальное.
Решите тремя способами: 1) С использованием логической операции and. 2) С вложенными блоками (без and, все операторы if должны быть в полной форме). 3) Без вложенных блоков (без and) -- запомнив максимум из первых двух чисел в специальной переменной. - 2) Пользователь вводит четыре числа, найдите из них максимальное.
Решите тремя способами: 1) С использованием логической операции and. 2) С вложенными блоками (без and, все операторы if должны быть в полной форме). 3) Без вложенных блоков (без and) -- запомнив максимум из первых двух чисел в специальной переменной. - 3) Есть программа:
var m,s:integer; begin writeln('Vvedite chislo M'); readln(m); s:=1; if (s = 1) then writeln('soobchenie 1'); if (s = m) then writeln('soobchenie 2'); end;
-- при этом известно, что если
s
равно 1, то на экран должно вывестись только первое сообщение (а второе выводиться не должно), а еслиs
не равно 1, но равноm
, то второе (а первое выводиться не должно).
Но сейчас программа работает не так, исправьте это. - 4) Есть программа:
var z,s:integer; f:boolean; begin readln(z); f := z > 5; s:=1; if (z=s) and (f=false) then begin writeln();// делаем перенос строки z:=0; s:=s+1;//но увеличиваем кол-во строк end; if (z=s) and (f=true) then begin writeln(); // делаем перенос строки z:=0; s:=s-1;//но уменьшаем кол-во строк end; end.
-- в двух условных операторах действия частично совпадают, а значит наблюдается дублирование кода. Перепишите код так, чтобы дублирования не было.
- 5) Изучите код:
var s, t:integer; f, b:boolean; begin f := true; b := false; if (f=true) then t:=1 else t:=2; if (b=false) then s:=3 else s:=4; end.
-- блоки условий можно переписать более кратко, без использования сравнения
= true
или= false
, с сохранением той же логики работы программы. - 6) У вас есть код:
var f : integer; begin write('Введите число : '); readln(f); if f = 0 then else writeln('Не равно 0!'); readln(); end.
-- который сообщает пользователю, что число не равно нулю, если это действительно так, или в обратной ситуации не делает вообще ничего.
Задача: Перепишите это код в неполной форме (без использования else).
-
7) Дан код:
var a: integer; begin readln(a); if (a > 2) then begin writeln('2'); writeln('3'); end else writeln('0'); end.
-- есть ли здесь лишние операторные скобки? Объясните почему есть или нет и если есть, перепишите более кратким образом.
- 8) Была программа
// Вариант 1: var a: integer; begin writeln('Введите а:'); readln(a); if (a > 5) then writeln('a') else writeln(5); readln(); end.
Ее переписали так:
// Вариант 2: var a: integer; begin writeln('Введите а:'); readln(a); if (a > 5) then writeln('a') else if (a < 5) then writeln(5); readln(); end.
Вопрос: изменилось ли что-то в поведении программы, если да, то почему? Объясните письменно, можно прокомментировать код, если изменения в логике есть
- 9) Пользователь вводит 4 целых числа, выведите на экран не более трех из этих чисел, которые делятся нацело на 4 (т.е. нужно вывести те числа, которые делятся на 4, но не более трех штук).
- 10) Пользователь вводит 5 целых числа, выведите на экран не более трех из этих чисел, которые делятся нацело на 4 (т.е. нужно вывести те числа, которые делятся на 4, но не более трех штук).
- 11) Выведите на экран, все четные числа от 35 до 117 и нечетные числа, лежащие в диапазоне от 45 до 99.
Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции). - 12) Есть код:
var i, a: integer; begin readln(a); for i:=1 to 10 do if (a>2) then write('*') else write('#'); readln(); end.
-- перепишите его так, чтобы логика программы не изменилась, но количество проверок в теле цикла стало меньше.
- 13) Модицифируйте код:
var i:integer; begin for i:=1 to 10 do begin writeln(777); break; end; readln(); end.
-- таким образом, чтобы на 4-ом витке на экран было выведено число
777
, а на 5-ом произошел выход из цикла (при этом строчкуfor i:=1 to 10
оставьте без изменений). - 14) Есть код:
var a, b, i:integer; begin a := 5; writeln('Угадайте число от 1 до 10 с трех попыток'); for i:=1 to 3 do begin writeln('Попытка №', i, ' выше число:' ); readln(b); if (b = a) then begin writeln('Победа!'); break end else writeln('Не угадали!'); end; writeln('Игра окончена!'); readln(); end.
Перепишите этот код так, чтобы:
- Можно было бы задать угадываемое число (пусть его вводит пользователь)
- Если пользователь все же угадал число - напишите в сообщении о победе с какой именно попытки ему это удалось.
-
15) Есть код:
var a, b, i:integer; begin a := 5; writeln('Угадайте число от 1 до 10 с трех попыток'); for i:=1 to 3 do begin writeln('Попытка №', i, ' выше число:' ); readln(b); if (b = a) then begin writeln('Победа!'); break end else writeln('Не угадали!'); end; writeln('Игра окончена!'); readln(); end.
-- перепишите его таким образом, чтобы сообщение "Игра окончена" выводилась, только если пользователь не угадал загаданное число.
- 16) У вас есть число z=5. Пользователь вводит числа в цикле, если хотя бы одно введенное число число было равно 77, то увеличивайте число z на 1 в ответ на каждое введенное число, до тех пор пока пользователь не введет число 55, если такое произойдет то в ответ на это и любое последующее число, уменьшайте z на 1.
Цикл и программа должны завершиться, когда число z станет отрицательным.
(в начале цикла, если первое введенное число не равно ни 55, ни 77, считаем, что мы должны увеличивать z на 1 пока не встретим 55 или 77, которые укажут на конкретные действия).Пример работы в консоли:
--Polzovatel: 12 Otvet: 6 --Polzovatel: 12 Otvet: 7 --Polzovatel: 90 Otvet: 8 --Polzovatel: 55 Otvet: 7 --Polzovatel: 100 Otvet: 6 --Polzovatel: 123644 Otvet: 5 --Polzovatel: 77 Otvet: 6 --Polzovatel: 1 Otvet: 7
- 17) У вас есть число z=5. Пользователь вводит числа в цикле, если за последние 4 попытки ввода было хотя бы одно число больше или равно 15, то увеличивайте число z на 1 в ответ на каждое введенное число, а если такого числа не было, то уменьшайте на 1 в ответ на каждый ввод.
Цикл и программа должны завершиться, когда число z станет отрицательным.
Пример работы в консоли:
--Polzovatel: 12 Otvet: 4 --Polzovatel: 16 Otvet: 5 --Polzovatel: 5 Otvet: 6 --Polzovatel: 10 Otvet: 7 --Polzovatel: 8 Otvet: 8 --Polzovatel: 9 Otvet: 7 --Polzovatel: 9 Otvet: 6 --Polzovatel: 20 Otvet: 7
- 18) У вас есть число z=5. Пользователь вводит числа в цикле, если за последние 4 попытки ввода было хотя бы одно число больше или равно 15, то увеличивайте число z на 1 в ответ на каждое введенное число, а если такого числа не было, то уменьшайте на 1 в ответ на каждый ввод.
Цикл и программа должны завершиться, когда число z станет отрицательным либо когда значение z увеличивалось 7 раз подряд.
- 19) Имеется программа:
var i: integer; begin for i:=5 to 34 do write(i, ' '); readln(); end.
Ответьте на вопросы/выполните задания
- Что в ней происходит?
- Что будет на экране после её выполнения?
- Перепишите её, используя цикл while.
- Перепишите её, используя цикл repeat/until.
- 20) Напишите программу, которая выводит на экран ряд чисел с помощью цикла for:
1 5 9 13 17 21 25 29 33 37 41 45
- 21) У вас есть программа, использующая цикл while:
var i: integer; begin i:=1; while i<=100 do begin write(i, ' '); i:=i+5; end; readln(); end.
- Объясните что делает эта программа (что будет выведно на экран и почему)
- Перепишите её с помощью цикла repeat/until
- Перепишите её с помощью цикла for
- 22) Пользователь вводит целое положительное число $N$ большее или равное 8, если оно не соответствует этим критериям (то есть не является положительным и большим или равным 8), также пользователь вводил второе число $M$, которое отвечало бы за длину возрастающего фрагмента, например для $M=4$, выведите все числа до $N$ таким образом:
$ \underbrace{8 \;10 \;12 \;14}_{\text{четыре числа}} \;3 \underbrace{\;16 \;18 \;20 \;22}_{\text{четыре числа}} \;3 \; .... \;3 \;.... \;\text{и т.д.} $Если же число $M$ было зафиксировано как $=2$ то получем:
$ \underbrace{8 \;10}_{\text{два числа}} \;3 \underbrace{\;14 \;16}_{\text{два числа}} \;3 \; .... \;3 \;.... \;\text{и т.д.} $ - 23) Модифицируйте решение предыдущей задачи, так, чтобы длина возрастающего фрагмента каждый раз увеличивалась на единицу (начиная с двух):
$\underbrace{\; 8 \;10}_{\text{два числа}} \;3\; \underbrace{10 \;12 \;14 }_{\text{три числа}} \;3\; \underbrace{\;16 \;18 \;20 \;22}_{\text{четыре числа}} \;3 \; .... \;3 \;.... \;\text{и т.д.} $ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно), при этом решение одним циклом можно сделать, как используя делимость нацело (для определения момента вывода тройки), так и не используя.
Решите всеми тремя способами. - 24) Пользователь передает целое положительное число $N$, выведете на экран последовательность от $1$ до $N$ "ёлочкой", например для $N = 18$:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
ПРИМЕЧАНИЕ: эту задачу можно решить, как вложенными циклами, так и вообще одним циклом (что более изящно).
Решите указанными двумя способами. - 25) Пользователь передает целые положительные число $N$ и $M$, выведете на экран последовательность от $1$ до $N$, так чтобы ширина "ёлочки" увеличивалась до $M$ чисел, то уменьшалась до $1$. Например, для $M = 3$ и $N = 19$ получим:
$
1\; \\
2\; 3\; \\
4\; 5\; 6\;\;\;\;\;\;\;\;\; \text{--максимум три числа} \\
7\; 8\; \\
9\; \\
10\; 11\; \\
12\; 13\; 14\;\;\;\;\;\;\; \text{--снова три числа} \\
15\; 16\; \\
17\; \\
18\; 19\;.....
$ - 26) Пользователь передает целое положительное число $N$, выведете на экран последовательность от $1$ до $N$, так чтобы ширина "ёлочки" росла волнами. Например, для $N = 49$ получим:
$
1\; \\
2\; 3\; \;\;\;\;\;\;\;\; \text{--сначала до двух} \\
4\; \\
5\; 6\; \\
7\; 8\; 9\; \;\;\;\;\;\;\;\; \text{--потом до трёх} \\
10\; 11\; \\
12\; \;\;\;\;\;\;\;\; \text{--возвращаемся к одному} \\
13\; 14\; \\
15\; 16\; 17\; \\
18\; 19\; 20\; 21\; \;\;\;\;\;\;\;\; \text{--тут уже четыре} \\
22\; 23\; 24\; \\
25\; 26\; \;\;\;\;\;\;\;\; \text{--снова убывает } \\
27\; \\
28\; 29\; \\
30\; 31\; 32\; \\
33\; 34\; 35\; 36\; \\
37\; 38\; 39\; 40\; 41\; \\
42\; 43\; 44\; 45\; \\
46\; 47\; 48\; \\
49\;
$ - 27) Составьте программу, которая выводит на экран прямоугольный флаг $N \times M$ вида (с рамкой по краям):
+ + + + + + + - - - - + + - - - - + + + + + + +
- 28) Пользователь задает целое положительное число N, выведите матрицу из чисел, размером N, на N, так чтобы элементы ее главной диагонали были заменены, звездочками, напр.
для N = 3, мы должны получить:* 2 3 1 * 3 1 2 *
- 29) Пользователь задает целое положительное N, выведите матрицу из чисел, размером N, на N, так чтобы элементы ее побочной диагонали были заменены, звездочками, напр.:
- для N = 3, мы должны получить:
1 2 * 1 * 3 * 2 3
-
для N = 4, мы должны получить:
1 2 3 * 1 2 * 4 1 * 3 4 * 2 3 4
- для N = 3, мы должны получить:
- 30) Пользователь задает целое положительное число N, выведите матрицу из чисел, размером N на N, так чтобы элементы ее и главной и побочной диагонали были заменены, звездочками, напр.
- для N = 3, мы должны получить:
* 2 * 1 * 3 * 2 *
-
для N = 4, мы должны получить:
* 2 3 * 1 * * 4 1 * * 4 * 2 3 *
- для N = 3, мы должны получить:
- Log in to post comments
- 1131 reads