Какое значение получит переменная а после выполнения серии команд
Перейти к содержимому

Какое значение получит переменная а после выполнения серии команд

Программирование на языке Паскаль

Выделите верные утверждения. Чем отличаются команды Write(a); и Writeln(a) ?

Варианты ответов
  • после выполнения Write(a) курсор не переводится на начало новой строки
  • после выполнения Writeln(a) курсор переводится на начало новой строки
  • после выполнения Write(a) курсор переводится на начало новой строки
  • нет правильного
Вопрос 4

Операция Div позволяет найти.

Варианты ответов
  • результат деления одного числа на другое
  • найти результат целочисленного деления одного числа на другое
  • остаток от целочисленного деления
  • Нет правильного
Вопрос 5

Какое значение получит переменная a после выполнения серии команд

Варианты ответов
  • -15
  • 15
  • 40
  • 10
Вопрос 6

Что будет выведено на экран после выполнения серии команд

Варианты ответов
  • 2
  • а=2
  • а=1
  • 1
Вопрос 7

Что будет выведено на экран после выполнения серии команд

Варианты ответов
  • 1
  • 2
  • 3
  • 4
Вопрос 8

Что будет выведено на экран после выполнения серии команд

Варианты ответов
  • 4,5
  • 4,75
  • 5,25
  • -4,5
Вопрос 9

Переменная а является целой. В какой строке при использовании команды присвоить значение допущена ошибка ?

Варианты ответов
  • a:=SQRT(a);
  • a:=sqr(5);
  • a:=a / 5-1;
  • a:=abs(2*a);
Вопрос 10

Что означает в Паскале точка с запятой

Варианты ответов
  • Конец цикла;
  • Конец строки программы;
  • Отделяет операторы друг от друга;
  • Конец программы;
Вопрос 11

Каким служебным словом описываются дробные переменные:

Варианты ответов
  • INTEGER;
  • REAL;
  • CHAR;
  • STRING:
Вопрос 12

Раздел описаний VAR используется для описания:

Варианты ответов
  • Констант;
  • Меток;
  • Функций;
  • Переменных;
Вопрос 13

Чем заканчивается программа?

Варианты ответов
  • END.
  • Program
  • Readln
Вопрос 14

Укажите операторы вывода?

Варианты ответов
  • Writeln ()
  • Write ()
  • Readln ()
  • Readkey ()
Вопрос 15

Что означает знак := в языке программирования ПАСКАЛЬ?

Варианты ответов
  • Присваивание;
  • Деление;
  • Равенство;
  • Сравнение;
Вопрос 16

Какое значение будет иметь переменная b после выполнения следующего фрагмента программы

Варианты ответов
  • 38
  • 34
  • 16
  • 18
Вопрос 17

Чему равно значение выражения:

Варианты ответов
  • -5
  • -6
  • 5
  • 6
Вопрос 18

За ­ пи ­ ши ­ те зна ­ че ­ ние пе ­ ре ­ мен ­ ной s, по ­ лу ­ чен ­ ное в ре ­ зуль ­ та ­ те ра ­ бо ­ ты сле ­ ду ­ ю ­ щей про ­ грам ­ мы.

Какое значение получит переменная а после выполнения серии команд

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Основные алгоритмические конструкции

Алгоритм применительно к вычислительной машине — точное предписание, т.е. набор операций и правил их чередования, при помощи которого, начиная с некоторых исходных данных, можно решить любую задачу фиксированного типа.

Алгоритмы в зависимости от цели, начальных условий задачи, путей ее решения, определения действий исполнителя подразделяются следующим образом:

Линейный алгоритм — набор команд (указаний), выполняемых последовательно друг за другом.

Основным элементарным действием в линейных алгоритмах является присваивание значения переменной величине. Если значение константы определено видом ее записи, то переменная величина получает конкретное значение только в результате присваивания. Присваивание может осуществляться двумя способами: с помощью команды присваивания и с помощью команды ввода.

Рассмотрим пример. В школьном учебнике математики правила деления обыкновенных дробей описаны так:

  1. Числитель первой дроби умножить на знаменатель второй дроби.
  2. Знаменатель первой дроби умножить на числитель второй дроби.
  3. Записать дробь, числитель которой есть результат выполнения пункта 1, а знаменатель — результат выполнения пункта 2.

В алгебраической форме это выглядит следующим образом:

Построим алгоритм деления дробей для ЭВМ. В этом алгоритме сохраним те же обозначения для переменных, которые использованы в записанной выше формуле. Исходными данными являются целочисленные переменные а, Ь, с, d. Результатом — также целые величины m и n. Блок-схема и текст алгоритма на языке программирования (ЯП) Kotlin приведены ниже.

Формат команды присваивания следующий:

Знак «=» нужно читать как «присвоить».

Команда присваивания обозначает следующие действия, выполняемые компьютером:

  1. Вычисляется выражение.
  2. Полученное значение присваивается переменной.

В приведенном выше алгоритме присутствуют две команды присваивания. В блок-схемах команда присваивания записывается в прямоугольнике. Такой блок называется вычислительным блоком.

В описаниях алгоритмов необязательно соблюдать строгие правила в записи выражений. Их можно писать в обычной математической форме. Это еще не язык программирования со строгим синтаксисом.

В приведенном алгоритме присутствуют команды ввода:

В блок-схеме команда ввода записывается в параллелограмме — блоке ввода-вывода. При выполнении данной команды процессор прерывает работу и ожидает действий пользователя. Пользователь должен набрать на устройстве ввода (клавиатуре) значения вводимых переменных и нажать на клавишу ввода Enter. Обычно с помощью команды ввода присваиваются значения исходных данных, а команда присваивания используется для получения промежуточных и конечных величин.

Полученные компьютером результаты решения задачи должны быть сообщены пользователю. Для этих целей предназначена команда вывода:

С помощью этой команды результаты выводятся на экран или на устройство печати на бумагу.

Поскольку присваивание является важнейшей операцией в вычислительных алгоритмах, обсудим ее более подробно.

Рассмотрим последовательное выполнение четырех команд присваивания, в которых участвуют две переменные величины a и b.

В приведенной ниже таблице напротив каждой команды присваивания указываются значения переменных, которые устанавливаются после ее выполнения.

Команда a b
a=1 1
b=a*2 1 2
a=b 2 2
b=a+b 2 4

Этот пример иллюстрирует три основных свойства команды присваивания:

  • пока переменной не присвоено значение, она остается неопределенной;
  • значение, присвоенное переменной, сохраняется в ней вплоть до выполнения следующей команды присваивания этой переменной;
  • новое значение, присваиваемое переменной, заменяет ее предыдущее значение.

Рассмотрим один очень полезный алгоритм, который приходится часто использовать при программировании. Даны две величины: Х и Y. Требуется произвести между ними обмен значениями. Например, если первоначально было Х=1, Y=2, то после обмена должно стать: Х=2, Y=1.

Хорошей моделью для решения этой задачи является следующая ситуация: имеются два стакана — один с молоком, другой с водой. Требуется произвести обмен их содержимым. Всякому ясно, что в этом случае нужен дополнительный третий пустой стакан. Последовательность действий будет следующей: 1) перелить из первого стакана в третий; 2) перелить из второго в первый; 3) перелить из третьего во второй. Цель достигнута!

По аналогии для обмена значениями двух переменных нужна третья дополнительная переменная. Назовем ее Z. Тогда задача обмена решается последовательным выполнением трех команд присваивания:

Команда X Y Z
ввод X, Y 1 2
Z = X 1 2 1
X = Y 2 2 1
Y = Z 2 1 1

Аналогия со стаканами не совсем точна в том смысле, что при переливании из одного стакана в другой первый становится пустым. В результате же присваивания (Х = Y) переменная, стоящая справа (Y), сохраняет свое значение.

Алгоритм для деления дробей имеет линейную структуру. В нем все команды выполняются в строго однозначной последовательности, каждая по одному разу. Линейный алгоритм составляется из команд присваивания, ввода, вывода и обращения к вспомогательным алгоритмам (об этом позже).

При описании алгоритмов в блок-схемах типы, как правило, не указываются (но подразумеваются). В алгоритмах для всех переменных типы указываются явно. В них используются следующие обозначения типов: Int — целый тип, Float — вещественный тип, String — символьный (литерный) тип, Boolean — логический тип. В алгоритме для деления дробей для всех переменных указан тип Int.

Разветвляющийся алгоритм — алгоритм, содержащий хотя бы одно условие, в результате проверки которого ЭВМ обеспечивает переход на один из двух возможных шагов.

Циклический алгоритм — алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов. Цикл программы — последовательность команд (серия, тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторому условию.

Составим алгоритм решения квадратного уравнения: ax 2 +bx+c=0

Задача хорошо знакома из математики. Исходными данными здесь являются коэффициенты а, b, с. Решением в общем случае будут два корня х1 и х2, которые вычисляются по формуле:

Слабость такого алгоритма видна невооруженным глазом. Он не обладает важнейшим свойством, предъявляемым к качественным алгоритмам, — универсальностью по отношению к исходным данным. Какими бы ни были значения исходных данных, алгоритм должен приводить к определенному результату и завершать работу. Результатом может быть число, но может быть и сообщение о том, что при определенных данных задача решения не имеет. Недопустимы остановки в середине алгоритма из-за невозможности выполнить какую-то операцию. Упомянутое свойство называют результативностью алгоритма (в любом случае должен быть получен какой-то результат).

Чтобы построить универсальный алгоритм, сначала требуется тщательно проанализировать математическое содержание задачи.

Решение уравнения зависит от значений коэффициентов а, b, с. Вот анализ рассмотренной выше задачи (ограничиваемся только поиском вещественных корней):

если а = 0, b = 0, с = 0, то любое х — решение уравнения;
если а = 0, b = 0, с <> О, то уравнение действительных решений не имеет;
если а = 0, b <> О, то это линейное уравнение, которое имеет одно решение х = -c/b;
если а<>0 и d=b 2 -4ac >= 0, то уравнение имеет два вещественных корня (формулы приведены выше);
если a<>0 и d<0, то уравнение не имеет вещественных корней.

Этот же алгоритм на Kotlin:

В этом алгоритме многократно использована структурная команда ветвления. Общий вид команды ветвления в блок-схемах и на ЯП следующий:

Вначале проверяется условие (вычисляется отношение, логическое выражение). Если условие истинно, то выполняется серия 1 — последовательность команд, на которую указывает стрелка с надписью «да» (положительная ветвь). В противном случае выполняется серия 2 (отрицательная ветвь). В языке Kotlin условие записывается после служебного слова if, положительная ветвь — сразу после условия, отрицательная — после слова else.

Если на ветвях одного ветвления содержатся другие ветвления, то такой алгоритм имеет структуру вложенных ветвлений. Именно такую структуру имеет алгоритм «Корни квадратного уравнения».

Рассмотрим следующую задачу: дано целое положительное число n. Требуется вычислить n! (n-факториал). Вспомним определение факториала:

Ниже приведена блок-схема алгоритма. В нем используются три переменные целого типа: n — аргумент; i — промежуточная переменная; F — результат. Для проверки правильности алгоритма построена трассировочная таблица. В такой таблице для конкретных значений исходных данных по шагам прослеживается изменение переменных, входящих в алгоритм. Данная таблица составлена для случая п = 3.

Шаг n F i Условие
1 3
2 1
3 1
4 1<=3, да
5 1
6 2
7 2<=3, да
8 2
9 3
10 3<=3, да
11 6
12 4
13 4<=3, нет
14 вывод

Трассировка доказывает правильность алгоритма. Теперь запишем этот алгоритм на ЯП.

Этот алгоритм имеет циклическую структуру. В алгоритме использована структурная команда цикл-пока, или цикл с предусловием. Общий вид команды цикл-пока в блок-схемах и в ЯП следующий:

цикл с предусловием

Выполнение серии команд (тела цикла) повторяется, пока условие цикла истинно. Когда условие становится ложным, цикл заканчивает выполнение.

Цикл с предусловием — это основная, но не единственная форма организации циклических алгоритмов. Другим вариантом является цикл с постусловием. Вернемся к алгоритму решения квадратного уравнения. К нему можно подойти с такой позиции:

если а = 0, то это уже не квадратное уравнение и его можно не рассматривать. В таком случае будем считать, что пользователь ошибся при вводе данных, и следует предложить ему повторить ввод. Иначе говоря, в алгоритме будет предусмотрен контроль достоверности исходных данных с предоставлением пользователю возможности исправить ошибку. Наличие такого контроля — еще один признак хорошего качества программы.

решение квадратного уравнения, блок-схема

В общем виде структурная команда цикл с постусловием или цикл — до представляется так:

цикл с постусловием

Здесь используется условие окончания цикла. Когда оно становится истинным, цикл заканчивает работу.

Составим алгоритм решения следующей задачи: даны два натуральных числа М и N. Требуется вычислить их наибольший общий делитель — НОД(M, N).

Эта задача решается с помощью метода, известного под названием алгоритма Евклида. Его идея основана на том свойстве, что если M>N, то НОД(М, N) = НОД(М-N,N). Другой факт, лежащий в основе алгоритма, тривиален — НОД(М, М) = М. Для «ручного» выполнения этот алгоритм можно описать в форме следующей инструкции:

  1. Если числа равны, то взять их общее значение в качестве ответа; в противном случае продолжить выполнение алгоритма
  2. Определить большее из чисел
  3. Заменить большее число разностью большего и меньшего значений
  4. Вернуться к выполнению пункта 1

блок-схема НОД

Алгоритм имеет структуру цикла с вложенным ветвлением. Проделайте самостоятельно трассировку этого алгоритма для случая М = 18, N = 12. В результате получится НОД = 6, что, очевидно, верно.

Вспомогательные алгоритмы и процедуры

В теории алгоритмов известно понятие вспомогательного алгоритма. Вспомогательным называется алгоритм решения некоторой подзадачи из основной решаемой задачи. В таком случае алгоритм решения исходной задачи называется основным алгоритмом.

В качестве примера рассмотрим следующую задачу: требуется составить алгоритм вычисления степенной функции с целым показателем у = х к , где к — целое число, х<>0. В алгебре такая функция определена следующим образом:

Для данной задачи в качестве подзадачи можно рассматривать возведение числа в целую положительную степень.

Учитывая, что 1/х -n = (1/х) -n , запишем основной алгоритм решения этой задачи.

Здесь дважды присутствует команда обращения к вспомогательному алгоритму с именем stepen. Это алгоритм возведения вещественного основания в целую положительную степень путем его многократного перемножения. Величины, стоящие в скобках в команде обращения к вспомогательному алгоритму, называются фактическими параметрами.

В котлине вспомогательные алгоритмы оформляются в виде функций. Запишем функцию stepen.

Заголовок вспомогательного алгоритма начинается с ключевого слова fun, после которого следует имя функции, в скобках — список формальных параметров и после скобок тип результата (не обязателен). В списке параметров перечисляются переменные-аргументы с указанием их типов. Здесь x и n — формальные параметры-аргументы. Следовательно, процедура stepen производит вычисления по формуле а к . В основном алгоритме «Степенная функция» обращение к процедуре производится путем указания ее имени с последующим в скобках списком фактических параметров. Между формальными и фактическими параметрами процедуры должны выполняться следующие правила соответствия:

  • по количеству (сколько формальных, столько и фактических параметров)
  • по последовательности (первому формальному соответствует первый фактический параметр, второму — второй и т.д.)
  • по типам (типы соответствующих формальных и фактических параметров должны совпадать)

Фактические параметры-аргументы могут быть выражениями соответствующего типа.

Обращение к процедуре инициирует следующие действия:

  1. Значения параметров-аргументов присваиваются соответствующим формальным параметрам.
  2. Выполняется тело процедуры (команды внутри процедуры).
  3. Значение результата возвращается командой return, и происходит переход к выполнению следующей команды основного алгоритма.

В функции stepen нет команд ввода исходных данных и вывода результатов. Здесь присваивание начальных значений аргументам (x, n) производится через передачу параметров-аргументов. А получение результата происходит командой return. Таким образом, передача значений параметров процедур — это третий способ присваивания (наряду с командой присваивания и командой ввода).

Использование процедур позволяет строить сложные алгоритмы методом последовательной детализации.

Домашнее задание №2

3. Объявить две целочисленные переменные a и b и задать им произвольные начальные значения. Затем написать скрипт, который работает по следующему принципу:

если a и b положительные, вывести их разность;
если а и b отрицательные, вывести их произведение;
если а и b разных знаков, вывести их сумму;
ноль можно считать положительным числом.

4. Присвоить переменной а значение в промежутке [0..15]. С помощью оператора switch организовать вывод чисел от a до 15.
*Дополнительное задание. Решить с помощью рекурсии.

5. Реализовать основные 4 арифметические операции в виде функций с двумя параметрами. Обязательно использовать оператор return.

6. Реализовать функцию с тремя параметрами: function mathOperation(arg1, arg2, operation),
где arg1, arg2 – значения аргументов, operation – строка с названием операции.
В зависимости от переданного значения операции выполнить одну из арифметических операций (использовать функции из пункта 5) и вернуть полученное значение (использовать switch).

7. *Сравнить null и 0. Попробуйте объяснить результат.

8. *С помощью рекурсии организовать функцию возведения числа в степень.
Формат: function power(val, pow), где val – заданное число, pow – степень.

Решение

1. Дан код:
var a = 1, b = 1, c, d;
c = ++a; alert(c); // 2
Почему код даёт именно такие результаты?

Инкремент «++» применяется для краткости записи при увеличении значения переменной (операнда) на единицу. В случае применения префиксной формы инкремента происходит сначала увеличение значения переменной (операнда) на единицу, а затем ее вывод или дальнейшее применение в коде. В выражении присвоения значения переменной «с» первоначально происходит увеличение значения переменной «а», после которого значение «а» становится равным 2, а затем осуществляется вывод значения переменной «с» командой document.write.

В случае применения постфиксной формы инкремента происходит сначала вывод значения переменной (операнда), а затем ее увеличение на единицу с дальнейшим применением в коде. В выражении присвоения значения переменной «d» первоначально происходит вывод переменной «b» командой document.write, а только затем увеличение значения переменной «b» на единицу.

Если мы повторим ниже строку: «d = b++;», — то при выводе командой alert(d) или document.write(d) значение переменной d будет равно уже 2. И так далее при последующих повторениях строк.

c = (2 + ++a); alert(c); // 5
d = (2 + b++); alert(d); // 4

На основании пояснений выше,в выражении c = ++a; произошло увеличение значения переменной «а». В выражении c = (2 + ++a); происходит дальнейшее увеличение значения переменной «а» на единицу (путем применения префиксного инкремента), что дает значение «3», а затем ее сложение с числом «2», что дает конечное значение переменной «с» равное «5».
Также в выражении d = b++; , указанном выше произошло увеличение значение переменной «b». В выражении d = (2 + b++); применяется первоначально увеличенная на единицу переменная «b», т.е. со значением «2», но в данном выражении увеличение ее значения при использовании инкремента на происходит, т.к. инкремент применен в постфиксной форме. Таким образом, происходит сложение числового значения «2» и переменной «b» со значением «2».

В выражениях, приведенных в условии: с = ++a; и c = (2 + ++a); — переменная «а» увеличилась пошагово (путем двухкратного применения префиксных инкрементов) с первоначального значения «1» до значения «2» и,затем, до значения «3». Поэтому при выводе в последнем выражении отображается значение «3».
То же самое произошло с переменной «b» в двух предшествующих выражениях: d = b++; и d = (2 + b++); — , но только с применением постфиксных инкрементов, что привело к увеличению ее значения до «3». Так как выражение alert(b) или document.write(b) стоят в самом конце всех преобразований значений рассматриваемой переменной, то разница между применением постфиксного или префиксного инкремента отсутствует.

2. Чему будет равен x в примере ниже?
var a = 2;
var x = 1 + (a *= 2);

В выражении var x = 1 + (a *= 2); применена краткая форма записи арифметического оператора «*=», которая соответствует полной форме выражения: var x = 1 + (а = а * 2); — значение переменной «x», согласно арифметическим действиям, будет равно «5».

3. Объявить две целочисленные переменные a и b и задать им произвольные начальные значения. Затем написать скрипт, который работает по следующему принципу:
если a и b положительные, вывести их разность;
если а и b отрицательные, вывести их произведение;
если а и b разных знаков, вывести их сумму;
ноль можно считать положительным числом.

4. Присвоить переменной а значение в промежутке [0..15]. С помощью оператора switch организовать вывод чисел от «a» до 15.
*Дополнительное задание. Решить с помощью рекурсии.

5. Реализовать основные 4 арифметические операции в виде функций с двумя параметрами. Обязательно использовать оператор return.

6. Реализовать функцию с тремя параметрами: function mathOperation(arg1, arg2, operation),
где arg1, arg2 – значения аргументов, operation – строка с названием операции.
В зависимости от переданного значения операции выполнить одну из арифметических операций (использовать функции из пункта 5) и вернуть полученное значение (использовать switch).

7. *Сравнить null и 0. Попробуйте объяснить результат.

В соответствии с приведенными в результатах скрипта выражениями видно, следующее:
a). При сравнении «null > 0» и «null =», возвращающих значение «true», видно что в данном случае «null» принимается как некое отсутствующее значение, которое может быть как больше или равно «0», так и меньше или равно «0». То есть, пустая ячейка памяти со значением » » или «null» может быть заполнена любым значением, что делает выражением истинным по сути.

8. *С помощью рекурсии организовать функцию возведения числа в степень.
Формат: function power(val, pow), где val – заданное число, pow – степень.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *