|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.06.2010, 16:19 | #1 |
Новичок
Джуниор
Регистрация: 23.06.2010
Сообщений: 1
|
Задача на динамические списки (pascal)
Подскажите: что дописать чтобы все работало правильно? за помощь передам деньги яндекс деньгами или положу вам на телефон сумму...
{задача: Описать процедуру, которая вставляет: а)новый элемент D после первого элемента непустого спис- ка L. б) в непустой список L пару новых элементов Е1 и Е2 перед его последним элементом. } type { элемент списка } PListItem = ^TListItem; TListItem = record value: integer; pNext: PListItem; pPrev: PListItem; end; const { размер списка } LIST_SIZE = 10; { максимальное значение в списке } RND_MAX = 5; { что ищем } E = 2; { Ищет хвост списка } function listGetTail(list: PListItem): PListItem; begin if list <> nil then while(list^.pNext <> nil) do list := list^.pNext; listGetTail := list; end; { Ищет голову списка } function listGetHead(list: PListItem): PListItem; begin if list <> nil then while(list^.pPrev <> nil) do list := list^.pNext; listGetHead := list; end; function listInitElement(var el: PListItem): PListItem; begin New(el); el^.pPrev := nil; el^.pNext := nil; listInitElement := el; end; { Добавление значения после указанного элемента. Автоматически создаёт список если его не было } function listAppendAfter(var after: PListItem; value: integer): PListItem; var tmp, tmp2: PListItem; begin if after = nil then begin tmp := listInitElement(after); end else begin if after^.pNext = nil then begin { следующего элемента нет, просто создаём новый } tmp := listInitElement(after^.pNext) end else begin { нашёлся линк, надо изменять } tmp2 := after^.pNext; tmp := listInitElement(after^.pNext); tmp^.pNext := tmp2; tmp^.pPrev := after; tmp2^.pPrev := tmp; end; end; { устанавливаем значение } tmp^.value := value; listAppendAfter := tmp; end; { Добавление значения перед указанным элементом. Автоматически создаёт список если его не было } function listAppendBefore(var before: PListItem; value: integer): PListItem; var tmp, tmp2: PListItem; begin if before = nil then begin tmp := listInitElement(before); end else begin if before^.pPrev = nil then begin { предыдущего элемента нет, просто создаём новый } tmp := listInitElement(before^.pPrev) end else begin { нашёлся линк, надо изменять } tmp2 := before^.pPrev; tmp := listInitElement(before^.pPrev); tmp^.pPrev := tmp2; tmp^.pNext := before; tmp2^.pNext := tmp; end; end; { устанавливаем значение } tmp^.value := value; listAppendBefore := tmp; end; { Копирует содержимое list2 в конец списка list. Создаёт список list, если он пуст } procedure listAppendList(var list: PListItem; list2: PListItem); var pos: PListItem; begin pos := list; while(list2 <> nil) do begin pos := listAppendAfter(pos, list2^.value); list2 := list2^.pNext; end; end; { Ищет вхождение элемента E } function listSearchItem(list: PListItem; e: integer): PListItem; begin while(list <> nil) do begin if list^.value = e then break; list := list^.pNext; end; listSearchItem := list; end; { Освобождение занятой списком памяти } procedure listDispose(var list: PListItem); var tmp: PListItem; begin while(list <> nil) do begin tmp := list^.pNext; Dispose(list); list := tmp; end; end; { Заполняет список случайными значениями. Если список не пуст - значения добавляются в конец. } procedure listFillRandom(var list: PListItem); var i: integer; begin for i := 1 to LIST_SIZE do listAppendAfter(list, random(RND_MAX)); end; { Выводит содержимое списка на экран } procedure listPrint(list: PListItem); begin write(': '); if list = nil then write('пустой!') else while(list <> nil) do begin write(list^.value, ', '); list := list^.pNext; end; writeLn(); end; var pList1: PListItem; pList2: PListItem; tail: PListItem; begin randomize; { Заполняем первый массив и выводим его на экран } listFillRandom(pList1); write('List1'); listPrint(pList1); { Заполняем второй массив и выводим его на экран } listFillRandom(pList2); write('List2'); listPrint(pList2); { Добавляем содержимое второго списка в первый и выводим результат} tail := listGetTail(pList1); listAppendList(tail, pList2); write('List3'); listPrint(pList1); { Создаём новый второй список } listDispose(pList2); listFillRandom(pList2); write('List2New'); listPrint(pList2); { Ищем элемент E } tail := listSearchItem(pList1, E); if tail = nil then writeLn('E(', E, ') не найдено!') else listAppendList(tail, pList2); { Список 2 уже не нужен, освобождаем память } listDispose(pList2); { Выводим массив на экран } write('List3Out'); listPrint(pList1); { Чистим память под списком 1 } listDispose(pList1); end. |
23.06.2010, 16:50 | #2 |
Регистрация: 15.05.2010
Сообщений: 3
|
оформите код, тогда будет читабельние и мы сможем Вам помочь
|
23.06.2010, 18:01 | #3 |
Форумчанин
Регистрация: 28.07.2009
Сообщений: 189
|
пиши помогу
ICQ: 412842920 mail: darkdaiver777@gmail.com
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com |
23.06.2010, 23:23 | #4 |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Продам по смешной цене готовый отлаженный модуль для работы с динамическими двунаправленными списками (с необходимыми примерами его использования):
TDynList = object ... public .. procedure Clear; // очистка списка function GetItem(Index: Integer; var Value: Pointer): Boolean; // прочитать элемент по индексу function SetItem(Index: Integer; Value: Pointer): Boolean; // записать элемент по индексу function GetPosition: Integer; // получить тек.позицию навигации в списке function SetPosition(Index: Integer): Boolean; // установить тек.позицию навигации function Navigate(Command: TNavCommand; var Item: Pointer): Boolean; // навигация по списку function CurrentItem(var Item: Pointer): Boolean; // получить тек.элемент в порядке навигации function Append(Item: Pointer): Integer; // добавить эл-т в конец списка function Count: Integer; // кол-во эл-тов списка function Insert(Item: Pointer; Before: Integer): Boolean; // вставка эл-та в указ.позицию function InsertByRef(Item: Pointer; Before: Pointer): Boolean; // модификация предыд.метода - по ссылке function Remove(Index: Integer): Boolean; // удалить эл-т по индексу function RemoveByRef(Item: Pointer): Boolean; // модификация предыд.метода - по ссылке procedure CustomSort(CompareFunc: Pointer; Param: Pointer); // пользовательская сортировка списка function IndexOf(Item: Pointer; FromEnd: Boolean): Integer; // получение индекса эл-та function Enum(FromEnd: Boolean; EnumFunc: Pointer; Param: Pointer): Integer; // енумерация эл-тов function FindFirst(Item: Pointer; FromEnd: Boolean; var Index: Integer): Boolean; // поиск первого эл-та по заданному значению function FindNext(var Index: Integer): Boolean; // поиск очередного function Replace(OldItem, NewItem: Pointer): Integer; // замена эл-та function Exchange(Index1, Index2: Integer): Boolean; // обмен эл-тов end; icq 169527143 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на динамические списки (pascal) | apkoc | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 23.06.2010 15:41 |
Динамические списки! Pascal! | sir.andrey | Помощь студентам | 5 | 25.02.2010 17:09 |
Динамические списки! Pascal! | sir.andrey | Помощь студентам | 2 | 18.02.2010 14:24 |
Задача на динамические списки | Mаximus | Помощь студентам | 1 | 13.01.2010 17:11 |