[an error occurred while processing this directive]
1
ВВЕДЕНИЕ
___________________________
С точки зрения машинных языков, COMAL (Комал) является современным языком. Он - потомок Паскаля и Бейсика, вобравший в себя простоту операционной среды Бейсика и силу Паскаля. Комал получил значительное развитие в последние годы и в настоящее время обладает элегантностью и структурой, которые могут соперничать с любым языком для микрокомьютеров. Комал представляет собой язык более широкого использования, обеспечивающий написание хорошо структурированных программ. Кроме того, программу или процедуру, написанную одним автором, может легко понять или использовать другой.
О руководстве.
Часть 1 данного руководства написана как введение для абсолютного новичка. Для закрепления изученного материала в конце каждой секции имеются вопросы и суммированный материал. Если читатель не может правильно ответить на значительную часть вопросов, ему дается совет прочитать соответствующие части главы.
Опытному пользователю Бейсика можно просто просмотреть суммированный материал в конце каждой секции Части 1. Специфические моменты Комала напечатаны жирным шрифтом. Часть 2 содержит много тем, которые являются новыми для пользователя Бейсика, также как и более подробные описания некоторых идей, представленных в Части 1.
Часть 3 содержит основной справочный материал для программиста, которому необходимо уточнить некоторые моменты. Все команды, утверждения, функции и операторы определены и продемонстрированы.
Следует помнить, что данное руководство прежде всего описывает Комал, и поэтому содержит мало деталей по установке ПЭВМ АГАТ и использованию операционной системы. Информацию по этим вопросам можно найти в технической документации и руководстве по программированию на Бейсике в среде ОС ОНИКС.
*****************************************************************
ЧАСТЬ 1 - для абсолютного новичка
*****************************************************************
5
1 Изучение нового языка.
_________________________
При изучении нового языка необходимо иметь ввиду три требования.
Словарь: новые названия для довольно знакомых вещей. Компьютер имеет ограниченный словарь, состоящий из так называемых "ключевых слов".
Грамматика: способы соединения слов для подачи понятных утверждений и команд. Грамматика комьютера известна как "синтаксис" языка.
Идеи: что-либо выражаемое новым языком. Идеи исходят от нас, но на них могут влиять наши способности в использовании словаря и грамматики.
*****************************************************************
6
2 Клавиатура.
_____________
В этой секции мы научимся пользоваться клавиатурой и ключевым словом PRINT (печать).
2.1 Включение.
Подсоедините компьтер к сети и включите его (если не уверены - посмотрите "Справочник"). Вставьте диск с СП КОМАЛ в дисковод. Через некоторое время на экране должна появиться надпись, приведенная ниже.
OS ON/X (c) 1990 by Wlad Shevkunov
COMAL
]
На экране имеется символ "]". Он называется "подсказка" и означает, что компьютер ждет от вас действий. Рядом с подсказкой видна короткая мигающая черточка, которая называется "курсор".
Подсказка и курсор показывают, что комьютер ждет указаний.
Печатая на клавиатуре вы никаким образом не повредите компьютер. Не беспокойтесь, если при печатании вы сделали ошибку: она исправляется просто.
Клавиатура аналогична клавиатуре пишущей машинки, только имеет некоторые дополнительные клавиши. Найдите клавишу внизу справа с выгравированной точкой - это клавиша "УДАЛИТЬ". Если вы сделали печатную ошибку, нажмите эту клавишу, чтобы исправить ее.
А сейчас найдите клавишу G (около средины клавиатуры) и легко нажмите ее несколько раз. Заметьте как буква появляется на экране, а рядом всегда передвигается курсор.
>GGGG_
*****************************************************************
7
Найдите клавишу УДАЛИТЬ и легко нажмите ее, чтобы убрать одно G. Курсор тоже сдвинется назад.
>GGG_
Длинная немаркированная клавиша, ближайшая к вам, называется - "клавиша пробела". Нажмите ее один раз. На пишущей машинке в этом случае движется каретка, на компьтере - получается пробел.
>GGG _
Если одновременно вы удержите клавишу ПВТ нажатой в течение двух секунд, то увидите, что буквы на экране появляются автоматически пока клавиша остается нажатой. Попробуйте.
>GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG_
На машинке, когда вы доходите до конца строки, слышен звонок и каретка останавливается. На экране, если строка кончается, буквы начинают появляться на следующей строке.
Аналогичное происходит при нажатии на клавишу УДАЛИТЬ, но стирание происходит в обратном направлении. Попробуйте подержать эту клавишу.
Вы можете пользоваться клавишей УДАЛИТЬ всегда когда вам надо убрать одну или несколько букв. Ее можно нажать один раз, или держать нажатой вместе с ПВТ некоторое время, чтобы продолжить стирание.
Держите их обе нажатыми и уберите все G . Если вы удержите клавишу и после исчезновения всех G , то вы увидите, что подсказка не уничтожается.
2.2 Заглавные буквы и регистры
Способы производства ключевых слов с помощью функциональных клавиш и буквенных клавиш имеются как в Комале, так и в Бейсике. Единственные слова, не имеющие значения в Комале - это LOCAL и CHAIN.
*****************************************************************
8
На правой и левой стороне клавиатуры есть клавиши, которые нам нужны.
УПР (управляющий символ) РУС (русский шрифт) РЕГ (смена регистра) ЛАТ (латинский шрифт)
Под в правом и левом нижнем углу клавиатуры находятся два красных индикатора маркированные буквами "Р" и "L".
Нажмите РЕГ и не отпускайте ее. Если теперь вы нажмете несколько раз клавишу G, то увидите, на экране ряд маленьких g.
]gggggggggggg_
Чтобы получить русские буквы, нужно нажать на клавишу РЕГ (регистр) одним пальцем, а другим - клавишу РУС (переход в латинский шрифт производится аналогично). Попробуйте напечатать V, используя клавиши РЕГ+РУС и V:
]ggggggggggggжжж_
Это как в обычной пишущей машинке. Попытайтесь напечатать * используя клавиши РЕГ и :
]ggggggggggggжжж****_
Уберите все буквы, которые вы написали. На экране останется только подсказка ]_.
*****************************************************************
9
2.3
Вход в Комал
Вставьте диск с Комалом в дисковод и включите ПЭВМ АГАТ. Слово COMAL должно появиться на экране. Оно подтверждает, что компьютер готов к работе на данном языке.
Обратите внимание на форму символа подсказки, которая является характерной чертой Комала. При каждом включении компьютера на экране появляется информация о языке, на котором компьютер готов работать. Если это не Комал напишите *COMAL и нажмите клавишу ВВОД.
Символы верхних или нижних рядов
__________________________________________________
При использовании Комала можно писать как заглавные
так и маленькие буквы
___________________________________________________
Если вы хотите пользоваться строчными буквами не нажимая РЕГ, введите команду *CAPS.
Нажмите несколько раз клавишу G.
]ggggg_
Затем - несклько раз клавишу 6.
]ggggg66666_
Буква G будет строчной, но появится и 6, которая находится на нижнем ряду. CAPS означает - заглавные. В этом случае клавиатура зафиксирована только на заглавные или строчные буквы.
Чтобы получить нижние символы на всех других клавишах, необходимо нажать на одну из клавиш РЕГ. Попробуйте написать !, который находится на клавише 1.
]ggggg66666!_
*****************************************************************
10
2.4 PRINT (печать), сложение и вычитание
_______________________________
PRINT - это ключевое слово для вывода на экран. Ключевое слово - это слово, которое формирует часть словаря компьютера. За словом PRINT необходимо остаить пробел, а затем - пункт, который нужно напечатать (вывести на экран).
_______________________________
На компьютере можно выполнять сложные вычисления, но давайте начнем с чего-нибудь простого, того, что мы можем проверить: например, сложим 2 и 2.
Нам будет нужен знак плюс, +. Для этого мы нажмем клавишу РЕГ И клавишу ;, но сначала сотрем все символы перед подсказкой.
]_
Обычный карманный калькулятор может только показывать ответы, тогда как компьютер имеет много возможностей. Чтобы вывести на экран ответ мы должны использовать ключевое слово PRINT. Когда печатаете седующую команду, не забудьте слово PRINT и пробел после слова PRINT и перед 2. Вот как это должно выглядеть:
]PRINT 2 + 2_
При этом ничего не должно случиться, т.к. компьютер не знает, дали ли вы всю задачу. Мы должны ему сказать: "Ну, а теперь ты!" Мы это делаем, нажимая клавишу ВВОД, которая находится на правой стороне клавиатуры. Нажмите клавишу ВВОД.
В последующих указаниях мы не будем показывать символ подсказки и курсор.
А сейчас напечатайте следующую команду после символа подсказки и не забудьте оставить пробел после слова PRINT.
PRINT 2 + 2 + 3
затем нажмите клавишу ВВОД.
Будьте внимательны в отношении цифры нуль, 0 и буквы о. Нуль расположен рядом с 9 и пересечен линией, чтобы его можно было отличать от буквы о.
Напечатайте
PRINT 10 + 10 и нажмите на клавишу ВВОД.
*****************************************************************
11
2.5 Синтаксическая ошибки
Если вы напечатаете букву О там, где вы собирались напечатать нуль, компьтер выдаст информацию об ошибкe. Напечатайте такую же команду с неправильной информацией, используя букву О вместо цифры нуль и нажмите клавишу ВВОД.
Результат будет:
Syntax error
PRINT 1о + 1о
_____________________________________________________
Синтаксическая ошибка происходит, когда компьютер не может понять вашу команду.
_____________________________________________________
Если вы сделаете ошибку в вашей команде, вы увидете, что команда перепечатана компьютером и на ошибку указывает стрелка. Сейчас Можно вводить правильную команду.
Чтобы компьютер произвел вычитание, необходимо использовать знак минус -, который расположен рядом с клавишей 0 на верхнем ряду. Не спутайте этот знак с более длинной чертой _, которая находится рядом с правой клавишей РЕГ. Этот символ используется для подчеркивания, а не для вычитания.
Напечатайте:
PRINT 56 - 45 и нажмите на клавишу ВВОД,
затем
PRINT 56 - 45 - 2 и нажмите ВВОД.
Если произошла синтаксическая ошибка, вы уверены, что был использован нужный символ?
2.6 Ввод
Чтобы не говорить вам после каждого указания:"Нажмите клавишу ВВОД.", мы будем использовать слово "ввод", которое означает: напечатайте указание и нажмите клавишу ВВОД. Если вы забудете нажать клавишу ВВОД произойдет неудобная пауза, во время которой вы будете смотреть на компьютер и думать почему ничего не происходит.
2.7 Еще немного арифметики
Умножение и деление
Найдите в правой стороне клавиатуры клавишу с символами : и *.
*****************************************************************
1
Компьютер пытается выполнить указание PRINT. Но не может совладать со знаком ":", потому что этот знак не является числом, переменной или чем-либо еще позволенным.
Syntax error
PRINT :=7
^
------------------------------------------------------
Стрелка указывает на позицию, где, как понял компьютер, находится ошибка. Хотя это может быть и неточная позиция ошибки.
------------------------------------------------------
Попытайтесь опустить закрывающие кавычки сообщения.
Введите
PRINT "Testing
Стрелка указывает на первые кавычки, хотя отсутствуют закрывающие. То же самое может получиться, если опустить скобку.
Введите
PRINT (3 + 4 * (5 - 2)
Стрелка будет показывать на первую скобку. Это происходит, потому что компьютер не может знать, где мы хотели поставить закрывающую скобку.
Приемлимые слова
---------------------------------------------------
За исключением ключевых слов, любые слова или комбинации букв могут быть использованы как переменные, но при условии, что они начинаются с буквы.
---------------------------------------------------
Любое из следующих слов и сочетаний символов может быть полноценной переменной: superman, k9, rocky1, rocky2, rocky3, r2d2, с3ро. Сочетания, начинающиеся с цифр, не могут быть использованы как переменные: 3d, 2001, 9lives.
После каждого имени переменной неплохо оставлять пробел, чтобы отделить переменную от всего, что за ней следует и сделать команду более читаемой.
---------------------------------------------------
Хотя мы не можем использовать ключевые слова как переменные, мы можем использовать названия переменных, содержащие ключевые слова.
---------------------------------------------------
Например
PRINTER :=2
SPRINT :=99
*****************************************************************
22
Это дает нам большие возможности , используя названия переменных, описывать то, что означают числа.
Например, price, cost, amount, (цена, стоимость, количество)
---------------------------------------------------
Если мы хотим, чтобы переменную легко было узнавать, нужно после переменной печатать пробел.
---------------------------------------------------
Введите
NUMBER := 42
а затем введите неправильную команду без пробела после слова PRINT.
PRINTNUMBER
Сообщение об ошибке будет выглядеть следующим образом:
Not found (не найдено)
EXAC PRINTNUMBER
^
->
EXAC - это команда, которую мы еще не встречали. Эта команда предусмотрена для выполнения процедур. (Процедуры описываются в последующих секциях.)
Если вы получите такое сообщение, вернитесь, проверьте синтаксисвашей команды и введите ее еще раз, но с пробелом.
Введите PRINT и number с пробелом между ними
PRINT number
и все должно быть хорошо.
Более длинные переменные
Есть еще один символ, который мы можем использовать как часть имен переменной. Это символ подчеркивания "_". Этот символ длиннее знака минус "-".
---------------------------------------------------
Символ подчеркивания используется для создания более длинных имен переменных, состоящих из нескольких слов.
number_on_dice := 6 или moves_made := 23
---------------------------------------------------
Если мы напечатаем пробел вместо _ , то компьютер посчитает, что он дошел до конца переменной, когда он дошел до пробела и не будет знать, что делать с остальными буквами.
*****************************************************************
23
Попытайтесь ввести
number on dice := 6
затем введите
number_on_dice :=6
3.7 Маленькие и большие
Так как в нашем распоряжении имеется мощный копьютер, мы можем делать на нем сложные вычисления. Используются ли знаки при вычислениях с большими числами?
----------------------------------------------------
При вводе чисел запятые не используются. Например: не ставьте запятых в таких числах, как 1000 или 1000000.
----------------------------------------------------
Введите
PRINT 1000 * 1000
затем
million := 1000000
и
PRINT million * million
Результат - удивительный, так же как и способ компьютера показывать очень большие числа. 1Е12 означает:
1 на 10^12 или 1 на 1000000000000
Очень большие числа можно писать компактно, используя этот метод, но обычно мы его не встречаем.
---------------------------------------------------
5.39Е15 означает 5.39 на 10^15 или 5390000000000000.
----------------------------------------------------
Ну, а маленькие числа?
Введите
PRINT 1 / million
Результат дается в том же формате.
1Е-6 означает 1 разделить на 10^6 или 0.000001
----------------------------------------------------
5.34Е-8 означает 5.34 разделить на 10^8 или 0.0000000534.
----------------------------------------------------
*****************************************************************
24
3.8 Точность
Числа печатаются в Комале с точность до девятого знака. Числа можно хранить в памяти так же, как мы только что видели: как две части - число от 1 до 10 со степенью 10.
Если результат вычисления не очень большой и не очень маленький, он выводится в обычном виде.
3.9 Целые числа и действительные
Если мы знаем, что мы используем только целые числа, такие как дни месяца, мы можем сэкономить немного памяти компьютера, храня их в другом формате, в котором они всегда будут восприниматься как целые числа.
Чтобы обозначить целое число, необходимо использовать определенный символ. В Комале мы используем символ # , который находится на клавише 3. Символ # обычно читается "решетка" и ставится после названия переменной без пробела.
----------------------------------------------------
Переменная целого числа маркеруется знаком # в конце названия.
----------------------------------------------------
Слово "действительное" используется для обозначения чисел, которые могут иметь дробные части.
Целые и действительные числа могут быть положительными, отрицательными или нулем.
Введите
five# := 5
Введите PRINT five#
затем
PRINT five# / 2
Результат такой же, если бы использовалась еще какая-то переменная. Различие происходит, если вы попытаетесь присвоить десятичное значение целому числу.
Введите
five# :=5.899
и
PRINT five#
*****************************************************************
25
Часть после десятичной точки убирается и five# берет только целую часть числа. Этот процесс называется "усечение, отбрасывание".
Введите
ten# :=10
затем
PRINT ten# / 3
что дает число из 9 цифр
Введите
number# := ten# / 3
и
PRINT number#
--------------------------------------------------
Если нецелое число присваивается целой переменной, то берется только целая часть.
Целые переменные занимают меньше памяти, чем действительные.
--------------------------------------------------
Резидентные целые переменные
Введите
PRINT a#
Для нас выводится число, хотя мы и не присвоили ему имя а#. Целые переменные от а# до z# всегда находятся в компьютере, резидентны. При желании мы можем присвоить им величины.
3.10 Функции
Мы встретим много функций. Функция ицпользует одну или несколько величин, называемых "аргументами, для вычисления другой вличины. Мы всегда будем использовать слово return (возврат) для процесса получения величины из функции.
3.11 INT
INT - это пример функции.
Введите
number = 5.678
и
PRINT int(number)
*****************************************************************
26
number - это аргумент и число 5 возвращено
Введите
PRINT int(-number)
затем
PRINT int (number*10)
ЧИсло в скобках, аргумент, вычислется первым и если он не целый, тогда целое число, которое находится прямо под ним возвращается.
-------------------------------------------------
INT (number - число) - это функция, которое возвращает целое внизу или число, равное величине аргумента.
-------------------------------------------------
3.12 Системные функции и FREE (свободная)
Системная функция не нуждается в аргументе. Она возвращает величину, которая зависит от состояния памяти компьютера. Например, По мере того, как мы вводим все новые переменные, мы занимаем все больше памяти компьютера. Мы можем узнать сколько осталось памяти при помощи ввода специальной команды.
PRINT free
FREE (свободная) - это системная функция, но мы не можем присваивать ей величины. Мы не можем дать нашему компьютеру немного памяти, используя FREE. Если мы присваиваем новую переменную, мы должны видеть, что FREE доет нам другую величину.
Введите
d := 123456789
и
PRINT free
-------------------------------------------------
FREE - это системная функция, которая возвращает остающийся объем имеющейся памяти.
-------------------------------------------------
3.13 PI (пи)
PI- это постоянная, которая используется в математических вычислениях, например при вычислении площади круга, или объема шара. Она обычно обозначается греческим символом п. Чтобы узнать какое значение дано PI, ведите
*****************************************************************
27
PRINT pi
PI имеет постоянную величину и ей всегда можно ползоваться, если есть необходимость. Это не переменная, и ее невозможно присвоить. Компьтер имеет эту величину точностью до десятой цифры. Обычно он печатает величину с точностью до девятой цифры.
Введите
radius :=7
circumference :=2 * pi * radius
PRINT "Circumference of circul is ";circumference
и
area :=pi * radius * radius
PRINT "Area of circul is ";area
затем
volume := 4/3 *pi * radius Ч 3
PRINT "Volume of spere is ";volume
--------------------------------------------------
PI - это постоянная, равная 3.141592653.
-------------------------------------------------
3.14 Итоговые упражнения.
Сейчас попытайтесь ответить на следующие вопросы, которые помогут вам увидеть усвоили ли вы материал этой главы. Запишите ваши ответы и сверьте их с данными в главе 43.
1. Которые из следующих сочетаний не могут быть именами переменных?
U, U2, 2U, ACCOUNT_NUMBER, TAX RAID, PRINT, FREE, PINT
2. Которое число из следующих представляет 9000000000?
1Е9, 1Е10, 9Е9, 9Е10?
3. Которое число из следующих представляет 0.00876?
8.76Е-2, 8.76Е-3, 8.76Е-4, 8.76Е-5
4. Если мы имеем OUT := 3, то какое из следующих ыражений даст на экране 3?
PRINTout, PRINT out, PRINTout, PRINT out, pritOUT
5. Если lower := 3, то какова величина LOWER?
Если number# := 9, то какова величина number#/2?
7. Какова величина int(7/2)?
8. Какова величина int(pi)?
3.15 Выводы.
1. Не имеет значения печатаете ли вы название переменной буквами верхнего или нижнего ряда. Между six :=6 и SIX :=6 нет никакого различия.
2. Названия переменных не могут начинаться цифрой, с другой стороны, они могут быть любой длины и могут содержать цифры.
3. Символ подчеркивания _ может использываться в имени переменной, напр. PRICE_OF_FISH (но не на первой позиции).
4. Имена переменных могут содержать в себе ключевые слова, но только внутри.
5. После ключвого слова необходимо печататаь пробел, чтобы компьютеру было ясно, что переменная не используется.
6. Присваиваемая переменная должн быть слева от :=
7. Нельзя использовать запятые при вводе чисел.
8. 7.5Е9 означает 7 умноженное на 10Ч0, т.е. 750000000
7.5Е-9 означает 7.5 деленное на 10Ч9, т.е. 0.0000000075
9. Целые переменные обозначаются знаком #.
10. FREE - системная функция, кооторая показывает величину объема имеющейся свободной памяти компьютера.
11. INT (х) возвращает целое, которое ниже или равно х.
12. Целые переменные от а# до z# всегда находятся в компьютере, даже если они и не были присвоены.
13. PI - системная функцияя, которая возвращает величину 3.141592653.
*****************************************************************
29
4 Строки и CLEAR
___________________
В этой секции мы узнаем о строках символов и как с ними обращаться, а также как ползоваться ключевыми словами LEN, IN, и CLEAR.
4.1 Строки символов
Комал может работать с наборами букв и символов также просто, как и с цифрами. Когда используется набор символов, он известен как "строка" и может содержать цифры и знаки припенания.
Чтобы указать, что символы принадлежат строке, используют знак S, который помещают в конце имени переменной (также как и # после целой переменной).
Знак ¤ - символ верхнего ряда клавиши 4. Примеры: letter¤, reply2¤, day_of_week¤.
Символы, которые мы присваиваем цепочке берутся в кавычки. Используя символ подчеркивания и кавычки, введите
any_old¤ := "ABCDEFG"
Кавычки необходимы для обозначения начала и конца строки. Мы можем прочитать присваивание как: any old string becomes quote ABCDEFG unquote (любая старая строка становится кавычка ABCDEFG кавычка)
Введите
PRINT any_old¤
Если мы хотим, мы можем изменить содержение строки.
Введите
any_old¤ := "xyz123*"
и
PRINT any_old¤
Т.к. мы можем менять символы внутри строки, она известна, как строчная переменная. Ее название должно подчинятся тем же правилам, что и числовых переменных.
*****************************************************************
30
Она может содержать ключевое слово как часть имени. Например, PRINTout¤ - приемлема, а PRINT¤ - нет.
--------------------------------------------------
Строчная переменная обозначается символом ¤ в конце названия переменной. Цепочке можно присвоить набор символов с помощью кавычек.
--------------------------------------------------
Верхний и нижний ряд
Использованы ли буквы верхнего ряда или нижнего внутри кавычек - имеет большое значение. Они отличаются и их выделяют как элементы строки.
4.2 Какова длина строки?
На этот вопрос легко ответить, если использовать новое ключевое слово, которое является абревиатурой слова LENGTH (длина).
Введите
this¤ := "pqrst"
и
PRINT LEN(this¤)
Мы должны получить величину 5. Нетрудно догадаться, что LEN( ) обозначает длину ( сокращенное LENGTH (длина)).
----------------------------------------------------
LEN(а¤) - функция, которая возвращает количество символов в а¤.
---------------------------------------------------
Что случится, если внутри цепочки мы оставим пробелы?
Введите
try¤ = "1 2 3 4 5 "
и
PRINT len(try¤)
---------------------------------------------------
Пробел в цепочке считается символом, как любая буква или цифра.
---------------------------------------------------
Нулевая цепочка
В следующей линии две кавычки помещены рядом, без какого-либо пространства между ними.
.сс
[an error occurred while processing this directive]