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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 00:47   #1
kuy
Форумчанин
 
Аватар для kuy
 
Регистрация: 05.09.2011
Сообщений: 109
По умолчанию Линейный динамический список

Ребят, помогите поправить код. Не получается удалить из списка ученика, которого нужно с клавиатуры ввести.
Вот код:
Код:
program spisok;
{$APPTYPE CONSOLE}
uses
  SysUtils;

type uk=^rec;
       rec = record
       surname : string[15];{ Фамилия}
       mark : integer;  { оценка}
       v : uk           { указатель на следующую запись}
end;

const
  n=5;
  mas:array[1..n] of rec = ((surname:'Popov';mark:87),
                              (surname:'Kozlov';mark:61),
                              (surname:'Melnechenco';mark:61),
                              (surname:'Gysev';mark:70),
                              (surname:'Titov';mark:70));

var  tek, pred, perv, rab : uk; {указатели на текущую, предыдущую, первую, рабочую записи}
     k : integer;
     f:string;
begin
{чтение из массива}
new (tek); {выделение памяти}
tek^.surname:=mas[1].surname;
tek^.mark:=mas[1].mark;
tek^.v := nil; {следующей записи пока нет}
pred:=tek; perv:=tek;
for k:=2 to n do
 begin
  new (tek); {выделение памяти}
  pred^.v := tek;
  tek^.surname:=mas[k].surname;
  tek^.mark:=mas[k].mark;
  tek^.v:=nil; {следующей записи пока нет}
  pred:=tek;
 end;

k:=0;
if perv<>nil then {список не пуст}
 begin
  tek:=perv;
  while tek<>nil do
   begin
    inc(k);
    writeln(k,') ',tek^.surname,', mark ', tek^.mark);
    tek:=tek^.v {переход к след. записи}
   end;
 end;

write('Input surname: '); readln(f);//ввод фамилии для удаления
tek:=perv; {указатель-на начало списка}
pred:=nil;  {предыдущей записи пока нет}
while tek<>nil do
 begin
  if tek^.surname=f then
   begin
    rab:=tek;
    if tek<>perv then  pred^.v:=tek^.v
     else  perv:=tek^.v;
    if tek^.v=nil then {запись последняя}
     if tek<>perv then{список не пуст}
      pred^.v:=nil
       else {список пуст} perv:=nil;
    dispose (rab);
   end
  else pred:=tek;{переставляем указатель  предыдущей записи, если текущую запись не удаляли}
  tek:=tek^.v; {переход к следующей записи}
 end;
{печать оставшихся записей}
writeln ('Ostalos:');
k:=0;
if perv<>nil then {список не пуст}
 begin
  tek:=perv;
  while tek<>nil do
   begin
    inc(k);
    writeln(k,') ',tek^.surname,', mark ', tek^.mark);
    tek:=tek^.v {переход к след. записи}
   end;
 end;
readln;
readln;
end.
Вот что мне в консоли на секунду выдаёт после введения фамилии:
kuy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейный список. GripEnemy Visual C++ 0 05.12.2011 22:35
линейный список Nelson1992 Помощь студентам 1 26.11.2011 01:40
C++,линейный список katerunechka Помощь студентам 0 08.10.2011 11:38
Линейный список doter Общие вопросы C/C++ 1 20.02.2011 21:36
Линейный список Black_Ak24 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2008 15:00