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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2012, 14:54   #1
Кристинка89
Форумчанин
 
Регистрация: 09.02.2011
Сообщений: 163
Вопрос Карты Карно - перевести код Паскаль на Делфи

Помогите перевести эту программу с паскаля на делфи чтобы было визуально все видно. Это программа метод Карт карно. Нужно чтобы например в Edit ил Memo вводились данные программа выполнялась и результат выводился в другой Edit ил Memo. Просто код не мой я не могу разобраться в нем

Код:
const
  v:array[1..5,1..5] of string[2]=(('00','0*','','**',''),('0*','01','*1','',''),
  ('','*1','11','1*',''),('**','','1*','10','*0'),('','','','*0',''));
var
  i,j,l,k,n,s,ss,s1,xi,xj,f,z,x,q:integer;
  a,b:array[1..5,1..5] of integer;
  st:string;
procedure dec(q:String);
  begin
    n:=0;
    For i:= 1 To Length(q) do
      If copy(q, i, 1) = '1' Then n:= n + trunc(exp(ln(2)*(Length(q) - i)));
    If n = 3 Then n:= n - 1 Else If n = 2 Then n:= n + 1
  End;
Function pr(x,y,x1,y1:byte):integer;
  var
    i,j,k:integer;
  begin
    k:=0;
    for i:=x to x1 do
      for j:=y to y1 do
        if b[i,j]=0 then inc(k);
    if k=0 then k:=-1;
    pr:=k
  end;
begin
  writeln;
  readln(st);st:=st+' ';
  While st <> '' do begin
    for i:=1 to pos(' ',st) do
      if st[i]='*' then begin st[i]:='1'; insert(st[1]+st[2]+st[3]+st[4]+' ',st,6); st[i]:='0' end;
    dec(st[1] + st[2]); k:= n; dec(copy(st, 3, pos(' ',st) - 3));
    a[n+1, k+1]:= 1;
    delete(st,1,pos(' ',st))
  End;
  for i:=1 to 4 do
    a[i,5]:=a[i,1];
  for i:=1 to 5 do
    a[5,i]:=a[1,i];
  s1:=1;
  while s1>0 do begin
    s1:=0; s:=0;
    for i:=1 to 5 do
      for j:=1 to 5 do
        if (a[i,j]>0) and (i>1) then a[i,j]:=a[i-1,j]+1;
    for i:=1 to 5 do begin q:=1;
      for j:=1 to 5 do
      if a[i,j]=0 then q:=j+1 else
        for l:=q to j do begin
          if a[i,l]>a[i,j] then a[i,l]:=a[i,j];
          z:=trunc(exp(trunc(ln(a[i,l])/ln(2))*ln(2)));
          x:=trunc(exp(trunc(ln(j-l+1)/ln(2))*ln(2)));
          ss:=pr(i-z+1,j-x+1,i,j);
          if (ss>s) or ((ss=s) and (s1<z*x)) then begin
            s1:=z*x; s:=ss; xi:=i; xj:=j; f:=x;
          end
        end;
      end;
    if s1>0 then write(v[xj-f+1,xj]+v[xi,xi+1-s1 div f]+' ');
    for i:=1 to s1 div f do
      for j:=xj-f+1 to xj do begin
        b[xi-i+1,j]:=1;
        if xi-i+1=5 then b[1,j]:=1;
        if j=5 then b[xi-i+1,1]:=1;
        if xi-i+1=1 then b[5,j]:=1;
        if j=1 then b[xi-i+1,5]:=1;
        if(j=1) and (xi-i+1=1) then b[5,5]:=1;
        if(j=1) and (xi-i+1=5) then b[1,5]:=1;
        if(j=5) and (xi-i+1=1) then b[5,1]:=1;
        if(j=5) and (xi-i+1=5) then b[1,1]:=1;
      end;
  end;
end.
Кристинка89 вне форума Ответить с цитированием
Старый 03.04.2012, 15:17   #2
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

ну почитайте азы по паскалю, какими командами в паскале происходит вывод на экран (Writeln), а какими ввод данных (Readln) вот замените ввод переменной паскаля на присвоение ее значения текст из EDIT. а вывод сделайте как присвоение например компоненту lebel.caption:= <тут ваша переменная для вывода>, не забудьте перевести ее в строку...

Последний раз редактировалось kta87; 03.04.2012 в 15:22.
kta87 вне форума Ответить с цитированием
Старый 03.04.2012, 19:43   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

На форму "киньте" кнопку, едит, мемо.
У кнопки создайте событие, происходящее по щелчку.
Код:
const
  v:array[1..5,1..5] of string[2]=(('00','0*','','**',''),('0*','01','*1','',''),
  ('','*1','11','1*',''),('**','','1*','10','*0'),('','','','*0',''));
  
var
  i,j,l,k,n,s,ss,s1,xi,xj,f,z,x,q:integer;
  a,b:array[1..5,1..5] of integer;
  st:string;
  
procedure dec(q:String);
  begin
    n:=0;
    For i:= 1 To Length(q) do
      If copy(q, i, 1) = '1' Then n:= n + trunc(exp(ln(2)*(Length(q) - i)));
    If n = 3 Then n:= n - 1 Else If n = 2 Then n:= n + 1
  End;
  
Function pr(x,y,x1,y1:byte):integer;
  var
    i,j,k:integer;
  begin
    k:=0;
    for i:=x to x1 do
      for j:=y to y1 do
        if b[i,j]=0 then inc(k);
    if k=0 then k:=-1;
    pr:=k
  end;

 Form1.Button1Click(Sender:TObject);
  memo1.clear;
  st:=Edit1.Text+' ';
  While st <> '' do begin
    for i:=1 to pos(' ',st) do
      if st[i]='*' then begin st[i]:='1'; insert(st[1]+st[2]+st[3]+st[4]+' ',st,6); st[i]:='0' end;
    dec(st[1] + st[2]); k:= n; dec(copy(st, 3, pos(' ',st) - 3));
    a[n+1, k+1]:= 1;
    delete(st,1,pos(' ',st))
  End;
  for i:=1 to 4 do
    a[i,5]:=a[i,1];
  for i:=1 to 5 do
    a[5,i]:=a[1,i];
  s1:=1;
  while s1>0 do begin
    s1:=0; s:=0;
    for i:=1 to 5 do
      for j:=1 to 5 do
        if (a[i,j]>0) and (i>1) then a[i,j]:=a[i-1,j]+1;
    for i:=1 to 5 do begin q:=1;
      for j:=1 to 5 do
      if a[i,j]=0 then q:=j+1 else
        for l:=q to j do begin
          if a[i,l]>a[i,j] then a[i,l]:=a[i,j];
          z:=trunc(exp(trunc(ln(a[i,l])/ln(2))*ln(2)));
          x:=trunc(exp(trunc(ln(j-l+1)/ln(2))*ln(2)));
          ss:=pr(i-z+1,j-x+1,i,j);
          if (ss>s) or ((ss=s) and (s1<z*x)) then begin
            s1:=z*x; s:=ss; xi:=i; xj:=j; f:=x;
          end
        end;
      end;
    if s1>0 then Memo1.lines.append(v[xj-f+1,xj]+v[xi,xi+1-s1 div f]+' ');
    for i:=1 to s1 div f do
      for j:=xj-f+1 to xj do begin
        b[xi-i+1,j]:=1;
        if xi-i+1=5 then b[1,j]:=1;
        if j=5 then b[xi-i+1,1]:=1;
        if xi-i+1=1 then b[5,j]:=1;
        if j=1 then b[xi-i+1,5]:=1;
        if(j=1) and (xi-i+1=1) then b[5,5]:=1;
        if(j=1) and (xi-i+1=5) then b[1,5]:=1;
        if(j=5) and (xi-i+1=1) then b[5,1]:=1;
        if(j=5) and (xi-i+1=5) then b[1,1]:=1;
      end;
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.04.2013, 17:27   #4
Professor338
 
Регистрация: 21.03.2013
Сообщений: 4
По умолчанию

Дико извиняюсь, но какова должна быть начальная строка чтобы проверить его работоспособность, просто у меня похожее вроде задание.... хочу разобраться в этом коде, но как то не получается((
Professor338 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Карты Карно Юрий Васильевич Помощь студентам 7 12.12.2011 20:47
Перевести код на Делфи Superlotles Помощь студентам 7 30.03.2010 20:18
Помогите перевести на язык делфи код с С++! SkAndrew Общие вопросы Delphi 9 21.05.2009 18:49
Как перевести на делфи следующий код? SkAndrew Общие вопросы Delphi 7 15.05.2009 21:48
Построение карты Карно prusal Помощь студентам 2 13.05.2009 22:24