Отчет по лабораторной работе №2 (45088)

Посмотреть архив целиком



МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ,

ЭЛЕКТРОНИКИ И АВТОМАТИКИ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)







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

Программирование на языках В/У








Студент:

Группа:






Москва 2003


СОДЕРЖАНИЕ


1 ЗАДАНИЕ 3

2 БЛОК-СХЕМА ПРОГРАММЫ 3

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

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

5 РУКОВОДСТВО ОПЕРАТОРА 10


1 ЗАДАНИЕ


Многочлен с целыми коэффициентами представить в виде списка. Программа должна проверять на равенство многочлены P и Q.


2 БЛОК-СХЕМА ПРОГРАММЫ


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

ReadLn(k);


m:=1



New(P);

Write('Koef. :> ');

ReadLn(P^.a);

Write('Step. :> ');

ReadLn(P^.n);

P^.p:=nil;


m:=m+1






FstP:=P;

LP:=P;


да



LP^.p:=P;

LP:=P;


нет


нет


да


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

ReadLn(k);


m:=k



New(Q);

Write('Koef. :> ');

ReadLn(Q^.a);

Write('Step. :> ');

ReadLn(Q^.n);

Q^.p:=nil;



m:=m+1




FstQ:=Q;

LQ:=Q;


да



нет



LQ^.p:=Q;

LQ:=Q;

нет


да

P:=FstP;

Q:=FstQ;







Нет






Да

Write('P <> Q');

b:=true;






Нет Да






Нет





Да


Write('P = Q');

b:=true;

Write('P <> Q');

b:=true;









Нет Да





Нет





Да










ReadLn

Да Нет





P:=P^.p; Q:=Q^.p;

Write('P <> Q');

b:=true;



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. Это соответствует тому, что все элементы кроме последних в списках равны.


Случайные файлы

Файл
72914-1.rtf
144567.rtf
113043.rtf
14697.rtf
35519.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.