Включить после каждого элемента списка с максимальным значением его копию - Pascal
Формулировка задачи:
Дан список из n целых чисел а1,а2,....,аn. Включить после каждого элемента с максимальным значением его копию(продублировать элемент).
Решение задачи: «Включить после каждого элемента списка с максимальным значением его копию»
textual
Листинг программы
const
maxRandomValue = 10;
type
tList = ^rList;
rList = record
a : Integer;
n : tList;
end;
function CreateRandomList(n : Integer) : tList;
var
Cur : tList;
begin
if n <= 0 then
CreateRandomList := nil
else
begin
New(Cur);
Cur^.a := Random(maxRandomValue);
CreateRandomList := Cur;
while n > 1 do
begin
New(Cur^.n);
Cur := Cur^.n;
Cur^.a := Random(maxRandomValue);
Dec(n);
end;
Cur^.n := nil;
end;
end;
function MaxList(a : tList) : Integer;
var
m : Integer;
begin
MaxList := 0;
if a = nil then Exit;
m := a^.a;
while a <> nil do
begin
if a^.a > m then m := a^.a;
a := a^.n;
end;
MaxList := m;
end;
procedure ModificationList(m : Integer; var a : tList);
var
Cur, Next : tList;
begin
Cur := a;
while Cur <> nil do
if Cur^.a = m then
begin
Next := Cur^.n;
New(Cur^.n);
Cur := Cur^.n;
Cur^.a := m;
Cur^.n := Next;
Cur := Next;
end
else
Cur := Cur^.n;
end;
procedure OutList(a : tList);
var
Cur : tList;
begin
if a = nil then WriteLn('<список пуст>')
else
begin
Cur := a;
while Cur <> nil do
begin
Write(#32, Cur^.a);
Cur := Cur^.n;
end;
WriteLn;
end;
end;
var
n, m : Integer;
a : tList;
begin
Randomize;
Write('Число элементов списка: n = '); ReadLn(n);
a := CreateRandomList(n);
Write('Список a:'); OutList(a);
m := MaxList(a); WriteLn('Максимальное значение = ', m);
ModificationList(m, a);
Write('Список a:'); OutList(a);
end.
Объяснение кода листинга программы
- Объявляются константа
maxRandomValueсо значением 10 и типtListс указателем на записьrListс полямиa(целое число) иn(указатель на tList). - Создается функция
CreateRandomListс параметромn, которая возвращает tList. Еслиnменьше или равно 0, то функция возвращает nil, иначе инициализируется новая переменнаяCurс указателем на tList, в которую записывается случайное число от 0 доmaxRandomValue. Затем создается список случайных чисел длинойn. - Создается функция
MaxListс параметромa, которая возвращает максимальное значение из списка. Инициализируется переменнаяmи происходит поиск максимального значения в списке. - Создается процедура
ModificationListс параметрамиm(максимальное значение) иa(список), которая добавляет после каждого элемента списка с максимальным значением его копию. - Создается процедура
OutListс параметромa, которая выводит список на экран. - В основной части программы инициализируется переменная
n(длина списка),m(максимальное значение) иa(список). Затем инициализируется генератор случайных чиселRandomize. Пользователю предлагается ввести количество элементов списка, затем создается список случайных чисел и выводится на экран. Вычисляется максимальное значение, после чего список модифицируется и выводится на экран снова.