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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Открыть существующий файл для записи и считывания http://www.cyberforum.ru/cpp-beginners/thread575908.html
Написал код FILE * fo;//создаю указатель if( (fo=fopen("backup_date.txt","at")) == 0 ) {//открываю файл и проверяю открылся или нет ShowMessage("Ошибка записи файла резервного копирования"); } UnicodeString str=DateToStr(CurrentDate);// переменной str присваиваю значения объекта класса TdataTime, сегодняшнюю дату ShowMessage(str);// вывожу на экран сегодняшнюю дату для...
C++ Создать класс! Создать класс для ПРИНТЕРОВ(можно для чего угодно: Автомобилей, Телефонов и т.д.). Что нам надо: Необходимо разработать иерархию классов. Базовые классы иерархии должны быть абстрактными. В каждом классе иерархии нужно предусматривать: -наличие не менее трех конструкторов -визуальный диструктор -перезагрузку операций. Обязательно перезагрузить операции: присваивания и декремента(в обеих... http://www.cyberforum.ru/cpp-beginners/thread575865.html
прокомментируйте пожалуйста что делает каждый рядок, очень надо, курсач =(( C++
#include <iostream> using namespace std; double Func(double x) { return 16.7 * x + 9.2 * x * x - 1.01 * x * x * x; } int main()
Найти максимальный отрицательный элемент массива C++
Итак, имеется программа: #include <iostream> using namespace std; void main() { setlocale(LC_ALL, "Russian"); //определим размер массива const int N = 5;
C++ Программа не работает http://www.cyberforum.ru/cpp-beginners/thread575846.html
#include <stdlib.h> #include <stdio.h> #include <math.h> int main () { int i,n; FILE *Result; Result=fopen("Result.txt","a"); float s1,s2; while (n<6)
C++ Описать тип TTriangle — запись с полями A, B, C Описать тип TTriangle — запись с полями A, B, C (стороны треугольника) и описать процедуру Medains(T, m1, m2, m3), находящую высоты m1, m2, m3 треугольника T (T — входной параметр типа TTriangle, m1, m2, m3 — выходные вещественные параметры), проведенные соответственно из вершин T.A, T.B, T.C. С помощью этой процедуры найти высоты треугольников ABC, ABD, ACD. Добавлено через 11 часов 45 минут... подробнее

Показать сообщение отдельно
KoRNeT46RuS
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 77

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

15.05.2012, 23:18. Просмотров 342. Ответов 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.

Для общей информации это реализация алгоритмов: рябина, бойера-мура, кнута-морриса-пратта и последовательного поиска.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru