Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯП ответ.docx
Скачиваний:
2
Добавлен:
26.04.2019
Размер:
229.88 Кб
Скачать

9) Логический, булев (англ. Boolean или logical data type) тип данных — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых правдой (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип. В подавляющем большинстве языков за истину полагается единица, за ложь — ноль.

Название Boolean получило своё название в честь английского математика и логика Джорджа Буля, среди прочего, занимавшегося вопросами математической логики в середине 19 века.

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

К этому типу данных применимы следующие операции:

-И (логическое умножение) (AND, &, *),

-ИЛИ (логическое сложение) (OR, |, +),

-исключающее ИЛИ (умножение с переносом) (xor, NEQV, ^),

-эквивалентность (равенство) (EQV, =, ==)

-инверсия (NOT, ~, !)

-сравнение (>, <, <=, >=)

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

Традиционным применением булева типа данных являются значения «да»/«нет» в отношении результата более сложных операций.

Все операции сравнения двух величин (равно, больше, меньше), операции вхождения элемента в множество и проверка на пересечение множеств возвращают в качестве результата булев тип.

Pascal

Описание переменных:

var a, b : Boolean

Арифметических операций нет, но допустимы логические операции: Not, And, Or, Xor, операции отношения =, <> и функции Ord, Pred, Succ.

var

A, B: Byte;

C, D, E, F: Boolean;

begin

A := Ord(False); {A=0}

B := Ord(True); {B=1}

C := Pred(False); {ошибка}

D := Pred(True); {D=False}

E := Succ(False); {E=True}

F := Succ(True); {ошибка}

end.

С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.

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

Конъюнкция (логическое умножение, пересечение) - and. Выражение a and b дает значение true только в том случае, если a и b имеют значение true. Во всех остальных случаях значения выражения a and b дает false.

true and true = true

true and false = false

false and true = false

false and false = false

Дизъюнкция (логическое сложение, объединение) – or. Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат – true.

true and true = true

true and false = true

false and true = true

false and false = false

Отрицание (инверсия) – not. Выражение not a имеет значение, противоположное значению a.

not true = false

not false = true

Исключающее ИЛИ – xor. Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.

true and true = false

true and false = true

false and true = true

false and false = false

Последовательность выполнения логических операторов: not, and, or.

В языке Паскаль сначала выполняются логические операторы (and, or, xor, not), а уже потом операторы отношений (>, >=, <, <=, <>, =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Целые типы

Длина, байт

Название типа

Диапазон значений

1

byte

от 0 до 255

1

shortint

от -128 до 127

2

word

от 0 до 65535

2

integer

от -32768 до 32767

4

longint

от -2147483648 до 2147483647

Над целыми числами выполняются операции:

"+" сложение; "*" умножение; " / " деление;

"-" √ вычитание; div целочисленное деление;

mod получение остатка от целочисленного деления.

Например, 5div2 дает результат 2, 6div2 дает 3, 5mod2 дает 1, а 6mod3 0.

Встроенные процедуры и функции для обработки данных целого типа

Обращение

Реализуемое действие

abs(x)

Возвращает модуль х

dec(x[,i])

Уменьшает значение х на i, при отсутствии i ═на 1

inc(x[,i])

Увеличивает значение х на i, при отсутствии i ═на 1

odd(i)

Возвращает true, если i - нечетное число, false - четное

random(w)

Возвращает псевдослучайное число, равномерно распределенное на интервале[0,w-1]

sqr(x)

Возвращает квадрат аргумента

Под данными вещественного типа понимаются числа, записанные с═ десятичной═ точкой. Значение числа вещественного типа представляется в ЭВМ лишь с═ некоторой═ конечной═ точностью, которая зависит═ от═ внутреннего═ формата вещественного числа.

Вещественные типы

Длина, байт

Название

Диапазон десятичного порядка

Количество значащих цифр

4

single

от -45 до +38

от 7 до 8

6

real

от -39 до +38

от 11 до 12

8

double

от -324 до +308

от 15 до 16

10

extended

от -4951 до +4932

от 19 до 20

8

comp

от ═до

от 19 до 20

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

Обращение

Реализуемое действие

abs(x)

Модуль аргумента

arctan(x)

юрктангенс (радианы)

frac(x)

Дробная часть числа

int(x)

Целая часть числа

ln(x)

Натуральный логарифм

pi

=3.14159...

random

Псевдослучайное число, интервала [0,1]

randomize

Инициализация датчика псевдослучайных чисел

sqrt(x)

Корень квадратный

sqr(x)

Квадрат аргумента

sin(x)

Синус(радианы)

сos(x)

Косинус(радианы)

exp(x)

Экспонента

10) Компьютерные программы обрабатывают какие-либо данные, т.е. всячески изменяют их. Мы даем программе одни данные, она с ними что-то делает и выдает нам уже другие.

Поэтому язык программирования должен иметь инструменты, как для ввода данных, так и их вывода. В Паскале это процедуры read и readln для ввода данных и write и writeln – для вывода. Операторы с окончанием ln отличает то, что после их выполнения происходит перевод указателя на новую строку.

Откуда можно ввести данные в программу? С клавиатуры, файла.

Куда можно вывести данные? На экран, в файл, на принтер.

Стандартными устройствами ввода и вывода (т.е. теми, что предполагаются по умолчанию) являются клавиатура (ввод) и монитор (вывод).

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

12) Каждый дом на улице имеет свой номер, все люди имеют собственные имена, даже ячейки памяти компьютера имеют каждая свой адрес. Все это принято для того, чтобы иметь возможность однозначно указать на определяемый объект. Точно также, для указания на операторы в программах применяются метки.

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

Label 1, 2, 8;

Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием.

Пример:

6: Writeln(14/2);

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

Goto <метка>;

Оператор, к которому происходит переход должен быть помечен данной меткой.

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

13) Оператор выбора (вариант, переключатель) реализует выбор одной из возможных альтернатив, т.е. вариантов продолжения программы.

Формат записи:

Case S of

K1: OP1;

K2: OP2;

. . .

Kn: OPn;

Else OP;

End;

где:

Case – выбор, вариант;

of - из;

S – селектор, выражение порядкового типа;

Ki – константы выбора, константа, тип которой совпадает с типом селектора;

OPi – любой оператор в том числе пустой;

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

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

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

14) Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом В соответствии с данной методологией

1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:

последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;

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

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

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

3. Разработка программы ведётся пошагово, методом «сверху вниз».

Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки», которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы. Разработка заканчивается тогда, когда не останется ни одной «затычки», которая не была бы удалена. Такая последовательность гарантирует, что на каждом этапе разработки программист одновременно имеет дело с обозримым и понятным ему множеством фрагментов, и может быть уверен, что общая структура всех более высоких уровней программы верна. При сопровождении и внесении изменений в программу выясняется, в какие именно процедуры нужно внести изменения, и они вносятся, не затрагивая части программы, непосредственно не связанные с ними. Это позволяет гарантировать, что при внесении изменений и исправлении ошибок не выйдет из строя какая-то часть программы, находящаяся в данный момент вне зоны внимания программиста.

14-15) Операторы ветвления

Операторы ветвления if и switch применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну, из двух ветвей вычислений, а оператор switch — на одну из произвольного числа ветвей.

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рис. 4.1.

Формат оператора: