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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2009, 18:17   #1
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

Уважаемые программисты! Подскажите с задачей пожалуйста!
Сначала задаём множество, например ( 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,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  refleksivnosty();     vyvod();end;
                           '2':begin simmetr();              vyvod();end;
                           '3':begin antisimmetr();         vyvod();end;
                           '4':begin tranzityvnosty();     vyvod();end;

                           end; }
                               if key <> #27 then readln;
                                 until key=#27;
     end.
У меня еще вопрос. Я ввожу множество A -> W E R T ,выводит у меня тоже W E R T
а мне надо А^2 wert
w0000
e0000
r0000
t0000
Как сделать?

Процедуру рефлексивности осталось написать. Подскажите кто знает.
Вложения
Тип файла: doc здесь.doc (31.0 Кб, 19 просмотров)

Последний раз редактировалось Stilet; 13.07.2009 в 10:39.
ai\ekcah^p вне форума Ответить с цитированием
Старый 12.07.2009, 13:10   #2
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Проверяем свойства - если на главной диагонали все 1, то рефлексивна.
Так тут же проще простово) циклом проходишся по элементам массива с
a[i,i] где а - твой массив.
Если хотябы одно значение a[i,i] <> "1" то присваиваеш bool переменной false заканчиваеш цикл , результатом будет false ...в других случаях ( если все =1 , то значение не изменится и останется true)

вот от руки набросал
Код:
function isreflective:boolean;
var i:integer;
r:boolean;
begin
r:=true;
for i:=1 to 20 do
if (mas[i,i] <> '1') then
begin
r:= false;
exit;
end;
result:= r;
end;

Последний раз редактировалось Lime; 12.07.2009 в 13:17.
Lime вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка бинарных файлов (Си) Сэм Помощь студентам 35 01.05.2009 21:18
Чтение Бинарных Файлов Maksitron Общие вопросы C/C++ 6 23.02.2009 21:37
Построение отношений простого предшествования Mary Паскаль, Turbo Pascal, PascalABC.NET 2 18.11.2007 21:44