- •Лабораторная работа 1 -2. Основные этапы решения задач
- •Задания для самостоятельной работы
- •Лабораторная работа 3 -4. Файлы и записи
- •I. Файлы
- •Переписать из текстового файла f в файл g строки в перевернутом виде.
- •Задания
- •II. Записи
- •Пример: Даны два рациональных числа(дроби), опишите их, используя структуру данных запись (числитель, знаменатель). Привести их к несократимому виду, найди их сумму.
- •Задания
- •Лабораторная работа 5-6 Модули
Лабораторная работа 5-6 Модули
Всякий модуль Паскаля имеет следующую структуру:
Unit <имя_модуля>;
interface
<интерфейсная часть>;
implementation
< исполняемая часть >;
begin
<инициирующая часть>;
end.
Здесь UNIT – зарезервированное слово (единица); начинает заголовок модуля;
<имя_модуля> - имя модуля (правильный идентификатор);
INTERFACE – зарезервированное слово (интерфейс); начинает интерфейсную часть модуля;
IMPLEMENTATION – зарезервированное слово (выполнение); начинает исполняемую часть модуля;
BEGIN – зарезервированное слово; начинает инициирующую часть модуля; причем конструкция begin <инициирующая часть> необязательна;
END – зарезервированное слово – признак конца модуля.
Пример: создать модуль Паскаля, реализующий сложение и вычитание комплексных чисел с помощью процедур:
Unit complexn; Interface type complex= record re, im: real; end; procedure AddC (x, y: complex; var z: complex); procedure SubC (x, y: complex; var z: complex); const c: complex= (re: 0.1; im: -1); implementation procedure AddC; begin z.re:= x.re + y.re; z.im:= x.im + y.im; end; {AddC} procedure SubC; begin z.re:= x.re - y.re; z.im:= x.im - y.im; end; {SubC} end.
Текст этого модуля следует поместить в файл complexn.pas . Вы можете его откомпилировать, создав TPU -файл.
В следующей программе осуществляются арифметические операции над комплексными числами:
Program primer; Uses complexn; Var a,b,c: coplex; begin a.re:= 1; a.im:= 1; b.re:= 1; b.im:= 2; AddC(a, b, c); Writeln (‘ сложение :’, c.re: 5:1, c.im: 5:1, ‘i’); SubC (a, b, c); Writeln (‘ вычитание :’, c.re: 5:1, c.im: 5:1, ‘i’); End.
После объявления Uses complexn программе стали доступны все объекты, объявленные в интерфейсной части модуля complexn . При необходимости можно переопределить любой из этих объектов, как произошло, например, с типизированной константой c , объявленной в модуле Паскаля. Переопределение объекта означает, что вновь объявленный объект «закрывает» ранее определенный в модуле одноименный объект. Чтобы получить доступ к «закрытому» объекту, нужно воспользоваться составным именем: перед именем объекта поставить имя модуля и точку. Например :
Writeln (complexn.c.re: 5: 1, complexn.c.im: 5: 1);
Этот оператор выведет на экран содержимое «закрытой» типизированной константы, объявленной в модуле Паскаля из предыдущего примера.
Задания
I. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над обыкновенными дробями вида P/Q (P — целое, Q — натуральное): 1) сложение; 2) вычитание; 3) умножение; 4) деление; 5) сокращение дроби; 6) возведение дроби в степень N (N — натуральное).
Используя этот модуль, решить задачи:
1. Дан массив A — массив обыкновенных дробей. Найти сумму всех дробей, ответ представить в виде несократимой дроби. Вычислить среднее арифметическое всех дробей, ответ представить в виде несократимой дроби.
2. Дан массив A — массив обыкновенных дробей. Отсортировать его в порядке возрастания.
II. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над комплексными числами: 1) сложение; 2) вычитание; 3) умножение; 4) деление; 5) вычисление модуля комплексного числа; 6) возведение комплексного числа в степень n (n — натуральное).
Комплексное число представить следующим типом:
Type Complex = Record
R, M : Real; {действительная и мнимая часть числа}
End;
Используя этот модуль, решить задачи:
1. Дан массив A — массив комплексных чисел. Получить массив C, элементами которого будут модули сумм рядом стоящих комплексных чисел.
2. Дан массив A[M] — массив комплексных чисел. Получить матрицу B[N, M], каждая строка которой получается возведением в степень, равную номеру этой строки, соответствующих элементов данного массива A.
III. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций с квадратными матрицами: 1) сложение двух матриц; 2) умножение одной матрицы на другую; 3) нахождение транспонированной матрицы; 4) вычисление определителя матрицы.
Матрицу описать следующим образом:
Const NMax = 10;
Type Matrica = Array [1..NMax, 1..Nmax] Of Real;
Используя этот модуль, решить следующие задачи:
1. Решить систему линейных уравнений N-го порядка (2<=N<=10) методом Крамера.
IV. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над векторами на плоскости: 1) сложение; 2) вычитание; 3) скалярное умножение векторов; 4) умножение вектора на число; 5) длина вектора.
Вектор представить следующим типом:
Type Vector = Record
X, Y : Real;
End;
Используя этот модуль, решить задачи:
1. Дан массив A — массив векторов. Отсортировать его в порядке убывания длин векторов.
2. С помощью датчика случайных чисел сгенерировать 2N целых чисел. N пар этих чисел задают N точек координатной плоскости. Вывести номера тройки точек, которые являются координатами вершин треугольника с наибольшим углом.
V. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над натуральными числами в P-ичной системе счисления (2<=P<=9): 1) сложение; 2) вычитание; 3) умножение; 4) деление; 5) перевод из десятичной системы счисления в P-ичную; 6) перевод из P-ичной системы счисления в десятичную; 7) логическая функция проверки правильности записи числа в P-ичной системе счисления; 8) функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).
P-ичное число представить следующим типом:
Type
Chislo = Array [1..64] Of 0..8;
Используя этот модуль, решить задачи:
1. Возвести число в степень (основание и показатель степени записаны в P-ичной системе счисления). Ответ выдать в P-ичной и десятичной системах счисления.
2. Дан массив A — массив чисел, записанных в P-ичной системе счисления. Отсортировать его в порядке убывания. Ответ выдать в P-ичной и десятичной системах счисления.
VI. Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над натуральными числами в шестнадцатеричной системе счисления: 1) сложение; 2) вычитание; 3) умножение; 4) деление; 5) перевод из двоичной системы счисления в шестнадцатеричную; 6) перевод из шестнадцатеричной системы счисления в десятичную; 7) функция проверки правильности записи числа в шестнадцатеричной системе счисления; 8) функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).
Используя этот модуль, решить задачи:
1. Возвести число в степень (основание и показатель степени записаны в шестнадцатеричной системе счисления). Ответ выдать в шестнадцатеричной и десятичной системах счисления.
2. Дан массив A — массив чисел, записанных в шестнадцатеричной системе счисления. Отсортировать его в порядке убывания. Ответ выдать в шестнадцатеричной и десятичной системах счисления.
VII. Определим граф как набор точек, некоторые из которых соединены отрезками, подграф — граф, подмножество данного графа. Реализовать в виде модуля набор подпрограмм, определяющих: 1) число точек в графе; 2) число отрезков в графе; 3) число изолированных подграфов в графе (подграфов, не соединенных отрезками); 4) диаметр графа — длину максимальной незамкнутой линии в графе (длина каждого звена — единица); 5) граф — объединение двух графов; 6) подграф — пересечение двух графов; 7) подграф — дополнение данного графа до полного (графа с тем же количеством вершин, что и в заданном, и с линиями между любыми двумя вершинами); 8) число отрезков, выходящих из каждой вершины графа; 9) при запуске должны инициализироваться переменные: Full_Graph — полный граф с числом вершин NumberOfVertix, Null_Graph — граф без отрезков с числом вершин NumberOfVertix.
Граф представить как объект
Const NumberOfVertix = 50;
Type Graph = Array[1..NumberOfVertix, 1..NumberOfVertix] Of Boolean;
Используя модуль, решить задачу: найти все правильные графы из N вершин (граф правилен, если из всех вершин выходит равное количество отрезков).
VIII. Реализовать в виде модуля набор подпрограмм для работы с длинными целыми числами (числами, выходящими за диапазон допустимых значений любого целого типа): 1) сложение; 2) вычитание; 3) умножение; 4) нахождение частного и остатка от деления одного числа на другое; 5) функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).
Длинное число представить следующим типом:
Type Tcifra = 0..9; Chislo = Array [1..1000] Of Tsifra;
Используя этот модуль, решить задачи:
1. Возвести число в степень (основание и показатель степени — длинные числа).
2. Дан массив длинных чисел. Упорядочить этот массив в порядке убывания.
IX. Реализовать в виде модуля набор подпрограмм для выполнения операций с многочленами от одной переменной (первый многочлен степени m, второй — степени n): 1) сложение; 2) вычитание; 3) умножение; 4) деление с остатком; 5) операции отношения (равно, не равно); 6) возведение в натуральную степень k одного из многочленов; 7) вычисление производной от многочлена; 8) вычисление значения в точке x0.
Многочлен представить следующим типом:
Type Mnogochlen = Array [1..500] Of Integer;
Используя этот модуль, решить задачи:
1. Найти наибольший общий делитель многочленов P(x) и Q(x).
2. Вычислить: Ps(x)-Qr(x) (s, r — натуральные).
X. Реализовать в виде модуля набор подпрограмм для работы с длинными действительными числами (числами, выходящими за диапазон допустимых значений любого действительных типа или не представленных в памяти ЭВМ): 1) сложение; 2) вычитание; 3) умножение; 4) нахождение частного от деления одного числа на другое с заданным количеством знаков после запятой; 5) функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше); 6) тригонометрические функции, где аргументом и значениями являются длинные действительные числа (указание: использовать разложение соответствующей функции в ряд).
Длинное действительное число представить следующим типом:
Type
Tsifra = 0..9;
Chislo = Array [1..1000] Of Tsifra;
LongReal = Record
Znak : 0..1; {0 - "плюс", 1 - "минус"}
Ts, Dr : Chislo {целая и дробная части}
End;
Используя этот модуль, решить задачи:
1. Возвести число в степень (основание — длинное действительное, показатель степени — длинное целое число).
2. Дан массив длинных действительных чисел. Упорядочить этот массив в порядке возрастания.
