Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal, дискрет. мат.] Список упорядоченных пар


Автор: M9C1K 29.6.2009, 17:15
Помогите разобраться с программой. Множество А ввожу,а вот как список упорядоченных пар, задающий отношение R не пойму.
Условие задачи во вложении!

Код
Program Mnojestva;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
 Var
  A:simvol;
  i:integer;
  x:char;
  procedure vvod(name_set:string; var num_elem:integer; var one_set:simvol);
  var x:char;
  begin
  clrscr;
          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;
                  writeln('     rezultat  mnojestvo ',name_set);
                  writeln;
                for x:='a' to 'z' do if x in one_set then write(x,' ');
 
   end;
 
 
   begin
                A:=[];
 
                i:=1;
                repeat
                        vvod('A',i,A);
                until i>5;
                clrscr;
               writeln;
                  writeln;
                  writeln('     mnojestvo A: ');
                  writeln;
                for x:='A' to 'z' do if x in A then write(x,' ');
   end.


Автор: M9C1K 4.7.2009, 17:55
Помогите люди добрые. Неделю уже не могу ее победить (

Автор: M9C1K 7.7.2009, 19:31
Уважаемые программисты! Подскажите с задачей плз.

В процедуре  пишет ошибку            procedure vyvodpary( mass:vector);
                                                               begin
                                                                 for i:=1 to r do
                                                                  begin
                                                                    for j:=1 to r do
                                                                   write(mass[i, j]:4);   {здесь ошибку пишет}
                                                                end; 
                                                                  end;

Сначала задаём множество, например ( A B C D ).
Далее задаём пары отношений, к примеру (A-A, A-B, B-B, C-C, D-D).
Теперь составляем МАТРИЦУ БИНАРНЫХ ОТНОШЕНИЙ:

A B C D
A 1 0 0 0
B 1 1 0 0
C 0 0 1 0
D 0 0 0 1
Помогите написать процедуры для свойств.
Проверяем свойства - если на главной диагонали все 1, то рефлексивна.
Если она симметрична относительно главной диагонали ( если есть отношение A-B и B-A, C-D и D-C и т.д.) - то симметрична,а антисимметричность, транзитивность - не знаю. 
Вот ,что cделал ->

Код
Program otnoweniya;
  uses crt;
 Type
  Simvol = set of 'a'..'z';
  vector=array[1..20] of char;
 Var
  mas:vector;
  A:simvol;
  k,n,i,j,r: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 A: ');
                  writeln;
                for x:='A' to 'z' do if x in A then write(x,' ');



   end;
   procedure vvodpary(var mass:vector);

   begin
    clrscr;
    write(' koli4estvo par ');

    for i:=1 to r do  begin
     for j:=1 to r do begin
      write('A[',i,',',j,'] =');
      writeln;
     end;
     end;
     end;
     procedure vyvodpary( mass:vector);
     begin
      for i:=1 to r do
       begin
        for j:=1 to r do
         write(mass[i, j]:4);
         writeln;
         end;
         end;


   begin
   writeln(' vvedite koli4estvo elementov ');
   readln(n);

                A:=[];
                k:=1;
                repeat
                 vvod('A',k,A);
                until k>n;
                 k:=1;
                 vyvod('A',A);
                 readln;
                 writeln('vvedite razmernosty matricy');
                 readln(r,r);
                 vvodpary(mas);
                 vyvodpary(mas);
                 readln;

                           repeat
                           writeln('=======================');
                           writeln('  1:   refleksivnosty');
                           writeln('  2:   simmetri4nosty');
                           writeln('  3:   antisimmetri4nosty');
                           writeln('  4:   tranzitivnosty');
                           writeln('esk:   vyhod');
                           writeln('=======================');
                           writeln('->');

                           repeat until keyPressed;
                               key:=readkey;
                               writeln('key= ',key);

                         {  case key of
                           '1':begin  obyedinenie(A,B,C); vyvod('C',C);end;
                           '2':begin perese4enie(A,B,C);  vyvod('C',C);end;
                           '3':begin simmetr(A,B,C);      vyvod('C',C);end;
                           '4':begin raznosty(A,B,C);     vyvod('C',C);end;

                           end; }
                               if key <> #27 then readln;
                                 until key=#27;
     end.



Автор: Elerond 8.7.2009, 07:12
Цитата(M9C1K @  7.7.2009,  19:31 Найти цитируемый пост)
 write(mass[i, j]:4);   {здесь ошибку пишет}


Ты объявил массив как одномерный, а пытаешься "достучаться" как к двумерному, вот и ругается ))

Автор: M9C1K 8.7.2009, 09:49
Понял. Спасибо. А насчет свойств не подскажите? 

Автор: Hacknslash 8.7.2009, 12:15
Ну отношение R на множестве M антисимметрично, если для любых x,y принадлежащих M
R(x,y)&R(y,x)=>x=y
Применительно к матрице это наверное значит, что у тебя нет таких различных i,j что 
(a[i,j]) And (a[j,j])=1 (ну или a[i,j]+a[j,i]=2 можно, если у тебя элементы матрицы integer, но логичнее было бы boolean конечно)

Отношение R на множестве M транзитивно, если для любых x,y,z принадлежащих M
R(x,y)&R(y,z) => R(x,z)
Что тут с матрицей - надо подумать. Хотя по идее можно не париться, как будет выглядеть матрица, а проверять истинность соответствующего логического выражения...

Автор: M9C1K 8.7.2009, 16:31
Спасибо!
У меня еще вопрос. Я ввожу множество A       ->    W E R T ,выводит у меня тоже W E R T
а мне надо А^2  0000
                           0000
                           0000
                           0000
Как сделать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)