Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевести код из Си в Дельфи 
:(
    Опции темы
cuore
Дата 17.5.2013, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пожалуйста, помогите перевести код из Си в Дельфи. Для вывода результатов использовать memo. 
Код

int main()
{
 int i;
 double 
     a = 0.7,
     b = 0.8,
     y = 0,
     f[3],
     x[4] = {10000,10000,10000,10000},
     k[3] = {1,1,1},
     y1[3],
     Fmax[4] = {0,0,0,0};

for (i = 2; i >= 0; i--)
{
        for (y = 0; y < 1; y += 0.001)
        {
            f[i] = 0.6*y + 0.5*(1-y) + Fmax[i+1] * (a*y + b*(1-y));
            if (f[i] > Fmax[i])
            {
                Fmax[i] = f[i];
                y1[i] = y;
            }
        }

        if (y1[i] == 0) k[i]=b; else k[i]=a;

        printf("Step %d\n", i);
        printf("y[%d] = %.1f\n", i, y1[i]);
        printf("fmax[%d] = %.3f\n", i, Fmax[i]);
        printf("k[%d] = %.1f\n", i, k[i]);
        printf("-------------------------------------\n");
    }

 cprintf("\nMoney remains:\n");
 for (i=2; i >= 0 ; i--)
 {
    x[i] = k[2-i] * x[i+1];
    printf("\nx%d = %.f*x", i, x[i]);
 }
 getch();
 return 0;
}

Я часть перевел, но результаты не те.
Код

var
  i: integer;
  a, b, y: real;
  f: array[1..3] of real;
  x: array[1..4] of real=(1,1,1,1);
  k: array[1..3] of real=(1,1,1);
  y1: array[1..3] of real;
  Fmax: array[1..4] of real=(0,0,0,0);
begin
  a := 0.7;
  b := 0.8;
  y := 0;
  for i := 2 downto 0 do
    begin
      repeat
        begin
          f[i] := 0.6*y + 0.5*(1-y) + Fmax[i+1]*(a*y+b*(1-y));
          if (f[i] > Fmax[i]) then
            begin
              Fmax[i] := f[i];
              y1[i] := y;
            end;
          y := y + 0.001;
        end;
      until (y>1);
  memo1.Lines.Add(FloatToStr(i) + '   ' + FloatToStr(y1[i]) + '   ' + FloatToStr(fmax[i]));
    end;
end;

а именно в выводе y. 

Это сообщение отредактировал(а) cuore - 17.5.2013, 01:57
PM MAIL   Вверх
_zorn_
Дата 17.5.2013, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

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



Код
x[4] = {10000,10000,10000,10000}

Код
x: array[1..4] of real=(1,1,1,1);

Сразу бросилось в глаза (хоть и не используется).

Ну и
Код
if (y1[i] == 0) k[i]=b; else k[i]=a;

отсутствует.
PM MAIL   Вверх
cuore
Дата 17.5.2013, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это использоваться будет потом! А то, что отсутствует - в выводу у никакого отношения не имеет. Было же сказано, что перевел я только часть кода! 
PM MAIL   Вверх
david_yu
Дата 20.5.2013, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

procedure SetMain;
var
    i, y: Integer;
    a, b: Double;
    f: array [0..2] of Double;
    x: array [0..3] of Double = (1000,1000,1000,1000);
    k: array [0..2] of Double = (1,1,1);
    y1, Fmax: array [0..3] of Double = (0,0,0,0);
begin
    a := 0.7;
    b := 0.8;
    y := 0;
    for i = 2 downto 0 do begin
        while y < 1 do begin
            f[i] := 0.6 * y + 0.5 * (1 - y) + Fmax[i + 1] * (a * y + b * (1- y));
            if f[i] > Fmax[i] then begin
                Fmax[i] := f[i];
                y1[i] := y;
            end;    
            y := y + 0.001;
        end;
        if y1[i] = 0 then k[i] := b else k[i] = a;
        {бла бла бла бла}
    end;
end;


Этот ответ добавлен с нового Винграда - http://vingrad.com

Это сообщение отредактировал(а) Alexeis - 20.5.2013, 09:04
PM MAIL   Вверх
david_yu
Дата 20.5.2013, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



reapt
unit y > 1 {единица не должна выпольняться}

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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