Выбрать главу

3E1, –2e+10, +1.234E– 10, 65.2e+20.

Часть числа до буквы E называется мантиссой, а после буквы E – порядком или экспонентой.

Задание 8 (часть 1)

1. Запишите в языке Pascal в формате с плавающей точкой следующие числа:

2.99•1033, -0.21•10-10, 35.6•108, 1200000, 0.000015 (5 баллов)

2. Запишите в языке Pascal в формате с фиксированной точкой следующие числа:

2.71828, 1.25•102, -1.5•10-1 (3 балла)

- 25 -

Вывод вещественных чисел с помощью оператора write/writeln происходит обычным способом. При выводе мы можем применять форматы вывода, отделяя их от переменной двоеточием. Формат вывода может состоять из одного или двух чисел, разделенных двоеточием (см. пример). При указании двух чисел первое определяет число позиций, резервируемых для вывода всего числа, а второе – число позиций для дробной части. Если в качестве формата вывода используется одно число, то оно определяет число позиций, резервируемых для вывода всего числа, а само число выводится в формате с плавающей точкой. В этом случае рекомендуется задавать значение формата не меньше 10, так как под экспоненту отводится пять позиций и еще две позиции выделяется под знак числа и десятичную точку. Если при выводе формат числа не указывать, то Pascal попытается вывести число наиболее компактным способом. Лучше уяснить действие форматов поможет следующий пример:

Program Formats;

Uses CRT;

var x : real;

begin

x:=1234.567;

writeln(x);

writeln(x:8:3);

writeln(x:8:2);

writeln(x:8:1);

writeln(x:12);

writeln(x:14);

end.

Рассмотрим еще одну программу, которая строит таблицу длин окружностей радиусами от 0.1 до 1 см с шагом 0.1 (заметьте, что для числа π используется встроенная константа pi):

Program Table;

Uses CRT;

var r, s : real;

begin

r:=0.1; // Начальное значение

repeat

s:=2*pi*r; // Вычисление длины

writeln (r:3:1,s:6:2); // Вывод

r:=r+0.1; // Увеличение радиуса на 0.1

until r>1.0; // Условие окончания цикла

end.

Задание 8 (часть 2)

3. Проанализируйте пример и постройте аналогичную программу, вычисляющую площади круга (по формуле s = πr2). (2 балла)

4. Напишите программу, которая вводила бы с клавиатуры значения времени и скорости, вычисляла бы пройденный путь. (3 балла)

5. Напишите программу, которая вводила бы с клавиатуры 10 вещественных чисел и вычисляла бы их среднее арифметическое. (5 баллов)

6. * Напишите программу, которая вводила бы градусы, минуты и секунды дуги переводила их в градусы и его десятичные доли.

- 26 -

Тема №9. Подпрограммы-функции

При решении сложных задач разумно разбить алгоритм на несколько более простых составляющих. В языке Pascal существуют специальные средства для этого – подпрограммы. Есть два вида подпрограмм: процедуры и функции. Функция получает информацию от вызывающей программы через свои параметры. Параметры, описанные в заголовке функции, называются формальными параметрами. Параметры, указанные при вызове функции называют фактическими. Типы и число фактических параметров должны соответствовать типу и числу формальных параметров. Следующий пример иллюстрирует работу функций.

Program Table;

Uses CRT; // Подключение модулей

// Описания функций, требующихся в программе

function cube(x:real):real; // возведение в куб

begin

cube:=x*x*x; // имени функции присваивается значение

end;

function sign(x:real):integer; // вычисление знака числа

begin

if x>0 then sign:=1

else if x=0 then sign:=0

else sign:=-1;

end;

// ==== Начало главной программы ==========

var a : real; // блок описания переменных

const a1 = -5.0; // блок описания констант (постоянных)

a2 = +5.0;

st = 0.5;

begin

a:=a1;

while (a<=a2) do

begin

writeln(a:4:1,cube (a):10:3,sign(a):3); // вызов функций

a:=a+st;

end;

end.

Обратите внимание, что внутри тела функции (заключенного в операторные скобки beginend) вы обязаны хотя бы один раз имени функции присвоить значение. В этой программе также используется новый материал, не связанный с функциями, – это константы. Значение констант задается через знак равенства (а не присваивания). Тип константы определяется из типа присваиваемого значения. Константы, в отличие от переменных, не могут менять свое значение.

- 27 -

Рассмотрим еще один пример, в котором функция имеет два параметра разного типа.

Program Power2;

Uses CRT;

function power(x : real; n : integer) : real; // возведение в степень

var i : integer; // локальные переменные r : real;

begin

r:=1.0;

for i:=1 to n do r:=r*x; // накопление произведения

power:=r; // результат присвоить имени функции

end;

// ==== Начало главной программы ================

var i : integer; // блок описания переменных

begin

for i:=1 to 10 do

writeln(i:2,power (2.0,i):6:0);

end.

В данном примере функция имеет два формальных параметра (типа real и типа integer), а также две локальных переменных. Имена локальных переменных действуют только внутри тела функции. Переменная i в главной программе, и переменная i внутри функции – это две разных переменных. При вызове функции первый фактический параметр соответствует первому формальному параметру. Второй параметр – второму.

Задание 9 1. Модифицируйте последний пример таким образом, чтобы функция power вычисляла правильно не только натуральные степени, но и отрицательные.

Напоминание:

x-n = 1 / xn.

Подсказка: следует использовать оператор if, а также функцию abs(n), которая вычисляет модуль числа.

(5 баллов)

2. Напишите функцию, вычисляющую факториал числа n! =1•2•3• ... •n.

Подсказка: ее несложно сделать, путем модификации функции power.