Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

это совокупность допустимых в языке символов

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.6.2024

  1.  Алфавит языка, имена, числа, строки.

Алфавит - это совокупность допустимых в языке символов. Алфавит Турбо Паскаль включает следующий набор основных символов:

строчные и прописные латинские буквы, пробел , подчеркивание, арабские цифры, знаки операций,  ограничители, спецификаторы, служебные (зарезервированные) слова

Имена (идентификаторы) называют элементы языка - константы, метки, типы, переменные, процедуры, функции, модули, объекты. Идентификатор в Турбо Паскале может включать в себя: (буквы латинского алфавита, цифры символ подчеркивания).

Строчные и прописные буквы не различаются (например, NAME, Name и name будет означать одно и то же). Цифра не может стоять на первом месте в идентификаторе, а символ подчеркивания может находиться в любой позиции (например, name1 и name2item являются допустимыми идентификаторами, а 5name - нет; _name, name_, name_item - тоже допустимые названия). Длина идентификатора может быть любой, но значимыми являются только первые 63 символа. В качестве имен не допускается использовать служебные слова.

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

В любом месте программы, где можно поместить один разделитель, их можно поместить любое количество и в любом сочетании, что позволяет наглядно представить структуру программы. Комментарии заключаются либо в скобки { ... }, либо в скобки вида (* ... *) и могут занимать любое число строк.

Числа в языке Паскаль обычно записываются в десятичной системе счисления. Они могут быть целыми и действительными. Положительный знак числа может быть опущен. Целые числа записываются в форме без десятичной точки, например: 217  -45  8954  +483

Действительные числа записываются в форме с десятичной точкой: 28.6  0.65  -0.018  4.0

Возможна также запись с использованием десятичного порядка, который изображается буквой Е:  5Е12  -1.72Е9  73.1Е-16

В "переводе" такую запись следует понимать соответственно как: 5x1012  -1.72x109  73.1x10-16

Паскаль допускает запись целых чисел и фрагментов действительных чисел в форме с порядком в шестнадцатиричной системе счисления:  $7F  $40  $ABC0

Строки в языке Паскаль - это последовательность символов, записанная между апострофами. Если в строке в качестве содержательного символа необходимо употребить сам апостроф, то следует записать два апострофа. Примеры строк:  'СТРОКА'  'STRING'  'ПРОГРАММА'  'АД''ЮТАНТ'

  1.  Структура программы.

I Раздел заголовка (объявления программной единицы);

1. Заголовок программы имеет вид:

program(имя программы);

Например: program First;

II Раздел описаний;

2. Список используемых библиотек:

uses(список библиотек);

Например: uses CRT;

3. Раздел описания меток:

label(список меток)

Например: LabelHome, 4;

4. Раздел описания констант:

const(имя константы)=(значение константы)

Например:cons n=7;

5. Раздел описания типов:

type(имя типа)=(описание типа);

Например: type mass= array [1..3, 1..5] of real;

6. Раздел описания переменных:

var(имя переменной):(тип переменной)

Например: var х: real ;

7. Раздел описания процедур и функций.

III Раздел исполняемых операторов (тело программы).

8. Тело программы:

begin

(команды программы)

end.

3. Тип Integer.

Значениями этого типа являются целые числа из некоторого интервала. Каков этот интервал зависит от реализации (компьютера и транслятора), однако тип integer всегда обозначает лишь все такие целые числа n, что  min(integer)  max(integer).
Для чисел, являющихся константами целого типа, используется обычная десятичная форма записи. Например, 5 изображает число "пять", а 15 изображает число "пятнадцать". Если константа специфицирована с суффиксом H, представление является шестнадцатеричным, например, H13 изображает число "восемьнадцать".

Для целых чисел определены и доступны всем известные операции:  + (сложение), -(вычитание), * (умножение), / (деление с вещественным результатом).

Каждая из бинарных операций отношения:= (равно), # (неравно), <= (меньше или равно), < (строго меньше), > (строго больше), >= (больше или равно) определена для значений целого типа и вырабатывает значение логического типа.

Для целочисленных аргументов определены следующие стандартные функции с целочисленными результатами: abs -- абсолютное значение аргумента,  pred - предыдущее по величине целое число, succ - следующее по величине целое число (например, abs(-3) = 3, pred(3) = 2, succ(3) = 4). Стандартная функция odd проверяет нечетность заданного целого числа; она выдает значение true, если аргумент нечетен, и значение false, если аргумент четен.

4. Тип Real.

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

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

Для записи очень больших или, наоборот, очень маленьких чисел удобно использовать форму записи вещественного числа "с плавающей запятой". В этой форме число представляется в виде произведения двух сомножителей: мантиссы (целого или дробного числа) и числа 10, которое возведено в целую степень, называемую порядком изображаемого числа. Так, число 2 500 000 можно записать, например, как произведение 2,5 и . Изображается вещественное число в форме с плавающей запятой следующим образом: сначала выписывается (по обычным правилам) мантисса, за которой следует буква  (читается -- умножить на 10 в степени) и показатель степени. Например, 2.56 изображает число 2 500 000, а 3.2-7 -- изображение числа 0.00000032; каждое из них содержит по две значащих цифры.

Таким образом, каждое значение типа real представляет целый отрезок оси вещественных чисел, причем плотность точек на оси вещественных чисел, являющихся значениями вещественного типа real, экпоненциально уменьшается с увеличением |x|. Например, интервал от 1/2 до 1 содержит столько же элементов из real, что и интервал от  до .

Для вещественных значений определены  операции: - (обращение знака) и + (тождественная операция), а также бинарные операции: + (сложение), - (вычитание), * (умножение) и / (деление).

Следует иметь в виду, что арифметические операции, применимые к значениям типа real, выполняются неточно (с округлением результата до ближайщего числа из real) и тем самым отличаются от соответствующих математических операций. Здесь (так же как и для типа Integer) возможно переполнение -- выход результата за границы диапазона представимых чисел. Помимо этого возникает ряд эффектов, связанных с округлением -- например, при вычитании двух почти равных значений результатом является нулевое значение (это явление называется сокращением или потерей значимости).

5. Тип Boolean и Char.

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

Для обозначения константы литерного типа литеру заключают в апострофы. Например, 'A', '+', '5', '' , ' ? ', ''''.

Натуральное число, сопоставленное литере, служит кодом для внутреннего представления литеры в ВМ, его возвращает стандартная функция integer. Например, в силу свойств литерного типа имеем integer('Z')=integer('A')+25 и integer('9')=integer('0')+9. Имеется также стандартная функция chr, которая вычисляет литеру по ее коду и является обратной по отношению к функции integer, т.е. chr(integer(X))=X для любого литерного значения X и integer(chr(N))=N для любого целого числа N, для которого chr(N) определено.

Поскольку в типе char литеры упорядочены, для них определены бинарные операции отношения: = (равно), < (предшествует), <= (предшествует или равно), > (следует), >= (следует или равно), <> (неравно), каждая из которых вырабатывает логическое значение.

Логический тип (boolean)

Тип boolean состоит из двух логических значений, имеющих стандартные имена true (истина) и false (ложь).

Само название типа происходит от имени Дж.Буля заложившего основы алгебры логики.

A

B

A

\/ B

/\ B

B

  B

0

0

1

0

0

1

1

0

1

1

1

0

1

0

1

0

0

1

0

0

0

1

1

0

1

1

1

1

В математике для логических значений обычно используются обозначения 1 (истина) и 0 (ложь рассматривается следующий набор функций: дизъюнкция -- \/ (или), конъюнкция -- /\ (и), отрицание --  (не), импликация --  (следует) и эквивалентность --   (тогда и только тогда). Эти функции можно задать следующей) и таблицей:
 

 Из этой таблицы можно вывести следующие законы (тавтологии) -- формулы, принимающие истинные значения при любых логических значениях, взятых в качестве A,B и C (а следовательно, и для любых утверждений (утверждение -- это некоторая функция, принимающая логические значения), взятых в качестве A,B и C):

6. Описательная часть программного блока.

Все переменные, используемые в программе должны быть описаны.

Описание начинается со служебного слова var .

program ff;

var

     i, n: integer; x,y,z: real;

     begin;

     .........

     end.

Список переменных от типа отделяется “:”, одно описание от другого – “;”, список переменных – “,”.  

Метки в программе описываются с помощью служебного слова:  label.

Константы : const.

Пользовательский тип данных:   type.

7. Процедуры ввода/вывода

Процедуры ввода/вывода относятся к стандартным или встроенным процедурам Turbo Pascal. Стандартная процедура не нуждается в предварительном описании, она доступна любой программе, в которой содержится обращение к ней.

WRITELN

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

WRITELN ([параметр],[параметр]);

При выводе строка должна быть заключена в апострофы.

WRITE

Аналогична WRITELN, но после вывода значений не переводит курсор в начало следующей строки, оставляя его на строке вывода.

READLN

Останавливает выполнение программы для ввода значений с клавиатуры или считывает их из файла. Последовательность и тип вводимых данных должны соответствовать последовательности и типу переменных, указанных в операторе. «Лишние» данные отбрасываются. Форма записи:

READLN ([переменная],[переменная]);

READ

Аналогичен READLN, но «лишние» данные не отбрасываются, а становятся доступными для следующих операторов READ, позволяя производить в программе «потоковый» ввод данных.

Пример программы.

Program _ prim;

сlrscr - оператор гашения экрана;

var               a, b: integer;

                    x ,y: real;

begin           writeln (’ введите a, b ’);

                    readln ( a, b);

                    x: = a + b; y: = a/b;

                    writeln (’ x = ’, x:8:3, ’_ _ ’, ’y = ’, y:8:3)

end.

8. Оператор присваивания.

“: =” – знак присваивания.

<переменная> : = <выражения>;

Паскаль не допускает смешенных выражений. Слева – вещественное, справа - целое выражение (допустимо).

Если в выражении есть хотя бы одна вещественная переменная, все выражение будет вещественным.

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

переменная := выражение; 

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

Примеры присваивания:

X := (Y + Z) / (2 + Z * 10) - 1/3;

 LogPer := (A > B) And (C <= D);

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

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

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор — это средство ветвления вычислительного процесса.

IF - Предназначен для ветвления процесса выполнения программы в зависимости от условия. Форма записи:

IF <условие> THEN <оператор_1> ELSE <оператор_2>;

IF, THEN, ELSE — если, то, иначе;
<условие> — произвольное выражение логического типа;
<оператор_1>,
<оператор_2> — любые исполняемые операторы.

Пример:

VAR

X, Y, MAX: INTEGER;

BEGIN

...

IF X>MAX THEN

 Y:=MAX

 ELSE

 Y:=X;

...

Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>. Если результат есть TRUE (истина, т.е. условие выполняется), то выполняется <оператор_1>, а <оператор_2> пропускается; если результат есть FALSE (ложь, т.е. условие не выполняется), наоборот, <оператор_1> пропускается, а выполняется <оператор_2>.

10. Оператор цикла с перечислением

ПЕРЕЧИСЛЯЕМЫЙ ТИП 

Перечисляемый тип задается перечислением тех значений, которые он может получать. Каждое значение должно являться идентификатором (смотри главу Алфавит языка) и располагаться в круглых скобках через запятую. Количество элементов в перечислении не более 65536. Вводить и выводить переменные перечисляемого типа запрещено. Перечислимый тип является порядковым (смотри главу Типы данных), поэтому к переменным такого типа можно применять функции Ord, Pred, Succ. Функция Ord возвращает порядковый номер значения начиная с нуля.

ПРИМЕР: Объявление перечисляемых типов.

Type Colors = (Red,Green,Blue);

Numbers = (Zero,One,Two,Three,Four,Five);

var c:Colors; n:Numbers;

begin 

c:=Red; write(Ord(c)); {0}

n:=Four; write(Ord(n)); {4}

c:=Succ(c); {c=Green}

for n:=One to Five do write(Ord(n)); {12345}

end.

Следует отметить, что стандартные типы byte, word, char и boolean также можно считать вариантами перечислимого типа.

11. Циклы с предусловием(while)

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

x:=1;

while x<=20 do begin

{операторы расчета}

x:=x+1;

end;

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

12. Циклы с постусловием(repeat)

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

x:=1;

repeat

{операторы расчета}

x:=x+1;

until x>20;

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

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

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

Структура оператора выбора такова:

CASE <ключ_выбора> OF 
     <
список_выбора
     ELSE
<оператор
END

Оператор выбора работает следующим образом. Вначале вычисляется значение выражения <ключ_выбора>, а затем в последовательности операторов <список_выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает свою работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается оператору, стоящему за словом ELSE.

case I of
   0, 2, 4, 6, 8: Writeln('Четная цифра');
   1, 3, 5, 7, 9: Writeln('Нечетная цифра');
   10..100: Writeln('Между 10 и 100');
end;

14. Классификация типов данных.

                  простые типы данных

Byte - Байтовые. Принимают значения из промежутка от 0 до 255. В памяти для переменной этого типа выделяется 1 байт.

Word - Переменные типа "слово". Принимают значения из промежутка от 0 до 65535. В памяти для переменной этого типа выделяется 2 байта.

Integer - Целые. Принимают значения из промежутка от -32768 до 32767. В памяти для переменной этого типа выделяется 2 байта.

Real - Вещественные (дробные). Принимают значения из промежутка (по модулю) от 2.9*10E-39 до 1.7*1038. В памяти для переменной этого типа выделяется 6 байт, количество цифр после запятой может достигать 11-12 цифр.

Boolean - Логические. Принимают только два значения: True (истина) и False(ложь).

Char - Литерные. В качестве своего значения могут иметь один символ. В памяти для переменной этого типа выделяется 1 байт.

Составные типы данных 

String - Строки. Состоят из значений литерного типа (набор символов).

Array - Массивы. Представляют собой совокупность элементов одного (любого) типа.

Record - Записи. В отличие от предыдущего типа могут состоять из элементов различных типов.

Set - Множества. Представляют собой совокупность элементов одного типа (целого положительного или литерного).

File - Файловые. Позволяют организовать доступ к файлам из программы.

      15. Перечислимые типы данных

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

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

Например, перечисляемый тип Rainbow(РАДУГА) объединяет скалярные значения

RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET (КРАСНЫЙ, ОРАНЖЕВЫЙ,  ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, СИНИЙ, ФИОЛЕТОВЫЙ).

Перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные значения RED, YELLOW, GREEN (КРАСНЫЙ,  ЖЕЛТЫЙ, ЗЕЛЕНЫЙ).

  Перечисляемый тип  описывается  в разделе описания типов,  который начинается со служебного слова type, например:

type

 Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

16. Ограниченые типы данных.

Стандартные скалярные типы (Integer, Boolean, Char), являются предопределенными в языке Turbo Pascal; их смысл в языке фиксирован. На основе стандартных скалярных типов программист может определить новые, собственные скалярные типы, руководствуясь несколькими достаточно простыми правилами.

Самым простым способом образования новых типов из уже существующих является ограничение (сужение) допустимого диапазона значений некоторого стандартного скалярного типа. Это ограничение определяется заданием минимального и максимального значений диапазона, например: 1..10, 'a'..'z'.

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

Диапазонные (ограниченные) типы. Стандартные скалярные типы (Integer, Boolean, Char), являются предопределенными в языке Turbo Pascal; их смысл в языке фиксирован. На основе стандартных скалярных типов программист может определить новые, собственные скалярные типы, руководствуясь несколькими достаточно простыми правилами.

Допускается создание ограниченных типов из дискретных типов, то есть из всех ординальных типов. Использовать вещественный тип Real для введения диапазонного типа нельзя. Ограниченный тип наследует все свойства базового типа (в частности, набор допустимых операций).

17. регулярные типы данных.

Массивом называется ограниченная упорядоченная совокупность однотипных величин. Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке Pascal, кроме файлового типа. Тип компонент называется базовым типом. Вся совокупность компонент определяется одним идентификатором, посредством которого к нему осуществляется обращение, указывается тип и количество элементов массива. Для обозначения отдельных компонент используется конструкция, называемая переменной с индексом или с индексами:
      A[5] S[k+1] B[3,5].
      Пример описания массивов.
      Type
       Massiv = array [1..20] of Real;
      Var
       A, B:Massiv;
       C: array [10..30] of Integer;
      В данном примере описаны одномерные массивы с именами A, B, C, причём массивы A и B имеют элементы типа Real, порядковые индексы элементов изменяются от 1 до 20, а массив С - с элементами типа Integer, и индексами от 10 до 30. В квадратных скобках указывается тип индекса (в приведённых примерах - это тип диапазон).
      В качестве индекса может быть использовано выражение. В индексных типах, по одному для каждой размерности массива, указывается число элементов. Допустимыми индексными типами являются все порядковые типы, за исключением длинного целого и поддиапазонов длинного целого. Индексы интервального типа, для которого базовым является целый тип, могут принимать отрицательные, нулевое и положительные значения.
      Массив может быть проиндексирован по каждой размерности всеми значениями соответствующего индексного типа; число элементов, поэтому равно числу значений в каждом индексном типе. Число размерностей не ограничено.

      

        

18. Многомерные массивы.

Массивы бывают одномерные и многомерные. Из многомерных наиболее часто приходится иметь дело с двумерными. Двумерные массивы хранятся в памяти ЭВМ по строкам. Двумерный массив можно представить как матрицу элементов. Описание такого массива выглядит так:
      Type
       Matrix = array [1..20, 1..10] of Real;
      Var
       X, Y: Matrix;
       Z: array [1..10, 1..10] of Integer;
      Массивы X и Y имеют двадцать строк и десять столбцов. Массив Z представляет собой квадратную матрицу размером 10X10.
      Для доступа к элементам массива необходимо указать идентификатор массива с одним или несколькими индексами в скобках (в зависимости от размерности массива). Конкретный элемент массива обозначается с помощью имени переменной массива, за которой указывается индекс, определяющий данный элемент.
      Индексные выражения обозначают компоненты в соответствующей размерности массива. Число выражений не должно превышать числа индексных типов в описании массива. Более того, тип каждого выражения должен быть совместимым по присваиванию с соответствующим индексным типом. В случае многомерного массива можно использовать несколько индексов или несколько выражений в индексе.
      Например:
      X[I][J] тождественно записи: X[I,J].
      Если тип элемента в типе массив также является массивом, то результат можно рассматривать как массив массивов или как один многомерный массив.
      Например
, array[boolean] of array[1..100] of array[Size] of Real интерпретируется компилятором точно так же, как массив: array[boolean,1..10,Size] of Real.
      
Pascal допускает единственно возможное действие над массивом в целом: использование его в операторе присваивания.
      Например:
      Vect1:=Vect2
      причем типы обоих массивов в данном случае должны быть эквивалентны.
      Для работы со всем массивом используется идентификатор массива без указания индекса. К массивам приемлемы только операции отношения "=", "<>". Массивы, являющиеся операндами, должны соответствовать друг другу по структуре, т.е. быть одного типа (одинаковые количество и типы элементов). Таким образом, для двух однотипных массивов X, Y:array [1..30] of Integer; приемлемы следующие выражения:
      - X=Y (равно TRUE, если значения каждого элемента массива X равны соответствующим элементам массива Y);
      - X<>Y (TRUE, если хотя бы одно значение элемента массива X неравно значению соответствующего элемента массива Y).

      19. Комбинированные типы данных

Комбинированные типы, как и регулярные типы, представляют собой правило формирования составных типов. В отличие от массивов, записи позволяют объединять значения РАЗЛИЧНЫХ типов и поэтому являются, видимо, наиболее гибким механизмом построения данных.

Распространенным случаем является необходимость описать атрибуты (характеристики) некоторого объекта, представляемого и обрабатываемого в программе. Таким объектом может быть человек, некоторый вычислительный комплекс, письмо, посылаемое по почте и т.д. Во всех подобных случаях атрибуты объекта представляются значениями различных типов и поэтому для их описания не могут быть использованы массивы. Для описания объекта "человек" могут понадобиться, например, следующие характеристики:

Комбинированный тип данных (записи)

Запись - тип данных, состоящий из фиксированного числа компонентов (называемых полями) одного или нескольких типов.

type Point=RECORD

 x,y: Real

END;

Dates=RECORD

day : 1..31;

mon : String[3];

year: 1..3000

END;

var p,r: Point;

dt: Dates;

 20. Оператор with.

            В операциях над записями оператор with  удобно  использовать

       для  краткого обращения к полям записи.  В операторе with к полям

       одной или более конкретных переменных типа запись можно обращать-

       ся,  используя  только идентификаторы полей.  

            В операторе with сначала производится проверка каждой ссылки

       на переменную,  а именно:  можно ли ее интерпретировать, как поле

       записи. Если это так, то она всегда интерпретируется именно таким

       образом, даже если имеется доступ к переменной с тем же именем.

            with OrderDate do

              if Month = 12 then

              begin

                Month := 1;

                Year := Year + 1

              end else

                Month := Month + 1;

       21 Записи с вариантами

Запись с вариантами состоит из двух частей. В первой части описываются поля, общие для всех групп объектов, моделируемых записью. Среди этих полей обычно бывает поле, значение которого позволяет идентифицировать группу, к которой данный объект принадлежит и, следовательно, какой из вариантов второй части записи должен быть использован при обработке. Вторая часть записи содержит описания непересекающихся свойств - для каждого подмножества таких свойств - отдельное описание. Язык программирования может требовать, чтобы имена полей-свойств не повторялись в разных вариантах (PASCAL), или же требовать именования каждого варианта (C). В первом случае идентификация поля, находящегося в вариантной части записи при обращении к нему ничем не отличается от случая простой записи:

       < имя переменной-записи >.< имя поля >

Во втором случае идентификация немного усложняется:

       < имя переменной-записи >.< имя варианта >.< имя поля >

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

Запись с вариантами для такой задачи в языке PASCAL выглядит, как:

   type figure = record

     fig_type : char;    { тип фигуры }

     x0, y0   : word;    { координаты опорной точки }

     color    : byte;    { цвет }

     case fig_t : char of

       'C': ( radius : word);     { радиус окружности }

       'R': (len1, len2 : word);  { длины сторон прямоугольника }

       'T': (x1,y1,x2,y2 : word); { координаты двух вершин }

     end;

22 Множественные типы данных.

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

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

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

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

Множество имеет зарезервированное слово set of и вводится следующим описанием

Type

 < имя типа > = set of < имя базового типа >;

Var

 < идентификатор,... >:< имя типа >;

Рассмотрите примеры описаний множеств:

Type

 SetByte = set of byte; {множество 1, определённое над типом byte}

 SetChisla = set of 10 .. 20; {множество 2, определённое в диапазоне от 10 до 20}

 Symbol = set of char; {множество, определённое на множестве символов}

 Month = (January, February, March, April, May, June, July, August, September, October, November, December);

 Season = set of Month; {тип множества, определённый на базе перечислимого типа Month}

Var

 Letter, Digits, Sign : Symbol; {множествa, определённые над символьным типом}

 Winter, Spring, Summer, Autumn, Vacation, WarmSeason : Season;

 Index : SetChisla=[12, 15, 17];

 Operation : set of (Plus, Minus, Mult, Divid);

 Param : set of 0..9=[0, 2, 4, 6, 8];

    23 Операции над данными множесвенного типа

Данные типа множество позволяют хранить ограниченное число значений определённого типа без определённого порядка. Повторение значений, как правило, недопустимо. За исключением того, что множество в программировании конечно, оно в общем соответствует концепции математического множества. Для этого типа в языках программирования обычно предусмотрены стандартные операции над множествами. В языке Паскаль множество — простой тип данных, хранящий информацию о присутствии в множестве объектов любого счетного типа. Мощность этого типа определяет размер множества — 1 бит на элемент. В Turbo Pascal есть ограничение на 256 элементов, в некоторых других реализациях это ограничение ослаблено.

Пример работы с множествами:

type 

{определяем базовые для множеств перечислимый тип и тип-диапазон}

colors = (red,green,blue);

smallnumbers = 0..10;

{определяем множества из наших типов}

colorset = set of colors;

numberset = set of smallmunbers;

{можно и не задавать тип отдельно}

anothernumberset = set of 0..20;

 

{объявляем переменные типа множеств}

var nset1,nset2,nset3:smallnumbers;

   cset:colorset;

begin

nset1 := [0,2,4,6,8,10]; {задаем в виде конструктора множества}

cset := [reb,blue];      {простым перечислением элементов}

nset2 := [1,3,9,7,5];    {порядок перечисления неважен}

nset3 := [];             {пустое множество}

nset1 := [0..5];         {возможно задавать элементы диапазоном}

nset3 := nset1 + nset2;  {объединение}

nset3 := nset1 * nset2;  {пересечение}

nset3 := nset1 - nset2;  {разность}

if (5 in set2) or     {проверка на вхождение элемента}

  (green in cset) then

...

      24  Файловые типы данных

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

Структура данных файл в зависимости от типа элементов делится на типизированные, текстовые и нетипизорованные файлы.

А. Типизированные файлы

Типизированный файл - это файл, состоящий из последовательности элементов (называемых компонентами) одного типа. Количество компонентов файла при задании файла не ограничивается.

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

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

type R=File of TC,

где: File (от англ. файл), of (от англ. из) - служебные слова;
R - идентификатор типа;
TC - тип компонентов (не может быть типом File).

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

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

Над файлами можно выполнять два явных вида действий:

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

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

Начать писать в файл можно только с самого его начала, дописывая новые компоненты последовательно одну за другой; для чтения также надо начинать просмотр файла с самого начала. Вследствие такой организации на одном просмотре файла нельзя совмещать и чтение, и запись информации: можно либо только читать из файла, либо только писать в файл. Однако, работая с различными файлами A и B, можно одновременно читать файл A и писать в файл B (и наоборот).

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

     25 Текстовые файлы

  Особое место в языке ПАСКАЛЬ занимают текстовые файлы,  компоненты

которых имеют символьный тип.  Для описания текстовых файлов в  языке

определен стандартный тип Тext:

        var    TF1, TF2: Text;

  Текстовые файлы  представляют  собой  последовательность строк,  а

строки - последовательность символов.  Строки имеют переменную длину,

каждая строка завершается признаком конца строки.

  С признаком конца строки связана функция EOLn(var T:Text):Boolean,

где Т - имя  текстового  файла.  Эта функция принимает значение TRUE,

если достигнут конец строки, и значение  FALSE, если  конец строки не

достигнут.

  Для операций над текстовыми файлами,  кроме перечисленных, опреде-

лены также операторы обращения к процедурам:

  ReadLn(T) - пропускает строку до начала следующей;

  WriteLn(T) -  завершает  строку файла,  в которую производится за-

пись, признаком конца строки и переходит к началу следующей.

  Для работы с текстовыми файлами введена расширенная форма операто-

ров ввода и вывода. Оператор

   Read(T,X1,X2,...XK)

эквивалентен группе операторов

   begin

     Read(T,X1);

     Read(T,X2);

     ...........

     Read(T,XK)

   end;

  Здесь Т - текстовый файл, а переменные Х1, Х2,...ХК могут быть ли-

бо  переменными  целого, действительного или символьного  типа,  либо

строкой. При чтении значений переменных из файла они преобразуются из

текстового представления в машинное.

  

    26 Ссылочные типы данных

Описание ссылочных переменных и их семантика

Синтаксис задания ссылочного типа:

 ::= ^

^ - признак ссылочного типа; - имя стандартноголибо описанного ранее типа. Это тип динамических объектов, которые можетпредставлять переменная ссылочного типа. Надо подчеркнуть , что здесь можетбыть только имя типа.

 Сами переменные ссылочноготипа вводятся обычным образом.

type
     массив = array [1..100] of integer;
     массивссылок= array [1..100]of^integer;
var
     q,p:^integer;
     c:^char;
     матрица:^массив;
     чудо:массивссылок;

 Значение ссылочной переменной, соответствующее отсутствиюдинамического объекта - nil (зарезервированное слово).

Следует уяснить, что описание вида

 varv:^T;

лишь вводит статическую переменную(под которую отводится память). Однако, никакого объекта типа Т при этом непоявляется. Для порождения объекта служит стандартная процедура new. Этапроцедура имеет один фактический параметр - ссылочную переменную. В результатевыполнения оператора процедуры new порождается динамический объект надлежащеготипа, а ссылочной переменной-параметру присваивается ссылка на этот только чтопорожденный объект.

 При этом созданному динамическому объекту никакого значения неприсваивается. Поэтому конструкция new(v) равносильна описанию статическойпеременной типа Т.

 Для работы с динамическими объектами используется переменная суказателем:

::=^

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

 Например:

r^:=35; p^:=r^+p^div3;матрица^[p^+3]:=25; чудо[p^+3]^:=3

 В примере матрица^[p^+3]:=25; происходит разименование ссылочнойпеременной матрица (выражение вида матрица^ часто называют разименованием, аоперацию ^ - операцией разименования; эта операция есть во многих языкахпрограммирования). В случае чудо[p^+3]^:=3 происходит разименования не полнойссылочной переменной чудо, а лишь частичной переменной чудо[p^+3]. Операция разименованиеприменима только к простым переменным ссылочного типа.

  27 Оператор new

Указатели

Паскаль поддерживает использование указателей:

type 

 a = ^b;

 b = record

       x: Integer;

       y: Char;

       z: a;

     end;

var

 pointer_to_b: a;

Здесь переменная pointer_to_b — указатель на тип данных b, запись. Указатели могут быть использованы перед объявлением. Это исключение к правилу, которое гласит, что любая вещь должная быть объявлена перед тем, как используется. Введение этого исключения позволило организовывать рекуррентные определения структур данных, в том числе такие, как линейные списки, стеки и очереди, включая указатель на запись в описании этой записи (см. также NULL).

Чтобы создать новую запись и присвоить значение 10 и символ A полям a и b в ней, необходимы следующие операторы:

new(pointer_to_b);  { выделение памяти указателю }

      28 29 Процедуры и функции

  Для  упрощения  разработки программ в Pascal-е можно использовать подпрограммы - процедуры  и  функции.

Они  представляют собой  инструмент,  с  помощью  которого  любая  программа

может быть разбита на ряд в известной  степени  независимых  друг  от  друга

частей. Такое разбиение необходимо по двум причинам.

 Во-первых, это средство экономии памяти: каждая подпрограмма существует  в

программе в единственном экземпляре, в то время как обращаться к  ней  можно

многократно   из   разных   точек   программы.   При   вызове   подпрограммы

активизируется последовательность образующих  ее  операторов,  а  с  помощью

передаваемых   подпрограмме   параметров   нужным   образом   модифицируется

реализуемый в ней алгоритм.

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

проектирования программ.  В  результате  применение  этих  методов  алгоритм

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

реализующих более  или  менее  самостоятельные  смысловые  части  алгоритма.

Подпрограммы  в  свою   очередь   могут   разбиваться   на   менее   крупные

подпрограммы, те - на подпрограммы нижнего уровня  и  т.д.  Последовательное

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

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

легко запрограммировать.

 Процедуры и функции представляют  собой  относительно

самостоятельные  фрагменты   программы,   оформленные   особым   образом   и

снабженные именем. Упоминание этого  имени  в  тексте  программы  называется

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

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

является некоторое  единственное  значение  простого,  строкового  типа  или

указателя, поэтому обращение к функции можно использовать в  соответствующих

выражениях наряду с переменными и константами.

 Описать  подпрограмму  -  это  значит  указать  ее  заголовок  и  тело.  В

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

За  заголовком  следует  тело  подпрограммы,  которое  состоит  из   раздела

описаний и раздела  исполняемых  операторов.  В  разделе  описаний  процедур

могут встретиться описания процедур низшего уровня, в тех - описания  других

подпрограмм и т.д.

Синтаксис и вызов (в общем) процедур:

Procedure  <имя процедуры>

     Uses  <имена модулей>

     Label <имена меток>

     Const <имена констант>

     Type <имена типов>

     Var <имена локальных переменных>

     <раздел объявления подпрограмм>

     Begin

     <операторы>

     End;

Для выполнения процедуры необходим её вызов. Вызов осуществляется  по  имени

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

оператор. При его выполнении выполняется вся подпрограмма.

Описание подпрограммы состоит из заголовка и тела подпрограммы.

                                 Заголовок

Заголовок процедуры имеет вид:

PROCEDURE <имя> (<сп.ф.п.>);

Здесь <имя> - имя подпрограммы <сп.ф.п.> - список формальных параметров;

{Сразу за  заголовком  подпрограммы  может  следовать  одна  из  стандартных

директив ASSEMBLER, EXTERNAL, FAR, FORWARD, INLINE, INTERRUPT, NEAR}

30. Параметры процедур и функций.

Параметры бывают формальные и фактические. Параметры,  которые  записываются

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

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

дополнительные данные – фактические параметры.

Список   формальных   параметров   необязателен   и   может   отсутствовать.

  Если же он есть, то  в  нем  должны  быть  перечислены  имена  формальных

параметров и их тип, например:

Procedure YZ (a : real; b : integer: с : char)

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

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

объединять в подсписки, например, вместо

Procedure Z (а : integer; b : integer)

можно написать проще:

Procedure Z (a, b : integer)

  Операторы тела подпрограммы рассматривают  список  формальных  параметров

как своеобразное  расширение  раздела  описаний:  все  переменные  из  этого

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

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

задачу.

Первый формальный параметр заменяется первым  фактическим,  второй-вторым  и

т. д.

  Механизм замены формальных параметров  на  фактические  позволяет  нужным

образом настроить алгоритм,  реализованный  в  подпрограмме.  Турбо  Паскаль

следит  за  тем,  чтобы  количество  и  тип  формальны   параметров   строго

соответствовали  количеству  и  типам  фактических   параметров   в   момент

обращения  к  подпрограмме.  Приведем

пример. рассмотрим интересующую нас часть программы  для  вычисления x = (5! + 2!)/(5+2)!

Program factorial(input,output);

……

{далее нас интересует описание процедуры:}

Procedure FL(L:integer, var z: integer); {объявление  процедуры,  её  имя  ,

список формальных параметров}

Begin

Z:=1;

While L>1 do

      Begin

      Z:=ZxL;{тело процедуры, которая также предусматривает, что  0!  и  1!

=1}

      L:=l-1;

      end;

end;

……..

begin

……..

{теперь рассмотрим вызов процедуры}

FL(5,a);

FL(2,b);

FL(2+5,c);

..........

end.

В данном случае l, z  формальные параметры. К слову, их не надо описывать  в

разделе глобальных переменных.

Фактические параметры: 5, а, 2, b, 2+5, c. В “основном” разделе VAR   должны

быть описаны  а, b, c

При первом вызове процедуры фактический параметр  5  заменит  формальный  L,

фактический a заменит формальный z, во втором 2 заменит L, b заменит z.

В третьем соответственно 2+5  заменит  L,  c  заменит  z.  Для  того,  чтобы

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

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

31. Локальные и глобальные объекты в процедуах и функциях

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

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

Переменные, описанные в процедуре или функции программиста, доступны только командам этой процедуры или функции и называются локальными.

Program prog;

var

x:integer; {глобальная переменная}

procedure p1;

var

y:integer; {локальная переменная}

begin

{можно использовать x и y}

end;

Begin

{можно использовать только x}

end.

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

Program prog;

var

i:integer;

procedure pr;

var

i:integer;

begin

i:=100;

end;

begin

i:=1;

 pr;

writeln(i);

end.

В результате получим, что i будет равно 1.

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

32. Рекурсии в процедурах и функциях.

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

Рассмотрим классический пример - вычисление факториала (пример 18). Программа вводит с клавиатуры целое число N и выводит на экран значение N!, которое вычисляется с помощью рекурсивной функции РАС. Для выхода из программы необходимо либо ввести достаточно большое целое число, чтобы вызвать переполнение при умножении чисел с плавающей запятой, либо нажать Ctrl-Z и Enter.

При выполнении правильно организованной рекурсивной подпрограммы осуществляется многократный переход от некоторого текущего уровня организации алгоритма к нижнему уровню последовательно до тех пор, пока, наконец, не будет получено тривиальное решение поставленной задачи. В примере 8.5 решение при N = 0 тривиально и используется для остановки рекурсии.

Пример 8.5 

Program Factorial;

{$S+} {Включаем контроль переполнения стека} 

var

n: Integer;

Function Facfn: Integer): Real; 

{Рекурсивная функция, вычисляющая n ! } 

begin {Fac}

 if n < 0 then

WriteLn ('Ошибка в задании N') 

else

if n = 0 then

Fac := 1

else Fac := n * Fac(n-l) 

end {Fac} ;

{---------------}

begin {main} repeat

 

ReadLn (n) ; 

WriteLn ('n!= ',Fac(n)) 

until EOF 

end {main} .

 

33. Структурное представление основных конструкций языка.

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

Узел слияния - 2 входа 1 выход, операции над данными не осуществляются

Простой предикат – вычисляет логическое выражение и в соответствии с получившимся результатом определяет направление. Вычисление без побочных эффектов. Функция - преобразование входных данных.

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

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

Существует 15 элементарных программ (не более 4 узлов). 7 из них имеют функциональные узлы:

Функция:

Следование:

Если-то-иначе:

Если-то:

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

 

Цикл с постусловием:

Цикл с внутренним условием:

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

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

    

     

      38. Данные с фиксированной точкой

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

Положительные целые со знаком - это 0 и все положительные числа.

Отрицательные целые со знаком - это все числа, меньшие 0. Отличительным признаком числа со знаком является особая трактовка одного из битов поля, представляющего число. В случае, если бит равен 0, то число считается положительным и его значение вычисляется по обычным правилам. В случае, если этот бит равен 1, число считается отрицательным и предполагается, что оно записано в так называемом дополнительном коде.

Дополнительный код некоторого отрицательного числа представляет собой результат инвертирования (замены 1 на 0 и наоборот) каждого бита двоичного числа, плюс единица. К примеру рассмотрим десятичное число -185(10). Модуль данного числа в двоичном представлении равен 10111001(2). Сначала нужно дополнить это значение слева нулями до нужной размерности - байта, слова и т.д. В нашем случае дополнить нужно до структуры размером в 2 байта (в IBM-370 это полуслово, а в Intel - слово), так как диапазон представления знаковых чисел в байте составляет -128..127. Следующее действие – получить двоичное дополнение. Для этого все разряды двоичного числа нужно инвертировать:

0000000010111001(2)в 1111111101000110(2)

Теперь прибавляем единицу:

1111111101000110(2)+ 0000000000000001(2) = 1111111101000111(2)

Результат преобразования равен 1111111101000111(2). Именно так и представляется число -185(10) в компьютере. При работе с числами со знаком от вас наверняка потребуется умение выполнять обратное действие - имея двоичное дополнение числа, определить значение его модуля. При этом необходимо сделать два действия:

Выполнить инвертирование битов двоичного дополнения.

К полученному двоичному числу прибавить двоичную единицу.

К примеру, определим модуль двоичного представления числа -185(10)= 1111111101000111(2):

1111111101000111(2)- инвертируем биты - 0000000010111000(2)

Добавляем двоичную единицу:

0000000010111000(2)+ 0000000000000001(2)= 0000000010111001(2)= |-185|

     

        39. Внутреннее представление чисел с плавающей точкой.

ЧИСЛО С ПЛАВАЮЩЕЙ ТОЧКОЙ [floating-point number]. Рациональное число, представленное в форме, содержащей явно заданный порядок числа, например 0.12345-Ю3. В общем случае Ч. с п. т. имеет вид M-qP, где М -число с фиксированной точкой, называемое мантиссой, q — основание системы счисления, р — число целого типа, называемое порядком. В приведенном примере 0.12345— мантисса, 10— основание десятичной системы счисления, 3 — порядок. Запись числа в форме Ч. с п. т. может быть сделана многими способами. Например, то же число может быть записано как 0.012345-104 и 1.2345-102. Чтобы избежать такой неоднозначности, обычно применяется нормализованная форма 0.12345-103. В языках программирования Паскаль, Фортран и др. вместо основания системы 10 в десятичных Ч. с п. т. пишут букву Е или е, а знак умножения после мантиссы не ставится, например 0.123Е—5 или 0.123е—5 вместо 0.123-10"5. Арифметические операции над Ч. с п. т. выполняются отдельно над мантиссой и порядком, например, при умножении таких чисел их мантиссы перемножаются, а порядки складываются. Поэтому при размещении Ч. с п. т. в памяти ЭВМ оно разбивается на мантиссу и порядок, которые раздельно помещаются в отведенные для них части ячейки памяти. Этот способ называется полулогарифмическим представлением чисел. Конечно, при размещении чисел в памяти ЭВМ используется двоичное представление мантиссы и порядка. См. представление чисел с плавающей точкой

    

  40. Внутреннее представление символьных и строковых данных.

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

Строки переменной длины, которые могут содержать до приблизительно 2 миллиардов (2^31) символов.

Строки постоянной длины, которые могут содержать от 1 до приблизительно 64K (2^16) символов.

Примеры строковых констант: "abcde", "информатика", "" (пустая строка).

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

Данные символьного типа в Turbo Pascal

Язык TP может обрабатывать не только числа, но и символы. Это

даёт возможность представлять в программах тексты и выполнять над

ними некоторые операции, обрабатывать различные ведомости, доку-

менты, справочники и т.д.

Значениями символьного типа является всё множество символов ПК.

Каждому символу приписывается целое число в диапазоне 0...255.

Это число служит кодом внутреннего представления символов. Для

кодировки используется код ASCII (Американский стандартный код

для обмена информацией).

Символьная константа (литера) - это символ, заключенный в апост-

рофы, например: 'A', 'R', '+', '7'. Внешние апострофы являются

признаком символьной константы, которая занимает 1 байт памяти.

Символьную константу можно обозначить именем и задать в разделе

констант, например:

Const

sim='A';

A='B';

S='+';

D1='T';

Символьная переменная принимает значение одного символа. В раз-

деле переменных она обозначается описателем CHAR (символьный тип),

например:

Var

B1,B2,R:CHAR;

BUKVA:CHAR;

Допускается использование символьных данных в операторе присваи-

вания, например: BUKVA:='A'; R:='*'; B1:='S';

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

данным применимы операции отношений (сравнений): <,<=,=,<>,>,>=.

Поэтому 'A'<'B'; '+'<'-'; '*'<'4'. Результатом операции сравнения

является логическая константа TRUE (истина) или FALSE (ложь).

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

ORD(X)-определяет порядковый номер символа X, например ORD('R')=82.

CHR(X)-определяет символ, стоящий по порядковому номеру Х, напри-

мер: CHR(68)='D';

PRED(X)-определяет предыдущий символ по отношению к Х, например:

PRED('N')='M';

SUCC(X)-определяет последующий символ по отношению к Х, например:

SUCC('R')='S'.

 

41. Реализация алгоритма сортировки с применением метода "часового".

Сортировка выбором

И начнём мы с сортировки выбором. Хотя этот алгоритм и не является самым быстрым, но я решил начать с него потому что, на мой взгляд он наиболее прост для понимания. Суть алгоритма состоит в том, что бы в исходном массиве найти наименьший элемент, а затем поменять местами первый элемент в списке с найденным. После того, находиться наименьший их оставшихся и меняется со вторым элементом. И так до тех пор пока весь список не будет отсортирован.
Таким образом понадобиться N+(N-1)+(N-2)+...+1 или N*N проходов чтобы отсортировать список.

procedure SellectionSort( var a: array of integer; min,
max: Integer);
var
i, j, best_value, best_j: longint;
begin
for i:=min to max do begin
best_value:=a[i];
best_j:=i;
for j:=i+1 to max do begin
if a[j]<best_value then begin
best_value:=a[j];
best_j:=j;
end;
end;
a[best_j]:=a[i];
a[i]:=best_value;
end;
end;


42. Сортировка методом "пузырька".

Наиболее известной (и наиболее "бесславной") является сортировка пузырьковым методом. Ее популярность объясняется запоминающимся названием и простотой алгоритма. Однако, эта сортировка является одной из самых худших среди всех когда-либо придуманных сортировок.

Сортировка пузырьковым методом использует метод обменной сортировки. Она основана на выполнении в цикле операций сравнения и при необходимости обмена соседних элементов. Ее название происходит из-за подобия процессу движения пузырьков в резервуаре с водой, когда каждый пузырек находит свой собственный уровень. Ниже показана самая простая форма программы сортировки методом пузырька:

{ сортировка пузырьковым методом}

procedure Bubble(var item: DataArray; count:integer);

var

 i,j : integer;

 x : DataItem;

begin

 for i := 2 to count do

   begin

     for j := count downto i do

       if item[j-1]>item[j] then

         begin

           x := item[j-1];

           item[j-1] := item[j];

           item[j] := x;

         end;

   end;

end; {конец сортировки пузырьковым методом}

В этом случае данное "item" является массивом элементов "DataItem", который сортируется, а данное "count" содержит число элементов в массиве.

Сортировка пузырьковым методом имеет два цикла. Поскольку число элементов массива задается переменной "count", внешний цикл вызывает просмотр массива count - 1 раз. Это обеспечивает нахождение каждого элемента в своей позиций после завершения процедуры. Внутренний цикл предназначен для фактического выполнения операций сравнения и обмена.

Эта

43. Сортировка выбором min элемента.

Один из самых простых методов сортировки работает следующим образом: находим наименьший элемент в массиве и обмениваем его с элементом находящимся на первом месте, потом повторяем процесс со второй позиции в файле и найденный элемент обмениваем со вторым элементом и так далее пока весь массив не будет отсортирован. Этот метод называется сортировка выбором поскольку он работает циклически выбирая наименьший из оставшихся элементов.
Сортировка
 выбором
procedure selection;
var
i, j, min, t : integer;
begin
    for i:=1 to N-1 do
    begin
        min := i;
        for j:=i+1 to N do
             if a[j]<a[min] then
min := j;
        t := a[min];
a[min] :=a[i];
a[i] := t;
    end;
end;

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

Этот метод - один из простейших, и от работает очень хорошо для небольших файлов. Его "внутренний цикл" состоит из сравнения a[i]<a[min] (плюс код необходимый для увеличения j и проверки на то, что он не превысил N), что вряд ли можно еще упростить. Ниже мы обсудим то, сколько скорее всего раз эти инструкции будут выполняться.

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

тело

цикла

условие

тело

цикла

условие




1. жемчужина собакасолнце сладкий цветок лотоса львиная собачка эти названия пришли из легенд о пр
2. Оформление книги с использованием компьютерных технологий
3. Статья 1 Основные понятия В настоящем Законе применяются следующие основные понятия- молодежь молодые гр
4. Тема- Составление профиля трассы ВВЕДЕНИЕ Продольное нивелирование выполняется для решения различ
5. Лекція 10 У цій лекції розглядаються основні примітиви utoCD 2008 ~ відрізок пряма промінь полілінія багаток
6. Использование криминалистической фотографии при производстве отдельных следственных действий
7. ВВЕДЕНИЕ ПРЕЗИДЕНТ РФ ПО КОНСТИТУЦИИ 1993 ГОДА ОБЩИЕ ПОДХОДЫ АКТЫ ПРЕЗИДЕНТ
8. Психология журналистики Перечень основной и дополнительной литературы а основная литература
9. Реферат- Остеохондро
10. Авиабилетов страховых полисов ваучеров справки на вывоз наличной валюты при необходимости водитель
11. О науке и государственной научнотехнической политике
12. Словари жаргона как слепок эпохи
13. то мере интересуется языками
14. Общий ход событий, развернувшихся под Холмом в 19421943 годах
15. Конспект лекций по Истории электроэнергетики и Учебное пособие История электроэнергетики
16. близкая к рассказу жанровая форма отличающаяся чёткостью изображения событий неожиданностью их развития.html
17. Планування заходів з питань цивільного захисту
18. Worked hrd ll its life crrying hevy bgs to mrket.
19. ТЕМА 1 РОІЙСЬКА ІМПЕРІЯ НА ПОЧАТКУ XX СТОЛІТТЯ
20. Лекция ’1 Педагогика как гуманитарная наука.html