Александр Цветков - Язык программирования PASCAL Страница 2
Александр Цветков - Язык программирования PASCAL читать онлайн бесплатно
Примеры: a:=2; a:=2+3; a:=b*2+1;
Неправильные примеры: a+1:=a; 2:=b+3;
Очень часто используется оператор вида a:=a+1; Он не содержит ошибки. Вначале берется старое значение переменной, к нему прибавляется единица, и результат записывается в опять в переменную a. Таким образом, этот оператор увеличивает значение переменной a на единицу.
Важно следить, чтобы все переменные, используемые в правой части оператора присваивания были определены к моменту вычисления оператора. В противном случае результат будет непредсказуем.
Существует два способа задать переменной значение: оператор присваивания и оператор ввода (read или readln).
Согласование типов в операторе присваивания. Общее правило таково: тип выражения в правой части оператора присваивания должен совпадать с типом переменной в левой части оператора присваивания. Т.е. если переменная имеет тип integer, то справа должно быть выражение, значение которого есть также целое число.
Арифметическое выражение – целочисленное арифметическое выражение состоит из переменных, констант, знаков операций, скобок и вызовов функций. Правила построения выражения очень похожи те, которые употребляются в математике, за исключением деления, для которого существуют две операции, обозначаемые ключевыми словами div и mod. Надо запомнить, что знак операции умножения * никогда не опускается в отличие от алгебры. Операции имеют обычный приоритет: умножение и деление выполняется раньше, чем сложение и вычитание. Вычисление функций (см. далее) выполняется еще раньше. В остальном операции выполняются слева направо. Для изменения порядка операций используются круглые скобки. Уровень вложенности скобок не ограничен.
Бинарные[1] арифметические операции над типом integer
Операция
Обозначение
Пример
сложение
+
a+3
вычитание
–
c–d
умножение
*
2*3
деление нацело
div
a div 2
остаток от деления
mod
a mod 2
Деление на цело: 5 div 2 = 2, остаток от деления нацело: 5 mod 2 = 1
- 5 -
Пример:
Выражение в математической записи:
(a + 2b)(a - b)
(x + y) / 2
Выражение на Паскале (в целых числах):
(a+2*b)*(a–b)
(x+y) div 2
Кроме бинарных операций в Паскале используются унарные[2] операции – и + (в последнем особого смысла нет). Например, в выражении –2*(–a–b) минус перед переменной a является унарной операцией, а минус перед двойкой может рассматриваться и как унарная операция и как запись отрицательной константы.
Целочисленные типы языка ABC Pascal
Тип
Размер в байтах
Диапазон
integer
4
-2147483648 … 2147483647
byte
1
0 .. 255
word
2
0 .. 65 535
При выполнении оператора присваивания следует следить за тем, чтобы значение целочисленного выражения не вышло за допустимый диапазон целого числа. Например, если переменная a имеет тип word, то в операторе a:=512*128; произойдет ошибка, так как значение выражения является 65536, а это число больше верхней границы типа word. Отметим, что если бы переменная a описана как integer, то оператор a:=512*128; является допустимым. Без особой необходимости не следует использовать типы byte и word.
Консольный ввод/вывод – исторически самый «древний» способ диалога с компьютером. У первых ЭВМ консоль – это электрическая пишущая машинка, подключенная к компьютеру, печатающая на рулонной бумаге (как факс). Оператор мог вводить информацию в компьютер, завершая команду нажатием клавиши перевода строки (Enter). Компьютер отвечал, заставляя консоль печатать цифры и символы. Несмотря на простоту такого интерфейса [3], он весьма эффективен и до сих пор используется в самых современных операционных системах. В Windows-системах консоль обычно представляет текстовое окно шириной 80 символов, а высотой 25 символов[4]. При достижении ввода или вывода последней строки все строки скроллируются на одну позицию вверх, а первая строка исчезает.
Операторы вывода – write и writeln выводят заданную информацию на консоль.
Оператор writeln после этого еще и переводит курсор на следующую строку (при достижении последней строки осуществляется скроллинг). Операторы могут иметь произвольное число аргументов, разделенных запятыми. В качестве аргументов могут выступать буквальные константы (например, строки символов) и переменные стандартных типов (в т.ч. и целочисленные).
Пример: write ('Текстовая строка'); writeln (a,b);
- 6 -
Форматы вывода. В операторах write и writeln можно указывать формат, определяющий число позиций, используемых для вывода целого числа на экран, например: writeln ('Ответ ',a:5);
Это означает, что для вывода значения, хранящегося в переменной a следует зарезервировать 5 символов, т.е. если число будет не пятизначным, то при выводе оно будет дополнено слева пробелами. Если число «не помещается» в формат, он будет автоматически «растянут», так чтобы число «влезло».
Оператор ввода – read, readln. Оператор read при чтении данных с консоли используется крайне редко, в основном используется оператор readln. Параметры оператора – только переменные и только стандартных типов, возможно использование оператора вообще без аргументов для создания ситуации ожидания нажатия клавиши Enter. По оператору readln программа приостанавливает свою работу, ожидая ввода данных от пользователя. Пользователь набирает желаемые значения переменных, разделяя их пробелами (или Enter) и нажимает Enter. Оператор интерпретирует введенные символы, переводя их во внутреннее (машинное) представление соответствующих переменных. Если это не удается (например, вместо целого числа введены буквы), программа аварийно завершает свою работу.
Пример: readln (a,b);
Недопустимо : readln (a+3);
Для того чтобы пользователь знал что «хочет» ввести программа, полезно перед оператором readln выводить подсказку с помощью оператора write или writeln.
Например:
write ('Введите количество учеников в классе ');
readln (n);
Обратите внимание на пробел перед вторым апострофом. Он сделан для того, чтобы ввод пользователя отделялся от подсказки.
Встроенные функции – в языке Pascal предусмотрено большое число различных встроенных функций. Функции можно применять в выражениях, аргумент(ы) функции всегда заключаются в скобки, например: x:=x-abs (x). Функции требуют аргументы определенных типов (например, целого типа) и возвращают значение также определенного типа (может не совпадать с типом аргумента). Ниже приведен список арифметических функций, имеющих целочисленный аргумент .
Функция
Описание
sqr(n)
Возвращает квадрат аргумента. Необходимо помнить о диапазоне возвращаемого значения.
abs(n)
Возвращает модуль (абсолютное значение) числа.
pred(n)
Возвращает значение, на единицу меньшее аргумента.
succ(n)
Возвращает значение, на единицу большее аргумента.
odd(n)
Возвращает TRUE, если аргумент нечетный, иначе – FALSE
even(n)
Возвращает TRUE, если аргумент четный, иначе – FALSE
chr(n)
Возвращает символ (тип char) с кодом n.
random(n)
Возвращает случайное число в диапазоне от 0 до n-1.
- 7 -
Задание №1
1. Записать следующие выражения на языке Pascal, считая все переменные и действия целочисленными.
(a+b)(a–b)
(1+x)2
15x / y
2x•2y
2. Вычислить (в уме) значение выражения
(a+1)*(–a), если a=10
(x+1) div (x– 1), если x=2 и если x=4
2*4 mod 3
2*(4 mod 3)
–a*(– 1), если a=431
3. Напишите и выполните программу на компьютере
* Программа вводит одно число, и вычисляет его квадрат, вычитая из него удвоенное значение введенного числа.
* Программа вводит два числа, выводит сумму квадратов этих чисел минус их произведение.
* Программа вводит два числа, выводит сумму их модулей (см. функцию abs)
4. Напишите программу, которая решает следующую задачу
Оплата Интернета в школе состоит из двух частей: 100 долларов в месяц за доступ и 5 долларов в месяц за поддержку школьного сайта. Платеж можно делать независимо за любое количество месяцев за доступ и за поддержку сайта. Напишите программу, которая позволяла бы вводить отдельно количество оплачиваемых месяцев для доступа и поддержки и выводила бы сумму оплаты.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.