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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2014, 20:39   #11
nImka
Новичок
Джуниор
 
Регистрация: 17.09.2014
Сообщений: 5
По умолчанию

Парни, помогите сделать функцию удаления. Первого элемента, в середине (со сдвигом), и последнего.

вот код
Код:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

const
 M = 10;

type

  TData = integer;

  TElement = record
    Data : TData;
    NextElem : integer;
  end;

  TArray = array [1..M] of TElement;

  TList = record
   Mass : TArray;
   First, Last : integer;
  end;

const
 NNull = 0;

var
 List : TList;
 Data : TData;
 S : string;
 Code : integer;
 i : integer;

 procedure Init(var List : TList);
  var
   i : integer;
  begin
   List.First := NNull;
   List.Last := NNull;
    for i := Low(List.Mass) to High(List.Mass) do
      begin
        List.Mass[i].NextElem := NNull;
      end;
  end;

 procedure OutList(const List : TList);
  var
   N : integer;
  begin
   N := List.First;
    while N <> NNull do
     begin
       if N <> List.First then
        begin
          write(', ');
        end;
       write(List.Mass[N].Data);
       N := List.Mass[N].NextElem;
     end;
    if List.First = NNull then
     begin
       Writeln('Список пуст');
     end;
     WriteLn;
  end;

 function AddElement(var List : TList; const Data : TData): boolean;
  var
   i, N : integer;
  begin
   AddElement := false;

   for i := Low(List.Mass) to High(List.Mass) do
    begin
      if (List.Mass[i].NextElem = NNull) and (List.Last <> i) then
       begin
         N := i;
         break;
       end;
    end;

    if N = NNull then
     begin
       Exit;
     end;

     List.Mass[N].Data := Data;
     List.Mass[N].NextElem := NNull;

     if List.First = NNull then
      begin
        List.First := N;
      end
      ELSE
       begin
         List.Mass[list.Last].NextElem := N;
       end;

      List.Last := N;
    AddElement := True;
  end;

  procedure Search(const Data : TData);
   var
    i, N : integer;
   begin
    for i := Low(List.Mass) to High(List.Mass) do
     begin
       if List.Mass[i].Data = Data then
        begin
          WriteLn('Ячейка ', i,' содержит - ', List.Mass[i].Data);
        end;
     end;
   end;

  procedure Delete(const Data : TData);
   var
   begin

   end;

begin
  Init(List);
  OutList(List);

   repeat
    write('Добавить число: ');
    readln(S);
    if S <> '' then
     begin
      Val(S, Data, Code);
       if Code = 0 then
        begin
         if AddElement(List, Data) then
          ELSE
           begin
             WriteLn('Список полон');
             S:='';
           end;
        end
        ELSE
         begin
          WriteLn('Ошибка! Должно быть введенно число, повторите');
         end;
     end;

   until S = '';

   writeln('Список: ');
   OutList(List);

   write('Поиск значения: ');
    readln(Data);
     Search(Data);


    write('Удаление элемента: ');
     readln(Data);
      Delete(Data);

  OutList(List);
    write('Поиск значения: ');
    readln(Data);
     Search(Data);
readln;

end.
nImka вне форума Ответить с цитированием
Старый 18.09.2014, 21:01   #12
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Чой-то смотрю я на твой исходник и думается мне, что кто-то из нас двоих неправильно понял задание. Я понял, что в программе будет именно массив (причём статический), а списка не будет, т.к. этот список будет именно моделироваться с помощью массива, т.е. никаких указателей и перераспределения памяти, а только перемещение данных внутри статического массива. Или даже массив типизированных указателей, допустим, но именно статический массив.

Иногда препод может такого в задании наворотить, что толкований может быть 2 или больше. Если препеод есть адекватный чел, то стьюденты обычно просто подходят к нему и спрашивают на чистом русском языке, чего он в итоге хочет-то, собственно...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.09.2014, 22:24   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну по идее так:
Код:
  procedure Delete(k:TElement; Data : TData);
   var i,j:integer;
   begin
    for i:=Low(Data) to High(Data) do begin
     if Data[i]<>k then inc(j);
     Data[j]:=Data[i];
    end;
   end;
Тут К - удаляемый элемент из массива Data.
Но я не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЛИНЕЙНЫЙ СПИСОК kalosha-stepa Паскаль, Turbo Pascal, PascalABC.NET 2 25.10.2012 21:57
Линейный список. GripEnemy Visual C++ 0 05.12.2011 22:35
C++,линейный список katerunechka Помощь студентам 0 08.10.2011 11:38
надо сделать дек через массив и через список. CHUCKe Помощь студентам 4 20.11.2010 17:23
(BC 3.1) Список через одномерный массив Lawliet32 Помощь студентам 6 29.11.2009 19:26