
- •ПРЕДИСЛОВИЕ
- •1.1. История и классификация языков программирования высокого уровня
- •1.2. Первое (знакомство с Паскалем
- •Задания
- •Лекция 2
- •2.1. Некоторые сведения о системе ТУрбо-Паскаль
- •2.2. Способы описания языка программирования
- •Лекция 3
- •3.2. Типы данных
- •4.1. Структура Паскаль-программы
- •4.2. Арифметические операции, функции, выражения Арифметический оператор присваивания
- •Форматы процедуры write
- •Задания
- •1. Что будет напечатано программой
- •если последовательно вводятся три числа: 36, -6, 2345?
- •5.2. Функции, связывающие различные типы данных
- •Задания
- •Теперь посмотрим, как это программируется наТЛаскале.
- •Здесь
- •<параметр цикла>::= <имя простой переменной порядкового типа>
- •Задания
- •7.1. Подпрограммы-процедуры
- •7.2. Подпрограммы-функции
- •7.4. Рекурсивные подпрограммы
- •8.1. Что такое рекуррентная последовательность
- •8.2. Программирование вычислений рекуррентных последовательностей
- •Задания
- •Задания
- •6. Вывод результата.
- •Теперь будем составлять подпрограммы.
- •Задания
- •12.2. Операции над множествами
- •12.3. Примеры использования множеств
- •Красивая программа! К сожалению, ею нельзя воспользоваться для
- •В этой программе использована функция определений размера файла:
- •.Fiiesize(<HMH файловой переменной>);
- •Задания
- •14.2. Работа с файлами записей
- •Задания
- •15.2. Связанные списки
- •Лекция 16
- •16.1. Организация внешних подпрограмм
- •16,2. Создание и использование модулей
- •распечаткой текста программы с подробными комментариями.
- •выполнения следующих операции над обыкновенными дробями вида -q
- •(Р — целое, Q — натуральное):
- •1) сложение;
- •2) вычитание;
- •3) умножение;
- •4) деление;
- •5) сокращение дроби;
- •7) функции, реализующие операции отношения (равно, не равно,
- •Используя этот модуль, решить задачи:
- •При разработке модуля рекомендуется такая последовательность
- •Задания
- •Приведем текст программы целиком.
- •ЗАДАНИЯ ПО ТЕМЕ “ЛИНЕЙНЫЕ АЛГОРИТМЫ”
- •ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
- •Сортировка массивов
- •ЗАДАЧИ ПО ТЕМЕ “ОБРАБОТКА СТРОК”
- •ЗАДАНИЯ ПО ТЕМЕ “МОДУЛИ”
- •ЗАДАНИЯ ПО ТЕМЕ “ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ”
- •Задачи, предлагавшиеся на школьных олимпиадах по программированию (Пермская область)
- •Учебное издание
Опишем еще одну функцию: возведение натурального числа в нату ральную степень (ап).
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; |
|
|
|
|
|