Informatika gyűjtemény

Egy szinttel feljebb mt_dns.dpr

2004050607080910

NézetNyomtat

mt_dns.dpr (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 1 KB
program DNS;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
 t:array[0..100,0..100] of integer;
 g1,g2,g3:string;
 l1,l2,l3:integer;
procedure beolvas;
var f:text;
begin
 assign(f,'lkr0.be');
 reset(f);
 readln(f,g1);
 l1:=length(g1);
 readln(f,g2);
 l2:=length(g2);
 close(f);
end;

procedure kiir;
var f:text;
begin
assign(f,'dns.ki');
rewrite(f);
writeln(f,l3);
writeln(f,g3);
close(f);
end;

procedure munka;
var i,j:integer;
begin
 for i:=0 to l1 do
  begin
   t[0,i]:=0;
  end;

 for i:=0 to l2 do
  begin
   t[i,0]:=0;
  end;

 for i:=1 to l1 do
  begin
   for j:=1 to l2 do
    begin
     if g1[i]=g2[j] then
      t[i,j]:=t[i-1,j-1]+1
     else
      begin
       if t[i-1,j]>t[i,j-1] then t[i,j]:=t[i-1,j] else t[i,j]:=t[i,j-1];
      end;
    end;
  end;
end;

procedure befejez;
var i,j:integer;
    s:string;
    k:boolean;
begin
 i:=l1;
 j:=l2;
 s:='';
 k:=false;
 l3:=t[l1,l2];
 repeat
  if (i=0) or (j=0) then
  begin
   k:=true;
  end
  else
  begin
  if (i=1) and (j=1) then
   begin
    k:=true;
    if g1[i]=g2[j] then s:=g1[i]+s;
   end
  else
   begin
    if g1[i]=g2[j] then
     begin
      s:=g1[i]+s;
      i:=i-1;
      j:=j-1;
     end
    else
     begin
      if t[i-1,j]>t[i,j-1] then i:=i-1 else j:=j-1;
     end;
   end;
   end;
 until k;
 g3:=s;
end;

begin
 beolvas;
 munka;
 befejez;
 kiir;
end.
(Vissza)