Контрольная работа по «Информатике». 4

Контрольная работа №1

 

Задание №1

Контрольные вопросы

 

  1. Какие символы входят в алфавит языка Pascal?

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

  1. 26 латинских строчных и 26 латинских прописных букв:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  
              a b c d e f g h i j k l m n o p q r s t u v w x y z

  1. _ подчеркивание
  2. 10 цифр:

0 1 2 3 4 5 6 7 8 9

  1. знаки операций:

+ - * / = <> < > <= >= := @

  1. ограничители:

. , ' ( ) [ ] (. .) { } (* *) .. : ;

  1. спецификаторы:

^ # $

 

  1. Расскажите о стандартных типах языка

Тип переменной определяет диапазон допустимых значений, принимаемых величинами этого типа, набор операций, допустимых над данной величиной и объём памяти, отводимый под эту переменную.

  1. Данные целого типа

Константа целого типа - любое число, записанное без точки. Формат объявления констант: CONST имя = значение;

   

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

Var имя:тип 

   

В данном примере объявлены переменные a и b. Они принадлежат к целому типу. Над данными целого типа можно выполнить следующие арифметические операции:

  1. Сложение (+);
  2. Вычитание (-);
  3. Умножение (*);
  4. Деление с отбрасыванием дробной части (div);
  5. Получение целого остатка при делении целого данного на целое (mod);
 

Над данными целого типа недопустима такая операция как деление (\) !


 

  1. Данные действительного типа

В языке паскаль они могут быть двух видов:

  1. С фиксированной точкой (изображается десятичным числом с дробной частью, которая может быть и нулевой; например 7,8)
  2. С плавающей точкой (изображается в виде двух чисел, разделенных латинской буковой E, обозначающей число 10. Число, стоящее перед E, называется мамтисой, а число, стоящее после E, - порядок.) В общем виде число с плавающей точкой представляет собой обычное число (мамтису), умноженное на десять(E) в некоторой степени(порядок) и выглядит вот так: mEp, где m - мамтиса, E - десять, p - порядок.

Например число 4*10-5 записывается так: 4E-5; 
0,62*104 -------> 0.62E+4

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

  1. Данные логического типа

В языке Pascal имеются две логические константы: ИСТИНА(FALSE) и ЛОЖЬ(TRUE). Для их описания в разделе переменных используется слово Boolean:

 

Var a,b,c: boolean;


В данном примере объявлены переменные a, b и с. Они принадлежат к логическому типу.

Для сравнения логических данных предусмотрены следующие операции:

  1. Меньше (<);
  2. Меньше или равно (<=);
  3. Равно (=);
  4. Не равно (<>);
  5. Больше или равно (>=);
  6. Больше (>);

Над логическими данными допускаются следующие операции:

  1. Логическое сложение (or);
  2. логическое умножение (and);
  3. Логическое отрицание (not);

Таблица вычисления результата логического выражения:

A

true

true

false

false

B

true

false

true

false

not A (B)

false (true)

false (true)

true (false)

true (false)

A or B

true

true

true

false

A and B

true

false

false

false


 

  1. Данные символьного типа (литерная константа)

Литераня константа - любой символ языка, заключенный в апострофы. Для объявления переменных символьного типа в разделе переменных используется слово CHAR. Пример:

 

var k1: char


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

 

  1. Каковы правила записи арифметического выражения

Запись арифметических выражений на Паскале похожа на обычную математическую запись. В отличие от математики, где часто пропускается знак умножения (например, пишут 2А), в Паскале этот знак пишется обязательно: 2*А. Например, математическое выражение

А2 + В2 - 12С

на Паскале записывается так:

А*А + В*В - 12*С

Это же выражение можно записать иначе:

SQR(A) + SQR(B) - 12*С

Здесь использована функция возведения в квадрат - SQR. Аргументы функций всегда пишутся в круглых скобках.

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


 

Круглые скобки в арифметических выражениях влияют на порядок выполнения операций. Как и в математике, в первую очередь выполняются операции в скобках. Если имеются несколько пар вложенных скобок, то сначала выполняются операции в самых внутренних скобках. Например:


 

  1. Допустимо ли использование величин разных типов в арифметическом выражении? Если допустимо, то укажите, каких типов это касается.
  2. Укажите приоритет выполнения операций при вычислении арифметического выражения.

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


 

Круглые скобки в арифметических выражениях влияют на порядок выполнения операций. Как и в математике, в первую очередь выполняются операции в скобках. Если имеются несколько пар вложенных скобок, то сначала выполняются операции в самых внутренних скобках. Например:


 

 

  1. Какова последовательность действий при выполнении арифметического оператора присваивания?

Оператор присваивания - основной оператор любого языка программирования. Общая форма записи оператора:

имя величины := выражение

Например, V:=A; или V:=A+1;

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

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

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

  • выражение должно быть записано в виде линейной цепочки символов;
  • используемые операции приведены в таблице:

НАЗВАНИЕ ОПЕРАЦИИ

ФОРМА ЗАПИСИ

сложение

x + y

вычитание

x - y

умножение

x * y

деление

x / y


  • нельзя опускать знаки операций, например писать 5b. Для записи произведения чисел 5 и b надо писать 5*b;
  • аргументы функций (sin, cos и др.) как и аргументы вспомогательных алгоритмов, записываются в круглых скобках, например sin(x), cos(4*x).

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

  • вычисляет значение всех алгоритмов-функций и стандартных функций;
  • выполняет справа налево все операции возведения в степень;
  • выполняет слева направо все операции умножения и деления;
  • выполняет слева направо все операции сложения и вычитания.

 

  1. Чем отличаются процедуры write и writeln?

Вывод результатов происходит по оператору write (write - писать) или writeln (write line - писать в строку):

write(<список вывода>);

или writeln(<список вывода>);

При выполнении команды ввода компьютер ожидает действий пользователя. Пользователь набирает на клавиатуре значения переменных в том порядке, в каком они указаны в списке, отделяя их друг от друга пробелами. Одновременно с набором данных на клавиатуре они появляются на экране. В конце нажимается клавиша <ВВОД> (<Еnter>). Разница в выполнении операторов writeln и write состоит в том, что после выполнения ввода по оператору writeln экранный курсор перемещается в начало новой строки, а по оператору write этого не происходит.

Буквы ln добавляются в конце оператора для того, чтобы курсор автоматически переходил на следующую строку при выводе на экран текстов или результатов выполнения программы.

 

  1. Чем отличаются процедуры read и readln?

Ввод исходных данных с клавиатуры происходит по оператору read (read - читать) или readln (read line - читать строку):

read(<список переменных>);

или readln(<список переменных>);

При выполнении команды ввода компьютер ожидает действий пользователя. Пользователь набирает на клавиатуре значения переменных в том порядке, в каком они указаны в списке, отделяя их друг от друга пробелами. Одновременно с набором данных на клавиатуре они появляются на экране. В конце нажимается клавиша <ВВОД> (<Еnter>). Разница в выполнении операторов readln и read состоит в том, что после выполнения ввода по оператору readln экранный курсор перемещается в начало новой строки, а по оператору read этого не происходит.

Буквы ln добавляются в конце оператора для того, чтобы курсор автоматически переходил на следующую строку при выводе на экран текстов или результатов выполнения программы.

 

 

Задание №2

Контрольные вопросы

 

  1. В чем разница между полной и сокращенной формами записи условного оператора?

Условные операторы позволяют выбирать для выполнения те или иные части программы в зависимости от некоторых условий. Если, например, в программе используются вещественные переменные x и z, и на каком-то этапе решения задачи требуется вычислить z=max(x, y), то желаемый результат получается в результате выполнения либо оператора присваивания z:=x, либо оператора присваивания z:=y. Поскольку значения переменных x и y заранее неизвестны, а определяются в процессе вычислений, то в программе необходимо предусмотреть оба эти оператора присваивания. Однако на самом деле должен выполниться один из них. Поэтому в программе должно содержаться указание о том, в каком случае надо выбирать для исполнения тот или иной оператор присваивания.

Это указание естественно сформулировать с использованием отношения x>y. Если это отношение при текущих значениях x и y справедливо (принимает значение true), то для исполнения должен выбираться оператор z:=x; в противном случае для исполнения должен выбираться оператор z:=y (при x=y безразлично, какой оператор выполнять, так что выполнение оператора z:=y в этом случае даст правильный результат).

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

if B then S1 else S2

Здесь if (если), then (то) и else (иначе) являются служебными словами, В – логическое выражение, а S1 и S2 – операторы.

Выполнение такого условного оператора в Паскале сводится к выполнению одного из входящих в него операторов S1 или S2: если заданное в операторе условие выполняется (логическое выражение В принимает значение true), то выполняется оператор S1, в противном случае выполняется оператор S2.

Алгоритм решения упомянутой выше задачи вычисления z= max( x, y) можно задать в виде условного оператора Паскаля

if x>y then z:= x else z:= y

При формулировании алгоритмов весьма типичной является такая ситуация, когда на определенном этапе вычислительного процесса какие-либо действия надо выполнить только при выполнении некоторого условия, а если это условие не выполняется, то на данном этапе вообще не нужно выполнять никаких действий. Простейшим примером такой ситуации является замена текущего значения переменной х на абсолютную величину этого значения: если x<0, то необходимо выполнить оператор присваивания x:= - x; если же x>=0, то текущее значение х должно остаться без изменений, т.е. на данном этапе вообще не надо выполнять каких-либо действий.

В подобных ситуациях удобна сокращенная форма записи условного оператора в Паскале:

if B then S

Правило выполнения сокращенного условного оператора Паскаля достаточно очевидно: если значение логического выражения В есть true, то выполняется оператор S; в противном случае никаких иных действий не производится.

В языке программирования Паскаль в условном операторе между then и else, а также после else по синтаксису может стоять только один оператор. Если же при выполнении (или невыполнении) заданного условия надо выполнить некоторую последовательность действий, то их надо объединить в единый, составной оператор, т.е. заключить эту последовательность действий в операторные скобки begin... end (это важно!). Если, например, при x< y надо поменять местами значения этих переменных, то условный оператор будет записан следующим образом в Паскале:

if x<y then begin r:=x; x:=y; y:=r end

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

if B1 then if B2 then S1 else S2

допускает, вообще говоря, две разные трактовки:

как полный условный оператор Паскаля вида

if B1 then begin  
if B2 then S1 end 
else S2

как сокращенный условный оператор Паскаля вида

if B1 then begin 
if B2 then S1 else S2 end

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

 

  1. Может ли условный оператор содержать в себе другие условные операторы?

 

 

 

 

 

  1. Как выполняется программа при наличии оператора перехода?

 

Определены четыре оператора перехода: return, goto, break и continue. Операторы return и goto можно использовать в любом месте внутри функции. Операторы break и continue можно использовать в любом из операторов цикла.

Оператор return

Оператор return используется для выхода из функции. Отнесение его к категории операторов перехода обусловлено тем, что он заставляет программу перейти в точку вызова функции. Оператор return может иметь ассоциированное с ним значение, тогда при выполнении данного оператора это значение возвращается в качестве значения функции. В функциях типа void используется оператор return без значения.

Общая форма оператора return следующая:

return выражение;

Выражение присутствует только в том случае, если функция возвращает значение. Это значение выражения становится возвращаемым значением функции.

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

Функция, определенная со спецификатором void, не может содержать return со значением. Так как эта функция не возвращает значения, в ней не может быть оператора return, возвращающего значение.

Оператор goto

Кроме goto, в языке С есть другие операторы управления (например break, continue), поэтому необходимости в применении goto практически нет. В результате чрезмерного использования операторов goto программа плохо читается, она становится "похожей на спагетти". Чаще всего такими программами недовольна администрация фирм, производящих программный продукт. То есть оператор goto весьма непопулярен, более того, считается, что в программировании не существует ситуаций, в которых нельзя обойтись без оператора goto. Но в некоторых случаях его применение все же уместно. Иногда, при умелом использовании, этот оператор может оказаться весьма полезным, например, если нужно покинуть глубоко вложенные циклы[1]. В данной книге оператор goto рассматривается только в этом разделе.

Для оператора goto всегда необходима метка. Метка — это идентификатор с последующим двоеточием. Метка должна находится в той же функции, что и goto, переход в другую функцию невозможен.

Оператор break

Оператор break применяется в двух случаях. Во-первых, в операторе switch с его помощью прерывается выполнение последовательности case. В этом случае оператор break не передает управление за пределы блока. Во-вторых, оператор break используется для немедленного прекращения выполнения цикла без проверки его условия, в этом случае оператор break передает управление оператору, следующему после оператора цикла.

Когда внутри цикла встречается оператор break, выполнение цикла безусловно (т.е. без проверки каких-либо условий.) прекращается и управление передается оператору, следующему за ним.

Оператор break часто используется в циклах, в которых некоторое событие должно вызвать немедленное прекращение выполнения цикла

Оператор break вызывает выход только из внутреннего цикла.

Если оператор break присутствует внутри оператора switch, который вложен в какие-либо циклы, то break относится только к switch, выход из цикла не происходит.

Функция exit()

Функция exit() не является оператором языка, однако рассмотрим возможность ее применения. Аналогично прекращению выполнения цикла оператором break, можно прекратить работу программы и с помощью вызова стандартной библиотечной функции exit(). Эта функция вызывает немедленное прекращение работы всей программы и передает управление операционной системе.

Общая форма функции exit() следующая:

void exit (int код_возврата);

Значение переменной код_возврата передается вызвавшему программу процессу, обычно в качестве этого процесса выступает операционная система. Нулевое значение кода возврата обычно используется для указания нормального завершения работы программы. Другие значения указывают на характер ошибки. В качестве кода возврата можно использовать макросы EXIT_SUCCESS и EXIT_FAILURE (выход успешный и выход с ошибкой). Функция exit() объявлена в заголовочном файле <stdlib.h>.

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

Оператор continue

Можно сказать, что оператор continue немного похож на break. Оператор break вызывает прерывание цикла, a continue — прерывание текущей итерации цикла и осуществляет переход к следующей итерации. При этом все операторы до конца тела цикла пропускаются. В цикле for оператор continue вызывает выполнение операторов приращения и проверки условия цикла. В циклах while и do-while оператор continue передает управление операторам проверки условий цикла.

Каждый символ строки сравнивается с пробелом. Если сравниваемый символ не является пробелом, оператор continue передает управление в конец цикла for и выполняется следующая итерация. Если символ является пробелом, значение переменной space увеличивается на 1.

Функция code предназначена для кодирования сообщения путем замены каждого символа символом, код которого на 1 больше кода исходного символа в коде ASCII. Например, символ А заменяется символом В (если это латинские символы.). Функция прекращает работу при вводе символа $. При этом переменной done присваивается значение 1 и оператор continue передает управление на условие цикла, что и прекращает выполнение цикла.

 

  1. Какова структура оператора варианта?

 

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

Оператор варианта

Case <порядковая переменная> Of

<константа1> : <оператор1>;

<константа2> : <оператор2>;

...

<константа n> : <оператор n>;

[ Else <оператор>; ]

End;


Выполнение оператора выбора начинается с вычисления выражения, которое должно принимать значение, принадлежащее порядковому типу. В случае, если результат вычисления равен одной из перечисленных констант, то выполняется соответствующий оператор. Затем управление передаётся за пределы оператора выбора. Если значение выражения не совпадает ни с одной константой, то выполняется оператор, стоящий после else, если он есть, либо управление передаётся на оператор end и выполнение программы продолжается.

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

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

 

  1. Какие формы оператора цикла с параметром вам известны?

 

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

перед началом цикла задать начальное значение параметра;

внутри цикла изменять параметр цикла с помощью оператора присваивания;

проверять условие повторения или окончания цикла;

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

Различают циклы с известным числом повторений (цикл с параметром) и итерационные (с предусловием и постусловием).

Оператор цикла с параметром

Данный оператор применяют тогда, когда известно число повторений одного и того же действия. Начальное и конечное значения параметра цикла могут быть представлены константами, переменными или арифметическим выражениями. 
Оператор имеет две формы:

For параметр := a to b do тело цикла;

For параметр := a downto b do тело  цикла;

где a и b - величины целого типа, причем а - начальное значение, а b - конечное значение переменой - параметра.

Сначала вычисляются значения выражений а и b. Если а окажется меньшим или равным b, то параметр последовательно принимает значения, равные а, а+1, …, b-1, b, и для каждого из этих значений выполняется тело цикла. Если же а>b, то тело цикла не будет выполнено ни разу, и управление будет передано следующему оператору программы.

Оператор

For параметр := a downto b do тело  цикла;

выполняется аналогичным образом, но параметр принимает значения, равные а, а-1, …, b+1, b. Если тело цикла состоит из нескольких операторов, то операторы тела цикла заключаются в операторные скобки begin - end. Например:

 

For x: =1 to 10 do writeln (x); 
For i: =10 to 100 do y: =y+5;


 

Оператор while

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

Оператор имеет вид:

While условие do тело цикла;

Работа оператора начинается с проверки условия, записанного после слова while. Если это условие соблюдается, то выполняется тело цикла, а затем вновь проверяется условие и т. д. Как только на очередн6ом шаге окажется, что условие не соблюдается, то выполнение тела цикла прекратится. Если тело цикла состоит из нескольких операторов, то они объединяются операторными скобками. В теле цикла обязательно должен быть оператор, влияющий на соблюдение условия, в противном случае произойдет зацикливание.

Контрольная работа по «Информатике». 4