3 ТЕКСТ ПРОГРАММЫ

 

Program Project1;

{$APPTYPE CONSOLE}

Uses SysUtils;

type

spisok=^s;

s=record a,n:Integer; p:spisok; end;

var

k,m:word; b:boolean; P,Q,FstP,LP,FstQ,LQ:spisok;

BEGIN

{ФОРМИРОВАНИЕ СПИСКОВ P и Q}

Write('Kol. Elementov P:> '); ReadLn(k);

FOR m:=1 to k do BEGIN

New(P);

Write('Koef. :> '); ReadLn(P^.a); Write('Step. :> '); ReadLn(P^.n);

P^.p:=nil;

IF m=1 THEN begin FstP:=P; LP:=P; end

ELSE begin LP^.p:=P;LP:=P; end;

END;

Write('Kol. Elementov Q:> '); ReadLn(k);

FOR m:=1 to k do BEGIN

New(Q);

Write('Koef. :> '); ReadLn(Q^.a);

Write('Step. :> '); ReadLn(Q^.n);

Q^.p:=nil;

IF m=1 THEN begin FstQ:=Q; LQ:=Q; end

ELSE begin LQ^.p:=Q;LQ:=Q; end;

END;

{ПРОГРАММА}

P:=FstP;Q:=FstQ;

REPEAT

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

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

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". Программа завершает работу.



Информация о работе «Отчет по лабораторной работе №2»
Раздел: Информатика, программирование
Количество знаков с пробелами: 13235
Количество таблиц: 30
Количество изображений: 0

Похожие работы

Скачать
2727
0
6

... порядка е и истинного порядка Р. Поскольку мантисса результата формируется путем сдвига исходного числа влево, то регистры R2, R3 используем для размещения мантиссы результатов.   Лабораторная работа №1а   Преобразование целого числа в вещественное Преобразование целого числа в вещественное реализуется по формуле: . Структурная схема преобразования выглядит следующим образом: . ...

Скачать
9821
27
11

... скоростью вдоль линии индукции магнитного поля и по окружность в плоскости, перпендикулярной магнитному полю. Результирующим движением является движение по спирали с шагом h. Рис. 2 В настоящей работе для определения удельного заряда электрона e/m используется цилиндрический магнетрон. Магнетроном называется двухэлектродная электронная лампа (диод), в которой электроны, летящие от катода к ...

Скачать
6751
13
2

... end; END; Write('Element E:> '); ReadLn(E); New(L); L^.i:=E; L^.p:=FstL^.p; FstL^.p:=L; L:=FstL; While L<>nil do begin Write(L^.i,' '); L:=L^.p; end; ReadLn; END. 4 ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ   ТАБЛИЦА ТИПОВ, ИСПОЛЬЗУЕМЫХ ПРОГРАММОЙ Имя типа Тип Назначение spisok Тип динамической переменной со структурой s s record запись, содержащая переменную ...

Скачать
10713
5
2

... на скорость реакции. Чем больше поверхность вещества, тем больше скорость протекания гетерогенной реакции. 2.4 Влияние концентрации реагирующих веществ на состояние равновесия. 2.4.1 Описание хода работы. В стакан налито 10 мл 2-х %-го раствора FeCl3 и добавлено 10 мл 1 %-го раствора KCNS. Полученный раствор разделен на 4 пробирки. В 1-ю добавляется 3-5 капель концентрированного раствора ...

0 комментариев


Наверх