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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2009, 15:05   #1
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Имеется однонаправленный неоднородный (гетерогенный) список с однородными подсписками.

Для данного списка нужно разработать следующие подпрограммы:
1) Добавление элемента
- в начало списка;
- в конец списка;
- после элемента с заданным номером.
2) Печать списка (вывод на экран дисплея):
- номера элемента;
- содержимое поля данных.
3) Удаление элемента из списка:
- из начала;
- из концаж
- с заданым номером.
5) Запись списка в файл.
6) Уничтожение списка.
Восстановление (чтение) списка из файла.

Пожалуйста помогите кто может.

Можно число К (количества типов в списке) взять определенное (например 3 или 4 и т.д.), тогда задача немного упрощается.
Изображения
Тип файла: jpg 1.jpg (25.0 Кб, 138 просмотров)
Жми на весы!!!

Последний раз редактировалось Stilet; 24.02.2009 в 09:24.
Chudo4258 вне форума Ответить с цитированием
Старый 21.02.2009, 08:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) и в чём сложность то? Задача, по сути, - несложная!
и даже при произвольном K
Правда, есть проблемы в оптимальном решении, но, если решать задачу "в лоб", при вставке элемента перебирать весь список, находя начало подсписка с нужным типом, тогда вообще элементарно всё (но не эффективно по быстродействию, конечно. Но кому оно нужно в учебной задаче то ;-)
Либо отдельно заводить список "хвостов" по каждому подтипу... тогда для вставки элемента не прийдётся перебирать весь список..
короче, вариантов реализации алгоритма - вагон!

2) на каком языке реализуете решение?

3) а сами то что-нибудь сделали? Если нет - боюсь, что Вам прямая дорога во фриланс (за Вас всё напишут - только денюжку плати... ;-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.02.2009, 05:01   #3
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию !

Я сделал только для однородного списка (в списке хранятся элементы типа LongInt), оно все работает. А вот как сделать для неоднородного списка (чтобы в списке были элементы разного пипа) у меня не получается.

Код:
Type BT = LongInt;
     U = ^Zveno;
     Zveno = Record
        Inf : BT;
        Next: U
     End;


       Procedure V_Nachalo(Var First : U; X : BT);
       Var Vsp : U;
       Begin
               New(Vsp);
               Vsp^.Inf := X;
               Vsp^.Next := First;
               First := Vsp;
       End;

       Procedure Iz_Nachala(Var First : U; Var X : BT);
       Var Vsp : U;
       Begin
               Vsp := First;
               First := First^.Next;
               X := Vsp^.Inf;
               Dispose(Vsp);
       End;



       Procedure V_Spisok(Pred : U; X : BT); //всатляет элемент в список, сразу позле элемента Pred
       Var Vsp : U;
       Begin
           New(Vsp);
           Vsp^.Inf := X;
           Vsp^.Next := Pred^.Next;
           Pred^.Next := Vsp;
       End;

       Procedure Iz_Spiska(Pred : U; Var X : BT);
       Var Vsp : U;
       Begin
            Vsp := Pred^.Next;
            Pred^.Next := Pred^.Next^.Next;
            X := Vsp^.Inf;
            Dispose(Vsp);
       End;

       Procedure Ochistka(Var First: U);
       Var Vsp : BT;
       Begin
                While Not Pust(First) Do Iz_Nachala(First, Vsp)
       End;

       Function  Pust(First : U) : Boolean;
       Begin
           Pust := First = Nil
       End;

       Procedure Print(First : U);
       Var Vsp : U;
       Begin
            Vsp := First;
            While Vsp <> Nil Do
            Begin
               Write(Vsp^.Inf : 6);
               Vsp := Vsp^.Next
            End; WriteLn
       End;
From Stilet: Оформляй правильно код. Ато ведь и обидится можно, все подчищать за тебя.
Жми на весы!!!

Последний раз редактировалось Stilet; 24.02.2009 в 09:25.
Chudo4258 вне форума Ответить с цитированием
Старый 25.02.2009, 04:59   #4
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию ???

Ну подскажите кто-нибудь как из однородного списка сделать неоднородный???
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 25.02.2009, 08:34   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Chudo4258
А массив Variant не подходит или на Паскале классическом надо?
Или можно еще применить указатели.
Вот например:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
 type r=record
  tipe:byte;
  value:pointer;
 end;
 var av:array[1..5] of r;i:integer;
begin
 i:=1;
 av[i].tipe:=1;getmem(av[i].value,sizeof(integer));integer(av[i].value^):=124;inc(i);
 av[i].tipe:=2;getmem(av[i].value,sizeof(double));double(av[i].value^):=124.5;inc(i);
 av[i].tipe:=3;getmem(av[i].value,sizeof(char));char(av[i].value^):='c';inc(i);
 av[i].tipe:=4;getmem(av[i].value,20);pchar(av[i].value^):='123456'#0;inc(i);

 for i:=1 to 5 do begin
  if av[i].tipe=1 then  writeln('Integer ',integer(av[i].value^));
  if av[i].tipe=2 then  writeln('Double ',Double(av[i].value^));
  if av[i].tipe=3 then  writeln('char ',char(av[i].value^));
  if av[i].tipe=4 then  writeln('String ',pchar(av[i].value^));
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...

Последний раз редактировалось Stilet; 25.02.2009 в 08:47.
Stilet вне форума Ответить с цитированием
Старый 25.02.2009, 15:08   #6
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Stilet, а можешь еще объяснить, что такое pointer и процедура getmem(...)
Жми на весы!!!

Последний раз редактировалось Chudo4258; 25.02.2009 в 15:11.
Chudo4258 вне форума Ответить с цитированием
Старый 25.02.2009, 15:14   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

хы. А в хелп?
Pointer - это тип указателя. Он содержит адрес на ячейку памяти с которой начинается какой нить блок дайнных.
Getmem - вписывает в Поинтер указатель на блок памяти зарезервированный для тебя с указанным размером.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.02.2009, 15:25   #8
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Что-то ничего не понятно.
А можешь на моих процедурах показать как создается гетерогенный список???
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 25.02.2009, 15:46   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

хм... Чесно говоря по-моему твои процедуры ниразу не годятся для такого.
Тут я бы на твоем месте почитал бы (как бы это банально не звучало) литературу про указатели. А потом я не очень пойму что ты имееш ввиду под неоднородным списком - это обычный массив Variant, займись им коли указатели пока понять сложно.
Если ты на Делфи пишеш то вот пример с Вариантом:
Код:
var a:array of variant;
begin
setlength(a,3);
a[0]:='1213';
a[1]:=123;
a[2]:=22.65;
end;
А если на Паскале... ну учи указатели.
Кста твоя прога их активно пользует.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.02.2009, 16:14   #10
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

список неоднородный - это значит в нем могут хранится элементы разных типов (напрмер: integer, char ...).
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список на Си Annenen Помощь студентам 21 20.12.2010 18:54
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43