Множества в B.Pascal

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Множества в B.Pascal

Сообщение alextard » 21 фев 2013, 17:20

Всем добрый день! Хочу обратиться за помощью к добрым людям. Кто поможет реализовать задание??

Создать класс типа – множество (SET). Определить функции добавления элемента в множество, проверку на принадлежность элемента множеству; определить методы сложения, вычитания и пересечения двух множеств. Определить конструкторы и деструктор для данного класса.

Заранее благодарен!

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 21 фев 2013, 18:23

Множества уже есть в паскале. Если я правильно понял нужно сделать аналогичный класс. На основе массивов или не важно?

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 21 фев 2013, 18:36

Да , я знаю что множества там присутствуют. а вот реализовывать как массив или нет , я не знаю. думаю, что всё же не через массив

Добавлено спустя 2 минуты 51 секунду:
Как я понял , мне нужно создать два множества через set of ... и затем выполнить опред. операции над ними...

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 21 фев 2013, 18:45

Я понял так: нужно создать класс (без использования set of). В этом классе создать методы для операций над множествами. Это не сложно, сейчас напишу как сделать.

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 21 фев 2013, 18:48

А почему вы поняли , что без использования множества?? :du_ma_et:

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 21 фев 2013, 18:51

Часто дают классические задачи - повторить своим способом уже имеющийся в языке программирования функционал.
А если использовать множества, то задача уже решена, т.к. для этого есть стандартные функции. :-):

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 21 фев 2013, 18:58

А сможете , если не трудно и через стандартные функции тоже реализовать. просто скорее всего я через них и пытался))

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 21 фев 2013, 19:33

Ладно, попробую два варианта: класс и с двумя множествами. Что такое бинарные сдвиги известно? Или лучше не использовать?

Предупреждение: из-за ошибки хостера сайт может в течение нескольких минут (а может и больше) не работать (dns-сервер отвалился, доступ только благодаря кешу). Поэтому если открыть не удастся, то придётся подождать.

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 21 фев 2013, 19:39

Сдвиги известны , но думаю тут их не нужно точно использовать)

Аватара пользователя
vlad
Супермодератор
Супермодератор
Сообщения: 233
Зарегистрирован: 02 фев 2012, 11:42

Сообщение vlad » 21 фев 2013, 21:42

У меня есть такой класс, но выложить могу только завтра во второй половине дня, а это наверно слишком долго (не дома). А переписывать сейчас лень, он не маленький, т.к. нюансов в этой задачке много (всякие перегрузки операторов, индексаторы и прочее).
alextard писал(а):Как я понял , мне нужно создать два множества через set of ... и затем выполнить опред. операции над ними...
Ну это просто, поэтому наверно нет

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 21 фев 2013, 21:45

Пока не успеваю дописать из-за этих самых нюансов.
Ну а про использование set of - это просто операции с обычными множествами
var
  a,b,c,d,e: set of byte;
begin
  a := [1,4,6,8];
  b := [1,2,3,6];
  c := a+b; //объединение - элементы обоих множеств (1,2,3,4,6,8)
  d := a-b; //вычитание - элементы множества A без повторяющихся в B (4,8)
  e := a*b; //пересечение - одинаковые элементы множеств (1,6)
end;

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 21 фев 2013, 21:53

Хорошо. спасибо . подожду тогда до завтра . так вот как раз такую структуру типа set of и нужно реализовать только используя конструкторы , функции и тд. что там требуется. давайте я вам скину что у меня было
Program P1;
  uses crt;
  var x:byte;


  type Complex = object
     {private}
       a:set of byte;
      public

     constructor Init;
     destructor destroy;
     procedure Incl(x:byte);
     function prov(x:byte):byte;
     procedure Sum(b,c:Complex);
     procedure Min(b,c:Complex);
     procedure Per(b,c:Complex);
     procedure Vivod;
  end;

     constructor Complex.Init;
      begin

 (*     type a=array[1..5] of integer;
       var b:a; i: byte;
            begin
            writeln('Vvedite znecenie elementov massiva: ');
            for i:=1 to 5 do begin  *)
       a:=[1];

       end;
     procedure  Complex.Incl( x:byte);
      begin
       a:=a+[1];
             end;

        function Complex.prov(x:byte):byte;
         begin
          if x in a then
           prov:=1
          else
           prov:=0;
         end;
         procedure Complex.Sum(b,c:Complex);
         begin
          for x:=0 to 200 do
           if x in b then
            a:=a+[x];
           if x:=0 in c then
           a:=a+[x];

           end;

           procedure Complex.Min(b,c:Complex);
           begin
             a:=b-c;
           end;

           procedure Complex.Per(b,c:Complex);
           begin
             a:=b*c;
           end;

          destructor Complex.destroy;
          begin
          a:=[];
          end;
          procedure Complex.Vivod;
           begin
            for i:=0 to 3200 then
             if i in a then
              writeln(i);
            end;
            var b,c,m1,m2,m3,m4,m5: Complex;
    begin
    m1.Init;
    m1.Incl(6);
    m2.Init;
    m3.Sum(m1,m2);
    m3.Vivod;
    readkey;
    end.
Последний раз редактировалось alextard 21 фев 2013, 21:53, всего редактировалось 3 раза.
Причина: Оформление кода (для читабельности)

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 21 фев 2013, 21:58

Примерно так я и делаю.
Если vlad завтра в первой половине дня не выложит, то я тогда выложу свой доделанный вариант. Если вдруг забуду напомните.

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 22 фев 2013, 20:50

Напоминание)

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 22 фев 2013, 20:58

Спасибо за напоминание. А то пришёл с работы и забыл.
Для начала исправлю ошибки в вашей реализации. Потом попробую быстро сделать аналог без использования set of.

Аватара пользователя
vlad
Супермодератор
Супермодератор
Сообщения: 233
Зарегистрирован: 02 фев 2012, 11:42

Сообщение vlad » 24 фев 2013, 11:08

Прошу прощения за задержку с ответом, меня не было в городе. К огромному сожалению класс который был у меня предназначен для delphi и он совершенно не подходит к старому Borland Pascal (как минимум из-за динамических массивов).
При написании своего класса столкнулся с проблемой - не смог решить в каком формате сделать вывод, т.к. если это учебная задача то set of использовать нельзя.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 24 фев 2013, 11:16

У меня тоже ничего хорошего не получилось. За время работы с delphi и другими IDE уже отвык от стандартного паскаля и всё реализовать к сожалению не удалось.

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 25 фев 2013, 16:29

Ну а почему вы думаете, что через set of нельзя это реализовать?

Добавлено спустя 7 минут 32 секунды:
Ну а можете тогда просто как раз через set of это реализовать? если не трудно. даже просто можно то, что я скинул отредактировать...

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Сообщение Andrey » 25 фев 2013, 17:52

Хорошо, подождите около часа. Но не гарантирую что это действительно соответствует заданию.

Аватара пользователя
alextard
Сообщения: 12
Зарегистрирован: 21 фев 2013, 17:15

Сообщение alextard » 25 фев 2013, 19:53

Хорошо . Сталкивался уже и не раз с проблемой понимания задания. обычно ( у нас) говорят делайте , как поняли...

Ответить