Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

4.10. Вещественные числа в Паскале

Вот ошибочная программа

VAR a,b,y :Integer;

BEGIN

a:=10; b:=6;

y:=a/b;

WriteLn(y);

END.

Паскаль откажется выполнять эту программу, так как знает, что при делении целого на целое результате может получиться дробным, a это значит, что в ячейку у придется записывать дробное число. Но описание VAR a, b, y: Integer запрещает этo делать. Если бы мы даже вместо b=6 написали b=2 все равно Паскаль отказался бы делить

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

VAR a,b :Integer;

y :Real;

BEGIN

a:=10; b:=6;

y:=a/b;

WriteLn(y)

END.

С английского - Real (читается - "риэл") переводится как "вещественный". Под переменную - типа Real Паскаль отводит в памяти ячейку размером 6 байт.

Что мы увидим на экране в результате выполнения оператора WriteLn (у)? Если вы думаете, что 1.666666, то ошибаетесь. Переменные, описанные как Real, Паскаль выводит на экран в так называемом экспоненциальном формате (виде), с первого взгляда непонятном. Более подробно об этом и других форматах мы поговорим в разделе 14.5, а пока, чтобы заставить Паскаль выводить вещественные числа в обычном, понятном виде, допишем кое-что в оператор вывода - WriteLn (у :8:3). Это значит, что мы хотим численное значение переменной у типа Real видеть на экране в привычном виде с тремя знаками после десятичной точки, а все изображение числа не должно занимать больше восьми символов, включая целую часть, дробную часть, знак и десятичную точку. Этот оператор напечатает на экране 1.667. Здесь напечатано действительно 8 символов (3 пробела, предшествующие единице, видны вам как пустое место). Вместо восьми и трех в операторе программист может писать любые имеющие смысл числа.

Поэкспериментируйте:

(у :38:3), (у :20:10), ('Результат равен', у :8:3).

Три совета.

1. Программы, которые вы видите в книге, вводите в компьютер и выполняйте их, даже если они кажутся вам почти понятными. В ряде случаев вы получите неожиданные результаты, из чего сделаете вывод, что программы эти вы поняли не до конца.

2. В каждой из этих программ экспериментируйте, то есть разными способами изменяйте в них то, что я как раз. в этот момент объясняю. Например, если я объясняю оператор for i:=1 to 5, пробуйте for i:=t to 10.

Если вы пожалеете времени и пренебрежете этими советами, то через несколько страниц можете обнаружить трудности в понимании материала и вскоре не сможете правильно составить многие программы.

4.11. Порядок составления простой программы

Задача. Известны размеры спичечной коробки; высота - 12.41 см, ширина - 8 см, толщина - 5 см. Вычислить площадь основания коробки и ее объем.

Порядок составления программы:

1. Программист сам должен знать решение задачи. Ведь программа - это инструкция по ее решению. Нельзя давать инструкцию, не зная, как решать.

В нашем случае программист должен знать формулы для вычисления площади основания коробки и ее объема: площадь = ширина * толщина, объем = площадь * высота.

2. Нужно придумать имена переменным. Имя переменной должно говорить о ее смысле. Если смыслом является ширина коробки, то не ленитесь и не называйте ее а, потому что через полгода, разбираясь в своей полузабытой программе, вы не разберетесь, что такое a? Называйте ее shirina (если вы не знаете английского). Так делают все профессиональные программисты.

Удовлетворимся такими именами:

Shirina - ширина

Tol - толщина

Visota - высота

Рl - площадь

V - объем

3. Нужно определить, какого типа будут переменные. Поскольку ширина и толщина - целые, то и площадь будет целой. Высота и следовательно, объем - вещественные. Первые две строки программы будут такими:

VAR shirina,tol,pl:Integer;

visota,V :Real;

4. Перед вычислениями нужно задать исходные данные решения задачи. Вот следующие две строки программы:

BEGIN

shirina:=8; tol:=5; visota:=12.41;

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

pl:= shirina*tol;

V:= рl*visota;

  1. После получения результата его нужно напечатать. Действительно, все операторы присваивания компьютер выполняет "в уме". После их выполнения в ячейках памяти рl и V будут находиться числовые результаты решения задачи. Чтобы их узнать, человек в нашем случае может использовать оператор WriteLn, после чего программу можно заканчивать:

WriteLn (pl,' ',V:10:3)

END.

Обратите внимание, что, поскольку переменная V имеет тип Real, для ее вывода мы использовали формат (см. раздел 4.10).

Вот как будет выглядеть наша программа целиком:

VAR shirina,tol,pl :Integer;

visota,V :Real;

BEGIN

shirina:=8; tol:=5; visota:=12.41;

pl:=shirina*tol;

V:=pi*visota;

WriteLn(pl,' ',V:10:3)

END.

Программа напечатает два числа: 40 и 496.400.

Эту задачу можно было бы решить и гораздо более короткой программой:

BEGIN WriteLn(8*5,' ',8*5*12.41:10:3) END.

Задания 12-14

Написать программы для решения следующих задач:

12. В углу прямоугольного двора размером 50 х 30 стоит прямо угольный дом размером 20 х 10. Подсчитать площадь дома, свободную площадь двора и длину забора. Примечание: в углу, где дом, забора нет.

13. Радиус окружности равен 800. Вычислить длину окружности и площадь круга. Результаты печатать с пятью знаками после десятичной точки.

14. Автомобиль 3 ч. ехал со скоростью 80 км/ч и 2 ч. со скоростью 90 км/ч Вычислить среднюю скорость автомобиля (она равна суммарному пути, деленному на суммарное время).