Реферат: Отчет по лабораторной работе №2

If (P^.p=nil) and (Q^.p=nil) Then Begin

If (P^.a=Q^.a) and (P^.n=Q^.n) Then Begin Write('P = Q'); b:=true; End

Else Begin Write('P <> Q'); b:=true; End;

End;

If (P^.p<>nil) and (Q^.p<>nil) Then BEGIN

If (P^.a=Q^.a) and (P^.n=Q^.n) Then Begin P:=P^.p; Q:=Q^.p; End

Else Begin Write('P <> Q'); b:=true; End;

END;

UNTIL b=true;

ReadLn;

END .


4 ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ

ТАБЛИЦА ТИПОВ, ИСПОЛЬЗУЕМЫХ ПРОГРАММОЙ

Имя типа

Тип

Назначение

spisok

Динамическая переменная со структурой s

s

record

Запись, содержащая переменные типа integer (а, n) и ссылку (p). а используется для записи значения коэффициента многочлена, а n для степени при которой стоит этот коэффициент

ТАБЛИЦА ПЕРЕМЕННЫХ, ИСПОЛЬЗУЕМЫХ ПРОГРАММОЙ

Имя

Тип

Назначение

m

Word

Счетчик циклов

k

Word

Количество элементов в многочленах

b

boolean

Признак нахождения результата сравнения списков P и Q

P

spisok

Указатель, содержащий адрес произвольного элемента списка Р

Q

spisok

Указатель, содержащий адрес произвольного элемента списка Q

FstP

spisok

Указатель, содержащий адрес первого элемента списка Р

FstQ

spisok

Указатель, содержащий адрес первого элемента списка Q

LP

spisok

Указатель, содержащий адрес последнего элемента списка Р

LQ

spisok

Указатель, содержащий адрес последнего элемента списка Q


Вначале работы программа выводит на экран строку "Kol. Elementov P:>", после чего необходимо ввести значение количества элементов, которые будут записываться в список P. Затем происходит считывание этого значения и переменной k присваивается это значение.

Далее организуется цикл для ввода коэффициентов (а) и степеней каждого отдельного элемента (n) списка Р, начиная с элемента имеющего наибольшую степень и заканчивая коэффициентом элемента имеющего наименьшую степень. Цикл организуется операторами FOR и TO. Начиная с m, принимающего значение 1, до значения переменной k (количество элементов в списке) программа выполняет следующее:

- С помощью процедуры New резервирует место в памяти ЭВМ под динамическую переменную, адрес которой содержит указатель P.

- Выводит на экран строку, в которой написано "Koef. :>". После вывода строки программа ждет ввода значения коэффициента элемента. После ввода значения оно присваивается в поле а динамической переменной структуры s, на которую ссылается указатель Р.

- Выводит на экран строку, в которой написано "Step. :>". После вывода строки программа ждет ввода значения степени элемента. После ввода значения оно присваивается в поле n динамической переменной структуры s, на которую ссылается указатель Р. В поле p записывается значение nil.

- Проверяется условие: если m равно 1, что соответствует первому элементу списка, тогда программа присваивает значение указателя Р указателям FstР (указатель, содержащий адрес первого элемента списка) и LР (указатель, содержащий адрес последнего элемента списка). То есть указатель FstL будет содержать адрес первого элемента списка. А иначе если m не равно 1, что соответствует второму и последующим элементам списка, программа присваивает ссылке последнего элемента списка, на который указывает указатель LР значение указателя Р, и указателю LР присваивает адрес указателя Р. Элемент, на который ссылается указатель Р становится последним в списке.

На этом цикл оператора FOR завершается. Таким образом происходит заполнение списка Р, который содержит значения коэффициентов и степеней всех элементов многочлена вида .

После этого программа выводит на экран строку "Kol. Elementov Q:>", после чего необходимо ввести значение количества элементов, которые будут записываться в список Q. Затем происходит считывание этого значения и переменной k присваивается это значение.

Далее организуется цикл аналогичный циклу записи элементов списка Р. Вместо Р здесь используется указатель Q, вместо FstP указатель FstQ, который содержит адрес первого элемента списка Q, а вместо LP используется LQ, который содержит адрес последнего элемента списка Q. Таким образом формируется два списка Р и Q.

Указателям Р и Q присваивается адрес первого элемента списков Р и Q, которые содержатся соответственно в указателях FstР и FstQ. Затем организуется цикл с помощью операторов REPEAT и UNTIL, который выполняется до тех пор пока переменная b (признак нахождения результата сравнения списков P и Q) не станет равным true.

1) Проверяется условие с помощью оператора IF. Если значение поля р динамической переменной структуры s, на которую указывает указатель Р, не равно значению nil и это же поле динамической переменной структуры s, на которую указывает указатель Q, равно значению nil ИЛИ наоборот значение поля р динамической переменной структуры s, на которую указывает указатель Р, равно значению nil и это же поле динамической переменной структуры s, на которую указывает указатель Q, не равно значению nil, то тогда выполняется следующее. На экран выводится строка "P <> Q" и переменной b присваивается значение true. Это соответствует тому, что один из списков содержит меньшее количество элементов, чем в другом. Соответственно многочлены не могут быть равны друг другу.

2) Проверяется условие с помощью оператора IF. Если значение поля р динамической переменной структуры s, на которую указывает указатель Р, равно значению nil и это же поле динамической переменной структуры s, на которую указывает указатель Q, равно значению nil, что соответствует адресам последних элементов двух списков, то тогда проверяется равенство коэффициентов и степеней последних элементов списков Р и Q. Если значения полей а динамических переменных структуры s, на которые указывают указатели Р и Q, равны друг другу, что соответствует тому что все предыдущие элементы этих списков были равны и последние элементы тоже равны. Тогда на экран выдается строка "P = Q" и переменной b присваивается значение true. А иначе на экран выводится строка "P <> Q" и переменной b присваивается значение true. Это соответствует тому, что все элементы кроме последних в списках равны.

3) Проверяется условие с помощью оператора IF. Если значение поля р динамической переменной структуры s, на которую указывает указатель Р, не равно значению nil и это же поле динамической переменной структуры s, на которую указывает указатель Q, не равно значению nil, что соответствует адресам не последних элементов двух списков, то тогда проверяется равенство коэффициентов и степеней последних элементов списков Р и Q. Если они равны, то тогда указателям присваивается значение следующих элементов списка, т. е. значения полей р динамической переменной структуры s, на которую они в данный момент ссылаются. И программа будет сравнивать в следующем цикле следующие элементы списка. Иначе на экран выводится строка "P <> Q" и переменной b присваивается значение true. Это соответствует тому, что какой-то элемент из одного списка отличается от соответствующего ему элемента другого списка. Соответственно многочлены не могут быть равны друг другу.

В результате этого цикла определяется равенство списков Р и Q.

Далее программа ждет нажатия на клавишу "Enter". Программа завершает работу.


К-во Просмотров: 241
Бесплатно скачать Реферат: Отчет по лабораторной работе №2