Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 12.01.2018, 23:59   #1
kami_sa
Новичок
 
Регистрация: 12.01.2018
Сообщений: 4
Репутация: 10
По умолчанию Ошибка в программе PascalABC.NET. Работа с односвязным списком, указателями. "Посчитать всё элементы, у которых одинаковые соседи, добавить их количество в конец списка"

Не работает процедура res_, которая должна считать количество элементов, у которых соседи слева и справа одинаковы.
{Имеется список, элементами которого являются целые числа. Посчитать всё элементы, у которых одинаковые соседи, добавить их количество в конец списка}
Код:

type
   PNode = ^TNode;
   TNode = record
    data : integer;
    next  : PNode;
   END;
   var 
      first, q, p:PNode;
   function NewNode(d: integer; n: PNode):PNode; {Создание списка вещественных чисел}
begin
  New(Result);
  Result^.data :=d;
  Result^.next :=n;
end;
procedure write_(p:PNode); {Вывод списка}
begin
  writeln('Содержимое односвязанного списка:' );
    while p<>nil do
  begin
    write(p^.data, ' ');
    p := p^.next;
   end;
  writeln
end;
procedure Dispose_(p:PNode); {Очищение стека}
  begin
  while p<>nil do
    begin
      var p1:=p;
      p:=p^.next;
      Dispose(p1);
    end;
end;

procedure res_ ( var p: PNode);
var
  m: PNode;
  count: byte;
  a, b: integer;
begin
  count:=0;
  m:=p;
  while m<>nil do 
  begin
     m:=p^.next;
     m:=m^.next;
     writeln ('Значение в М: ',m^.data,', значение в Р: ',p^.data);  :(:(:(
     if (p^.data=m^.data) then inc (count);
     p:=p^.next;
     if (m^.next=nil) then break;
  end;
writeln ('Количество элементов с равными соседями: ',count);
dispose_(m);
end;

begin
 First:=nil;
 for var i:=1 to random(15) do
   first :=NewNode(random(10), first);
 p :=first;
 write_(p);
 p:=first;
 res_(p);
 dispose_ (p);
end.

Судя по всему, ошибка появляется где-то в строчке, отмеченной смайликами, и то в конце цикла т.к. считает и определяет пары правильно (прогоняла программу построчно). Думаю, что ошибка в p^.data и m^.data, но не могу понять, почему (ошибка там, потому что если убрать эту строку, то то же самое, но строка ошибки перескакивает на следующее такое значение).

Заранее спасибо!

Последний раз редактировалось Аватар; 13.01.2018 в 00:06.
kami_sa вне форума   Ответить с цитированием
Старый 13.01.2018, 13:27   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,656
Репутация: 2097
По умолчанию

Код:

  m:=p;
  while m<>nil do // здесь проверяем конец списка по одной переменной
  begin
     m:=p^.next; // а движение в списке организуем совсем по другой переменой
     ...
     p:=p^.next; // да и здесь

Код:

m:=p;
while m<>nil do
begin
  v1:=m; //запомнили
  m:=m.next; // сдвинулись
  if m=nil then break else  v2:=m.next; //узнали следующее
  if v2=nil then break; //если его нет
  if v1.data =v2.data then .... // делаем подсчет
end;

Код:

while (m<>nil) // до конца
              and (m.next<>nil) // не совсем до конца 
                               and (m.next.next<>nil) // и еще раньше 
                                                     do 
begin
  v1:=m;
  m:=m.next;
  v2:=m.next;
  if v1.data=v2.data then ...

P.S. ^ расставь самостоятельно. код не проверялся.
__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.01.2018 в 13:44.
evg_m вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PascalABC.net (эмуляция стрелочки в игре "Твистер") IvanNikulin Помощь студентам 0 29.12.2016 17:17
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 15:23
Машина Тьюринга: Определите, имеются ли в слове Х две одинаковые буквы, идущие подряд, если слово состоит из букв "C" и "D" Елешечка Помощь студентам 8 06.04.2014 17:19
Вводится последовательность символов, конец ввода -ESC(код#27). Определить количество букв "b". помогите сделать через string. kolbaskin Паскаль 2 30.12.2013 09:12
Вводится текст. Конец ввода <F2>. Найти количество букв "е" лина 555 Паскаль 6 16.10.2013 20:21


16:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru