Типы языкового програмирования по способу выполнения программ
Существуют различные классификации языков программирования. По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.)
Языки программирования высокого уровня. Это Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.
К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.Алгол-68, при разработке которого сделана попытка формализовать описание языка, приведшая к появлению абстрактной и конкретной программ. Абстрактная программа создается программистом, конкретная - выводится из первой. Предполагается, что при таком подходе принципиально невозможно породить неверную синтаксически (а в идеале и семантически) конкретную программу. Язык APL относят к языкам сверхвысокого уровня за счет введения сверхмощных операций и операторов. Запись программ на таком языке получается компактной.
Другая классификация делит языки программирования: процедурное и непроцедурное.
Процедурное программирование В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.Непроцедрное (декларативное) программирование целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки.В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь разлагаются на еще более простые и т.д. Один из основных элементов в функциональных языках - рекурсия, то есть вычисление значения функции через значение этой же функции от других элементов. Присваивания и циклов в классических функциональных языках нет.
В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста.
Вопрос 29
В языке программирования Паскаль программа состоит из заголовка, раздела описаний и исполняемой части. Служебные слова Pascal, обозначающие начало определенного блока программы, выделены жирным белым шрифтом.
Program – блок описания заголовка программы в Паскале имеет декоративное значение и может отсутствовать.
Uses – в Паскале вспомогательные готовые программы собранные в библиотеки (модули). Например, процедуры рисования точек, линий, окружностей на экране содержатся в модуле graph. Модули объявляются в этом блоке. Если подключать дополнительные библиотеки не нужно, блок отсутствует. Большинство важнейших ключевых системных библиотек подключаются автоматически (по умолчанию).
Label – блок описания меток, содержит их имена перечисленные через запятую. Метки используются для организации переходов в программе. Если метки не нужны, блок отсутствует.
Const – блок описания простых и типизированных констант. Может отсутствовать если константы в программе не предусмотрены.
Type - блок описания типов данных используемых в программе. Может отсутствовать, если новые типы не вводятся.
Var - блок описания переменных с указанием их типа. Может встречаться в программе несколько раз для организации глобальных и локальных переменных (т.е. в основной программе и при описании процедур и функций).
Определение процедур и функций – специально оформленные вспомогательные алгоритмы в виде подпрограмм, о которых будем говорить отдельно.
Begin - end. – служебные слова, обрамляющие тело основной программы, где находятся исполняемые операторы. Т.о. Begin начинает исполняемую часть программы, а end. (точка в конце обязательна) – ее завершает. Т.о. теоретически в минимально возможном наборе программа может состоять только из пустого тела begin end.
Вопрос 30
Структура типов данных в языке Паскаль:
Простые типы.
Простые типы делятся на ПОРЯДКОВЫЕ и ВЕЩЕСТВЕННЫЕ.
1. ПОРЯДКОВЫЕ ТИПЫ, в свою очередь, бывают:
а) целые
В Паскале определено 5 целых типов, которые определяются в зависимости от знака и значения, которое будет принимать переменная.
Название типа | Длина (в байтах) | Диапазон значений |
Byte | 0...255 | |
ShortInt | -128...+127 | |
Word | 0...65 535 | |
Integer | -32 768...+32 767 | |
LongInt | -2 147 483 648...+2 147 483 647 |
б) логический
Название этого типа BOOLEAN. Значениями логического типа может быть одна из логических констант: TRUE (истина) или FALSE (ложь).
в) символьный
Название этого типа CHAR - занимает 1 байт. Значением символьного типа является множество всех символов ПК. Каждому символу присваивается целое число в диапозоне 0…255. Это число служит кодом внутреннего представления символа.
2. ВЕЩЕСТВЕННЫЕ ТИПЫ.
В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.
Длина числового типа данных, байт | Название числового типа данных | Количество значащих цифр числового типа данных | Диапазон десятичного порядка числового типа данных |
Single | 7..8 | -45..+38 | |
Real | 11..12 | -39..+38 | |
Double | 15..16 | -324..+308 | |
Extended | 19..20 | -4951..+4932 | |
Comp | 19 . .20 | -2*1063 +1..+2*1063 -1 |
СТРУКТУРИРОВАННЫЕ ТИПЫ
Структурированные типы данных определяют упорядоченную совокупность скалярных переменных и характеризуются типом своих компонентов.
Структурированные типы данных в отличие от простых задают множества сложных значений с одним общим именем. Можно сказать, что структурные типы определяют некоторый способ образования новых типов из уже имеющихся.
Существует несколько методов структурирования. По способу организации и типу компонентов в сложных типах данных выделяют следующие разновидности: регулярный тип (массивы); комбинированный тип (записи); файловый тип (файлы); множественный тип (множества); строковый тип (строки); в языке Турбо Паскаль версии 6.0 и старше введен объектный тип (объекты).
В отличие от простых типов данных, данные структурированного типа характеризуются множественностью образующих этот тип элементов, т.е. переменная или константа структурированного типа всегда имеет несколько компонентов. Каждый компонент в свою очередь может принадлежать структурированному типу, т.е. возможна вложенность типов.
1. Массивы
Массивы в Турбо Паскале во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты суть данные одного типа (возможно структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием порядкового номера.
Описание массива задаётся следующим образом:
<имя типа> = array [<сп.инд.типов>] of <тип>
Здесь <имя типа> - правильный идентификатор;
Array, of – зарезервированные слова (массив, из);
<сп.инд.типов> - список из одного или нескольких индексных типов, разделённых запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;
<тип> - любой тип Турбо Паскаля.
В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LongInt и типов-диапазонов с базовым типом LongInt.
Глубина вложенности структурированных типов вообще, а следовательно, и массивов – произвольная, поэтому количество элементов в списке индексов типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива не может быть больше 65520 байт.
2. Записи
Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.
Структура объявления типа записи такова:
<имя типа> = RECORD <сп.полей> END
Здесь <имя типа> - правильный идентификатор;
RECORD, END – зарезервированные слова (запись, конец);
<сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.
3. Множества
Множества – это набор однотипных логических связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Турбо Паскалем. количество элементов, входящих в множество, может меняться в пределах от 0до 256 (множество, не содержащее элементов, называется пустым).именно непостоянством количества своих элементов множества отличаются от массивов и записей.
Два множества считаются эквивалентными тогда и только тогда, когда все их элементы одинаковы, причём порядок следования элементов множества безразличен. Если все элементы одного множества входят также и в другое, говорят о включении первого множества во второе.
Описание типа множества имеет вид:
<имя типа> = SET OF <баз.тип>
Здесь <имя типа> - правильный индификатор;
SET, OF – зарезервированные слова (множество, из);
<баз.тип> - базовый тип элементов множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER и LONGINT.
Для задания множества используется так называемый конструктор множества: список спецификаций элементов множества, отделяемых друг от друга запятыми; список обрамляется квадратными скобками. Спецификациями элементов могут быть константы или выражения базового типа, а также – тип-диапазон того же базового типа.
4. Файлы
Под файлом понимается либо именованная область внешней памяти ПК, либо логическое устройство – потенциальный источник или приёмник информации.
Любой файл имеет три характерные особенности
- у него есть имя, что даёт возможность программе работать одновременно с несколькими файлами.
- он содержит компоненты одного типа. Типом компонентов может быть любой тип Турбо Паскаля, кроме файлов. Иными словами, нельзя создать «файл файлов».
- длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью устройств внешней памяти.
Файловый тип или переменную файлового типа можно задать одним из трёх способов:
<имя>= FILE OF <тип>;
<имя>=TEXT;
<имя> = FILE;
Здесь <имя> - имя файлового типа (правильный индификатор);
FILE, OF – зарезервированные слова (файл, из);
TEXT – имя стандартного типа текстовых файлов;
<тип> - любой тип Турбо Паскаля, кроме файлов.
В зависимости от способа объявления можно выделить три вида файлов:
· типизированные файлы (задаются предложением FILE OF…);
· текстовые файлы (определяются типом TEXT);
· нетипизированные файлы (определяются типом FILE).
О преобразовании числовых типов данных Паскаля
В Паскале почти невозможны неявные (автоматические) преобразования числовых типов данных. Исключение сделано только для типа integer, который разрешается использовать в выражениях типа real. Например, если переменные описаны следующим образом:
VarX : integer; Y: real;
то оператор
Y := X+2;
будет синтаксически правильным, хотя справа от знака присваивания стоит целочисленное выражение, а слева – вещественная переменная, компилятор сделает преобразование числовых типов данных автоматически. Обратное же преобразование автоматически типа real в тип integer в Паскале невозможно. Вспомним, какое количество байт выделяется под переменные типа integer и real: под целочисленный тип данных integer выделяется 2 байта памяти, а под real – 6 байта. Для преобразования real в integer имеются две встроенные функции: round(x) округляет вещественное x до ближайшего целого, trunc(x) усекает вещественное число путем отбрасывания дробной части.
Оператор
Оператор является неделимым элементом программы, который дает возможность выполнять определенные алгоритмические действия. Отличием оператора, по отношению к другим элементам, является то, что под ним всегда подразумевается какое-то действие. В языке Паскаль операторы состоят из служебных слов. Операторы, используемые в программе, отделяются между собой и от других элементов программы символом (;). Все операторы языка Паскаль можно условно разбить на две группы:
- простые;
- структурированные.
Простые операторы – это операторы, не содержащие в себе других операторов. К ним относятся:
- оператор присвоения (:=);
- оператор процедуры (стандартные READ, WRITE, REWRITE, CLOSE, RESET.);также есть те которые задаются пользователем (пример в 33)
- оператор безусловного перехода (GOTO-метка).
(GOTO – зарезервированное слово в языке Паскаль. [метка] – это произвольный идентификатор, который позволяет пометить некий оператор программы и в дальнейшем сослаться на него.)
Структурированные операторы – это операторы, которые содержат в себе другие операторы. К ним относятся:
- составной оператор;
- операторы условий (IF-если, CASE-выбор);
- операторы цикла (FOR-для, WHILE-пока, REPEAT-повтор);
- оператор присоединения (WITH-с'о ней сами узнайте’).(Использование оператора присоединения With..Do зависит от предпочтения программиста. На выполнения самой программы он никак не влияет.)
32 Конструкция function
Function<Имя функции>(<описание переменной>)(<возвращаемый тип>);
<описание внутренних переменных>
Пример ( задание просчета факториала(fctrl-факториал в программе) через функцию)
Programprog;
Usessysutils;
Functionfctrl(n:integer):Realв этой строчке <Имя функции> (<описание переменной>)(<возвращаемый тип>);
Vari:integer; Res:real; в этой строчке <описание внутренних переменных>
Begin
Res:=1;
For I:=2 to n do
Res:=Res*I;
Fctrl:=Res;
End;(здесь мы задали функцию fctrl (факториал).)
теперь мы можем использовать только одну команду fctrlдля просчета факториала)
Var n:integer;
Begin
Readln(n);
Writeln(n,’!=’,fctrl(n));
End.
33 Конструкцияprocedure
1 Стандартные READ, WRITE, REWRITE, CLOSE, RESET.
2 Заданные пользователем
Схоже задавали function
procedure<Имя процедуры><описание переменных>;
<описание внутренних переменных>
Пример (зададим процедуру замены SWAP)
Program Swap;
Uses sysutils;