• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Динамический список, Паскаль

andrew_ryaba

Ученик
Регистрация
30 Ноя 2013
Сообщения
11
Реакции
0
Баллы
0
Динамический список, Паскаль

Здравствуйте! Не могли бы вы мне помочь с такой задачей:
Описать процедуры
а)которая вставляет в непустой список L пару новых элементов Е1 и Е2 перед его последним элементом
б)определяет, сколько раз входит элемент Е в список L и каждое значение Е заменяет на среднее арифметическое чисел,

находящихся до числа Е
Знаю, как добавить элемент на последнее место, но как на предпоследнее?
А по поводу второй процедуры пока вообще не знаю, как...

Program Spisok;
uses
crt;
type
Tinf=integer;
List=^TList;
TList=record
data:TInf; {данные, хранимые в элементе}
next:List; {указатель на следующий элемент списка}
end;
var
Spis,tmpl:List;
znach:integer;
ch:char;
f: text;

procedure sozdanie_spiska(spis1:List);
var first,p1,p2:List;
begin
assign (f,'spisok.txt');
first:=nil;
while not seekeof (f) do begin
new (P1);
read (f, p1.data);
if first=nil then first:= p1 else p2^.next:= p1;
p2:=p1;
end;
p2^.next:= nil; end;

procedure Print(spis1:List);
begin
if spis1=nil then
begin
writeln('Список пуст.');
exit;
end;
while spis1<>nil do
begin
Write(spis1^.data, ' ');
spis1:=spis1^.next
end;
end;

{Процедура добавления нового элемента в односвязный список}
procedure AddElem(var spis1:List;znach1:TInf);
var
tmp:List;
begin
begin
tmp:=spis1;
while tmp^.next<>nil do
tmp:=tmp^.next; {ставим tmp на последний элемент списка}
GetMem(tmp^.next,sizeof(TList)); {создаём следующий элемент}
tmp:=tmp^.next; {переносим tmp на новый элемент}
end;
tmp^.next:=nil; {зануляем указатель}
tmp^.data:=znach1; {заносим значение}
end;

BEGIN
sozdanie_spiska(spis);
repeat
clrscr;
Write('Программа для работы со ');
TextColor(4);
Writeln('списком.');
TextColor(7);
Writeln('Выберите желаемое действие:');
Writeln('1) процедура 1.');
Writeln('2) Вывод списка.');
Writeln('3) процедура 2.');
writeln;
ch:=readkey;
case ch of
'1':begin
write('Введите значение добавляемого элемента: ');
readln(znach);
AddElem(Spis,znach);
end;
'2':begin
clrscr;
Print(Spis);
readkey;
end;
'3':begin

end;
end;
until ch='8';
FreeStek(Spis);
end.
 
Назад
Сверху