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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.06.2009, 13:26   #1
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию pascal [дискретная математика]

Напишите пожалуйста одну операцию для примера. А то не представляю как с этими множествами работать.

Написать программу, в которой для конечных упорядоченных множеств реализовать все основные операции (Объединением,Пересечением,Разность ю,Симметрической разностью) с помощью алгоритма типа слияния . Допустима организация множеств в виде списка или в виде массива.
1. На вход подаются два упорядоченных множества A и B (вводятся с клавиатуры, элементы множеств – буквы латинского алфавита).
2. После ввода множеств выбирается требуемая операция (посредством текстового меню, вводом определенного символа в ответ на запрос – выбор по желанию автора).
3. Программа посредством алгоритма типа слияния определяет результат выбранной операции и выдает его на экран с необходимыми пояснениями. Одновременно с результатом на экране должны присутствовать и исходные множества.
4.Возврат на п.2 (выбор операции).
5. Завершение работы программы – из п.2 (например, по ESC).
ai\ekcah^p вне форума
Старый 23.06.2009, 13:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Насколько я помню множества (имеется ввиду тип set) подчиняются обычным арифметическим операциям
+ слияние
- разность
Код:
var s,r:set of byte;
begin
 s:=[1,2];
 r:=[2,3]+s;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Вот в хелпе это как раз и описано.
I'm learning to live...

Последний раз редактировалось Stilet; 23.06.2009 в 13:47.
Stilet вне форума
Старый 23.06.2009, 16:58   #3
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

Начал выполнять первый пункт и сразу проблема. Не могу вывести значения множеств А и В на экран. Подскажите как?

Код:
Program dm1;
  uses crt;
 Type
  Simvol = set of char;
 Var
  A,B:simvol;
  i:integer;
  x:char;
 begin
 clrscr;

  A:=[];
  B:=[];
  i:=1;
   repeat
    write(' Vvedite ',i,'-y element mnogestva A ');
    readln(x);
    if (x in A)
     then
      begin
       write(x,' uje sodergitsya v mnogestve A ');
       i:=i-1;
      end
     else
      begin
       write(x,' pomeschon v mnogestvo A ');
       A:=A+[x];
      end;
     i:=i+1;
      until i>5;
      i:=1;
       repeat
    write(' Vvedite ',i,'-y element mnogestva B ');
    readln(x);
    if (x in B)
     then
      begin
       write(x,' uje sodergitsya v mnogestve B ');
       i:=i-1;
      end
     else
      begin
       write(x,' pomeschon v mnogestvo B ');
       A:=A+[x];
      end;
     i:=i+1;
    until i>5;

  end.
ai\ekcah^p вне форума
Старый 23.06.2009, 17:10   #4
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Для вывода этого множества на экран можно поступить вот так:
Код:
For x :=#01 to #255 do if x in A then Write(x);
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 23.06.2009 в 17:16.
Anatole вне форума
Старый 23.06.2009, 19:30   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Anatole
Для вывода этого множества на экран можно поступить вот так:
я даже больше скажу — это, пожалуй, единственный способ.
Цитата:
Код:
For x :=#01 ...
только неясно, почему от 1-цы...
если есть желание охватить ВСЕ элементы, то надо от нуля плясать:
Код:
  For x :=#0 to #255 do if x in A then Write(ord(x),' ');
а если учесть условия (элементы множеств – буквы латинского алфавита) задачи, то можно и ограничиться так:
Код:
For x :='A' to 'z' do if x in A then Write(x);
Serge_Bliznykov вне форума
Старый 24.06.2009, 09:48   #6
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

Множества ввожу ,а дальше никак.
Подскажите как правильно процедуры описать,чтобы их можно было в меню вызывать.

Код:
Program dm1;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A,B:simvol;
  i:integer;
  x,key:char;
 begin
  A:=[];
  B:=[];
  i:=1;
   repeat
   clrscr;
    writeln(' Vvedite ',i,'-y element mnogestva A ');
    readln(x);
    if (x in A)
     then
      begin
       writeln(x,' uje sodergitsya v mnogestve A ');
       i:=i-1;
      end
     else
      begin
       writeln(x,' pomeschon v mnogestvo A ');
       A:=A+[x];
      end;
     i:=i+1;
      until i>5;
      i:=1;
       repeat
       clrscr;
    writeln(' Vvedite ',i,'-y element mnogestva B ');
    readln(x);
    if (x in B)
     then
      begin
       writeln(x,' uje sodergitsya v mnogestve B ');
       i:=i-1;
      end
     else
      begin
       writeln(x,' pomeschon v mnogestvo B ');
       B:=B+[x];
      end;
     i:=i+1;

    until i>5;
     clrscr;
      writeln('     mnojestvo A: ');
      writeln;
    for x:='A' to 'z' do if x in A then write(x,' ');
      writeln;
      writeln('     mnojestvo B: ');
      writeln;
    for x:='A' to 'z' do if x in B then write(x,' ');
     procedure obyedinenie(c:chat):simvol;
      begin
       C:=A+B;
       writeln(C);
       end;
     procedure perese4enie(c:chat):simvol;
      begin
       C:=A*B;
       writeln(C);
      end;
     procedure raznosty(c:chat):simvol;
      C:=A-B;
      writeln(C);
      repeat
      clrscr;
      writeln('===========================');
      writeln('1: obyedinenie');
      writeln('2: perese4enie');
      writeln('3: simmetr. raznosty');
      writeln('4: raznosty');
      writeln('o: vyhod');
      key:=readkey;
      clrscr;
      case key of
           '1': obyedinenie();
           '2': perese4enie();
           '3': simmetr();
           '4': raznosty();

    until key='0';
  end.
ai\ekcah^p вне форума
Старый 24.06.2009, 10:35   #7
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
то надо от нуля плясать:
#0 на экране не отображается и воспринимается как пробел, а это повтор. множество описано как Set of Char;
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 24.06.2009 в 11:08.
Anatole вне форума
Старый 24.06.2009, 16:02   #8
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

При вызове функции '1': obyedinenie('C',third_set); vyvod('C',C);end; пишет несоответствие типа. Подскажите как исправить.

Код:
Program dm1;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A,B:simvol;
  i:integer;
  x,key:char;
  procedure vvod(name_set:string; var num_elem:integer; var one_set:simvol);
  var x:char;
  begin
          writeln('vvedite ',num_elem,' element mnojestva ',name_set);
          readln(x);
          if (x in one_set)
          then begin
                writeln(x,' uje soderjitsya v mnojestve',name_set);
          end
          else begin
                writeln(x,' pomeschon v mnojestvo',name_set);
                one_set:=one_set+[x];
                num_elem:=num_elem+1;
          end;
   end;
   procedure vyvod(name_set:string;var one_set:simvol);
   var x:char;
   begin
                writeln(' mnojestvo ',name_set);
                for x:='a' to 'z' do if x in A then write(x,' ');
                writeln;
   end;

   procedure obyedinenie(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set+second_set;
   end;
   procedure perese4enie(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set*second_set;
   end;
   procedure raznosty(first_set,second_set:simvol; var third_set:simvol);
   begin
                third_set:=first_set-second_set;
   end;
   begin
                A:=[];
                B:=[];
                i:=1;
                repeat
                        vvod('A',i,A);
                until i>5;
                i:=1;
                repeat
                        vvod('B',i,B);
                until i>5;
                clrscr;
                vyvod('A',A);
                vyvod('B',B);
                repeat
                         clrscr;
                           writeln('===========================');
                           writeln('1: obyedinenie');
                           writeln('2: perese4enie');
                           writeln('3: simmetr. raznosty');
                           writeln('4: raznosty');
                           writeln('o: vyhod');
                           writeln('->');
                           repeat until keyPressed;
                           key:=readkey;
                           case key of
                           '1': obyedinenie('C',third_set); vyvod('C',C);end;
                           '2': perese4enie('C',third_set); vyvod('C',C);end;
                           '3': simmetr('C',third_set);     vyvod('C',C);end;
                           '4': raznosty('C',third_set);    vyvod('C',C);end;
                           end;
                    until ord(key)=ESC;
  end.
ai\ekcah^p вне форума
Старый 24.06.2009, 16:36   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если память не подводит :
Код:
'1': obyedinenie(['C'],third_set); vyvod(['C'],C);end;
I'm learning to live...
Stilet вне форума
Старый 24.06.2009, 16:50   #10
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

процедура объявлена след. образом
procedure obyedinenie(first_set,second_set:si mvol; var tird_set:simvol);
Как правильно записать вызов процедуры obyedinenie ?

Последний раз редактировалось ai\ekcah^p; 24.06.2009 в 18:31.
ai\ekcah^p вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дискретная математика как основа программирования. Geg[C/c++] Помощь студентам 4 19.02.2009 13:50
Дискретная математика RealSHELS Софт 4 21.10.2008 00:37
Дискретная математика паскаль( Bashyr Помощь студентам 5 03.07.2008 12:56
помогите! Дискретная математика, грамматики tywonka Помощь студентам 0 07.06.2008 13:46
Математика doniyor Общие вопросы Delphi 2 15.05.2008 18:25