Реферат : VAX и Berceley Pascal 


Полнотекстовый поиск по базе:

Главная >> Реферат >> Информатика, программирование


VAX и Berceley Pascal




РЕФЕРАТ

VAX И BERCELEY PASCAL

Компьютер VAX фирмы DEC (Digital Equipment Corporation)

принадлежит к семейству мини-ЭВМ. Система VAX похожа на любую

другую компьютерную систему. Аппаратное и программное обеспече-

ние, работая вместе, образуют высокоэффективную и высокопроиз-

водительную систему. Обобщенная структура системы VAX-11 пока-

зана на рис.1.

Консоль представляет собой терминал, используемый для на-

чальной загрузки системного программного обеспечения, модифика-

ции его средств и изменения системных параметров. Загрузка сис-

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

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

ках. Связь центрального процессора VAX с оперативной памятью и

внешними устройствами (за исключением консоли) осуществляется

через так называемое синхронное межсоединение. Физически оно

представляет собой набор гнезд, в которые могут вставляться мо-

дули на печатных схемах.

В системе VAX используется оперативная память произвольно-

го доступа (RAM - Random Access Memory), как и в персональных

компьютерах. В оперативной памяти находятся данные и программы,

выполняемые центральным процессором. Содержимое этой памяти

постоянно изменяется; она очищается в момент выключения компь-

ютера.

Устройство центрального процессора - это мозг компьютера.

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

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

VAX входит логическое устройство, управляющее извлечением ко-

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

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

центрального процессора входит также ряд регистров. Некоторые

.

из них предоставляются в распоряжение пользователей, а другие

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

Пользователи могут работать с 16 регистрами центрального про-

цессора размером 32 двоичных разряда каждый. Двенадцать из них

(R0-R11) являются регистрами общего назначения. С помощью ре-

гистров R0-R11 можно формировать адреса операндов. Оставшимися

четырьмя регистрами VAX могут пользоваться только опытные прог-

раммисты, понимающие особую роль этих регистров в системе.

В состав центрального процессора VAX входит также регистр

из 32 двоичных разрядов, называемый длинным словом состояния

процессора. Его старшие 16 двоичных разрядов содержат информа-

цию о состоянии процессора. Изменение этой информации разрешено

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

Младшие 16 двоичных разрядов этого регистра образуют так назы-

ваемое "слово состояния программы". В этом слове содержится ин-

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

Но что такое компьютер без соответствующего программного

обеспечения ?! Машину без программного обеспечения иногда назы-

вают "голой". Первые машины на самом деле были "голыми". Они

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

этом режиме и вызвала появление операционных систем.

Одной из них и явилась операционная система UNIX. Первая

версия ОС UNIX была разработана в 1969 г. К.Томпсоном и Д.Рит-

чи. А уже потом она стала интенсивно развиваться и адаптиро-

ваться различными фирмами для разных ЭВМ. В частности была

спроектирована ОС UNIX BSD 4.3 для компьютеров серии VAX.

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

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

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

успели. Прежде всего они учли все то лучшее, что имелось в то

.

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

смогли реализовать принципиально новую ОС на базе нескольких

новых и плодотворных идей. Положенные в основу системы идеи

позволили применять UNIX на компьютерах с разной архитекту-

рой.Следовательно, применение этой ОС позволяет переносить

программы, работающие под ее управлением, с одного типа машин

на другой с весьма незначительными изменениями или вовсе без

них. Это дает возможность разработчикам создавать программы в

виде законченного продукта, которому гарантирован широкий рынок

сбыта.

Она включает в себя множество средств, удобных для созда-

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

 7: 0 Иерархическую файловую систему ;

 7: 0 Совместимые по вводу/выводу файлы, устройства и процессы;

 7: 0 Асинхронную обработку;

 7: 0 Интерпретатор командного языка;

 7: 0 Свыше 100 системных и вспомогательных команд;

 7: 0 Ряд языков программирования, включая Паскаль,Бейсик и Си.

Следует отметить, что в сравнении с другими операционными

системами UNIX имеет два недостатка. Она очень эффективна в тех

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

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

Второй недостаток ОС UNIX - слабая приспособленность к работе в

режиме реального времени. Но не стоит терять из внимания то,

что существует возможность адаптирования UNIX для решения тако-

го рода задач, но следует учитывать, что существуют и другие

ОС, в большей степени приспособленные для решения таких задач.

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

попробую описать основные положения при работе с ней.

Работа с системой UNIX начинается с входа в нее, т.е. с

.

процедуры входа. Эта процедура обеспечивает возможность регист-

рировать имена пользователей, время входа, использованное ма-

шинное время, а также идентифицировать владельцев файлов, опре-

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

терминалов и т.п. Для того чтобы пользователь имел возможность

входа в систему, он должен быть введен ее администратором в

число абонентов. При входе в систему вы получите сообщение "lo-

gin:". Вы должны будете ввести ваше регистрационное имя. Далее

после короткой паузы система потребует ввод пароля. Пароль -

это слово, которое держится в секрете и вводится в качестве

подтверждения идентификатора пользователя. Вводите пароль.

Любая вводимая с клавиатуры терминала информация отобража-

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

символы которого не отображаются. Ввод пароля требует повышен-

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

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

Система проверяет введенный пароль, и, если он верен, про-

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

выдауе на экран некоторое сообщение. После этого на экран выво-

дится приглашение, свидетельствующее о готовности системы при-

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

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

формационных команд.

.

┌─────────────────────────────────────────┬───────────────────┐

│ КОМАНДА │ ЗНАЧЕНИЕ │

├─────────────────────────────────────────┼───────────────────┤

│ ps │ выводит информацию│

│ │ о текущем состоя-│

│ │ нии сети. │

│ who │ вывод списка рабо-│

│ │ тающих в данный │

│ │ момент пользовате-│

│ │ лей. │

│ echo [набор символов] │ вывод набора сим-│

│ │ волов. │

│ data │ вывод текущей даты│

│ │ и времени. │

│ man [имя команды] │ выводит информацию│

│ │ о указанной коман-│

│ │ де. │

│ pwd │ вывод абсолютного│

│ │ имени текущего ка-│

│ │ талога. │

│ ls │ вывод содержимого│

│ │ текущего каталога.│

│ cd [путь\имя директории] │ осуществляет пере-│

│ │ ход в указанную│

│ │ директорию. │

│ сat [путь\имя файла] │ вывод содержимого│

│ │ содержимого файла│

│ │ на экран. │

│ mkdir [путь\имя директории] │ создание директо-│

.

│ │ рии. │

│ cp [путь1\имя файла1] [путь2\имя файла1]│ копирование файла1│

│ │ из одной директо-│

│ │ рии в другую│

│ │ (сначала указыва-│

│ │ ется откуда потом│

│ │ куда) │

│ mv [путь1\имя файла1] [путь1\имя файла2]│ переименовка фай-│

│ │ ла1 в файл2. │

│ mv [путь1\имя файла1] [путь2\имя файла1]│ перемещение файла1│

│ │ из одной директо-│

│ │ рии в другую (сна-│

│ │ чала указывается│

│ │ откуда потом куда)│

│ rm [путь\имя файла] │ удаление файла. │

│ rmdir [путь\имя каталога] │ удаление пустого│

│ │ каталога. │

└─────────────────────────────────────────┴───────────────────┘

После работы с системой необходимо обязательно из нее вый-

ти. Выход из системы намного проще, чем вход в нее. Нужно наб-

рать logout и терминал будет отключен от операционной системы,

на этом ваша работа закончится.

В университете Berkeley (штат Колифорния, США) была разра-

ботана система программирования Berkeley Pascal. Система была

написана для ОС UNIX 4.X, разработанная в том же университете.

Программа на языке Паскаль записывается в виде последова-

тельности символов, к числу которых относятся латинские буквы,

арабские цифры, знаки препинания, знаки операций. Для обозначе-

ния исходных данных и результатов вычислений употребляются пе-

ременные, которыми могут быть не только любые буквы - a,b,D,U и

.

т.д., но и, например, последовательности символов вида

a1,b32,word и т.д., которые состоят из букв и цифр и начинаются

с буквы. Соответствующее исходное данное или результат вычисле-

ния называется значением переменной. Числа в программе записы-

ваются в десятичной системе счисления, вместо запятой пишется

точка : 0,-1,0.242 и т.д. Количество цифр в числе не может быть

слишком большим;число не должно превышать максимально допусти-

мого в машине числа. Это относится и к количеству букв и цифр в

переменной.

Переменные и числа - простейшие частные случаи выражения.

Более сложные выражения строятся из чисел и переменных с по-

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

Эти знаки суть +, -, *,/. Кроме того, в выражении могут быть

использованы круглые скобки и некоторые функции. Знак операции

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

диционно записываются с выходом из строки: в паскале пишут a/b,

c/17, (a*x+b)/(c+d) и т.д, Знак операции умножения * нельзя

опускать или заменять точкой. Допустимое для математического

текста выражение 0,5(x+7) 77 0(x+2) 77 0(x-3) в паскале должно быть за-

писано в виде 0,5*(x+7)*(x+2)*(x-3). Знак - (минус) может упот-

ребляться и для изображения величины, противоположной данной:

-x, -(a*b+y) и т.д. Нельзя размещать два знака операций рядом;

последовательности символов 3*-2, x1/-x2-это не выражения, вы-

ражениями будут 3*(-2),x1/(-x2).

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

sin(E) - синус Е,

cos(E) - косинус E,

ln(E) - натуральный логарифм Е;

exp(E) - показательная функция Е, т.е. e 5Е 0;

abs(E) - f,cjk.nyfz dtkbxbyf (модуль) Е, т.е. 72 0Е 72 0;

.

sqr(E) - квадрат (вторая степень) Е, т.е _.  .Е 52 0;

sqrt(E) - квадратный корень из Е, т.е.  7? 0Е ;

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

например, мы пишем sqrt(sgr(b)-4*a*c).

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

ний. При вычислении действуют обычные правила старшинства опе-

раций: старшие операции - умножение и деление, следующие по

старшинству - сложение и вычитание. Из двух операций одинаково-

го старшинства первой выполняется та, знак которой в выражении

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

порядок: значением выражения (x+y)/2 будет половина суммы зна-

чений переменных x и y, в то же время значением выражения x+y/2

будет сумма значения x и половины значения y.

Последовательность букв и цифр, начинающаяся с буквы, на-

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

идентификатор не обязательно представляет собой переменную:

sin, сos и т.д. - это не переменные, а имена функций. В прог-

раммах встречаются и другие виды идентификаторов.

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

нято называть операторами.

Оператор присваивания состоит из имени, идентифицирующего

переменную, символа присваивания и выражения. В области описа-

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

вания, в котором именем, идентифицирующим переменную, является

идентификатор функции.

Выполнение оператора присваивания приводит к вычислению

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

переменной, идентифицированный именем, стоящим слева от символа

присваивания. В случае рассмотренного выше присвоения, происхо-

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

.

результата функции, т.е. величины, возвращаемой в месте вызова

функции.

Необходимо, чтобы тип выражения и тип переменной соответс-

твовали друг другу. Это соответствие обеспечивается, если пере-

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

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

Синтаксис

оператор-присваивания:

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

Примеры

i:=i+1;

select:=true;

Оператор процедуры состоит из идентификатора процедуры,

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

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

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

Выполнение оператора процедуры приводит к выполнению дейс-

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

это произойдет, происходит идентификация переменных, являющихся

параметрами вызова процедуры, и определение значений выражений.

Синтаксис

оператор-процедуры:

название-процедуры(список параметров)

название- процедуры

название-процедуры:

идентификатор

Примеры

Insert(InputFile)

ColLin(inputstr,col)

Exit

.

Оператор перехода состоит из ключевого слова goto, после

которого следует ссылка на метку.

Выполнение оператора перехода приводит к выполнению после-

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

меткой. Необходимо, чтобы оператор перехода находился в преде-

лах блока, в котором определена метка, указанная в операторе.

Недопустимо, чтобы оператор перехода передавал управление

внутрь сложного оператора или программы.

Синтаксис

оператор-перехода:

goto метка

метка:

идентификатор

Примеры

goto 345

goto finish

Составной оператор состоит из ключевого слова begin, после

которого идет последовательность операторов и ключевое слово

end. Составной оператор используется там, где синтаксис языка

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

последовательности операторов.

Выполнение составного оператора приводит к выполнению зак-

люченной в нем последовательности операторов.

Синтаксис

составной-оператор:

begin последовательность-операторов end

Примеры

begin

i:=1;

j:=0;

.

end;

begin

Writeln(out);

read(in);

end;

Условный оператор состоит из ключевого слова if, после ко-

торого идет логическое выражение, ключевое слово then и опера-

тор. После оператора может следовать ключевое слово else и сно-

ва оператор.

Выполнение условного оператора заключается в вычислении

значения выражения, а затем, если его результатом будет величи-

на со значением true, в выполнении оператора, идущего после

ключевого слова then. Если результатом будет величина со значе-

нием false, а условный оператор не содержит ключевого слова el-

se, то выполнение оператора заканчивается. Если есть ключевое

слово else, то выполняется следующий после него оператор.

Если оператор, заключенный в условном операторе if, также

является условным, то в нем должно быть ключевое слово else.

Синтаксис

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

if логическое-выражение then оператор;

if логическое-выражение then оператор

else оператор;

Примеры

if a=b then a:=5 else a:=6;

if a=b then begin

a:=6;

b:=6

end;

if a=b then

.

if a=5 then

b:=6

else

a:=1

else

a:=10;

Оператор варианта состоит из ключевого слова case,после которо-

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

выбора, каждому из которых предшествует метка выбора, а после

него ключевое слово end.

Список меток выбора состоит из списка констант, после ко-

торого следует двоеточие. Каждая из констант этого списка долж-

на быть одного типа с индексом варианта. Если некоторая часть

списка констант является последовательностью элементов перечис-

ляемого типа, она может заменяться конструкцией :

первый..последний

выделяющей первый и последний элементы последовательности.

Вместо меток выбора перед последним оператором выбора может ис-

пользоваться ключевое слово else. После такой "метки" двоеточие

не ставится.

Синтаксис

оператор-варианта:

case индекс-варианта of

последовательность-операторов-выбора end

Выполнение оператора выбора заключается в определении зна-

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

рым стоит метка выбора со значением, равным значению индекса

варианта. Если такого оператора нет, то выполняется оператор

после ключевого слова else, если и такого оператора нет, то вы-

полняется пустой оператор.

.

Примеры

case a=b of

false: i:=1;

true: j:=2

end;

case a=b of

false: i:=1

else j:=2

end;

ЦИКЛИЧЕСКИЕ ОПЕРАТОРЫ.

Оператор for состоит из ключевого слова for, за которым

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

ражение, определяющее начальное значение параметра цикла, клю-

чевое слово to или downto, ключевое слово do и произвольный

оператор.

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

речисляемого типа.

Синтаксис

оператор-for:

for переменная:=выражение 4a 0 to выражение 4b 0 do оператор

Выполнение оператора for приводит к выполнению содержащегося в

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

дятся в диапазоне значений выражение 4a 0 и выражение 4b 0.

Примеры

for i:=1 to 4 do writeln(i);

Оператор while состоит из ключевого слова while, посте ко-

торого идут логическое выражение, ключевое слово do и любой

оператор.

Синтаксис

оператор-while:

.

while выражение do оператор

Оператор while выполняется по следующему алгоритму:

1. Определяется значение выражения.

2. Если это значение false, то выполнение оператора считается

оконченным.

3. Если получено значение true, то выполняется оператор, следу-

ющий после ключевого слова do, а потом описанные действия пов-

торяются сначала.

Пример

while i<>0 do begin

i:=i-1;

writeln(i)

end;

Оператор repeat состоит из ключевого слова repeat и идущих

за ним произвольного оператора, ключевого слова until и логи-

ческого выражения.

Синтаксис

оператор-repeat:

repeat оператор until выражение

Оператор repeat выполняется по следующему алгоритму:

1. Выполняются операторы, идущие после ключевого слова repeat.

2. Вычисляется значение выражения после ключевого слова until.

3. Если получено значение true, то выполнение оператора счита-

ется оконченным.

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

ются сначала.

Пример

i:=10;

repeat

writeln(i);

.

i:=i-1;

until i=0;

Стандартные типы Паскаля

Понятие тип связано с фиксированным набором данных. Переменная

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

надлежащие к набору определяющему этот тип. В языке Паскаль необходи-

мое явное определение типа каждой из переменных в программе.

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

переменной. Типы переменных делятся на простые и составные. К простым

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

- строковый, массивовый, записной, множественный и файловый. Среди

упомянутых типов можно выделить следующие стандартные типы: integer

(целый), byte (байтовый), char (символьный), boolean (логический), re-

al (вещественный). Первые четыре называются порядковыми. Они характер-

ны не только тем, что элементы их упорядочены, они также образуют

счетное множество.

Стандартные скалярные типы определены по умолчанию, т.е. опреде-

лять их не надо. Их неявное определение действительно во всей програм-

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

Массивовый тип

Массивовый тип является составным типом данных. Массив состоит из

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

нентам (элементам) массива, осуществляется с помощью индексирования.

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

ные в квадратные скобки. Допустимый диапазон индексов определяется в

описании массива.

Описание массивового типа состоит из ключевого слова array, после

которого следует заключенное в квадратные скобки описание типа индек-

сов, ключевое слово of, а после него описание типа элементов.

Синтаксис:

.

описание-массива:

array[тип-индексов] of тип-элементов

тип-индексов:

описание-порядкового-типа

тип-элементов:

описание-типа

Пирмеры:

type

str = array [1..250] of char;

var

inputstr: str;

Множественный тип

Множественный тип является составным типом. Множество -

это переменная, которой может быть присвоено выбранное подмно-

жество множества всех подмножеств. Базовым множеством последне-

го может быть произвольное множество элементов порядкового ти-

па. Каждый элемент рассматриваемого типа является одним из та-

ких элементов.

Два множества равны тогда и только тогда, если они состоят

из одинаковых элементов. Если все элементы одного множества яв-

ляются элементами другого, то говорят, что первое множество со-

держится во втором.

Описание множественного типа состоит из ключевого слова

set, после которого идет ключевое слово of и описание базового

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

вого, содержал не более 256 элементов и чтобы результат функции

ord для каждого элемента находился в интервале [0;255].

Синтаксис

описание-множественного-типа

set of базовый-тип

.

основной-тип:

порядковый-тип

Примеры

type

Mnojestvo=set of char;

Функции и процедуры языка Паскаль

Функции и процедуры являются объектами, описывающими опре-

деленные фрагменты алгоритма, реализуемого программой, поэтому

они называются подпрограммами.

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

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

в зависимости от ситуации: после использования оператора проце-

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

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

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

только в выражении в виде обозначения функции.

Подпрограммы, как и переменные, должны быть описаны. Опи-

сание подпрограммы может находиться в декларативной части бло-

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

тоит из заголовка и блока, являющегося телом подпрограммы. За-

головок процедуры состоит из ключевого слова procedure, за ко-

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

чень параметров и точка с запятой. Заголовок функции состоит из

ключевого слова function, за которым следует заключенный в

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

ление типа результата функции и точка с запятой. Если перечень

параметров под программы пустой, то он опускается вместе со

скобками.

Необходимо, чтобы при выполнении функции был выполнен опе-

ратор присваивания, в котором слева от оператора присваивания

.

находится имя функции, а справа выражение, соответствующее типу

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

Синтаксис

описание-подпрограммы:

описание-процедуры

описание-функции

описание-процедуры:

procedure имя-процедуры (перечень-параметров);

procedure имя-процедуры;

описание-функции:

function имя-процедуры (перечень-параметров):

тип-результата;

function имя-процедуры: тип-результата;

имя-процедуры:

идентификатор

тип-результата:

идентификатор-простого-типа

идентификатор-простого-типа:

идентификатор

Элементы перечня параметров подпрограммы разделяются точ-

кой с запятой. Каждый элемент перечня содержит список идентифи-

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

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

При обращении к подпрограмме происходит согласование фор-

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

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

личеству формальных параметров. Значения параметров передаются

в порядке появления их в заголовке подпрограммы и в обращении к

ней.

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

.

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

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

которой в момент её выполнения (для данного вызова подпрограм-

мы) присвоено значение фактического параметра. В втором случае

формальный параметр как бы замещает фактический. Для использо-

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

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

слово var&

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

и фактического параметров, когда последний представляет собой

имя подпрограммы. Одно из ограничений языка Паскаль по отноше-

нию к стандартному Паскалю состоит в том, что такого рода связь

отсутствует.

Синтаксис

элемент-перечня-параметров:

список-имён-параметров: обозначение-типа

var список-имён-параметров: обозначение-типа

var список-имен-параметров

обозначение-типа:

идентификатор-типа

идентификатор-типа:

идентификатор

имя-параметра:

идентификатор

И в заключении отмечу, что Berkeley Pascal имеет в отличие

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

(argc:integer; возвращает число аргументов в командной строке;

Random(0..1):real; датчик случайных чисел;

argv(integer,string); получение аргумента командной строки по

номеру и т.д.), что значительно облегчает разработку программ и

возможности этого языка.

Похожие работы: