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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 15:31   #1
Liagushka
 
Регистрация: 20.09.2011
Сообщений: 7
По умолчанию Удаление элемента из списка по индексу

Задача:
Из однонаправленного списка удалить элемент, указанного номера.
Программу написал, но у меня она игнорирует одну процедуру, а именно самую главную - выбрать номер элемента, который нужно удалить. Все процедуры работают, а 1 просто пропускает\игнорирует. Помогите найти ошибку.
Код:
program sukurti_sarasa;
uses
crt;
type
sar = ^el;
el = record
duom : integer;
kitas : sar;
end;
procedure Sukurti_sar ( var pr, pab : sar );
var g : sar;
x : integer;
begin
pr := nil;
pab := nil;
writeln('Создаём список. Введите целые числа.');
writeln('Жедая закончить, ввведите 0.');
readln ( x );
while x <> 0 do
begin
if pr = nil
then
begin
new( g );
g^.duom := x;
g^.kitas := nil;
pr := g;
pab := g;
readln( x );
end
else
begin
new( g );
g^.duom := x;
g^.kitas := nil;
pab^.kitas := g;
pab := g;
readln( x );
end
end;
writeln('Список успешно создан');
end;
Procedure DelElemPos(var pr:sar;posi:integer);
var
  i:integer;
  tmp:sar;
begin
  if posi<1 then
    exit;
  if pr=nil then
  begin
    Write('ппп');
    exit
  end;
  i:=1;
  tmp:=pr;
  while (tmp<>nil) and (i<>posi) do
  begin
    tmp:=tmp^.kitas;
    inc(i)
  end;
  if tmp=nil then
  begin
    Writeln('«¥¬¥*â* á ¯®à浪®¢ë¬ *®¬¥à®¬ ' ,posi, ' *¥â ¢ ᯨ᪥.');
    writeln('‚ ᯨ᪥ ¢á¥£® ' ,i-1, ' í«¥¬¥*â*(®¢).');
    exit
  end;
  DelElemPos ( pr, posi);
  Writeln('«¥¬¥*â ã¤*«ñ*.');
end;
procedure Spausdinti( pr : sar );
var s : sar;
begin
writeln('Выводим список:' );
s := pr;
while s <> nil do
begin
write( s^.duom, ' ');
s := s^.kitas;
end;
writeln;
end;
procedure Naikinti_sar( var pr, pab : sar );
var s : sar;
begin
writeln('Удаляем список с конца.');
while pr <> nil do
begin
s := pr;
if pab <> pr
then
begin
while s^.kitas <> pab do
s := s^.kitas;
writeln(' Удаляем ', s^.kitas^.duom);
pab := s;
dispose( s^.kitas );
end
else
begin
writeln(' Удаляем первый: ', s^.duom);
dispose( s );
pr := nil;
pab := nil;
end;
end;
end;
var pradzia, pabaiga : sar;
begin
Sukurti_sar ( pradzia, pabaiga );
Spausdinti ( pradzia );
Naikinti_sar ( pradzia, pabaiga);
readln;
end.

Последний раз редактировалось Liagushka; 06.03.2012 в 16:01.
Liagushka вне форума Ответить с цитированием
Старый 06.03.2012, 15:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

перед копированием текста (и вставкой его на форум) обязательно включите русскую расскладку клавиатуры.
это с высокой долей вероятности поможет сохранить комментарии на русском языке (сейчас они у Вас потерялись... )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.03.2012, 15:58   #3
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Ну она как бы и не используется.
Нужно вызвать эту процедуру со нужными параметрами
Код:
begin
Sukurti_sar ( pradzia, pabaiga );
Spausdinti ( pradzia );
Naikinti_sar ( pradzia, pabaiga);
 <----  DelElemPos( [sar]? , [posi]? );
readln;
end.
AlexDark вне форума Ответить с цитированием
Старый 06.03.2012, 16:11   #4
Liagushka
 
Регистрация: 20.09.2011
Сообщений: 7
По умолчанию

А какие именно нужно вставить? При вставке
Код:
pradzia
pabaiga
я получаю - Got SAR, expected SMALLINT. При вставке другого параметра - Identifier not found ***.
Liagushka вне форума Ответить с цитированием
Старый 06.03.2012, 16:24   #5
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

первый параметр либо pradzia, либо pabaiga... (шо эти слова ваще значат о_О)
второй - цифра - индекс элемента
AlexDark вне форума Ответить с цитированием
Старый 06.03.2012, 16:33   #6
Liagushka
 
Регистрация: 20.09.2011
Сообщений: 7
По умолчанию

AlexDark названия по указанию сделал такие.

P.S. Сделал так, всё равно не работает:
Код:
var pradzia, pabaiga : sar; i: integer;
begin
Sukurti_sar ( pradzia, pabaiga );
DelElemPos ( pradzia, i );
Spausdinti ( pradzia );
Naikinti_sar ( pradzia, pabaiga);
readln;
end.

Последний раз редактировалось Liagushka; 06.03.2012 в 18:48.
Liagushka вне форума Ответить с цитированием
Старый 06.03.2012, 18:49   #7
Liagushka
 
Регистрация: 20.09.2011
Сообщений: 7
По умолчанию

Есть у кого-нибудь идеи почему программа не выполняет 1 процедуру? Возможна ли, что причина в самой процедуре?
Liagushka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента из списка bpystep Помощь студентам 4 09.07.2010 14:55
Удаление элемента из списка Ghost_gg Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2010 20:43
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54
удаление элемента из списка aurora_87 Общие вопросы C/C++ 1 18.06.2009 14:02