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


Алфавит

          Нет, алфавит заново мы учить не будем. Поговорим о том, какие символы распознают бейсик и паскаль. В принципе, они могут распознавать все символы, но не все будут понятны компиляторам. Итак, символы, которые они распознают:
  • Большие и маленькие (заглавные и прописные) буквы латинского алфавита: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z. В бейсике все операторы пишутся заглавными буквами, хотя, нет нужды следить за этим, он автоматически заменяет прописные буквы на заглавные. Например, если в мы напишем pRInt или pRiNt или ещё как-нибудь, то бейсик заменит это на PRINT. В паскале операторы можно писать как угодно, но все привыкли писать или маленькими буквами или просто с большой буквы. Например, write или Readln.
  • Арабские (то есть, обычные) цифры: 1, 2, 3, 4, 5, 6, 7, 8, 9, 0.
  • Разделители: , (запятая), ; (точка с запятой), . (точка), : (двоеточие), ' (апостроф), " (кавычки), ( и ) (открывающая и закрывающая скобки), символ Пробел.
  • Знаки арифметических операций: + (сложение), - (вычитание), * (умножение), / (деление. В бейсике также \ - деление без остатка), ^ (возведение в степень - только в бейсике).
  • Знаки операций отношений: > (больше), < (меньше), = (равно), >= (больше или равно), <= (меньше или равно).

!

В паскале каждое описание переменной и описание констант заканчивается знаком ";" (точка с запятой). Каждый оператор в теле программы также должен заканчиваться точкой с запятой, если только за ним сразу не следуют зарезервированные слова END, ELSE, UNTIL и др. После зарезервированных слов THEN, ELSE, VAR, CONST, BEGIN разделитель (;) никогда не ставится.
Вверх

Переменные

          Как и все люди, компьютер обладает памятью. Она бывает разная. В процессе отладки программы, компьютер как бы напрягает эту самую память, размещая в ней исходные данные, обрабатывая их, используя Ваш алгоритм, получая результаты и доводя их до Вашего сведения - чаще на экран монитора. Думаю, ни для кого не секрет, что эта память называется ОЗУ (Оперативное Запоминающее Устройство), или по-английски RAM (Random Access Memory). Это по сути основное устройство компьютера, имеющее ограниченный объём, измеряющийся в Мегабайтах. Почти во всех программах используются переменные. Трудно даже представить программу без хотя бы одной переменной. И то - одной будет мало. Так вот, переменная - это область оперативной памяти, которое имеет данное нами имя и значение, которое может меняться. Имя переменной постоянное всегда в ходе выполнения программы, а вот значение может меняться неоднократно.

          Каковы же правила написания имён переменных в бейсике и паскале? На самом деле, эти правила одинаковы для всех языков.

  • имя переменной должно состоять не более чем из сорока символов;
  • в качестве символов в имени переменной могут быть использованы только буквы латинского алфавита (заглавные или строчные считаются одной буквой, хотя символы разные) и цифры;
  • имя переменной не может начинаться с цифры;
  • категорически заперщены в именах переменных разделители (точки, запятые и др.), знаки арифметических отношений и операций отношений, также другие знаки (?,!,@ и др.), знак пробела.
Вот примеры правильных имён переменных:
  • X, Y, z, Dima, CHISLO, couNT, mIn, MAX;
  • Dima123, U2, LOVE40, a903, MoOn140Sun99Earth20;
А вот примеры неправильных имён переменных:
  • Мама24, Я, Ы3 (использованны русские буквы);
  • You+Me, Bas&Pas, Smile:) (использованы недопустимые символы);
  • 4U, 2me, 44birds, 90s (именя переменных начинаются с цифры);
  • MyIntegerThatIUseToCountMyWrongAnswersAndErrors (слишком длинное имя переменной).
          Переменные различаются по типу хранимой в них информации. Стандартные типы переменных, то есть те типы, которые чаще всего используются - это числовой (для хранения различных чисел) и строковый (также "символьный", для хранения символов и строк). Тут начинается самое интересное - отношение к переменным в бейсике и паскале совершенно разное. В бейсике можно заводить переменные по ходу программы, при чём даже не указывая их тип (стандартный тип - числовой, однако, если поставить знак $ после имени переменной, например name$ или PASSWORD$ - переменные будут строковыми). Можно конечно записывать тип переменной оператором DIM. В паскале всё по-другому. Все переменные записываются после оператора VAR. Записываются все переменные одного типа (имена разделены запятой), затем после двоеточия - тип этих переменных. Или можно записать тип переменной для каждой переменной (то есть можно записать "var x,y,z,radius:integer;", а можно "var x:integer; y:integer; z:integer; radius:integer;". Сами судите, как писать, хотя, понятное дело, что лучше группировать переменные по их типу). Итак, первое отличие бейсика и паскаля - запись переменных:

Вверх

Арифметика

          Были времена, когда считалось, что компьютер использовался только лишь для счёта в тысячи и миллионы раз быстрее человека (назывались компьютеры ЭВМ - Электро-Вычислительные Машины, а глагол compute с английского переводится как "вычислять"). О словосочетании "персональный компьютер" не могло быть и речи. Это в общем-то действительно так, ведь вся информация представляется как числа в двоичной форме и элементарные арифметические действия над ними. Отсюда вывод - дружите с математикой, если хотите стать хорошим программистом. Понятное дело - чтобы компьютер вычислил выражение, нужно написать его в понятной ему форме, а именно:
  • выражение должно быть записано в одну строку, то есть не может быть никаких числителей и знаменателей.
  • для записи арифметических действий можно использовать только следующие знаки:
    • + - сложение - слева от клавиши Backspace или на малой цифровой клавиатуре "серый плюс";
    • - - вычитание - то же, что дефис, или на малой цифровой клавиатуре "серый минус";
    • * - умножение - сочетание Shift+8 или на малой цифровой клавиатуре "серая звёздочка";
    • / - деление - на разных клавиатурах бывает в разных местах или на малой цифровой клавиатуре "серый слеш";
    • \ - деление без остатка (целое от деления - символ "\" - только в бейсике) - обычно справа от клавиши Shift;
    • ^ - возведение в степень (только в бейсике) - при выбранном латинском шрифте - сочетание клавиш Shift+6;
    • ( и ) - скобки - сочетания Shift+9 и Shift+0.
  • недопустим пропуск знака умножения между коэффициентом и переменной, как это возможно в алгебре (не 2x, а 2*x, не 45d, а 45*d);
  • дробная часть отделяется от целой не запятой, а точкой (не "3,14", а "3.14". Причём если целая часть равна нулю, то число записывается следующим образом: ".5"(0,5), ".029"(0,029), ".6034"(0,6034).);
          Чтобы компьютер правильно вычислил выражение, нужно помнить о порядке действий. Всё как в элементарной математике.
  1. действия в скобках (в бейсике скобки могут быть только круглыми, в сложных выражениях они могут быть двойными, тройными и т.д.);
  2. функции, если они есть;
  3. возведение в степень;
  4. умножение и деление;
  5. сложение и вычитание.
          Действия одинаковой очерёдности выполняются слева направо.

          Приведём ряд примеров перевода арифметических выражений в пригодный для бейсика и паскаля вид:

Алгебра
Бейсик
Паскаль
3/x
3/x
2*x^2
2*x*x
(3+9)/(x-12)
(3+9)/(x-12)

          Следует заметит, что в таких выражениях как третье в таблице, следует обращать внимание на скобки - если написать 3+9/x-12, то ответ будет неправильный (если вы имеете вииду такую дробь). Следует обуславливать числитель и знаменатель скобками.

          И ещё кое-что. Я коснусь темы целого от деления и остатка от деления. В бейсике и в паскале существует оператор MOD, который в качестве резултата деления оставляет целочисленный остаток от деления. Также есть оператор INT(только в бейсике) - выделение целой части из нецелого числа. Записывается он как INT(<нецелое число>). А в паскале оператор div - возвращение целой части от деления. Вот как это выглядит:

Бейсик
Паскаль
Результат
100 MOD 3
100 MOD 3
1
100\3 (=INT(100/3))
100 DIV 3
33

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

Вверх

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

          Допустим, Вы разработали алгоритм, придумали, какие в нём будут участвовать переменные, имена им тоже придумали. А что дальше? Как дать понять компьютеру, что этой переменной значение 140, а вот этой - -250,46 и как потом дать ему понять, что это надо умножить на 32, а то разделить на получившуюся переменную? Просто сказать ему присвоить им значения мы не можем, он этого просто не поймёт. Что делать? А для этого существует оператор присваивания. Имя переменной после присваивания будет служить для компьютера своего рода ссылкой на адрес в памяти, где её значение разместилось. Это запомнить несложно. В старых версиях бейсика был такой оператор LET, который ставился перед присваиванием. Сейчас его можно не писать, хотя он как бы есть.

!

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

Обе части оператора присваивания соединяются знаком равенства ("=" в бейсике и ":=" в паскале).

Тип переменных в левой и правой частях оператора присваивания должен совпадать!

          Когда интерпретатор языка встречает в программе оператор присваивания, то он обрабатывает его следующим образом: производятся все необходимые вычисления и операции в правой части оператора, находится конкретное значение (числовое или строковое), и это значение заносится в переменную, имя которой указано в левой части.

!

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

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

          Допустим, у нас есть такое выражение (бейсик): z=(x-3*y^2)+7. Ни в коем случае нельзя говорить "Зет равно..."! Нужно говорить так: "Присвоить Зет значение Икс минус три Игрек в квадрате в скобках плюс семь".

          Рассмотрим работу приведённого выше оператора присваивания на примере фрагмента маленькой программы:

  • Вопрос. Чему будет равен Z после выполнения всех операторов присваивания?
  • Решение. Интерпретатор делает следующее:
    • присваивает переменной X значение 15;
    • присваивает переменной Y значение 2;
    • вычисляет значение правой части третьего оператора присваивания (15-3*2^2)+7. Получается 10.
    • присваивает переменной Z значение 10;
  • Ответ. После выполнения всех операторов присваивания, значение Z будет равно 10.

  • Вопрос. А что бы было, если первые два оператора отсутствовали? Каким бы стал Z?
  • Ответ. В этом случае интерпретатор принял бы значения X и Y по умолчанию равными 0, вычислил бы с этими нулями значение правой части и в результате ответ был бы равен 7.

          Пока всё было похоже на обычную математику. Но есть одно "но". Что происходит, если программа содержит следующие строки:

          Если читать эту запись математическим языком, то первая строка будет вполне нормальной - "Икс равен двум". Но вот вторая строчка приведёт в изумление тех, кто не знаком с этим делом. Скажут же: "Как это - Икс равен Икс плюс один?!". Однако, стоит привыкнуть к тому, что оператор присваивания работает не так, как простое равенство в математике. Давайте разберём этот фрагмент.

  • Вопрос. Чему будет равно значение Икс после выполнения операторов присваивания на данном фрагменте программы?
  • Решение. Сначала переменной X присваивается значение 2. Затем интерпретатор обращается ко второй части оператора присваивания, находя в памяти значение X, которое равно двум. Просто-напросто прибавляя к нему 1, получает 3. Присваивает новое значение 3 привой части оператора - Иксу. Старое значение - 2 - просто исчезает, на его место встаёт значение 3.
  • Ответ. После выполнение операторов присваивания на данном фрагменте программы, значение Икс станет равным 3.

Вверх

Вернёмся к типам данных

          Во многих предыдущих разделах встречалось словосочетание "типы данных". Давайте я познакомлю Вас с ними поподробнее. Итак, рассмотрим, что мы имеем насчёт типов данных:

  • Каждая единица языков бейсик и паскаль (константа, переменная, функция или выражение) имеет только один тип. Другими словами, тип переменной определяется множеством значений, которые может принимать данная переменная.
  • Явное введение типов позволяет чётко установить тип каждой программной единицы, не выполняя самой программы.
  • Между каждым типом и некоторым ограниченным подмножеством операторов существует однозначная связь, т.е. для каждого типа определён свой ограниченных набор операций. Конечно, используя такие конструкции, как процедуры и функции, набор операций можно расширить.
  • Несомненно, использование типов вносит некоторую избыточность в сам язык, но это существенно помогает в обнаружении ошибок в структуре алгоритма решения той или иной задачи, реализованного в программе.

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

          Базовые типы данных - это:

  • целый тип;
  • логический тип;
  • символьный (строковый) тип;
  • перечисляемый тип;
  • тип-диапозон;
  • вещественный тип.

          В математике рассматривается бесконечное число целых чисел. Целый тип - это интервал целых чисел.

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

Целые (Ordinal) типы данных в паскале

Тип
Значение
Формат
Размер памяти
ShortInt
Integer
LongInt
Byte
Word
-128..127
-32768..32767
-2147483648..2147483647
0..255
0..65535
Знаковый
Знаковый
Знаковый
Беззнаковый
Беззнаковый
8 бит = 1 байт
16 бит = 2 байта
32 бита = 4 байта
8 бит = 1 байт
16 бит = 2 байта

Возникает вопрос - почему только в паскале? Ответ - в бейсике используются только два целочисленных типа - INTEGER и LONG (Integer и LongInt в паскале соответственно).

!

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

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

          С описанием типа данных для переменных мы уже познакомились раньше. Кстати, в бейсике для определения строковой переменной, сразу после имени переменной ставится знак "$". Это означает, что в операторе присваивания должны стоять кавычки в правой части (если это не строковая функция). Например, A$="мама мыла раму". Не забывайте ставить этот знак каждый раз когда Вы пишете что-либо об этой переменной в программе - если это A$, то она везде будет именно A$, а не просто A. Это делается только в бейсике, так как там явное объявление типов переменных можно не использовать. В паскале оно обязательно, так что там знак "$" ставить не надо. Понятно? И ещё, если Вы хотите соединить в одной строковой переменной несколько строковых значений, то используйте знак плюс "+". Например, Boom$="me"+" you" (me you) или Good:='banana'+'-rama'; (banana-rama).

Вверх

А самое главное-то - напоследок!

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

          Во-первых, давайте поговорим о логических скобках. Роль логических скобок такова: они начинают и заканчивают блоки операторов (в которых, в свою очередь, могут быть другие логические скобки, в тех - другие и т.д.). В паскале основными операторами логических скобок являются Begin и End. После оператора Begin символ ";" не ставится, так как он "заканчивает" оператор, а Begin - это начало. А вот после End - точка с запятой ставится. При чём всё тело программы Начинается оператором Begin (само собой, без точки), а заканчивается оператором End с точкой (именно точкой, а не точкой с запятой, так как это - глобальные логические скобки). Сама программа разбивается на блоки. Как я уже сказал - основной блок - тело программы в целом, не считая описания переменный, имени программы и т.п. Для наглядного обозначения блоков программы используется "лесенка" - вложенные блоки отмечаются пустым пространством перед каждой строкой в них. Так показан блок тела программы на следующем изображении. Основной блок программы может содержать подблоки, те - свои подблоки и т.д. Естественно, лесенка будет увеличиваться и сдвигаться вправо. Кстати, для быстрого сдвига обычно используют клавишу Tab или несколько пробелов (Лучше, конечно, использовать Tab). Думаю, понятно. Если не понятно, то не отчаивайтесь - вы всё поймёте позже.

          Также задаётся имя программы оператором Program (например, Program count; или Program Dima; - имя программы не должно совпадать с именем какой-либо другой программной единицы в данной программе. Имя программы также записывается по правилу написания программных элементов (в разделе Переменные)). Оператор имени программы Program можно не ставить, хотя лучше делать это. Затем оператор Var для описания переменных и других элементов. Возмоожны и некоторые другие операторы, такие, как Uses - подключение библиотек. Но об этом - позже.

          Итак, общая структура программы на паскале должна выглядеть примерно так:

Вверх

Ах да! Функции - куда же без них?!

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

Бейсик
Функция
Описание
Пример
Результат
ABS
Возвращает абсолютную величину (модуль) аргумента
? ABS (-2.56)
2,56
SQR
Возвращает квадратный корень из аргумента (функция применима только к положительным аргументам!)
? SQR (9)
3
SIN
Возвращает значение синуса аргумента (аргумент указывается в радианах)
? SIN (3)
0,14112
COS
Возвращает значение косинуса аргумента (аргумент указывается в радианах)
? COS (3)
0,98992599
TAN
Возвращает значение тангенса аргумента (аргумент указывается в радианах; не забыли, как котангенс находится?)
? TAN (3)
-0,1425465
EXP
Находит значение показательной функции e^x, где x - аргумент, а e - основание натурального логарифма, равное ~2,718...
? EXP (1)
2,178282
LOG
Возвращает логарифм по основанию e
? LOG (3)
1,09861229
INT
Возвращает целую часть аргумента (от англ. INTeger - целый)
? INT (31.5)
? INT(3.14)
31
2
SGN
Возвращает 1 если аргумент больше нуля; 0 если аргумент равен нулю и -1 если аргумент меньше нуля (от англ. SiGN - знак)
? SGN (3)
? SGN (0)
? SGN (-15)
1
0
-1
Паскаль
Функция
Описание
Пример
Результат
SIN(X)
Возвращает значение синуса аргумента (аргумент указывается в радианах)
WriteLn(SIN (3));
0,14112
COS(X)
Возвращает значение косинуса аргумента (аргумент указывается в радианах)
WriteLn(COS(3));
0,98992599
ARCTAN(X)
Возвращает значение арктангенса аргумента (аргумент указывается в радианах)
WriteLn(ARCTAN(3));
1.2490457724E+00
LN(X)
Возвращает натуральный логарифм x (при x больше 0)
WriteLn(LN(3));
1,0986122887E+00
SQRT(X)
Возвращает квадратный корень из X (при X больше или равном 0)
WriteLn(SQRT(9));
3
SQR(X)
Возвращает квадрат X, который может быть вещественным или целым
WriteLn(SQR(3));
9
TRUNC(X)
Выделяет целую часть, результат преобразует в LongInt
WriteLn(TRUNC(3.14));
3
INT(X)
Возвращает целую часть аргумента, преобразует её в Real
WriteLn(INT(31.5));
WriteLn(INT(3.14));
3
ROUND(X)
Округляет вещественное число до целого и преобразует его в Longint (напоминаю про округление - если дробная часть больше 0.5, то к целой части прибавляется 1, если нет, то не прибавляется)
WriteLn(ROUND(3.14));
WriteLn(ROUND(3.64));
3

4

          Есть также и такие функции: ASC, CHR$, INPUT$, LEN, LEFT$, RIGHT$, MID$. Расскажу коротко о каждой. ASC - функция определяет код ASCII для первого символа строковой переменной - ASC (строковая_переменная). CHR$ - наоборот, даст нам символ, код которого указан в скобках. INPUT$ - эта функция будет ожидять ввода N символов, которые будут обрабатывться программой сразу после набора их на клавиатуре, не дожидаясь нажатия клавиши Enter. Например, X$=INPUT$(5) - в переменную X$ будут занесены пять введённыз с клавиатуры символов. Дальше. Вункция LEN определяет длину строковой переменной, то есть, сколько в ней символов. Функция LEFT$ выделяет из заданной строки n символов слева - LEFT (X$,4) - из строковой переменной будет выделено 4 первых символа. То же и с функцией RIGHT$ - всё так же, только справа. (: А вот функция MID$ выделит определённое количество символов из заданной строковой переменной с определённой позиции - C$=MID$(X$, 4, 3) - в строковую переменную занесутся три символа из переменной X$, начиная с четвёртого символа. Понятно? Я рассказал весьма поверхностно, так что придётся Вам потренироваться с этими функциями, чтобы освоить их.

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

Перейти к решению задач
Вверх
Hosted by uCoz