Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 22.10.2015, 00:01   #1 (permalink)
Never
Новичок
 
Регистрация: 22.10.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Имеется введенный вручную односвязный список.
Необходимо ввести с клавиатуры число X и вернуть указатель на элемент под номером X. Если такого элемента нет, добавить X к списку и вернуть на него указатель.

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

Собственно проблем с составлением вручную списка нет, с добавлением значения тоже. Единственное что не могу понять - как сделать среднюю часть с выводом указателя по введенному числу. Если кто-то может помочь написать этот кусочек кода,буду очень благодарен.
Never вне форума   Ответить с цитированием

Старый 22.10.2015, 00:01
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Чтобы не тратить время на поиски, отправлю вам сразу похожие обсуждения

Список тем в разделе
Динамический список, Паскаль
Список файлообменников
Черный список
Вывести список положительных чисел, список отрицательных чисел на C#
БД список студентов

Старый 22.10.2015, 09:52   #2 (permalink)
MagentaTiger
Специалист
 
Аватар для MagentaTiger
 
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
По умолчанию

По моему просто задача поставлена не совсем корректно, указатель - это адрес в памяти, ни какой конкретной "видимой" информации он не несет, можно конечно например преобразовать его к десятичному или шестнадцатиричному виду и вывести на экран при помощи writeln, но нужно ли это ?
MagentaTiger вне форума   Ответить с цитированием
Старый 22.10.2015, 17:08   #3 (permalink)
Never
Новичок
 
Регистрация: 22.10.2015
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Моя ошибка,не так сформулировал. Нужно вывести элемент списка,на который будет указывать указатель (тавтология,но щито поделать), а номер для указателя надо ввести самому.

А может я вообще все не так понял. Потому дословный текст задачи: "Напишите программу,воспринимающую указатель L на список целых чисел и целое число Х и возвращающую указатель на элемент Х,если он существует,а в противном случае добавляющую Х к L, если он не найден, и всегда возвращающую указатель на элемент,содержащий Х".
Never вне форума   Ответить с цитированием
Старый 22.10.2015, 18:27   #4 (permalink)
MagentaTiger
Специалист
 
Аватар для MagentaTiger
 
Регистрация: 27.04.2015
Адрес: Москва
Сообщений: 1,423
Записей в дневнике: 4
Сказал(а) спасибо: 52
Поблагодарили 53 раз(а) в 16 сообщениях
Репутация: 18120
По умолчанию

ну я бы написал примерно так, правда условия задания для меня все равно остались загадкой,
особенно фраза "программу,воспринимающую указатель L на список целых чисел" чем и как программа должна воспринимать УКАЗАТЕЛЬ на список ...
Код:
program ProjectTehnari;

{$APPTYPE CONSOLE}

type
     TPRecordList=^TRecordList;

     TRecordList = record
     Next:  TPRecordList;
     Value: Integer;
     end;


var StartElement,FoundElement:TPRecordList;
    i,x:Integer;

procedure AddElement(var AList:TPRecordList;AValue:Integer);
var
  Element:TPRecordList;
begin
  if AList = nil then
     begin
     New(Element);
     Element.Next:=nil;
     Element.Value:=AValue;
     AList := Element;
     FoundElement:=AList;
     end
  else
     addElement(AList.Next,AValue);

end;

procedure FreeList;
var
Next,CurList: TPRecordList;
begin
  CurList:=StartElement;
  while CurList<>nil do
    begin
        Next:=CurList.Next;
        Dispose(CurList);
        CurList:=Next;
    end;
   StartElement:=nil;
end;

function FindElement(AValue:Integer):TPRecordList;
var
CurList: TPRecordList;
begin
  FindElement:=nil;
  CurList:=StartElement;
  while CurList<>nil do
    begin
      if CurList.Value=AValue then
      begin
        FindElement:=CurList;
        exit;
      end;
      CurList:=CurList.Next;
    end;
end;

procedure outList;
var cnt:Integer;
CurList: TPRecordList;
begin
  cnt:=1;
  CurList:=StartElement;
  writeln('---------------------------------------------');
  while CurList<>nil do
    begin
        writeln('Элемент списка #' ,cnt,' Значение : ',CurList.Value);
        cnt:=cnt+1;
        CurList:=CurList.Next;
    end;
end;

procedure outElement(AElement:TPRecordList);
begin
  writeln('---------------------------------------------');
  writeln('Элемент списка имеет значение : ',AElement.Value);
end;



begin
   StartElement:=nil;
{* Формируем список *}
   Randomize;
   for i:=1 to 20 do
     AddElement(StartElement,Random(100));
{* Вывод списка *}
   outList;
   write('Введите значение (целое число) X: ');  readln(x);
{* Ищем в списке *}
   FoundElement:=FindElement(x);
{* Если не нашли то добавляем элемент в список *}
   if FoundElement=nil then
       addElement(StartElement,x);
{* Выводим элемент *}
   outElement(FoundElement);
{* Вывод списка - для проверки, что элемент добавлен*}
   outList;
{* Удаляем список *}
   FreeList;
   readln;
end.
MagentaTiger вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

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




Часовой пояс GMT +4, время: 01:37.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.