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

Перевод кода с Delphi на С++ - C++

Восстановить пароль Регистрация
 
spectrum988
0 / 0 / 1
Регистрация: 24.10.2013
Сообщений: 47
17.04.2014, 19:58     Перевод кода с Delphi на С++ #1
Добрый день.Помогите пожалуйста перевести код с Delphi на С++Builder,очень нужно.
Pascal
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
unit MainUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TMainForm = class(TForm)
    Field: TPanel;
    StartBtn: TButton;
    EndBtn: TButton;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Timer: TTimer;
    procedure StartBtnClick(Sender: TObject);
    procedure Move(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
    procedure EndBtnClick(Sender: TObject);
  end;
 
var MainForm: TMainForm;
 
implementation
 
{$R *.dfm}
 
type
  TTagArray = array [1..16] of Byte;
 
var
  Dibs: TTagArray;
  Direction: 0..4;
  Number,N: 1..16;
  Xo,Yo,X,Y: Integer;
 
function RandomArray: TTagArray;
var
  i,j,X: 1..16;
  Single: Boolean;
begin
  Randomize;
  for i:=1 to 16 do begin
    repeat
      X:=Random(16)+1; // генерирует случайное число от 1 до 16
      Single:=True; for j:=1 to i-1 do Single:=(Single)and(X<>Result[j]); // проверка единственности числа X
    until Single;
    Result[i]:=X;
  end;
end;
 
procedure DrawArray(Sender: TForm; TagArray: TTagArray);
var i: 1..16;
begin
  for i:=1 to 16 do begin
    if TagArray[i]=16 then Continue; // если элемент массива 16, то переходим в следующию итерацию
    with TButton(Sender.Components[TagArray[i]]) do begin Left:=((i-1) mod 4)*75+2; Top:=((i-1) div 4)*75+2; end;
  end;
end;
 
procedure TMainForm.StartBtnClick(Sender: TObject);
begin
  Dibs:=RandomArray;
  DrawArray(MainForm,Dibs);
end;
 
procedure TMainForm.Move(Sender: TObject);
var i: 1..16;
begin
  Timer.Enabled:=True; // включение таймера
  case Direction of  // исходя из направления движения
   1: dec(X,15); // уменьшаем X на 15
   2: inc(X,15); // увеличиваем X на 15
   3: dec(Y,15); // уменьшаем Y на 15
   4: inc(Y,15); // увеличиваем Y на 15
  end;
  with TButton(Components[Number]) do begin Left:=Xo+X; Top:=Yo+Y; end; // перемещаем компонент
  if (abs(X)=75)or(abs(Y)=75) then begin // когда пройдено 75 шагов
    Timer.Enabled:=False; // выключаем таймер
    X:=0; Y:=0;
    case Direction of // перестановка чисел в массиве
     1: begin Dibs[N-1]:=Dibs[N]; Dibs[N]:=16; end;
     2: begin Dibs[N+1]:=Dibs[N]; Dibs[N]:=16; end;
     3: begin Dibs[N-4]:=Dibs[N]; Dibs[N]:=16; end;
     4: begin Dibs[N+4]:=Dibs[N]; Dibs[N]:=16; end;
    end;
    for i:=1 to 16 do if Dibs[i]<>i then Break; // определяем, расставлены ли кнопки по порядку от 1 до 15
    if i=17 then ShowMessage('Вы выиграли!'); // и если да, то Ok!
  end;
end;
 
procedure TMainForm.ButtonClick(Sender: TObject);
var i: 1..16;
begin
  Number:=(Sender as TButton).ComponentIndex; // Number — номер нажатой кнопки
  for i:=1 to 16 do if Dibs[i]=Number then N:=i; // определение ее позиции в массиве
  // определение направления движения
  Direction:=0;
  if (N>1 )and(N<>5)and(N<>9)and(N<>13)and(Dibs[N-1]=16) then Direction:=1; // влево
  if (N<16)and(N<>4)and(N<>8)and(N<>12)and(Dibs[N+1]=16) then Direction:=2; // вправо
  if                           (N-4> 0)and(Dibs[N-4]=16) then Direction:=3; // вверх
  if                           (N+4<17)and(Dibs[N+4]=16) then Direction:=4; // вниз
  if Direction=0 then Exit; // если вокруг кнопки пустой позиции нет — выход
  Xo:=(Sender as TButton).Left; Yo:=(Sender as TButton).Top; X:=0; Y:=0;
  MainForm.Move(Sender); // вызов процедуры перемещения кнопки
end;
 
procedure TMainForm.EndBtnClick(Sender: TObject);
begin Close end;
 
end.
Вот все,что я смог сделать:
C++
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
typedef BYTE TTagArray[15];
TTagArray Dibs;
int Direction;
int Number,N;
int Xo,Yo,X,Y;
//---------------------------------------------------------------------------
void __fastcall TForm1::EndBtnClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
  int i;
  Number=((TButton*)(Sender))->ComponentIndex; // Number — номер нажатой кнопки
  for (i=1;i<=16;i++)
   if (Dibs[i]=Number)
    N=i; // определение ее позиции в массиве
  // определение направления движения
  Direction=0;
  if ((N>1 )&&(N!=5)&&(N!=9)&&(N!=13)&&(Dibs[N-1]==16))
  Direction=1; // влево
  if ((N<16)&&(N!=4)&&(N!=8)&&(N!=12)&&(Dibs[N+1]==16))
  Direction=2; // вправо
  if ((N-4>0)&&(Dibs[N-4]==16))
   Direction=3; // вверх
  if ((N+4<17)&&(Dibs[N+4]==16))
   Direction=4; // вниз
  if (Direction=0)
  {
   exit; // если вокруг кнопки пустой позиции нет — выход
  Xo=((TButton*)(Sender))->Left;
  Yo=((TButton*)(Sender))->Top;
  X=0; Y=0;
  }
  MainForm.Move(Sender); // вызов процедуры перемещения кнопки
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::StartBtnClick(TObject *Sender)
{
Dibs=RandomArray;
DrawArray(Form1,Dibs);
}
//---------------------------------------------------------------------------
void __fastcall DrawArray(TForm *Sender; TTagArray *TagArray);
{
  int i;
  for (i=1;i<=16;i++)
  {
    if TagArray[i]==16
    Continue;      // если элемент массива 16, то переходим в следующию итерацию
    TButton* button = dynamic_cast<TButton*>(Sender->Components[TagArray[i])
if(button)
{
  button->Left=((i-1) % 4)*75+2;
  button->Top=((i-1) / 4)*75+2;
}
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Move(TObject *Sender);
{
int i;
  switch Direction
  {  // исходя из направления движения
   case 1: dec(X,15); // уменьшаем X на 15
   case 2: inc(X,15); // увеличиваем X на 15
   case 3: dec(Y,15); // уменьшаем Y на 15
   case 4: inc(Y,15); // увеличиваем Y на 15
  }
}
  with TButton(Components[Number]) do
  {
  Left=Xo+X;
  Top=Yo+Y;
  }                                   // перемещаем компонент
  if ((fabs(X)=75)||(fabs(Y)=75))
    {                                // когда пройдено 75 шагов
    X=0; Y=0;
    switch Direction
    {                           // перестановка чисел в массиве
     case 1: {
             Dibs[N-1]=Dibs[N];
             Dibs[N]=16;
             }
     case 2: {
             Dibs[N+1]=Dibs[N];
             Dibs[N]=16;
             }
     case 3: {
             Dibs[N-4]=Dibs[N];
             Dibs[N]=16;
             }
     case 4: {
             Dibs[N+4]=Dibs[N];
             Dibs[N]=16;
             }
    }
    for (i=1;i<=16;i++)
     if Dibs[i]!=i
      Break;        // проверка расставлены ли кнопки по порядку от 1 до 15
     if i==17
      ShowMessage("Поздравляем,Вы выиграли!");       // и если да, то Ok!
  }
 
 
TTagArray RandomArray(void)
{
int i,j,X;
bool Single;
  Randomize;
  for (i=1;i<=16;i++)
  {
    do
      X=Random(16)+1;    // генерирует случайное число от 1 до 16
      Single=True;
      for (j=1;j<=i-1;j++)
      Single=(Single)&&(X!=Result[j]); // проверка единственности числа X
    while Single;
    Result[i]=X;
  }
}
 
 
//---------------------------------------------------------------------------
 
 
//---------------------------------------------------------------------------
Ошибку выбивает в строке:MainForm.Move(Sender);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2014, 19:58     Перевод кода с Delphi на С++
Посмотрите здесь:

C++ Перевод кода на с++
C++ Перевод кода с Delphi, деление нацело
C++ Перевод кода С# на С++
Перевод кода из c в c++ C++
перевод кода с C# на C++ C++
Перевод кода C++
C++ Перевод кода
Перевод кода С# на C++ C++
C++ Перевод кода из С# на С++
C++ Перевод кода
Перевод кода с VB на C++ C++
Перевод кода с Delphi на C++ C++

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

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

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