Константы и переменные

Данные, которыми оперирует программа, могут быть определены в ней как неизменные, либо как способные изменять свое значение в ходе выполнения программы. Первые называются константами, а вторые переменными. И переменные и константы размещаются в памяти компьютера (в так называемой "ячейке памяти"). В программе переменные должны быть описаны в предложении VAR (от слова VARIABLE-переменная), а константы - в предложении CONST. У всякой величины имеется три основных свойства: имя, значение, тип.

Тип INTEGER (целый).

И в жизни и в программировании очень полезно использовать понятие типа. Предположим, вам сказали, что вы должны приобрести Джой. Больше ничего не известно - сколько у него ног, предмет это или животное и т.д. в то же время очень многое можно сообщить, добавив лишь одно слово, определяющее тип объекта по имени Джой, например, Джой - собака, или Джой - человек, или Джой - компьютер. Любая константа или переменная, использованная в программе, принадлежит к определенному типу. Тип задает множество допустимых значений переменных, внешний вид констант, возможные операции над значениями. Значения величины типа INTEGER в Паскале не может быть меньше -32768 или больше 32767. Константы целого типа записываются в виде последовательности цифр со знаком или без него. Переменные должны быть перечислены в описательной части программы в предложении

VAR имя_переменной:INTEGER;

Над величинами целого типа допустимы арифметические операции: +(сложение), -(вычитание), *(умножение), DIV(деление нацело), MOD(нахождение остатка от целочисленного деления).

Все операции вырабатывают результат целого типа. Например,

15 DIV 4 = 3, 25 MOD 4 = 1.

Над целыми разрешено и обычное деление, оно обозначается косой чертой "/" и дает результат вещественного типа.

2.4. Тип REAL(вещественный).
Константы вещественного типа (числа с дробной частью) изображаются с десятичной точкой:
12.3, -1.5, -0.75 или в показательной форме: -0.45Е5, 6.7Е-10, 0.355Е6 (для получения числа в обычном виде надо перенести запятую на число разрядов указанных после Е вправо, если число положительное, влево, если отрицательное). Например, 6.7Е-10=0.00000000067.

Вещественные переменные требуют описания предложением

VAR имя:REAL;

Над величинами вещественного типа допустимы арифметические операции: +(сложение), -(вычитание), *(умножение), /(деление).

2.5. Оператор присваивания
Оператор присваивания придает переменной конкретное значение, например:

Х:=2; Y:=5,

одновременно уничтожая старое. Редкая программа обходится без оператора присваивания.

Присваивать можно значение другой переменной или результат вычисления арифметического выражения: A:=B; A:+B+C; X:=Y+2-Z.

Формат команды:
<имя переменной>:=<выражение>

Исполнение команды присваивания происходит в таком порядке: сначала вычисляется <выражение>, затем полученное значение присваивается переменной.

Пример 1. Пусть переменная А имела значение 6. какое значение получит переменная А после выполнения команды: А:=2 х А - 1.

Решение. Вычисление выражения 2 х А - 1 при А=6 даст число 11. Значит новое значение переменной А будет равно 11.

Пример 2.
Поменяйте между собой значения двух переменных А и В, воспользовавшись третьей переменной R для временного хранения значения.

Решение.
Program prim2_2;
Var a, b, r: real;
begin
Write('Введите два числа ');
Readln(a,b);
R:=a;
A:=b;
B:=r;
Write(' a=', a, ' b=', b);
End.

Задачи.
1) Определить конечное значение переменных X и Y в результате выполнения следующих алгоритмов:
а) Х:=2 б)Х:=1.5
Х:=Х х Х Х:=2 х Х + 1
Х:=Х х Х х Х Y:=X/2
Х:=Х х Х х Х х Х Y:=X + Y
X:=X - Y

2) Поменяйте между собой значения трех переменных X, Y и Z по схеме тройного квартирного обмена: Х®Y®Z®X.

3) Присвойте переменной N ее собственное значение, увеличенное в N раз.

4) Чему равно Х в результате выполнения программы:
Х:=2;
Х:=Х+Х;
Х:=Х-Х

5) Указать значения значения величин a и b после выполнения следующих операторов присваивания:
а) a:=5.8 б)a:=0
b:=-7.9 b:=-9.99
b:= а b:=a
a:=b a:=b

Урок 3

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

тип значение формат
SHORTINT -128..127 Знаковый
INTEGER -32768..32767 Знаковый
LONGINT -2147483648.. -2147483647 Знаковый
BYTE 0..255 Беззнаковый
WORD 0..65535 Беззнаковый

и 5 стандартных вещественных типов:

тип значение число значащих чисел
REAL 2.9*10-39..1.7*1038 11..12
SINGLE 1.5*10-45..3.4*1038 7..8
DOUBLE 5.0*10-324..1.7*10308 15..16
EXTENDED 3.4*10-4932..1.1*104932 19..20
COMP -2*1063+1..+2*1063-1 19..20


Арифметические выражения

Арифметические выражения строятся из имен переменных, констант, знаков операций и круглых скобок так, как это принято в математике. При вычислении их значений операции выполняются в порядке приоритета: *, /, DIV, MOD, а затем + и -. Операции одинакового старшинства выполняются слева направо.
Наряду с переменными и константами в арифметические выражения можно включать функции. При определении значения выражения, прежде всего, вычисляются значения входящих в него функций. В Паскале имеются следующие стандартные функции:

функция назначение тип результата
ABS(X) Абсолютное значение Х Вещественный
ARCTAN(X) Арктангенс Х Вещественный
COS(X) Косинус Х Вещественный
EXP(X) ех Вещественный
FRAC(X) Дробная часть Х Вещественный
INT(X) Целая часть Х, обнуление дробной части Вещественный
LN(X) Натуральный логарифм Вещественный
PI Значение PI=3.1415926535897932385 Вещественный
ROUND(X) Округление до ближайшего целого Целый
SIN(X) Синус Х Вещественный
SQR(X) Квадрат Х Тип аргумента
SQRT(X) Квадратный корень Х Вещественный
TRUNC(X) Отбрасывание дробной части Целый

Аргумент функции обязательно заключается в скобки.
Выражение на Паскале, как впрочем, и на других языках программирования, записывается в одну строчку, а для сохранения порядка действий используются скобки. Все действия должны быть указаны. Например, 2Х + XY надо записать как 2*Х + Х*Y.


Задания

1) Запишите на Паскале следующие выражения:

a) c) e)
b) d) f)

2) Найдите значения переменных, если это возможно. Учтите, что число 7.0 является вещественным, т.к. оно имеет дробную часть, хотя и равную нулю. Операции MOD и DIV можно выполнять только над целыми числами (Урок 2):
a) A:=21 DIV 5 b) A:= 2 MOD 3
B:= 20 MOD 5 B:= 36.0 MOD 6
C:= 14 DIV 6.0 C:= 81 DIV 0
D:= 14 MOD 0 D:= 38 DIV 6
E:= 5 MOD 13 E:= 3 DIV 2

3) Найдите значения переменных, если это возможно:
a) A:=SQR(100) b) A:=sqrt(9)
B:=sqrt(100) B:=SQR(9)
C:=SQR(-10) C:=SQRT(-9)
D:=SQRT(-10) D:=SQR(-9)
E:=SQR(0.9) E:=SQRT(0.0)
F:=SQRT(0) F:=SQR(0.1)

4) Найдите значения переменных, если это возможно:
a) A:=ROUND(6.9) b) A:=ROUND(15.39)
B:=ROUND(6.48) B:=ROUND(15.8)
C:=TRUNC(9.5) C:=TRUNC(-39)
D:=FRAC(9.5) D:=FRAC(39)
E:=INT(9.5) E:=INT(39)
F:=TRUNC(-17) F:=TRUNC(5.6)
G:=FRAC(17) G:=FRAC(-0.3)
H:=INT(-17) H:=INT(1.25)

5) Запишите по правилам языка программирования следующие выражения:

a) d) g)
b) e) h)
c) f) i)

Урок 4

Мало программ обходится без ввода данных, и совсем нет таких, которые не выводят полученные результаты. Написать такую программу можно, но кому она понадобится?

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

READ (список переменных), где список переменных - последовательность имен переменных, разделенных запятыми.

Например, READ (X,Y,Z); READ (BETA);

Оператор READ останавливает работу программы и ждет, пока пользователь наберет на клавиатуре число и нажмет <Enter>. Введенное число помещается в оперативную память, в отведенную ячейку, имеющую имя указанное в операторе. Если список ввода содержит несколько имен, то для каждого надо ввести свое значение. Вводимые числа разделяют пробелами или нажатием клавиши <Enter>.
Заканчивается ввод всегда клавишей <Enter>. После работы этого оператора курсор располагается за последним введенным символом, но не переводится на новую строку. Для перевода курсора на новую строку экрана дисплея после ввода данных, используется оператор

READLN (список переменных).

Оператор READLN отличается от READ еще и тем, что, введя необходимое количество данных, пропускает все остальные, набранные до нажатия клавиши <Enter>.

4.2. Вывод.
Для вывода результатов работы программы служит оператор

WRITE (список вывода).

Список вывода может содержать имена переменных, числовые и текстовые константы, выражения. Элементы в списке разделяются запятыми. Если указана переменная, то на экран выводится ее значение, константа выводится без изменения, значения выражений вначале вычисляются, а затем высвечиваются на экране.
Вслед за выражением после двоеточия можно указать ширину поля экрана, в котором разместится выводимое значение. Например, оператор WRITE(10:3, 55:6) высветит на экране.10.....55 (точка означает пробел, пустую позицию экрана). Вывод происходит в том месте экрана, где находится курсор.
При выводе вещественных значений можно указать, сколько десятичных цифр следует сохранить в дробной части числа. Количество цифр указывается вслед за шириной поля после двоеточия.
Например, если Х=3.14159, а Y=2.71468, то оператор WRITE(X:6:2,Y:8:3) высветит на экране..3.14....2.715.

Чтобы прокомментировать выводимые значения, в список вывода можно помещать строки любых символов, заключенные в апострофы (одинарные кавычки). Например,

WRITE('Ответ:', Х:4,'км/сек.').

Эти строки появятся на экране без кавычек. Так при Х=3.5 этот оператор выведет:

Ответ: 3.5 км/сек.

Перевод курсора на новую строку осуществляется оператором пустого вывода WRITELN;
Если надо перевести курсор после вывода, то применяется оператор

WRITELN (список вывода).

После вывода результатов работы программы на экран система так быстро возвращается в редактор текстов программы, что пользователь не успевает увидеть эти результаты. Чтобы задержать изображение, в конце программы следует ставить оператор пустого ввода READLN;

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

Program prim_4;
Var a,b,x,y,z:real;
Begin
Write('введите два числа через пробел, затем нажмите <Enter>');
Readln(a,b);
X:=a+b;
Y:=a*b;
Z:=a-b;
Writeln('a+b=',x);
Writeln('a*b=',y);
Writeln('a-b=',z);
Readln
End.

Задания:
1)Напишите программу, которая запрашивает два числа, находит остаток от деления первого на второе и выводит результат.
2)Составьте программу нахождения периметра квадрата, если задана его площадь.
3)Даны два числа. Найти их среднее арифметическое.
4)Найти площадь кольца по заданным внешнему и внутреннему радиусам.
5)Даны катеты прямоугольного треугольника. Найти его периметр.
6)*Поменять местами значения переменных X и Y, не используя дополнительной переменной.


5.3.Целочисленная арифметика. Задачи на целочисленное деление.
В программировании существует целый класс задач, где действия производятся только с целыми числами. При решении подобных задач обычно используются операции над целыми MOD и DIV. Сегодня мы познакомимся с задачами на целочисленное деление.

Задача. Дано расстояние в сантиметрах. Найти число полных метров в нем.

Код программы:

Program prim_4;
Var a,b:integer;
Begin
Write('введите расстояние в сантиметрах');
Readln(a);
b:=a mod 100;
Writeln(b,' метров ');
Readln
End.

Задания для тренировки.
2.Дана масса в килограммах. Найти число полных центнеров в ней.
3.Дана масса в килограммах. Найти число полных тонн в ней.
4.Дано расстояние в метрах. Найти число полных километров в нем.
5.Дан прямоугольник с размерами 543х130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него?
6.*Дано целое число k (1 <= k <= 365). Присвоить целочисленной величине n значение 1, 2,...,6 или 0 в зависимости от того, на какой день недели (понедельник, вторник,..., суббота или воскресенье) приходится k-й день года, в котором 1 января - понедельник.

Урок 6

Продолжим знакомство с целочисленной арифметикой. Очень часто необходимо чтобы программа определила, из каких цифр состоит число, или определила разряд заданной цифры или наоборот цифру в заданном разряде. Если вы попросите человека решить эту задачу, проблем не возникнет, а как быть с компьютером. Для него любое число это набор нулей и единиц, т.е. двоичный код. В отличие от нас компьютер все действия выполняет в двоичной системе. Например, число 27 хранится в его памяти как 11011. И где здесь 2 и 7?

Для решения этих задач надо вспомнить, что собой представляет любое число десятичной системы счисления (т.е. той, к которой мы с вами привыкли).В позиционной системе счисления (к которой относится десятичная система) величина, обозначаемая цифрой в записи числа, зависит от ее позиции. Например, в числе 333 первая цифра обозначает три сотни, вторая - три десятка, третья - три единицы. Любое число можно записать в виде:

32478=3*10000+2*1000+4*100+7*10+8=3*104+2*103+4*102+7*101+8*100

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

Program prim_6;
Var n,x1,x2,m:integer;
Begin
Write('введите двузначное число');
Readln(n);
X1:=n mod 10; {выделяем из числа единицы}
X2:=n div 10; {получает число десятков в числе}
M:=x1*10+x2; {число единиц умножаем на 10, получаем десятки}
Writeln(m);
Readln
End.

Пусть дано n=27.
X1:= 27 mod 10 = 7
X2:= 27 div 10 = 2
M:=7*10+2 = 72, что и требовалось получить.

К сожалению, таким образом, мы можем определить лишь крайние цифры числа. А если цифра, которая нам нужна, стоит не с краю? Не беда, сделаем ее крайней. Например, дано трехзначное число, надо определить среднюю цифру числа.

Пусть а=246
B:=a div 10 = 24
B:=b mod 10 = 4

Или по другому:
B:=a mod 100 = 46
B:=b div 10 = 4

Задания для тренировки.
1. Дано двузначное число. Найти:
a. число десятков в нем;
b. число единиц в нем;
c. сумму его цифр;
d. произведение его цифр.

2. Дано трехзначное число. Найти:
a. Число единиц в нем;
b. Число десятков в нем;
c. Сумму его цифр;
d. Произведение его цифр.

3. Дано трехзначное число. Найти число, полученное при прочтении его цифр справа налево.

4. Дано трехзначное число. В нем зачеркнули первую слева цифру и приписали ее в конце. Найти полученное число.

5. Дано трехзначное число. В нем зачеркнули последнюю справа цифру и приписали ее в начале. Найти полученное число.

6. Дано трехзначное число. Найти число, полученное при перестановке первой и второй цифр заданного числа.

7. Дано трехзначное число. Найти число, полученное при перестановке второй и третьей цифр заданного числа.

8. *Дано вещественное число А, содержащее два знака до запятой и два после. Получить новое число, поменяв в числе А целую и дробную части.

9. *В кассе имеются купюры достоинством в К рублей и в 1 рубль. Выдать N рублей минимальным набором купюр заданного достоинства.


Урок 7

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

7.1. Условный оператор.
Условный оператор позволяет выполнять или пропускать операторы программы в зависимости от некоторого условия. Условный оператор может иметь две формы:

Полный оператор.
Формат команды
IF условие THEN оператор_1 ELSE оператор_2;

Схема оператора:

Неполный оператор.
Формат команды
IF условие THEN оператор;

Схема оператора:

Если перевести на русский язык английские слова то получим:

ЕСЛИ условие ТО оператор_1 ИНАЧЕ оператор_2; или ЕСЛИ условие ТО оператор;

В качестве условия применяют операции сравнения: =, <>, <=, >=, <, >. Слева и справа от знака сравнения записывают арифметические выражения.

Например, оператор
If x<>0 then z:=y/x
еlse write('Ошибка!');
присвоит переменной Z значение частного y/x, если x<>0, в противном случае высветит на экране слово "Ошибка!".

7.2. Составной оператор.
В некоторых случаях после слов THEN и ELSE надо выполнить не один оператор, а несколько. Тогда эти операторы заключаются в так называемые операторные скобки, где BEGIN - открывающая скобка, END - закрывающая скобка. Все операторы находящиеся внутри операторных скобок называются составным оператором. Перед словом ELSE точка с запятой никогда не ставится.

Формат команды: BEGIN оператор; оператор;... оператор END;

Например:
If a<b then
begin
R:=a;
A:=b
B:=r
End

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

В качестве выполняемого в условном операторе действия может быть другой условный оператор. Например:
If sqr(x)+sqr(y)>1 then
If x>y then z:=0
Else z:=1;

При такой форме записи со сдвигом вправо для каждого внутреннего действия, легко понять, к какому из двух слов IF относится слово ELSE. Рассмотрим пример программы с использованием условного оператора. Пусть для двух целых чисел надо определить, являются они четными или нет. Для проверки четности используем условие: остаток от деления на 2 четного числа равен 0.

Program prim_7;
Var a,b:integer;
Begin
Write('введите два целых числа');
Readln(a,b);
If a mod 2 = 0 then Writeln (' а - четное ')
Else Writeln (' a - нечетное ');
If b mod 2 = 0 then Writeln (' b - четное ')
Else Writeln (' b -нечетное ');
Readln
End.

Задания для тренировки.
1. Вычислить значение у при заданном значении х:

2. Ввести два числа. Напечатать сначала меньшее, затем большее из них.
3. Даны числа x и y. Вычислите число z, равное x+y, если x<=y, и 1 - х + y в противном случае
4. Даны два числа. Выведите первое из них, если оно больше второго, и оба числа, если это не так.
5. Если данное число х меньше нуля, то z присвойте значение большего из двух чисел х и у, иначе z присвойте значение полусуммы этих чисел.
6. *Даны два числа. Меньшее из них замените полусуммой этих чисел, а большее - их произведением.
7. Даны радиус круга и сторона квадрата. У какой фигуры площадь больше?
8. Дано целое число. Определить:
a. Является ли оно четным;
b. Оканчивается ли оно цифрой 7;
c. Делится ли оно на 13.


Урок 8


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: