→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Переделать программу из Delphi в C++ 
Автор Сообщение
Начинающий

Регистрация: 21.12.2010
Сообщения: 1
Языки:

Репутация: 0 [ ? ]
 Переделать программу из Delphi в C++
Вобщем есть программа поиска подстроки в строке с помощью конечных автоматов реализованная на Delphi. Нужно ее перекомпилировать в C++. Заранее благодарен.
Вот код:

uses math;

const
maxplen = 400;

type
transfunc = array[0..maxplen, 1..255] of integer;

var
i: integer;
p, t: string;
hasch: array[1..255] of boolean;
f: transfunc;

{ Построение автомата по образцу }
procedure computefunc(const p: string; var f: transfunc);
var
i, j, k, m, t1, t2: integer;
begin
m := length(p);
for i := 0 to m do begin
for j := 1 to 255 do if hasch[j] then begin
k := min(m + 1, i + 2);
while k > 0 do begin
dec(k);
if (k > 0) and (ord(p[k]) = j) then begin
t1 := k - 1; t2 := i;
while (t1 > 0) and (p[t1] = p[t2]) do begin
dec(t1); dec(t2);
end;
if t1 = 0 then break;
end;
end;
f[i, j] := k;
end;
end;
end;

{ Поиск подстроки }
procedure match(const t: string; var f: transfunc; const m: integer);
var
n, q, i: integer;
begin
writeln('Осуществим проход по тексту. В начале автомат находится в состоянии q = 0.');
writeln('Взяв следующий символ ''a'' текста Т, автомат переходит в состояние f[q, ''a''].');
writeln;

n := length(t);
q := 0;
for i := 1 to n do begin
write('T[', i, '] = ', '''', t[i], ''', f[', q, ', ''', t[i], '''] = ', f[q, ord(t[i])]);
q := f[q, ord(t[i])];
if q = m then begin
write(', мы попали в состояние ', m,
', следовательно образец входит в текст с позиции ', i - m + 1, '.');
end;
writeln;
end;
end;

procedure fill(const n: integer; const ch: char);
var
i: integer;
begin
for i := 1 to n do write(ch);
end;

procedure printfunc(var f: transfunc; const m: integer);
var
i, j, t, digits: integer;
begin
writeln;
writeln('Длина образца |P| = ', m, ', поэтому количество состояний в автомате - ', m + 1, ' (|P|+1).');
writeln('Автомат находит вхождение образца, если он попадает в допускающее состояние ', m, '.');
writeln('Построим функцию переходов f. Для каждого префикса P[0..m], где m = 0..', m, ',');
writeln('переберем все символы ''a'', встречающиеся в образце, и найдем максимальный');
writeln('суффикс строки P[0..m]a, который является префиксом P. Длину найденного префикса');
writeln('сохраним в ячейке f[m, ''a''] функции переходов.');
writeln;
writeln('Полученная в результате функция переходов имеет вид:');
writeln;
t := m; digits := 0;
while t > 0 do begin
inc(digits); t := t div 10;
end;

write(' ');
for i := 0 to m do begin
write('| ');
write(i:digits);
end;
writeln;

for i := 1 to 255 do if hasch[i] then begin
write('--');
for j := 0 to m do begin
write('+');
fill(digits + 1, '-');
end;
writeln;
write(' ', chr(i));
for j := 0 to m do begin
write('| ');
write(f[j, i]:digits);
end;
writeln;
end;
writeln;
end;

begin
reset(input, 'input.txt');
rewrite(output, 'output.txt');

readln(t); readln(p);
writeln('Ищем образец "', p, '" (P) в тексте "', t, '" (T).');
for i := 1 to length(p) do hasch[ord(p[i])] := true;

computefunc(p, f);
printfunc(f, length(p));
match(t, f, length(p));
end.


21.12.2010 23:34
Профиль Отправить email
Эксперт

Регистрация: 09.12.2010
Сообщения: 80
Откуда: Лисичанск
Языки:

Репутация: 0 [ ? ]
 Re: Переделать программу из Delphi в C++
переделать врядли выйдет!!! нужно писать новую на таком подобии


24.12.2010 16:27
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


Кто сейчас на конференции

Зарегистрированные пользователи: Yahoo [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»