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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчитать сумму входящих в столбец матрицы элементов и определить столбцы с одинаковой суммой http://www.cyberforum.ru/cpp-beginners/thread1150154.html
Для каждого столбца прямоугольной матрицы подсчитать сумму входящих в него элементов и определить, столбцы с одинаковой суммой.
C++ Подсчет суммы элементов прямоугольной целочисленной таблицы X, состоящий из M строк и N столбцов Составить программу для подсчета суммы элементов прямоугольной целочисленной таблицы X, состоящий из M строк и N столбцов, сумма двух индексов которых число нечетное. Сформировать матрицу с помощью генератора случайных чисел и организовать ее вывод. http://www.cyberforum.ru/cpp-beginners/thread1150153.html
C++ Как с указателем обратиться к 4му элементу массива
Имеем массив из 50 элементов. Как с помощью указателей обратиться к 4му элементу массива?
C++ Задача со списками: изменить значение данного на его квадрат
Написать программу, в которой есть функции формирования и просмотра списка(ов) и функцию, которая меняет значение информационной части элемента списка на его квадрат. К сожалению никакого примера или заготовки дать не могу. Очень надеюсь на вашу помощь !
C++ Модифицировать программу таким образом, чтобы класс содержал закрытые переменные http://www.cyberforum.ru/cpp-beginners/thread1150122.html
Нужна помощь, модифицировать программу таким образом, чтобы класс содержал закрытые переменные. Задание такое Написать программу, обеспечивающую простейшие манипуляции с классом, определяющим карточку отдела кадров (обеспечить вывод на экран в удобном виде, печать сообщения при достижении пенсионного возраста). #include <iostream> #include <string> using namespace std; string...
C++ Структура "Человек". Найти фамилии женатых, у которых нет детей 1. Известны фамилии 12-ти людей, их семейное положение (женат\не женат) и наличие детей (есть\нету). Найти фамилии женатых, у которых нету детей. ---Эта задача должна решаться с помощью структур (struct) и на сколько я понимаю, должен создаваться файл, в котором будут эти данные. Очень надеюсь на вашу помощь ! подробнее

Показать сообщение отдельно
spectrum988
0 / 0 / 1
Регистрация: 24.10.2013
Сообщений: 47
17.04.2014, 19:58     Перевод кода с Delphi на С++
Добрый день.Помогите пожалуйста перевести код с 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);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru