Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по программированию..pdf
Скачиваний:
10
Добавлен:
15.11.2022
Размер:
12.2 Mб
Скачать

Опишем еще одну функцию: возведение натурального числа в нату­ ральную степень (ап).

Function PowerCA, N Longlnt) Longlnt; {файл power.inc>

Var I, St Longlnt;

Begin

St := 1;

For I :■ 1 To N Do

St := St * A;

Power :■ St

End;

А теперь составим основную программу, решающую поставленную задачу. В ней будут использованы описанные выше функции.

Program Example1;

Var Н, S

Integer;

{$1 digits.inc} {подхточение внешней функции из файла digits.inc,

 

вычислявшую количество цифр в записи числа}

{$1 power.inc} {подключение внешней функции из файла power.inc,

(

вычисляющую результат возведения числа А в степень N}

Begin

 

Мтitе('Введите натуральное число: О; ReadLn(N);

{для определения последней цифры числа N берется остаток от деления этого числа на 10, а для определения первой

цифры N делится на 10, возведенное в степень на единицу меньшую, чем количество цифр в записи числа Ст.х. нумерация разрядов начинается с 0)}

S := N Mod 10 + N Div PowerClO, Digits(N) - 1);

WriteLnC*Искомая сумма: », S)

End.

{$1 <зшя файла>} — это директива компилятора, позволяющая в данное место текста программы вставить содержимое файла с ука­ занным именем.

Файлы с расширением .inc можно накапливать на магнитном диске, формируя таким образом личную библиотеку подпрограмм.

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

16,2. Создание и использование модулей

Далее речь пойдет о модулях: их структуре, разработке, компиляции и использовании.

распечаткой текста программы с подробными комментариями. Условие задачи. Реализовать в виде модуля набор подпрограмм для

Р

выполнения следующих операции над обыкновенными дробями вида -Q

— целое, Q — натуральное):

1)сложение;

2)вычитание;

3)умножение;

4)деление;

5)сокращение дроби;

6)возведение дроби в степень N (N — натуральное);

7)функции, реализующие операции отношения (равно, не равно,

больше или равно, меньше или равно, больше, меньше). Дробь представить следующим типом:

Type Frac = Record

Р Integer;

Q 1..32767

End;

Используя этот модуль, решить задачи:

1. Дан массив А, элементы которого — обыкновенные дроби. Найти сумму всех элементов и их среднее арифметическое, ответы предста­ вить в виде несократимых дробей.

2. Дан массив А, элементы которого — обыкновенные дроби. От­ сортировать его в порядке возрастания.

Unit Droby;

Interface

Type

Natur = 1..High(Longlnt);

Frac = Record

PLonglnt;

QNatur

End;

Procedure SokrCVar A

Frac);

Frac);

 

Procedure SummaCA,

В

Frac; Var C

 

Procedure Raznost(A, В

 

Frac; Var C

Frac);

Procedure ProizvedenieCA, В

Frac; Var C

Frac);

Procedure ChastnoeCA, В

Frac; Var C Frac);

Procedure StepenCA

Frac; N

Natur; Var C

Frac);

Function МепэЬеСА, В

Frac)

Boolean;

 

Function BolsheCA, В

 

Frac)

Boolean;

 

Function Ravno(A, В

Frac)

Boolean;

 

Function MensheRavnoCA,

В

Frac)

Boolean;

Function BolsheRavnoCA,

В

Frac)

Boolean;

Function NeRavnoCA, В Frac) Boolean;

{Раздел реализации модуля}

Implementation

{Наибольший общий делитель двух чисел - вспомогательная функция, ранее не объявленная}

Function NodEvklidCA, В

Natur)

Natur;

Begin

 

 

В Do

 

 

 

 

 

 

 

While А О

 

 

 

 

 

 

 

 

If A > В Then

 

 

Then A

:= A Mod В

 

 

If A Hod B O O

 

 

Else A

:* В

 

 

 

 

 

 

 

 

Else

 

 

 

 

 

 

:* В Mod A

 

 

If В Mod A <> 0 Then В

 

 

Else В

:■ A;

 

 

 

 

 

 

 

NodEvklid := A

 

 

 

 

 

 

End;

 

 

 

 

 

 

 

 

 

 

{Сокращение дроби}

 

 

 

 

 

 

Procedure Sokr;

 

 

 

 

 

 

 

Var M, N

Natur;

 

 

 

 

 

 

 

Begin

 

 

0

 

 

 

 

 

 

 

If A.P О

 

 

 

 

 

 

 

Then

 

 

 

 

 

 

 

 

 

 

Begin

 

 

:= Abs(A.P)

 

 

 

If A.P < 0 Then M

 

 

 

Else M

:» A.P;

{Совмещение типов, т.х. A.P - Longlnt}

N := NodEvklid(M,

A.Q);

 

 

 

 

A.P

:= A.P Div N;

 

 

 

 

 

 

 

A.q

:= A.Q

Div N

 

 

 

 

 

 

 

End

 

 

 

 

 

 

 

 

 

 

End;

 

 

 

{Сумма дробей}

 

 

Procedure Summa;

 

 

Begin

 

 

 

 

 

 

 

 

 

 

 

{Знаменатель дроби}

 

 

 

 

 

C.Q

:=» (A.q * B. q)

Div NodEvklidCA.q ,

B . q ) ;

 

{Числитель дроби}

 

 

 

* C. q

Div B.q;

 

C.P

:* A.P * C . q

Div A.q + B.P

 

Sokr(C)

 

 

 

 

 

 

 

 

 

End;

 

 

 

 

{Разность дробей}

 

Procedure Raznost;

 

Begin

 

 

 

 

 

 

 

 

 

 

 

{Знаменатель дроби}

 

 

 

 

 

c . q

:= (A.q * B. q)

Div NodEvklidCA.q, B . q ) ;

 

{Числитель дроби}

 

 

 

* C.q Div B . q;

 

C. P

A . P * C.q Div A.q - B. P

 

Sokr(C)

 

 

 

 

 

 

 

 

End;

 

 

 

 

 

 

{Умножение дробей}

Procedure Proizvedenie;

Begin

 

 

 

 

 

 

 

 

 

 

 

{Знаменатель дроби}

 

 

 

 

 

c . q

 

A.q * B . q;