Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Урок'
Наша жизнь не стоит на месте – она стремительно развивается, набирает новые обороты, идёт вперёд семимильными шагами, внося свои коррективы в различн...полностью>>
'Документ'
Реквизиты для перечисления налога на доходы физических лиц, уплачиваемого иностранными гражданами в виде фиксированного авансового платежа при осущес...полностью>>
'Автореферат'
Защита состоится 28 октября 2010 г. в 10.00 на заседании диссертационного совета Д 212.301.01 при ФГОУ ВПО «Чувашский государственный университет име...полностью>>
'Примерная программа'
Председатель Учебно-методического объединения по образованию в области «зоотехнии» и «ветеринарии», ректор ФГОУ ВПО МГАВМиБ, академик РАСХН, профессо...полностью>>

Ваша первая программа на Паскале

Главная > Программа
Сохрани ссылку в одной из сетей:

Паскаль - это один из самых простых языков, но далеко не один из самых слабых. Изучать мы с вами будем Turbo Pascal 7.0 - так вот на нем можно написать любую программу, которая придет в голову. По возможностям он не уступает ни СИ, ни какому другому. На Паскале можно написать программную оболочку (типа Norton Commander), игрушку (типа Quake) или операционную систему (типа MS-DOS). Программы на Turbo Pascal пишутся только для платформы MS-DOS, но никак не зависят от конфигурации компьютера. Главным требованием к компьютеру является только лишь то, чтобы он был IBM PC-совместимый, что естественно, если на нем установлен MS-DOS.

Особой теории по этому языку нет, чтобы хорошо им овладеть (тем более если это ваш первый язык программирования) необходимо больше практики. Этим мы и начнем заниматься уже в этом выпуске. При этом вам понадобиться интерпритатор Turbo Pascal 7.0 фирмы Borland - я говорил где его можно достать в предыдущем выпуске. Те, кто скачал его с моего сайта (а скачало на данный момент 73 человека) или достал где-нибудь еще, уже смогут попрактиковаться.

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

Итак, поехали...

Ваша первая программа на Паскале.

Что ж, начнем с минимума. Предположим, что вам понадобилось написать программу, реализующую сложение двух чисел. Короче, надо сделать C = A + B;

Теперь по шагам определим, что необходимо для создания этой программы.

1. Нам необходимо в некоторое число C занести значение, которое будет равно сумме чисел А и В. Для таких целей в Паскале существует понятие переменной. (Это вроде икса в математике). Переменная служит для хранения какого-либо значения и имеет собственное имя. Это имя ей необходимо назначить - оно может состоять только из:

  1. латинских букв (A..Z);

  2. цифр (0..9) (!!! но не может начинаться с цифры !!!);

  3. символов подчеркивая "_";

И не может содержать:

  1. Русских букв;

  2. Любых знаков препинания, таких как точка, запятая, восклиц. знак;

  3. Специальных символов, которые находятся над цифрами на клавиатуре. Это "~", "#", "$", "%" и другие.

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

primer1; _primer; Primer; _pr_; my_name_is_Edik;

Еще уточнение - имя переменной может быть любой длины, не превышающей 250 символов. Также не учитывается регистр букв, то есть переменные с именами Primer и pRiMeR будут рассматриваться как одна.

Что у нас выходит? Что нам необходимо завести переменные С, А, В. (Не забывайте, все буквы латинские). Ясно, переменные мы заведем и назначим им имя (как мы это сделаем, смотрите ниже). Что теперь? А теперь мы подходим к понятию типа переменной.

Тип переменной определяет, что с этой переменной можно сделать, и из чего она состоит (что в ней содержится). Для каждой переменной определяется ее тип.


Зачем нам нужно определять тип переменной? Например, нам нужно, чтобы переменная содержала строку символов, к примеру "Здравствуйте!", которую мы хотим вывести на экран в качестве приветсвия. И кроме нее мы имеем переменную, содержащую число, которое мы собираемся увеличивать. Понятно, что мы не сможем сложить число со строкой, так как цифры с символами складывать невозможно. Поэтому мы определяем тип этой переменной как числовой, после чего определяем тип переменной, содержащей строку как строковой. Тогда Паскаль будет знать, что с какой переменной можно сделать, и при произведении каких-либо действий с переменными определять их тип, после чего либо производить действия, либо нет, если их произвести невозможно.

В общем, я сказал, что у каждой переменной есть свой тип. Но как его назначить? Для этого существуют разные обозначения. Например, тип "число" обозначается как Integer, что по-английски означает "число". Зная это, мы в программе указываем, что переменная у нас типа Integer и можем ее складывать с другими, вычитать или умножать. (О других типах я расскажу позже).

2. Итак, с типами переменных мы определились и теперь возвращаемся к нашей с вами программе. Что у нас там? Мы собираемся прибавить к переменной A переменную B и поместить результат в переменную С.

Так как я сказал, что складывать можно только переменные типа Integer, то нам необходимо определить тип всех трех переменных как Integer. Сделав это, мы получим возможность манипулировать ими как числами.

Исходя из всего этого напишем программу, в которой реализуем следующие шаги:

  1. Напишем название программы;

  2. Заведем переменные, т.е. A, B, C; и зададим им тип;

  3. Выполним сложение и пометим результат в С;

Программа будет выглядеть следующим образом:

Program First;

var

A, B, C: Integer;

begin

C := A + B;

end.

Теперь разберем эту программу по строкам:

  1. Program First; - это заголовок программы. Совсем необязательный, программисты просто пишут его для того, чтобы как-то озаглавить программу. Его хорошо использовать для маркировки, т.е. чтобы по нему определять, что это за программа. Всегда находится в первой строчке программы, если его разместить где-нибудь в другом месте, то это вызовет ошибку.

  2. var
    A, B, C: Integer;
    var
    - Это и есть раздел описания переменных. Выше я говорил, что надо заводить необходимые переменные и придавать им определенный тип. Вот здесь это и реализуется. После служебного слова var, сообщающего Паскалю, что начался раздел объявления переменных, надо расставить все переменные, и через двоеточие указать их тип. Я говорил, что числа указываются словом Integer. Вот мы и написали: A,B,C: Integer;

  3. begin - это служебное слово означает, что начался раздел действий. Именно после него программа начинает свое выполнение. По-английски "begin" - значит "начало". Когда Паскаль встречает это слово, он начинает выполнение программы. У слова begin есть завершающая пара - end. Его вы можете увидеть в самом конце программы. Это слово совершенно противоположное по значению - то есть оно означает, что выполнение программы закончилось. Именно пара begin - end. и есть главной в программе, между ней находятся все действия.

  4. C := A + B; Это и есть то, что нам необходимо было сделать. Здесь все ясно, но думаю синтаксис этого выражения требует пояснений. Но это все далее, смотрите...

Синтаксис выражений.

Самое главное правило - после каждой команды или выражения ставится точка с запятой - ";" Посмотрите на программу - каждая строка имеет свое завершение этим знаком. Исключение составляют только слова var и begin - это служебные слова, которые не являются процедурами или функциями. Они определяют начало какого-либо раздела программы, в частности var - начало раздела объявления переменных, а begin - раздела выполнения. Кроме этих служебных слов есть и другие, которые оглавляют разделы, например начало раздела констант, но об этом позже. Завершение имеет только раздел begin словом end, после которого ставиться точка. Точка означает конец программы, ее завершение и полную остановку выполнения.

Кроме того, присваивание в Паскале обозначается знаком ":="; Именно двоеточие и равно, а не просто равно. То есть, если мы хотим присвоить какой-либо переменной значение, то мы пишет эту переменную, ставим ":=" и пишем новое ее значение. Вот вам еще примеры присваиваний, как дополнение к программе:

C := 15;

A := 15 + 3;

A := A + C + 3 - 12;

Отсюда имеет несколько правил синтаксиса, которые сведем в список:

  1. После выражений ставиться ";"

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

  3. Присваивание значения переменной обозначается знаком ":="

Тестирование программы.

Теперь вернемся к программе. Запустите Turbo Pascal и напечатайте ее, соблюдая все знаки и порядок строк. После того, как вы ее напечатали, надо попробовать ее запустить. Это реализуется нажатием клавиш Ctrl+F9. Если вы все правильно набрали, то окно редактора чуть-чуть мигнет (или нет, если у вас быстрый компьютер и вы просто не успеваете этого заметить).

Если вы в чем-то ошиблись, то Паскаль не выполнит программу, а остановится, переместив курсор в строку, где совершена ошибка, и написав, что конкретно за ошибка произошла. К примеру, таким сообщением может быть:

Error 85: ";" expected.

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

Что теперь?

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

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

  2. Усвоить основные правила синтаксиса (";", :=, begin-end, var и т.д.);

  3. Понять, что необхоимо заводить переменные и как это делать;

  4. Понять, что такое тип переменной, как ее сделать числом и зачем это нужно;

  5. Обратить внимание на то, как мы запустили программу (Ctrl+F9); (Далее я буду подробнее рассказывать о таких клавишах)

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

Использование программы Turbo Pascal 7.0

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

Представим, что мы начали писать в окне ввода программу, которую не закончили, и хотим дописать после. Что надо сделать? Сохранить ее на диске, а после загрузить обратно в редактор.

Итак, запускаем Паскаль и набираем что-нибудь в онке редактора. Далее - сохраняем программу. Для этого:

  1. Нажимаем F10 и переходим в меню.

  2. Выбираем меню File, а далее - Save - открывается окно сохранения файла.

  3. Выбираем имя для файла и вводим его в строку ввода.

  4. Нажимаем Enter и файл сохраняется.

Теперь можно выйти из программы.

Как загрузить файл обратно в Паскаль? Программы на Паскале всегда имеют расширение .pas. Зная это, мы всегда будем безошибочно отличать их от других файлов.

Открываем файл в Паскале:

  1. Запускаем Turbo Pascal и нажимаем F10.

  2. Выбираем меню File, после Open. Появляется окно открытия файла.

  3. Вводим имя файла в строку ввода или выбираем его из списка.

  4. Нажимаем Enter и Паскаль открывает окно редактора с текстом программы, сохраненной на диске.

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

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

Проверка на ошибки - "компиляция".

Имея в окне редактора текст программы, можно проверить его на ошибки - такие как ошибки синтаксиса (забыли поставить ";"), ошибки в служебных словах (написали не begin, a bigin) и другие.

Для того, чтобы это сделать, необходимо нажать клавиши Alt-F9: нажать Alt и удерживая его нажать F9.

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

"Compile successfull: Press any key"

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

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

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

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

Как это сделать - запустить программу? Читайте...

Запуск программы - "выполнение".

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

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

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

Вот и все, что необходимо знать о запуске программ на Паскале!

В конце раздела сделаю уточнения, что вам надо уметь делать для успешного программирования в среде Turbo Pascal 7.0:

  1. Сохранять программы на диск (F10 - File >> Save)

  2. Загружать программы с диска (F10 - File >> Open)

  3. Компилировать программы, контролируя отсутсвие ошибок (Alt-F9)

  4. Запускать программу (Ctrl-F9)

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

Программирование на Паскале

В прошлый раз мы написали программу, которая складывала переменные. Для того, чтобы завести переменные мы выбрали тип Integer, который обозначает целое число. На самом деле этих типов много, они используются для того, чтобы обеспечить совместимость переменных (строки не складывать с числами, например). Ну ладно, строки и числа. Что еще надо? Тут можно подумать, что этих двух типов совершенно достаточно. Число оно и останется числом, строка останется строкой. Но на самом деле эти два главных типа имеют много похожих, (Integer в частности). Вот их я и хочу рассмотреть.

Чтож, начну с чисел. Смотрите, есть у нас переменная-число, о которой мы точно знаем, что в программе она не будет больше 200 и не будет отрицательной. (Например, стоимость доллара в рублях). Если мы заведем эту переменную как тип Integer, то она станет числом, но может принимать значения от -35000 до 35000. Больше она быть не может. Но мы знаем, что наша переменная никогда не будет таких размеров и не будет отрицательной. И самое здесь главное - переменная типа Integer занимает больше оперативной памяти, чем нам требуется. Значит, заводя такую переменную мы теряем память и делаем ненужные действия.

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

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

Для нашей переменной подойдет тип, называемый Byte.

Он способен хранить только положительные, только целые числа, с промежутком от 0 до 255. Он нам очень подходит! Разве нет?

Давайте теперь запишем нашу переменную (просто для примера), назовем ее, скажем, Dollar_kurs; Пишем, помня синтаксис и раздел написания переменных.

var

Moskow: LongInt;

Вот и все. Новый тип, самый подходящий для маленьких чисел.

Дальше - а если, наоборот, мы знаем, что переменная может быть более 35000? Если она может дойти до 15 000 000? Например, количество людей в Москве? В Integer такое число уже не влезет, при попытке присвоения такого значения значение переменной будет окончательно испорчено. Для таких переменных тоже существует свой тип - LongInt; (Это от английского Long Integer - длинное число).

Запишем такую переменную:

var

Moskow: LongInt;

А как же быть с дробными числами? Например, мы хотим иметь переменную со значением 37,123. Типы LongInt, Integer, Byte служат для хранения только целых чисел. Для хранения дробных чисел служат другая группа типов, которых тоже несколько по тем же причинам (для выбора подходящего размера). Но пока мы не будем обращать внимание на эти типы, так как они еще нам не понадобятся. А теперь сведем все типы, которые могут хранить целые числа в таблицу (здесь есть также некоторые другие, о которых я не говорил - но тут уже все понятно):

Целые типы

Обозначение типа

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

ShortInt

-128 до 127

Integer

-32768 до 32768

LongInt

-2147483648 до 2147483647

Byte

0 до 125

Word

0 до 65536

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

Пишем программу

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

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

У программистов существует такое негласное правило - чтобы продемонстрировать новый язык программирования, необходимо написать на нем программу, выводящую "Hello, world!", что значит "Привет, мир!". Это забавное правило придумано для того, чтобы показать хоть что-нибудь на языке, не знакомом пользователю. Я возьму это правило на вооружение и применю для того, чтобы продемонстрировать как можно вывести данные на экран.

Итак, пишем программу, выводящую строку "Hello, world!"

Ее текст будет выглядеть так:

Program Hello_world;

begin

Write('Hello, world!');

Readln;

end.

Откройте Turbo Pascal и введите эту программу. Далее - нажатием клавиш Ctrl-F9 запустите ее. Если у вас показало ошибки, исправьте их - введите программу в точности так, как я показал на примере.

Если же программа запустилась, то она выведет вам строку Hello, world!, после чего остановиться и будет ждать дальнейших действий. При нажатии клавиши Enter она завершит работу.

Итак, разберем эту программу по частям:

  1. Program Hello_world; - как обычно, заголовок программы.

  2. begin - начало текста программы. Заметьте, мы не используем переменных, поэтому раздел var отсутствует.

  3. Write('Hello, world!'); - Это строка и выводит Hello, world!. Как же это реализуется? Здесь я познакомлю вас с первой процедурой.

Процедура Write. (Write - по-английски "писать").

Эта процедура выводит на экран какие-либо данные. Она может выводить три основные вещи:

  1. Строку символов;

  2. Переменную;

  3. Результат вычислений;

Разберем, как это делается:

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

Чтобы вывести строку (как в нашем случае) - необходимо ее заключить в одинарные кавычки - ' . Пример:

Write('Это строка');

Между символами кавычек могут быть абсолютно любые символы. Если нам надо вывести сам символ кавычек, то мы его удваиваем:

Write('Здесь напечатается один символ кавычек - '' .');

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

Write('Значение переменной Name: ', Name);

Вот пример непосредственных вычислений прямо в скобках:

Write('5+12 равно: ', 5+12);

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

Write('Значение переменной Name: ', Name, ' Name+5 = ', Name+5);

Итак, мы разобрались с процедурой Write. Разбираем программу далее.

Следующая строка - Readln;.

4.Readln; - это процедура чтения с клавиатуры. Разберем эту процедуру:

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

Readln(A);

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

Итак, мы разобрали эту программу - научились читать данные и выводить их на экран. Что теперь? А теперь давайте модифицируем программу, написанную в прошлом выпуске с учетом полученных знаний. Что мы будем делать?

  1. Заведем три переменных - A,B,C;

  2. Предложим пользователю ввести по порядку две переменных - А и В;

  3. Сложим их и поместим результат сложения в переменную С;

  4. Выведем переменную С на экран;

  5. Чтобы пользователь увидел ввод, затормозим программу, ожидая нажатия Enter.

Итак, пишем программу:

Program Primer2;

var

A,B,C: Integer;

begin

Write('Введите А: ');

Readln(A);

Write('Введите B: ');

Readln(B);

C := A + B;

Write('A+B = ', C);

Readln;

end.

Откройте Паскаль и введите эту программу. Запустите ее на выполнение клавишами Ctrl-F9. Если возникли ошибки, проверьте правильность текста, сверьтесь с примером.

Что вы видите? Программа теперь реагирует на ввод, производит с введенными данными какие-нибудь действия и выводит ответ на них.

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



Скачать документ

Похожие документы:

  1. Пример настоящей программы для компьютера на языке Лого 16 > Последовательность работы программиста на компьютере 17 > Основные приемы программирования 18 Глава. 2 Устройство и работа компьютера 21

    Документ
    Хочу выразить искреннюю признательность Алексею Михайловичу Епанешникову, внимательно прочитавшему рукопись и сделашему по ее содержанию больше сотни замечаний и нашедшему множество ошибок, одну из которых мне не хочется вспоминать.
  2. Циклические программы. Структурированный тип данных. Структура сложной программы на языке Турбо-Паскаль. Процедуры и функции. Простейшие графические возможности языка Турбо-Паскаль

    Документ
    Один из самых популярных языков программирования высокого уровня - язык Паскаль (англ. Philips Automatic Sequence Calculator) был разработан швейцарским ученым Никлаусом Виртом в 1969 году как учебный язык, но спустя некоторое время
  3. Основы Pascal. Типы данных. Структура программы на языке Pascal

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

    Документ
    с выделенным цветом первым пунктом. Смена выбранного пункта (продвижение по пунктам) производится при помощи клавиши пробел. Нажатием на клавишу Enter закрывается подменю.
  5. Машинная программа. 9 Классификация вычислительных устройств. 11 Основные устройства компьютера, его архитектура. 13

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

Другие похожие документы..