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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2010, 20:07   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию гетерогенные списки

Добрый вечер! Задали реализовать добавление в гетерогенный список, т.е. вызываем процедуру добавления сначала целое потом вещественное и символ, при выводе они выводятся в этом же формате. Трюк с преобразованием всего в строку использовать нельзя, вот нашла одну прогу
Код:
program Obj_stek;
  type
      Pchis=^Tchis;
      Tchis=object
        constructor Init;
        procedure out; virtual;
        destructor done;
      end;

      Pint=^Tint;
      Tint=object(Tchis)
        data:integer;
        procedure ins(X:integer);
        procedure out;virtual;
      end;

      Preal=^Treal;
      Treal = object(Tchis)
        data:real;
        procedure ins(x:real);
        procedure out; virtual;
      end;


   constructor Tchis.Init;
   begin
   end;

   procedure Tchis.out;
   begin
   end;


   destructor Tchis.Done;
   begin
   end;

   procedure Tint.ins(x:integer);
   begin
     data:=x;
   end;

   procedure Tint.out;
    begin
     write(data,' ');
    end;

   procedure Treal.ins(x:real);
    begin
      data:=x;
    end;

   procedure Treal.out;
   begin
     write(data:0:4,' ');
   end;

type
  Pnode=^Tnode;
  Tnode=record
    next:Pnode;
    data:Pchis;
  end;

  var
     head:Pnode;
     yk:Pnode;
     i,N:integer;
     X:real;

  procedure push(X:real);
   var A:Pint;
       B:Preal;
       new_el:Pnode;
    begin
       new(new_el);
       new_el^.next:=yk;
       yk:=new_el;
       if frac(x)=0 then
        begin
         new(A,Init);
         A^.ins(trunc(X));
         yk^.data:=A;
        end
       else
        begin
          new(B,Init);
          B^.ins(x);
          yk^.data:=B;
        end;
    end;

  procedure pop;
    var old:Pnode;
   begin
     yk^.data^.out;
     dispose(yk^.data,done);
     old:=yk^.next;
     dispose(yk);
     yk:=old;
   end;

begin
  assign(input,'input.txt');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
  readln(N);
  new(head);
  yk:=head;
  for i:=1 to N do
   begin
    read(X);
    push(X);
   end;

  while yk<>head do
    pop;
  dispose(head);

end.
Может кто-нибудь объяснить организацию таких списков?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки в С++ zoluxa Помощь студентам 4 30.03.2010 09:14
Списки Walter Помощь студентам 1 06.12.2009 16:03
Списки sabika Помощь студентам 0 02.12.2009 18:54
с++ списки Blizzz Общие вопросы C/C++ 3 04.12.2008 21:19