Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод кода(delphi/c++). Пузырьковый метод. Перевод кода. Пузырьковый метод. 
:(
    Опции темы
Skymit
  Дата 26.6.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.5.2011
Где: Знаменск

Репутация: нет
Всего: нет



[Delphi->С++]
Доброго всем дня smile
Используемые программы:  "Delphi 7 Lite Full Edition v7.3.4.1" и "Borland C++Builder 6 Enterprise Edition + UPDATE 4
 
".  

Добрый день. Помогите перевести код из делфи в с++ builder
Это простенькая программа пузырьковая сортировка smile

Вот код с Delphi:
Код

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,m,min,buf:integer;
a:array[1..20] of integer;
begin
for m:=0 to 5 do
begin
stringgrid1.Cells[m,0]:=inttostr(random(99));
end;
begin

      for i := 1 to 6 do
        a[i] := StrToInt(stringgrid1.Cells[i - 1, 0]);
      for i := 1 to 6 - 1 do
        begin

          min := i;
          for j := i + 1 to 6 do
            if a[j] < a[min] then min := j;

          buf := a[i];
          a[i] := a[min];
          a[min] := buf;
        end;
      for k := 1 to 6 do
        stringgrid2.Cells[k - 1, 0] := inttostr(a[k]);
        end;
        end;



Это сообщение отредактировал(а) Skymit - 26.6.2011, 18:57
PM MAIL WWW ICQ Skype MSN   Вверх
Usper
Дата 27.6.2011, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Здравствуй, первый курс  smile 
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    const int ArrCount = 10;
    int arr [ArrCount], z;
    StringGrid1->ColCount = ArrCount;
    randomize();
    for(int i = 0; i < ArrCount; i++)
    {
     arr[i] = random(99);
        StringGrid1->Cells[i][0] = arr[i];
    }
    z = 0;
    while (true)
    {
        StringGrid1->Col = z;
     if(arr[z] > arr[z+1])
        {
         arr[z+1] = arr[z] + arr[z+1];
            arr[z] = arr[z+1] - arr[z];
            arr[z+1] = arr[z+1] - arr[z];
            for(int i = 0; i < ArrCount; i++)
             StringGrid1->Cells[i][0] = arr[i];
            z--;
            if(z < 0) z = 0;
        }
        else z++;
        if(z >= (ArrCount - 1)) break;
        Sleep(1000);
        Application->ProcessMessages();
    }
    ShowMessage("Готово!");
}



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Skymit
Дата 27.6.2011, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.5.2011
Где: Знаменск

Репутация: нет
Всего: нет



Добрый день еще раз)
Тут две штучки исправил)
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    const int ArrCount = 5; - тут 5) У меня 5 строк. Иначе он обрабатывает и зависает. Первую строку растягивает и вторую нет. В 1 обрабатывает бесконечно))
    int arr [ArrCount], z;
    StringGrid1->ColCount = ArrCount;
    randomize();
    for(int i = 0; i < ArrCount; i++)
    {
     arr[i] = random(99);
        StringGrid1->Cells[i][0] = arr[i];
    }
    z = 0;
    while (true)
    {
        StringGrid1->Col = z;
     if(arr[z] > arr[z+1])
        {
         arr[z+1] = arr[z] + arr[z+1];
            arr[z] = arr[z+1] - arr[z];
            arr[z+1] = arr[z+1] - arr[z];
            for(int i = 0; i < ArrCount; i++)
             StringGrid2->Cells[i][0] = arr[i]; //и тут StringGrid2 
            z--;
            if(z < 0) z = 0;
        }
        else z++;
        if(z >= (ArrCount - 1)) break;
        Sleep(1000);
        Application->ProcessMessages();
    }
    ShowMessage("Готово!");

Если растянуть оба стринга, то можно увидеть что в 1 он добавляет на одну ячейку больше и поэтому во второй одного числа не хватает.

Это сообщение отредактировал(а) Skymit - 27.6.2011, 09:32
PM MAIL WWW ICQ Skype MSN   Вверх
Usper
Дата 27.6.2011, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Кхм... вторую таблицу я и не заметил... впрочем я вообще не смотрел на пример из первого поста - задача настолько проста. Я делаю вывод в одну таблицу, сначала туда выводится не сортированный массив, а затем он постепенно сортируется. При этом выделением подсвечивается текущая ячейка и стоит задержка в конце каждого шага для наглядности smile. Приведённый пример работает и при 5 и при 10 ячейках. В моём проекте на форме одна таблица и одна кнопка. В любом случае вы теперь знаете как выводить в таблицу значения и можете реализовать всё что захотите сами.
З.Ы. для красоты в таблице нужно установить RowCount и ColCount равными нулю.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Skymit
Дата 27.6.2011, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.5.2011
Где: Знаменск

Репутация: нет
Всего: нет



Оставил две строки, но в 1 строке ColCount в Object Inspector-е поставил значение 0 и получается что он считает только 5 строк)
Хотя с одним компонентом StringGrid проще=)
Вот исходники и скомпилированные проги smile:  С++Builder  и Delphi 7
Спасибо большое smile 
PM MAIL WWW ICQ Skype MSN   Вверх
albatron
Дата 12.4.2013, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.4.2013

Репутация: нет
Всего: нет



[Помогите перевести 2 процедуры с Delphi yf C++ Builder:



procedure TDominoFrm.printscore;
begin
with MainImg.Canvas do
begin
Brush.Color:=clWhite;
Font.Color:=clRed;
TextOut(630,455,'Счёт '+IntToStr(scores[1])+' : '+IntToStr(scores[2]));
end;
end;

procedure TDominoFrm.schet;
var i,ms,cs:integer;
begin
ms:=0;
cs:=0;
for i:=1 to 28 do
begin
if i in myset then
ms:=ms+1;
if i in compset then
cs:=cs+1;
end;
with MainImg.Canvas do
begin
Brush.Color:=clWhite;
Font.Color:=clRed;
TextOut(5,455,'У вас осталось '+IntToStr(ms)+' фишек  ');
TextOut(150,455,'У меня осталось '+IntToStr(cs)+' фишек  ');
end;
end;
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0844 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.