Для записи простейшей линейной программы требуются операторы присваивания и ввода-вывода данных с которым мы уже познакомились на первых занятиях.
Простейшие задачи имеют линейный алгоритм решения. Это означает, что он не содержит проверок условий и повторений.
Пример 1. Пешеход шел по пересеченной местности. Его скорость движения по равнине v1 км/ч, в гору — v2 км/ч и под гору — v3 км/ч. Время движения соответственно t1, t2 и t3 ч. Какой путь прошел пешеход?
1. Ввести v1, v2, v3, t1, t2, t3.
2. S1 := v1 * t1.
3. S2 := v2 * t2.
4. S3 := v3 * t3.
5. S := S1 + S2 + S3.
6. Вывести значение S.
7. Конец.
Для проверки работоспособности алгоритма необходимо задать значения входных переменных, вычислить конечный результат по алгоритму и сравнить с результатом ручного счета.
1) Арифметические выражения
Арифметические выражения строятся из имен переменных, констант, знаков операций и круглых скобок так, как это принято в математике. При вычислении их значений операции выполняются в порядке приоритета: *, /, DIV, MOD, а затем + и -. Операции одинакового старшинства выполняются слева направо.
Наряду с переменными и константами в арифметические выражения можно включать функции. При определении значения выражения, прежде всего, вычисляются значения входящих в него функций. В Паскале имеются следующие стандартные функции: - смотрите документ.
Аргумент функции обязательно заключается в скобки.
Выражение на Паскале, как впрочем, и на других языках программирования, записывается в одну строчку, а для сохранения порядка действий используются скобки. Все действия должны быть указаны. Например, 2Х + XY надо записать как 2*Х + Х*Y.
Задания для тренировки
1) Найдите значения переменных, если это возможно. Учтите, что число 4.0 является вещественным, т.к. оно имеет дробную часть, хотя и равную нулю.
Операции MOD и DIV можно выполнять только над целыми числами:
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
2) Найдите значения переменных, если это возможно:
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)
3) Найдите значения переменных, если это возможно:
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)
2.. Обмен значениями..
Рассмотрим пример: Поменять местами значения переменных X и Y, не используя дополнительной переменной.
Первая мысль, приходящая в голову, это написать программу, похожую на эту:
A:= B;
B:= A;
Но эта программа работать не будет (в обеих переменных будет значение B).
Теперь поищем правильное решение. Обозначим начальное значение A за A1, B за B1. Тогда необходимо, чтобы по окончании работы программы A равнялось B1, а B - A1.
0) A=A1; B=B1;
1) Занесем в переменную A результат суммирования A и B (A := A + B):
A = A1 + B1; B = B1;
2) Занесем в переменную B разность A и B (B := A - B):
т.к. A = A1 + B1; то B=(А1+В1)-В = A1;
3) Занесем в переменную A разность A и B (A := A - B):
A = B1; B = A1;
Код программы:
Program prim_4;
Var a,b:integer;
Begin
Write('введите два числа ');
Readln(A,B);
A:=A+B;
B:=A-B;
A:=A-B;
Writeln('A=',A);
Writeln('B=',B);
Readln;
End.
3..Эффективные алгоритмы.
Вы уже знаете, что в Паскале отсутствует возможность возведения в степень, не считая квадрата. Поэтому для получения а^20 нужно а*а*а*а...*а 19 раз. Но если учесть, что результат умножения можно сохранить в промежуточной переменной, ответ можно найти за 5 действий.
Program prim_4;
Var a,b:real;
Begin
Write('введите число');
Readln(A);
В:=A*А; {получаем А во 2}
B:=В*В; {получаем А в 4}
В:=A*B; {получаем А в 5}
B:=В*В; {получаем А в 10}
B:=В*В; {получаем А в 20}
Writeln('A в 20 степени=',В:0:2);
{Вместо указания ширины поля для вывода числа лучше ставить 0, тогда компилятор отведет столько позиций под целую часть, сколько получилось в ответе, а для дробной части я посчитала возможным оставить 2 позиции}
Readln
End.
В фигурные скобки {...} в программе можно заключать комментарий, компилятор пропускает текст, заключенный в такие скобки, а комментарий позволяет вспомнить о чем программа если вы позднее возвращаетесь к ее тексту.
Задание для тренировки.
1) Поменяйте между собой значения трех переменных X, Y и Z по схеме тройного квартирного обмена: Х®Y®Z®X.
2) Присвойте переменной N ее собственное значение, увеличенное в N раз.
3).Дано вещественное число А. Не пользуясь никакими арифметическими операциями, кроме умножения, получить:
а) А^15 за пять операции;
б) А^19 за пять операции;
в) А^21 за шесть операции;
г)А^28 за шесть операции;
4. Целочисленная арифметика. Задачи на целочисленное деление.
В программировании существует целый класс задач, где действия производятся только с целыми числами. При решении подобных задач обычно используются операции над целыми MOD и DIV. Сегодня мы познакомимся с задачами на целочисленное деление.
Задача. Дано расстояние в сантиметрах. Найти число полных метров в нем.
Код программы:
Program prim_4;
Var a,b:integer;
Begin
Write('введите расстояние в сантиметрах');
Readln(a);
b:=a div 100;
Writeln(b,' метров ');
Readln
End.
Задания
1.Установите соответствие между служебными словами и названиями разделов программы:
Var Program Uses Begin … end |
Раздел операторов Раздел имени программы Раздел описания переменных Раздел описания библиотечных модулей |
2. Расположите в правильном порядке строки программы, вычисляющей периметр и площадь параллелограмма:
1) S:=a*h; |
|
2) end. |
|
3) program pr; |
|
4) p:=2*(a+b); |
|
5) Uses crt; |
|
6) var a,b,h,p,s: integer; |
|
7) readln; |
|
8) Writeln(‘p=’,p,’ s=’,s); |
|
9) a:=6;b:=3;h:=4; |
|
10) clrscr; |
|
11) begin |
|
3. Дан текст программы в таблице с ошибками:
исправьте ошибки в программе;
что выведется на экран в результате выполнения программы? – смотрите документ
Задания для тренировки.
1.Дана масса в килограммах. Найти число полных центнеров в ней.
2.Дана масса в килограммах. Найти число полных тонн в ней.
3.Дано расстояние в метрах. Найти число полных километров в нем.
4.Дан прямоугольник с размерами 543х130 мм. Сколько квадратов со стороной 130 мм можно отрезать от него?
5.Напишите программу, которая запрашивает два числа, находит остаток от деления первого на второе и выводит результат.
6. Дана сторона квадрата a. Найдите его периметр P=4*a
7.Даны стороны прямоугольник a и b. Найти его площадь S = a*b и периметр P = 2*(a + b).
8. Дан диаметр окружности d. Найти ее длину L = ?*d. В качестве значения ? использовать 3.14.
9.*Дано целое число k (1 <= k <= 365). Присвоить целочисленной величине n значение 1, 2,...,6 или 0 в зависимости от того, на какой день недели (понедельник, вторник, ..., суббота или воскресенье) приходится k-й день года, в котором 1 января - понедельник.
10. *Дано вещественное число А, содержащее два знака до запятой и два после. Получить новое число, поменяв в числе А целую и дробную части.