Лабораторная работа Реализация линейных алгоритмов в Паскале.

advertisement
Лабораторная работа
Язык программирования Паскаль
Тема: Реализация линейных алгоритмов в Паскале.
Порядок выполнения работы
1. Изучить теоретические сведения по теме “Реализация линейных алгоритмов в
Паскале ”.
2. Получить индивидуальное задание у преподавателя и разработать программу в
соответствии с поставленной задачей.
3. Показать работающую программу преподавателю.
4. Ответить на контрольные вопросы.
5. Подготовить письменный отчет.
Форма представления отчета:
1. Тема работы.
2. Условия задания.
3. Текст программы и исходные данные при вводе.
4. Результаты выполнения программы.
Краткие теоретические сведения.
Типы переменных в Паскале:
INTEGER – целый тип (диапазон -32768...32767)
REAL – действительный, вещественный тип (диапазон 2.9*10-39...1.7*10+38)
CHAR – литерный, символьный тип
BOOLEAN – логический тип
BYTE – целые числа от 0 до 255
LONGINT – целый тип (диапазон -2147483648... 2147483647)
STRING – СТРОКОВЫЙ ТИП (ОТ 0 ДО 255 СИМВОЛОВ)
Математические операции и функции.
Перечислим основные операции и функции, которыми можно пользоваться при
составлении Pascal-программ.
Таблица 1. Основные операции
Операция
Название
Тип операндов и результата
-
Смена знака
Значения числового типа.
+
Сложение
Значения числового типа.
-
Вычитание
Значения числового типа.
*
Умножение
Значения числового типа.
/
Деление
X div Y
Целочисленное деление X на Y
Значения числового типа. Результат деления - всегда
вещественное число!
Значения целого типа.
X mod Y
Нахождения остатка от деления
Значения целого типа.
X на Y
Дадим несколько замечаний к перечисленному набору операций.
При использовании операции "/" (деления) результат всегда будет вещественным
независимо от того, делится ли нацело одно число на другое. Например: программа,
содержащая следующий фрагмент:
.
.
.
.
Var
a,b,c: Integer;
Begin
.
.
.
.
a:=12;
b:=3;
c:=a/b;
.
.
.
.
End.
.
.
.
не будет даже откомпилирована, так как в строке c:=a/b; нарушена совместимость типов:
значение выражения a/b вещественного типа, а переменная c описана как целая.
Исправление этого фрагмента следующим образом:
.
.
.
.
Var
a,b: Integer;
c: Real;
Begin
.
.
.
.
a:=12;
b:=3;
c:=a/b;
.
.
.
.
End.
не вызовет ошибки компиляции.
.
.
.
Допустим, в рассмотренном примере нужно получить после выполнения операции
деления результат целого типа. В этом случае можно воспользоваться операцией div. В
таблице 2 приведены примеры использования операций div и mod.
Таблица 2. Примеры использования операций div и mod
Пример
Результат
10 mod 3 -10 mod -3 -10 mod 3 10 mod -3 10 div 3 -10 div -3 -10 div 3 10 div -3
1
-1
-1
1
3
3
-3
-3
Таблица 3 содержит список основных встроенных функций языка программирования
Pascal.
Таблица 3. Основные функции, применяемые при составлении Pascal-программ
Название функции, обозначение
Обозначение в языке Pascal
sin x
Sin(x). Аргумент X должен быть выражен в
радианах.
cos x
Cos(x). Аргумент X должен быть выражен в
радианах.
arctg x
Arctan(X)
e
x
Exp(X)
ln x
Ln(X)
x2
Sqr(X)
Квадратный корень из x
Sqrt(X)
[x] (целая часть от x)
Int(x). Результат - вещественное число!.
{x} (дробная часть от x)
Frac(X)
|x| (модуль x)
Abs(X)
Отбрасывание дробной части
Frac(X)
Округление до целых
Round(X)
Получение кода ASCII-символа
Ord('<символ>')
Получение символа по коду
Chr(X). X - код символа (натуральное число)
Генерация "случайного" целого числа на промежутке
от 0 до k-1
Random(k)
Прокомментируем использование некоторых из перечисленных функций.
1. Аргументы всех функций всегда заключаются в круглые скобки!
2. Аргументы функций Sin(X) и Cos(X) должны быть выражены в радианах. Для этого
можно воспользоваться следующими формулами:
X(рад) = Xº * /180
Xº = X(рад) * 180/
3. Не путайте обозначение квадратного корня (Sqrt) с возведением в квадрат (Sqr)!
4. Результат, возвращаемый функцией Int - вещественное число! Для того, чтобы
получить значение целого типа, можно воспользоваться функцией Round, например, так:
Round(Int(X)).
5. Как известно, каждому символу ставится в соответствие число, которое называется
ASCII-кодом, например символ "A"(латинская) имеет код 65, символ "1" - код 49. Есть
возможность по символу получать его код и наоборот. Для этого используются функции
Ord и Chr. Например, результат выполнения конструкции Ord('B') - число 66, которое
является кодом латинской буквы B. Конструкция Chr(53) даст в результате символ "5".
6. Функция Random(k), где k - натуральное число, "выбирает" случайным образом
целое число из промежутка от 0 до k-1. Каждое обращение к этой функции дает в
результате произвольное число из указанного промежутка. Однако можно заметить, что от
выполнения к выполнению программы генерируемая последовательность "случайных"
чисел будет одной и той же! Чтобы этого избежать, нужно, например, в начале
программы разместить процедуру Randomize;, которая "заставляет" компьютер "менять"
последовательность генерируемых чисел от запуска к запуску программы.
Некоторые математические функции, не реализованные в языке Паскаль.
В математике
xn
log b a
tg x
ctg x
В программировании на языке Паскаль
exp(n*ln(x))
ln(a)/ln(b)
sin(x)/cos(x)
cos(x)/sin(x)
Примеры записи математических выражений
a2  x
= (sqr(a)+sqrt(x))/(siin(x)+cos(x))
sin x  cos x
e x  ex
= (exp(x)+exp(-x))/2
2
tgx  ctgx
= (sin(x)/cos(x)+cos(x)/sin(x))/ln(x)
ln x
Операторы, используемые при создании линейных программ.
Исполняемые действия в языке программирования записываются в виде операторов.
Одним из основных операторов является оператор присваивания, с помощью которого
можно присвоить переменной, стоящей слева от знаков ":=", значение выражения,
стоящего справа от ":=". Этот оператор уже использовался в программе 6-го шага,
поэтому подробно на нём мы останавливаться не будем. Однако отметим, что к моменту
выполнения оператора присваивания все переменные, входящие в выражение, стоящее
справа от знака присваивания, должны быть определены.
Как нужно изменить программу, чтобы компьютер вычислил сумму других чисел? Вы
наверняка догадались, что переменным x и y можно присвоить новые значения. Однако
так каждый раз исправлять программу очень неудобно. Было бы здорово задавать
необходимые значения в момент выполнения программы, после чего компьютер
выполнял нужные действия. Для ввода данных в языке программирования Pascal
используется оператор ReadLn, общий вид которого следующий:
Рис.1. Общий вид оператора ReadLn
Используем данный оператор в нашей программе. При этом программа будет выглядеть
так:
Рис.2. Программа с использованием оператора ReadLn
Возникает вопрос: как увидеть результаты выполнения программы? Для этого
используется оператор вывода WriteLn, общий вид которого следующий (рис.1):
Рис.1. Общий вид оператора WriteLn
Список вывода может состоять:



из поясняющих фраз. В этом случае такая фраза заключается в апострофы
(одинарные кавычки);
из имен переменных. В этом случае на экран выводятся значения этих
переменных;
из выражений. Компьютер вычисляет значение этого выражения и выводит его на
экран.
Посмотрим, как оформляются различные элементы списка вывода, и что получается
при их использовании. Приведем пример небольшой программы (рис.2):
Рис.2. Иллюстрация использования оператора WriteLn
В ней используется оператор WriteLn, список вывода которого состоит из пяти элементов
(отмечены фигурными скобками). Пусть, например, при выполнении оператора
ReadLn(x,y,z); введены следующие значения: 2, 8, 4. Оператор WriteLn обработает
каждый элемент списка вывода следующим образом:
а) фраза, составляющая первый элемент списка вывода, на экран будет выведена без
изменения (символ "_" обозначает местоположение курсора):
Как вы думаете: число _
б) при обработке второго элемента списка на экране появится значение переменной x:
Как вы думаете: число 2 _
в) третий элемент списка - фраза " равно", также будет выведена на экран без
изменения:
Как вы думаете: число 2 равно _
г) четвертый элемент списка - выражение. Компьютер вычислит значение этого
выражения и выведет его с позиции курсора:
Как вы думаете: число 2 равно 2_
д) пятый элемент списка - фраза "?", будет выведена на экран без изменения.
Как вы думаете: число 2 равно 2?
Таким образом, буквы Ln (сокращение английского слова Line - строка, линия),
добавляемые к операторам ввода/вывода, осуществляют перемещение курсора в начало
следующей строки. Оператор WriteLn часто используется для пропуска пустых строк.
Перед вводом данных с помощью оператора ReadLn рекомендуется давать
поясняющий текст, используя оператор WriteLn.
Линейной будем называть ту программу, в которой операторы выполняются в
порядке следования, причем каждый оператор - только один раз..
Примеры линейных программ.
Пример 1. Даны две целые переменные a, b. Составить программу обмена значениями
этих переменных.
Решение. Введем дополнительную переменную t и выполним следующие присваивания:
t:=a; a:=b; b:=t;. Попытка обойтись без дополнительной переменной, написав: a:=b; b:=а;
не приведет к цели (безвозвратно утрачивается значение переменной a):
Program Obm;
Var
a, b, t:Integer;
Begin
Write('Задайте два целых числа: ');
ReadLn(a,b);
WriteLn('Значения переменных до обмена.');
WriteLn('a=',a,' b=',b);
{Произведем обмен значений переменных.}
t:=a;
a:=b;
b:=t;
WriteLn('Значения переменных после обмена.');
WriteLn('a=',a,' b=',b);
End.
Пример 2. Даны две целые переменные a, b. Составить программу обмена значениями
этих переменных не используя дополнительных переменных и предполагая, что
значениями целых переменных могут быть произвольные целые числа.
Решение.Существует несколько способов сделать это:
а) a:=a+b; {В переменной a будет значение a+b, а значение b не изменится}
b:=a-b; {В переменной b будет a, а значение a не изменится}
a:=a-b; {В переменной b будет a, а в переменной a будет b}
Program Obm1;
Var
a, b:Integer;
Begin
Write('Задайте два целых числа: ');
ReadLn(a,b);
WriteLn('Значения переменных до обмена.');
WriteLn('a=',a,' b=',b);
{Произведем обмен значений переменных.}
a:=a+b;
b:=a-b;
a:=a-b;
WriteLn('Значения переменных после обмена.');
WriteLn('a=',a,' b=',b);
End.
Пример 3. Введенное 4-значное число изменить так, чтобы 2 и 3 цифры поменялись
местами.
program primer;
var n,a,b,c,d:integer;
begin
write('введите n ');
readln (n);
a:=n div 1000;
b:=n div 100 mod 10;
c:=n div 10 mod 10;
d:=n mod 10;
n:= a*1000+c*100+b*10+d;
writeln('результат', n);
readln;
end.
Задания для самостоятельной работы
1. Составить программу, которая производит пересчет суммы в рублях в евро.
Вводится текущий курс евро и сумма в рублях. Результат вывести с двумя
десятичными знаками.
2. Составить программу, которая переводит значение температуры из шкалы Цельсия
в шкалу Фаренгейта по формуле TF = 1.8TC + 32
3. Составить программу, которая переводит значение веса из фунтов в килограммы (1
фунт=409,5 г).
4. Дана масса в граммах. Найти число полных килограммов в ней.
5. Составить программу, которая преобразует введенное с клавиатуры дробное число
в денежный формат. Например, число 45.7 должно быть преобразовано к виду 45
руб. 70 коп.
6. Составить программу для перевода суммы из долларов в рубли. Вводится текущий
курс доллара и сумма в долларах. Результат должен выводиться в денежном
формате, например, 345 руб. 50 коп.
7. Составить программу для перевода суммы из евро в рубли. Вводится текущий курс
евро и сумма в долларах. Результат должен выводиться в денежном формате,
например, 745 руб. 30 коп.
8. Составить программу для вычисления величины дохода по вкладу. Вводятся
величина вклада, процентная ставка(в процентах годовых) и время хранения (в
днях).
9. Написать программу для вычисления стоимости поездки на дачу (туда и обратно.
Исходные данные: расстояние до дачи (в км), количество бензина, которое
потребляет автомобиль на каждые 100 км, цена 1 л бензина.
10. Написать программу для вычисления стоимости покупки, состоящей из нескольких
тетрадей и такого же количества обложек к ним. Результат должен выводиться в
денежном формате, например, 145 руб. 30 коп.
11. Составить программу пересчета величины временного интервала, заданного в
минутах в величину, выраженную в часах и минутах.
12. Составить программу пересчета величины временного интервала, заданного в
секундах в величину, выраженную в часах, минутах и секундах.
13. Вычислить расстояние между двумя точками с координатами (x1, y1) и (x2, y2).
Результат вывести с двумя десятичными знаками.
14. Вычислить площадь треугольника, если заданы координаты его вершин. Результат
вывести с 3-мя десятичными знаками.
15. Вычислить объем и площадь поверхности цилиндра по высоте и радиусу
основания. Результат вывести с двумя десятичными знаками.
16. Вычислить объем и площадь поверхности параллелепипеда по его длине, ширине
и высоте основания. Результат вывести с двумя десятичными знаками.
17. Вводится 4-значное число. Из его цифр получить два двузначных числа. Первое
состоит из 1 и 3 цифр исходного числа, второе – из 2-й и 4-й. Например, 3765 -> 36
и 75
18. Вводятся два 3-значных числа. Получить 6-значное число, состоящее из цифр
исходных чисел. Например, 265 и 145 -> 265145
19. Вводится 3-значное число. Из его цифр получить два двузначных числа. Первое
состоит из 1 и 3 цифр исходного числа, второе – из 2-й и 3-й. Например, 765 -> 75 и
65
20. Вводятся два числа: 2-значное и 3-значное. Получить 5-значное число, состоящее
из цифр исходных чисел. Например, 25 и 137 -> 25137
Контрольные вопросы
1.
2.
3.
4.
5.
Общие сведения о вводе-выводе данных.
Процедуры ввода данных. Read. Формат, примеры.
Процедура ReadLn. Формат, примеры.
Процедуры вывода данных. Write, WriteLn. Форматы, примеры.
В чем отличие оператора присваивания a:=5 от оператора read(a)?При каком из
этих способов ввода данных программа имеет более широкое применение?
6. Какие типы переменных использовались в Ваших программах?
7. Если значение переменной равно 40 000, то какого типа будет эта переменная?
Чему равно наибольшее значение для переменных этого типа?
8. Если значение переменной равно ‘А’, то какого типа будет эта переменная? А если
значение переменной будет равно ‘4’?
Download