Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KoRNeT46RuS
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 77
#1

Помогите перевести из Delphi в C++ - C++

15.05.2012, 23:18. Просмотров 341. Ответов 0
Метки нет (Все метки)

Если кто может, буду очень благодарен. Или хотя бы назовите цену.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
    T   : String;
    S   : String;
    i,j  : longint;
    n,m : longint;
    v,w : longint;
    k   : longint;
const P  : longint = 7919; {1000-е простое число}
     D : longint = 256; {(количество всех возможных значений символьного типа char)}
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 
 {Ввод текста и образца}
  T:=Edit1.Text;
    S:=Edit2.Text;
    n:=Length(T);
    m:=Length(S);
 v:=0;
 w:=0;
 for i:=1 to m do {вычисление v и w}
 begin
  v:=(v*D+ord(S[i])) mod P; {ord преобразует символ в число}
  w:=(w*D+ord(T[i])) mod P;
 end;
k:=1;
 for i:=1 to m-1 do
 k:=k*D mod P; {k имеет значение Dm-1 mod P}
 for i:=m+1 to n+1 do
  begin
  if w=v then {если числа равны, то строки принадлежат одному классу, и надо проверить совпадают ли они}
   begin
   j:=0;
   while (j<m) and (S[j+1]=T[i-m+j]) do
    j:=j+1;
   if j=m then {окончательная проверка}
    ShowMessage('Образец входит в текст начиная с символа № '+inttostr(i-m));
   end;
  if i<=n then
  w:=(d*(w+P-(ord(T[i-m])*k mod P))+ord(T[i])) mod P;
 end;
 
end;
 
end.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Panel1: TPanel;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Wrd1,Wrd2: String;
  j,i,k,i0: Integer;
  d : Array['a'..'z'] of Integer;
  S : Array[0..255] of Char;
  P : Array[0..255] of Char;
  N,M : Integer; ch : Char;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 Wrd1:=Edit1.Text;
 Wrd2:=Edit2.Text;
  n:=Length(Wrd1);
    m:=Length(Wrd2);
 
  for j:=0 to n-1 do S[j]:=Wrd1[j+1];
    for j:=0 to m-1 do P[j]:=Wrd2[j+1];
  for ch:='a' to 'z' do d[ch]:=m;
    for j:=0 to m-2 do d[P[j]]:=m-j-1;
    i:=m;
    i0:=0;
    Repeat
        While i0<i do
        begin
            i0:=i0+1
        end;
        j:=m;
        k:=i;
        Repeat
            k:=k-1;
            j:=j-1
        until (j<=0) OR (P[j]<>S[k]);
        i:=i+d[S[i-1]]
    until ((j<=0) OR (i>N)) AND ((i>n) OR (P[j]=S[k]));
    If (j=0) AND (S[k]=P[j]) then
  Panel1.Caption:='Подслово найдено' 
else 
Panel1.Caption:='Подслово не найдено';
end;
 
end.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  S : String;
  P : String;
  FLINK : Array[1..255] of Byte;
  i,j,n,m: Byte;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  P:=Edit1.Text;
    S:=Edit2.Text;
    n:=Length(S);
    m:=Length(P);
    FLINK[1]:=0;
    i:=2;
      While i<=m do
        begin
          j:=FLINK[i-1];
           While (j<>0) AND (P[j]<>P[i-1]) do j:=FLINK[j];
           FLINK[i]:=j+1;
           i:=i+1
         end;
    i:=1;
    j:=1;
    While i<=n do
    begin
        While (j<>0) AND (P[j]<>S[i]) do j:=FLINK[j];
        If j=m then
        begin
      ShowMessage('Слово встретилось');
      Halt
        end
        else
        begin
            i:=i+1;
            j:=j+1
        end
    end;
    ShowMessage('Слово не встретилось');
      Halt
end;
 
end.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  S : String; { Исходное слово }
  X : String; { Подслово слова S }
  Result: Boolean; { Результат поиска }
  Place : Byte; { Место первого вхождения }
  Res: Boolean; i : Byte;
 
 
implementation
 
{$R *.dfm}
 FUNCTION Poisk (S: String; X: String; var Place: Byte): Boolean;
begin
  Res:=false;
    i:=1;
    While (i<=Length(S)-Length(X)+1) AND NOT Res do
    If Copy(S,i,Length(X))=X then
    begin
        Res:=true;
        Place:=i
    end
    else i:=i+1;
    Poisk:=Res
  END;
procedure TForm1.Button1Click(Sender: TObject);
BEGIN
    S:=Edit1.Text;
    X:=Edit2.Text;
    If X='' then ShowMessage('Результат поиска не определен.') else
    begin
        Result:=Poisk (S,X,Place);
        ShowMessage('Результат поиска '+BoolToStr(Result));
        If Result then ShowMessage('Место первого вхождения: '+inttostr(Place))
    end
end;
 
end.

Для общей информации это реализация алгоритмов: рябина, бойера-мура, кнута-морриса-пратта и последовательного поиска.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 23:18     Помогите перевести из Delphi в C++
Посмотрите здесь:

Помогите перевести в C++ - C++
Помогите перевести в C++ const sm=; var s:string; i,k:byte; begin read(s); k:=0; for i:=1 to lngth(s) do if s in sm...

Помогите пожалуйста!!! перевести на Си - C++
Program ciklp_6; uses crt; var i,n,k,s : longint; b : integer; begin

Помогите перевести с PHP на С++ - C++
Есть задание - в большой проге понадобилось переводить из одной системы счисления (СС) в другую, нашел хороший класс, но он на PHP,...

Перевести с Delphi на C/C++. - C++
program zadacha5; {$APPTYPE CONSOLE} uses SysUtils; var a,b,s,k,v :real ; begin

Перевести с DELPHI в С++ - C++
Кто-нибудь сможет помочь переписать код с delphi на с++? И вообще возможно ли это?

помогите задачу перевести с языка с++ на с - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { double A,maxx,sum=0.0,max; ...

Помогите перевести код с Пасякаля на С++ - C++
const a:array of integer= (2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71, ...

помогите перевести код с С# в консольное С++ - C++
Для заданного натурального числа n, вычислть сумму static void Main(string args) { double r = 0, ss = 0; ...

Помогите перевести код с PASCAL на C++ - C++
Вот код Pascal, как его перевести в C++ ?:cry: program integral; var n,i : integer; a,b,shag,sum,itog : real; function...

помогите перевести программу с паскаля на С++ - C++
Ребят , помогите перевести программу с паскаля на С++ , или подскажите как написать нечто подобное. Заранее благодарен. Вот задание : ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru