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

Вопрос №1

Алгоритм и его свойства.

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

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

Свойства алгоритма:

1) Конечность - алгоритм состоит из конечной последовательности шагов;

2) Дискретность - в любом алгоритме шаги четко отделены друг от друга;

3) Массовость - алгоритм подходит для решения задач и класса, который может быть достаточно велик или бесконечен;

4) Направленность - алгоритм направлен на получение некоторого результата, который должен быть получен за приемлемое время;

5) Детерминированность(однозначность) - если исполнитель выполняет один и тот же алгоритм на одних и тех же исходных данных, то должен быть получен один и тот же результат.

Вопрос №2

Машинный язык. Трансляция.

Компьютер является исполнителем алгоритма и при этом имеет свой алгоритмический язык, называемый машинным языком.

Машинный язык состоит из двух простых инструкций: - передать содержимое из одной ячейки в другую;

- сложить содержимое двух ячеек и передать их в третью;

Каждая инструкция называется командой. Машинный язык является языком низкого уровня так как обладает высоким уровнем детализации.

Основная часть компьютеров построена по архитектуре Фон Неймана. Основные принципы архитектуры Фон Неймана:

1) Наличие ЦП;

2) Наличие основной памяти;

3) Наличие внешних устройств;

4) Наличие специальной среды для обмена данных;

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

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

Существуют два вида трансляторов:

1) Компиляторы - в процессе компиляции строится машинный эквивалент программы. Он запоминается в ОП, либо на внешнем носителе и в дальнейшем может быть выполнен многократно.

2) Интерпретаторы - про интерпретации каждая инструкция переводится в машинный эквивалент. Эквивалент выполняется, затем результат перевода теряется и переводится следующая инструкция.

Вопрос №3

Функции языка программирования.

1) ЯП является средством алгоритмического решения.

2) Коммуникативная: с помощью ЯП можно хранить и передавать данные и алгоритмические знания между различными субъектами.

Вопрос №4

Основные свойства языков программирования

1) Алгоритмическая универсальность - любой язык в своем составе должен содержать средства для построения любого потенциально возможного алгоритма.

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

Ориентированность - приспособленность языка к решению определенного класса задач.

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

3) Простота - конструкции ЯП должны быть просты до такой степени, чтобы допускать алгоритмический перевод в машинный эквивалент.

4) Естественность конструкций - конструкции ЯП должны быть понятны и удобны человеку.

Вопрос №5

Основные аспекты изучения ЯП

Алфавит ЯП - конечный набор символов, из которых строится конструкция ЯП. Для большинства ЯП алфавит составляют латинские буквы, арабские цифры и различные символы.

Лексика ЯП - совокупность простейших элементов ЯП, имеющих самостоятельный смысл, например имена переменных, имена типов, знаки операций, ключевые слова и т.д. Элементы лексики называются лексемы. Лексемы могут односимвольными(<, >, -, +) и многосимвольными (begin).

Синтаксис ЯП - совокупность правил, задающих структурно корректные конструкции ЯП.

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

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

Вопрос №6

Понятие метаязыка. Язык Бэкуса-Наура.

Метаязык служит для описания другого языка.

Язык Бэкуса-Наура (БНФ - Бэкуса-Наура лингвистические Формулы);

БНВ состоит из следующих обозначений:

< > - понятия, которые требуют определения;

::= - "есть", разделяет левую и правую части понятия;

| - "или", служит для разделения альтернатив определения;

[ ] - понятия, которые могут либо присутствовать, либо отсутствовать в данной конструкции;

{ } - понятия, которые могут либо отсутствовать, либо повторяться любой конечное число раз;

Примеры:

<цифра>::=0|1|2|3|4|5|6|7|8|9;

<целое без знака>::=<цифра>|<целое без знака>;

В альтернативе 2 данного понятия используется само определяемое понятие. Определение, в котором некоторые понятия определяются через сами себя, называется рекурсивным. Рекурсивное определение может быть корректным только в том случае, если оно содержит нерекурсивную альтернативу.

<целое>::=<знак><целое без знака>|<целое без знака>;

<знак>::=+|-;

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

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

<буква>::=a|b|c|...|z;

<идентификатор>::=<буква>|_|<идентификатор><цифра>|<идентификатор><буква>|<идентификатор>_;

Вопрос №7

Язык синтаксических диаграмм.

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

- содержит определенную информацию;

- содержит элементы языка, не требующие определения

- определяет последовательность посещений прямоугольников и овалов;

Цифра:

0

1

2

3

4

5

6

7

8

9

Ц

Целое без знака

Целое

елое без знака

Вопрос №8

Виртуальная Паскаль-машина

Любую программ на языке Pascal будем называть Pascal-программой. Любая Pascal-программа прежде чем быть выполненной на компьютере должна быть переведена в машинный эквивалент.

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

Выполнение Pascal-программы на ВПМ можно выразить следующей схемой.

Pascal-программа

Исходные данные

Сообщ. об ошибке

Результат

ВПМ

Структуру ВПМ можно дополнить реальным компьютером: и схема работы будет:

Pascal-программа

Исходные данные

Транслятор

Сообщение об ошибке

ЭВМ1

Машинный эквивалент

Сообщение об ошибке

Результат

ЭВМ2

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

Если ЭВМ1 и ЭВМ2 имеют различные типы, то компилятор выполняющий преобразования называется кросс-компилятор.

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

Вопрос №9

Типы ошибок, распознаваемые ЭВМ.

Все ошибки, которые распознает ЭВМ можно разделить на 2 класса:

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

2) Ошибки периода выполнения (семантические ошибки). Ошибки алгоритма решения задач . Только меньшая часть таких ошибок может быть распознана формальными методами (бесконечный цикл, деление на 0).

Вопрос №10

Пример простой Pascal-программы.

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

1 {var a, b: integer;

begin

readln (a,b);

2 while a<>b do begin

if a>b then a:=a-b else b:=b-a;

writeln (a);

end.

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

Строка 2 - операторная часть. Она заключена между словами begin ... end. и содержит последовательность операторов языка Pascal.

Все операторы разделяются точкой с запятой . Так же разделителем является end.

Существует пустой оператор, который выглядит никак и ничего не делает ;;.

В {} обозначаются комментарии.

Вопрос №11

Понятие типа.

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

Язык Pascal является строго типизированным языком. Это означает, что любая переменная имеет фиксированный тип, который задается в разделе описания и не изменяется в теле программы.

Типы могут классифицироваться по 2 основным критериям:

1) По критерию скалярности;

2) По критерию предопределенности;

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

2) - типы разделяются на предопределенные (стандартные) и конструируемые. Предопределенные типы являются встроенными, то есть для их использования не требуются описания (integer). Конструируемый тип требует предварительного описания в разделе описания типов.

Вопрос №12

Структура типов языка Pascal.

Pascal строит следующие скалярные, встроенные типы:

1) Числовые (целые и вещественные числа) - значениями этих типов соответственно являются целые и вещественные типы.

2) Символьные - значениями типа являются символы, заключенный в апострофы: 'a'.

3) Логический (булевский) тип - значениями являются две логические константы true и false.

4) Адресный тип - значениями типа являются адреса ячеек основной памяти.

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

1) Строковый - string - последовательность символов. Со строками можно работать как с единым целым, а можно обрабатывать посимвольно.

2) Текстовые файлы - последовательность символов, хранимых на внешних носителях, определенным образом структурированных.

3) Бестиповые файлы - состоят из последовательности записи, которые обрабатываются отдельно друг от друга.

В Pascalе существует возможность конструировать следующие типы:

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

Перечислимые типы задают список имен, то есть констант определяемого типа. Этот тип удобно использовать при описании объектов реального мира type dn=('pn',vt',...).

Интервальные и перечислимые типы являются скалярными.

Значениями регулярных типов являются массивы. Массив - последовательность элементов 1 типа. Количество элементов и их тип не могут измениться в процессе выполнения программы и фиксируются в описательной части программы.

Комбинированный тип - значениями типа являются записи. Запись это совокупность элементов, количество которых фиксировано, а типы могут быть различными. Элементы принято называть полями (пример: анкета).

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

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

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

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

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

Вопрос №13

Числовые типы.

Целочисленные типы.

Как и большинство типов, целочисленный определяется диапазоном значений. Существуют симметричные целочисленные типы и несимметричные. Для хранения целочисленных значений в Pascalе используется 2-ичная система счисления. Для положительных прямой код, для отрицательных дополнительный код.

Наименование

Диапазон

Длина в байтах

Byte (не сим.)

0..255

1

Word (не сим.)

0..216-1

2

Shortint (сим.)

-128..127

1

Integer (сим.)

-215..215-1

2

Longint (сим.)

-231..231-1

4

Вопрос №14

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

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

Точность представления определяется количеством значащих цифр в представлении числа.

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

Число А представимо в виде А=M*QP;

М - мантисса числа.

Q - основание системы счисления.

P - порядок (показатель степени).

Очевидно, что такое представление не однозначно, поэтому в компьютерах используются полуэкспоненциальную форму представления, то есть наряду с A=M*QP должно выполняться 1/Q≤M≤1.

25,8=0,258*102.

В большинстве типов компьютеров структура хранения вещественного числа имеет вид:

[знак мантиссы][абсолютная величина мантиссы][знак порядка][абсолютная величина порядка].

В большинстве компьютеров в качестве основания системы счисления используются 2, 8, 16.

=>[целое]=>(.)=>[целое без знака]=>(Е)=>[целое]=>

|| ||

============>===========

Е - целое - порядок и его налчие в записи константы означает, что предшествующее значение нужно умножить на 10 в степени "целое".

В Pascalе существуют следующие вещественные типы:

Наименование

Количество байт

Характеристика

single

4

Невысокая точность и небольшой диапазон.

double

8

Более высокая точность и более большой диапазон. Значения называются значениями с удвоенной точностью.

extended

10

Набольшая точность представления и наибольший диапазон.

Real

6

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

comp

8

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

Вопрос №15

Арифметические выражения.

Арифметические выражения - на языке Pascal это некоторые "формулы", которые задают способ вычисления нового значения по известным значениям, входящих в эту формулу операндов.

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

(a+b)div2; a mod 5;

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

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

Вопрос №16

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

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

var {<имя переменной>} : <тип>;

var a,b: byte;

c: word;

В Pascalе также можно именовать константы. Для этого в разделе описания указывается const.

const pi=3,1415926;

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

Вопрос №17

Стандартные арифметические функции

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

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

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

Рассмотрим основные функции Pascal:

1) abs(x)=|x|

6) sqr(x)=x2

2) arctg(x)=arctg(x)

7) sqrt(x)=√x

3) cos(x)=cos(x)

8) round(x) - округление x

4) exp(x)=ex

9) trunc(x) - отбрасывание дробной части

5) ln(x)=ln(x)

В функциях 1-7 аргументы могут иметь как целое, так и вещественной значение. При этом тип вычисляемого значения для функций 1 и 6 совпадает с типом аргумента. Для функций 2-5 и 7 тип возвращаемого значения всегда вещественный.

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

Вопрос №18

Булевский (логический) тип.

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

boolean: true>false;

В большинстве программ источником булевских выражений являются сравнения ,которые имеют следующую структуру: <выражение><знак сравнения><выражение>;

Выражения должны быть одного типа, исключая сравнение целых и вещественных:

Знаки сравнения: =, >, <, <>, <=, >=.

Вопрос №19

Операторы языка Pascal.

Все операторы языка можно разбить на 2 класса: простые и структурированные.

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

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

Простые операторы: оператор присваивания, оператор перехода, процедурные.

Вопрос №20

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

V:=E;

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

Вопрос №21

Простейшие средства ввода-вывода.

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

P(a1,a2,a3...an); P - имя процедуры. a1 - an - список аргументов или фактических параметров.

В большинстве ЯП ввод информации связан с понятием файла. Файл - последовательность информации, записанная на внешнем носителе.

1) input - имя файла для ввода информации.

2) output - имя файла для вывода информации.

Процедура ввода в общем случае имеет вид: Read(f,a1,a2...an).

f - имя файла, из которого данные перемещаются в основную память. a1-an - имена переменных, в которые помещаются данные. f - можно не называть. В этом случае ВПМ осуществляет ввод данных из стандартного файла input. Работа процедуры Read аналогична операторы присваивания, то есть a1-an присваиваются значения, получаемые из внешней среды. Кроме того оператор Read выполняет вспомогательную функцию: отображение вводимых значений на экран.

Процедура вывода имеет вид: Write(f,e1...em).

f - имя файла. e1-em - в общем случае выражения, которые выводятся в файл f, в частном случае это могут быть переменные и константы. Если имя файла не указано, то вывод осуществляется в предопределенный файл output, то есть вывод на экран. Списки a1-an и е1m списки ввода и вывода. Существует 2 модификации: readln (считывание данных и переход на следующую строку) и writeln (вывод информации и переход на следующую строку).

Вопрос №22

Оператор перехода.

В Pascalе любой оператор может быть помечен. В качестве метки оператора используется идентификатор или целое без знака. Помеченный оператор имеет следующую структуру: <метка>:<оператор>.

M1:a:=a+b;

Все метки должны быть описаны в разделе описаний конструкцией вида: Label <метка1>,<метка2>...;

Goto <метка>;

Выполнение оператора перехода состоит в передаче управления на оператор, помеченный меткой. В большинстве ЯП принят естественный ход выполнения операторов (сверху-вниз, слева-направо).

Оператор перехода может нарушать естественный порядок.

a:=1; Goto M1; a:=2; M1: write(a); a:=3;

a:=1; M2: write(a); a:=2; Goto M2;

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

Вопрос №23

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

Условные операторы имеют структуру: if B then S1 else S2;

B - булевское выражение, называемое условием. S1 и S2 - операторы языка Pascal. Семантику выразим блок схемой.

В

S1

S2

Условный оператор обеспечивает выбор из двух альтернатив. Например: if a>=0 then c:=a

else c:=-a;

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

В

S

Если условие B при выполнении принимают значение true, то выполняется оператор S.

Если выполненное значение B равно false, то выполняется следующий, заусловный . оператор.

Если в качестве оператора S необходимо выполнить несколько операторов, то используется составной оператор begin - end. Составной оператор также называют операторными скобками.

Вопрос №24

Вложенность условных операторов.

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

Большее из a, b, c.

if a>b then if a>c then writeln(a) else writeln(c)

else if b>c then writeln(b) else writeln(c);

Очевидно, что в Pascalе возможна конструкция:

if B1 then if B2 then S1 else S2;

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

if B1 then begin if B2 then S1 end else S2;

Вопрос №25

Операторы цикла с предусловием.

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

Оператор цикла с предусловием:

while B do S;

B - булевское выражение; S - оператор.

Семантика: вычисляется значение булевского выражения B, и если это значение равно true, то выполняется тело цикла S и снова вычисляется B. Если вычисленное значение В станет равно false, то выполняется следующий за оператором цикла оператор.

while true do S - зацикливание.

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

Вопрос №26

Операторы цикла с постусловием.

Оператор имеет следующую структуру: Repeat S1; S2;...Sn until B;

B - булевское выражение. S1-Sn - операторы.

Выполняется тело цикла S1-Sn, вычисляется булевское выражение В и если его значение равно false, то снова выполняется тело цикла. Если вычисленное значение В равно true, то выполняется следующий за оператором цикла оператор.

Отличие оператора цикла while от repeat: 1) В операторе repeat тело цикла выполнится хотя бы 1 раз.

2) Выход из цикла while выполняется по ложного условию В. В цикле repeat по истинному.

3) В цикле repeat в теле допускается использование нескольких операторов без begin-end.

Вопрос №27

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

В этом цикле заранее известно количество итераций цикла. Оператор имеет следующую структуру:

For i:=E1 to E2 do S;

i - переменная некоторого скалярного, дискретного, упорядоченного типа, называемая параметром цикла. Е1 и Е2 - выражения того же типа, что и i. S - оператор языка.

Существует модификация цикла с параметром: For i:=E1 downto E2 do S;

Вопрос №28

Символьный тип.

Символьный тип является встроенным, скалярным, дискретным, упорядоченным типом, имеет обозначение char. Значения типа являются символы, заключенные в апострофы. При хранении символьной информации в памяти компьютера используется 8-битовая 2-ичная последовательность. Эту последовательность можно рассматривать как номер символа и поэтому говорят, что символьные значения упорядоченные. В любой реализации языка Pascal должны выполняться следующие свойства:

1) Номера символов ('0','1','2'..'9') должны идти по возрастанию и по порядку.

2) Номера символов ('A'..'Z') должны идти по возрастанию.

Таким образом при сравнении символов 'A' и 'Z' 'Z'>'A', так как номер Z больше. Переменными символьного типа можно присваивать значения символьных констант и символьных переменных.

Над символьными значениями определены следующие функции:

ord (по символьному значению возвращение соответствующего номера).

chr (по заданному номеру возвращает символьное значение).

Очевидно, что chr определена не для любого целочисленного аргумента char(0..255).

Для кодирования символьных значений в большинстве случаев используется способ кодирования ASCII. При этом способе кодирования таблица кодов содержит 256 записей, содержащих символы и управляющие символы. Управляющие символы выполняют некоторые специальные действия, которые зависят от типа внешнего устройства. Например: 00000111 (7) - звуковой сигнал; 00001000 - перевод курсора на следующую строку.

Для изображения управляющих символов в программе используется write (#7).

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

succ (возвращает символьное значение, следующее за значащим аргументом);

pred (возвращает символьное значение предыдущее значащему аргументу);

succ(#0) - не определено - ошибка

pred(#255) - не определено - ошибка.

Эти функции определены для любого скалярного, дискретного и упорядоченного цикла.

for c:='A' to 'Z' do write(c);

Вопрос №29

Оператор выбора.

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

case <переменная> of

<константа или диапазон>: <оператор>;

....

else <оператор>;

end;

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

Переменная после слова case Называется селектором. Константы стоящие перед операторами должны иметь тот же тип, что и селектор. В общем случае селектор может быть выражением.

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

Вопрос №30

Конструируемые типы.

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

Описание типа имеет следующую структуру: type <имя типа>=<определение типа>;

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

Type Ind=integer; если конструируемый тип не имеет описания, то он называется анонимным. Описание переменной: var <имя переменной>: <тип>.

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

type Ind=integer;

Var a: Ind; b: integer;

Переменной а нельзя присваивать значение переменной b.

Вопрос №31

Интервальные типы

Определение интервального типа в Pascalе С1..Сn, где С1..Cn - константы некоторого скалярного, дискретного, упорядоченного типа, причем С1≤С2. С1 и C2 относятся к некоторому типу, который называется базовым для определяемого интервального типа. Для 1..10 - базовым типом является любой целочисленный тип. Значение интервального типа - все значения базового типа из интервала [C1,C2]. Над значениями интервального типа определены те же операции, что и в соответствующем базовом типе. var a: 1..100; a:=a mod 10;

Использование интервальных типов в программе позволяет контролировать ВПМ корректность использования этих значений. a:=101 (не допустимо).

Вопрос №32

Регулярные типы.

Значениями являются массивы. Массив - конечный набор однотипных элементов, определенным образом структурированных. Соответствующие номера элементов называются индексами. Описание регулярного типа в Pascalе имеет следующую структуру: array [<тип индекса>] of <тип элемента>;

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

Вопрос №33

Примеры обработки массивов.

Например: const N=20, M=10;

type Ind1=1..n; Ind2=m..n; Ind3=5..12;

var Tar1=array[Ind1] of integer;

Tar2=array[Ind2] of char;

Tar3=array[Ind3] of boolean;

В программе каждый элемент массива изображается, как переменная с индексом, которая в общем случае имеет структуру <имя массива>[<выражение>]. Выражение имеет тот же тип, что и тип индекса.

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

Необходимые примеры: 1) Ввод-вывод массива - массивы, как и другие структурированные объекты вводятся и выводятся поэлементно.

2) Однотипная обработка элементов некоторого массива.

3) Обработка элементов массива, обладающих указанными свойствами.

4) Поиск элемента массива с заданными свойствами.

5) Обработка нескольких массивов.

Вариант №34

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

В определении регулярных типов нет ограничения на типы элементов, следовательно типом элемента может быть массив: const: N=20; M=10;

type: Ind1=1..n;

Ind2=1..m;

Tar=array [Ind2] of integer;

Tar2=array[Ind1] of Tar;

var a: Tar2;

Переменная а состоит из 10 элементов, каждый из которых является массивом из 20 элементов.

a[1][3]=a[1,3]; Tar2=array[Ind1] of array[Ind2] of integer = Tar=array[Ind1,Ind2] of integer;

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

Обработка двумерных массивов: 1) Ввод-вывод элементов. Однотипная обработка элементов.

2) Однотипная обработка элементов некоторого массива.

3) Обработка элементов массива, обладающих указанными свойствами.

4) Поиск элемента массива с заданными свойствами.

5) Обработка нескольких массивов.

Диагональ: Главная for i:=1 to n do for j:=1 to n do if i=j then....

for i:=1 to n do a[i,i]...

Побочная a[i,n+1-i].

Вопрос №35

Строковый тип. Операции над строками.

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

const: k=10;

type Tstr= string[k+2];

S= string[25] - в переменной S не может содержаться более 25 символов.

Максимальное значение L - 255.

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

Кроме того, определена операция '+' (конкатенация): a:='Вам '; a:=a+'Привет';

Над строками выполняются операции сравнения: >, <, <>, =, >=, <=. Из двух строк большей считается та, в которой первой встретится символ, больший чем соответствующий символ другой строки. 'abcd'<'abd'.

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

Вопрос №36

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

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

1) length(s) - возвращает текущую длину строки s. В качестве s можно указывать выражение строкового типа. Можно использовать строки с нулевой длиной (length('')).

2) copy(s, p, k) - функция возвращает часть строки s, начиная с позиции p и имеющий длину k. Если k превышает оставшуюся часть строки, то возвращается имеющийся "хвост" строки. Если p превышает длину длину строки, то возвращает пустую строку.

3) pos(sb,s) - функция возвращает позицию первого вхождения подстроки sb в строку s. Если подстрока sb не входит в s, то возвращается 0.

4) delete(s,p,k) - процедура вставляет в строку s подстроку sb, начиная с позиции p длиной k.

5) Insert(sb,s,p) - процедура вставляет в строку s подстроку sb, начиная с позиции p.

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

Вопрос №37

Подпрограммы.

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

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

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

Побочные эффекты в подпрограммах функциях.

Пусть в некоторой программе необходимо многократно вычислять выражение: sin(x+1)+cos(x+1)*ex;

Вопрос №38

Процедуры без параметров.

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

var n: integer;

1) procedure Otcherk;

2) begin writeln;

for i:=1 to 20 do writeln ('_');

end;

begin

3) Otcherk;

....

4) Otcherk;

end.

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

2) - Тело процедуры.

3) и 4) - Процедурные операторы или операторы вызова процедуры. Выполнение такого оператора равносильно выполнению тела процедуры.

Вопрос №39

Процедуры с параметрами.

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

var n, i: integer; c: char;

procedure Otcherk (s: char);

for i:=1 to n do write(s);

end;

begin

....

N:=5;

5) Otcherk('a');....

Read(c); N:=100;

6) Otcherk(c);...

end.

S - формальный параметр процедуры, а конструкция (s: char) - список формальных параметров.

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

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

Формальные параметры также имеют статус локальных параметров.

Выполнение процедурного оператора, у которого есть параметры, равносильно выполнению тела процедуры, перед которым формальным параметрам присваиваются некоторые значения фактических параметров. В нашем примере строки 5) и 6) содержат вызовы процедур с фактическими параметрами. В первом случае фактический параметр константа, во втором - переменная.

Выполнение процедурного оператора 5) имеет вид: s:='a'; writeln; for i:=1 to N do writeln (s);

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

Вопрос №40

Обмен информацией между вызывающей программой и подпрограммой.

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

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

var k: integer; c: char;

procedure Otcherk(s: char; N: integer);

var i: integer;

begin writeln; for i:=1 to N do write(s); end;

Begin

k:=10; Otcherk('&',k); readln(c); Otcherk(c, 20);

end.

Выпишем модифицированное тело вызова процедуры:

s:='&'; N:=10; begin writeln; for i:=1 to N do write(s); end.

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

Вопрос №41

Параметры-переменные.

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

√(a2+b2);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]