Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2013, 23:38   #1
andrew_ryaba
Пользователь
 
Регистрация: 29.12.2013
Сообщений: 21
По умолчанию Динамический список Паскаль

Здравствуйте! Не могли бы вы мне помочь с такой задачей:
Описать процедуры
а)которая вставляет в непустой список 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('8) exit');
    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.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.12.2013 в 23:55.
andrew_ryaba вне форума Ответить с цитированием
Старый 30.12.2013, 09:26   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

если список не пустой, то
Код:
  while spis1^.next<>nil do
  begin
    spis1:=spis1^.next
  end;
  pred_posledn := spis1;//собс-но можно и одной переменной обойтись
  posledn := pred_posledn^.next;
а далее вставляем
Код:
  pred_posledn^.next := new(p1);
  pred_posledn := pred_posledn^.next;
  pred_posledn^.data := 123;
  pred_posledn^.next := posledn;
  // и ещё раз также для второго элемента (можно в цикл при желании обернуть)
Второе примерно так
Код:
  while spis1<>nil do
  begin
    if spis1^.data = E then begin
        if vsego_elem > 0 then 
            spis1^data := summa div vsego_elem;//или не DIV, если использовать вещественные числа
        inc(kolvo_elem_E);
    end;
    summa := summa + spis1^.data;
    inc(vsego_elem);
    spis1:=spis1^.next
  end;
  writeln('всего эл-ов Е ', kolvo_elem_E);
Переменные объявить и инициализировать (код не проверял)
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический список F1nt Общие вопросы C/C++ 0 29.04.2013 18:35
динамический список Alena_897 Visual C++ 1 29.12.2011 19:42
[РЕШЕНО] Динамический список на Делфи/Паскаль. Требуется консультации Вадим Мошев Помощь студентам 2 18.04.2011 19:37
Динамический список на Си Slame Помощь студентам 1 10.04.2011 17:39
Динамический список ... doseras JavaScript, Ajax 0 08.12.2009 17:06