МОСКОВСКИЙ ИНСТИТУТ РАДИОТЕХНИКИ,
ЭЛЕКТРОНИКИ И АВТОМАТИКИ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Отчет по лабораторной работе №2
Программирование на языках В/У
Студент:
Группа:
Москва 2003
СОДЕРЖАНИЕ
1 ЗАДАНИЕ 3
2 БЛОК-СХЕМА ПРОГРАММЫ 3
3 ТЕКСТ ПРОГРАММЫ 5
4 ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ 6
5 РУКОВОДСТВО ОПЕРАТОРА 10
1 ЗАДАНИЕ
Многочлен
с целыми коэффициентами представить в виде списка. Программа должна проверять на равенство многочлены P и Q.2 БЛОК-СХЕМА ПРОГРАММЫ
да
нет
нет
да
Нет
Да
Нет Да
Нет
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.