IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Проблема написания программки на Borland Pascal (https://www.imho.ws/showthread.php?t=52139)

LN berf 25.02.2004 18:43

Проблема написания программки на Borland Pascal
 
Я должен написать list

этот лист описан в библиотеке list.pas так.
---------------------------------------------------------

type
pos_type = ^link_type;
list_info_type = char;
link_type = record
info:list_info_type;
next:pos_type;
end;
list_type = record
anchor:pos_type;
end;
Хочу щас написать программку использующую эту библиотеку.
Пользователь должен вводить место в listе и какой элемент он хочет в list занести

Вопрос
------------

Каким образом вводить место в listе если переменная pointer?!

Надеюсь не очень загрузил
Те кто еще че то помнить из Паааскаля помогите. ;)

eowyn 25.02.2004 19:34

Ты что хочешь вводить указатель?
Восстанавливая в голове, то что было в нее заложено пару-тройку лет назад, могу сказть, что место вставки в список вводилось по информационному полю... в данном случае, типа char.
Можно наверное воспользоваться и переменной типа link_type, но опять же полем info.
Или я что-то не так поняла и опять сморозила глупость?

LN berf 25.02.2004 19:45

Да вроде info я ввел.
А вот позицию в listе как ввести?
Это ж ведь тоже указатель.

А! то есть надо позицию тоже как поле info вводить
А если у меня declaration процедуры такой

procedure list_insert(var l:list_type; pos:pos_type; x:list_info_type);

joker99 25.02.2004 23:00

Цитата:

LN berf:
Каким образом вводить место в listе
Обычно процедура вставки в лист получает элемент после которого надо вставить новое значение, или индех элемента после кототого надо вставить новое значение.
т.е

вставить после элемента elem элемент new_val
procedure list_insert(var l:list_type; elem:list_info_type; new_val:list_info_type);

вставить элемента new_val в месте index
procedure list_insert(var l:list_type; index:integer; new_val:list_info_type);

Ghost 26.02.2004 08:35

Цитата:

Да вроде info я ввел. А вот позицию в listе как ввести? Это ж ведь тоже указатель.
Во-первых, позиция - целое число, а не указатель.
Во-вторых, вводить в list его не надо, поскольку расположение элементов в списке может меняться, соответственно, невозможно жестко привязать к какому-либо элементу индекс.
Таким образом, тебе нужно просто дописать прогу, всавив в нее только процедуру вставки нового элемента в нужную позицию. Кажись это будет выглядеть так (тока я не проверял, у меня нет на машине паскаля):
Код:

procedure List_PosItemInsert (var Head: pos_type;
  NewItemPos: integer; NewItemCont: list_info_type); far;
var
  NewItem: pos_type;
begin
  if NewItemPos < 1 then exit;
  if (NewItemPos = 1) or (Head = nil) then begin
    New (NextItem);
    NextItem^.Info := NewItemCont;
    NextItem^.Next := Head;
    Head := NextItem;
  end else begin
    NextItem := Head^.Next;
    List_PosItemInsert (NextItem, NewItemPos - 1, NewItemCont);
    Head^.Next := NextItem;
  end;
end;


LN berf 26.02.2004 14:01

Спасибо всем кто помог.
Уже сам написал :)


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

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.