Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2014, 08:35   #1
Wdagon
 
Регистрация: 27.03.2014
Сообщений: 4
По умолчанию Перевод кода из vba в C#

Добрый день! Есть код на VBA, нужно его перевести на C#, можете помочь.
Код:
For i = 1 To N
    a13(i) = a11(i)         
    a14(i) = a12(i)           
    Koef(i) = ab(i) 
 
    a15(i) = 0
    a16(i) = 0
 
 Next 
 
 For i = 1 To N
    D1 = 0          
    D2 = 0         
    
    For j = 1 To i 
                    
        a15(i - j + 1) = a15(i - j)
        a16(i - j + 1) = a16(i - j)
    Next j
    
    a15(1) = a13(i) 
    a16(1) = a14(i)
 
    For j = 1 To i
        a18(j) = Koef(j) * a15(j)   
        D1 = D1 + a18(j)            
 
        a19(j) = Koef(j) * a16(j)   
        D2 = D2 + a19(j)           
      
    Next j
 
     F1 = A0 * D1
     F2 = A0 * D2
        
      Rez = Round(B0 * F1 + B1 * F2 + B2 * F1 * F1 + B3 * F2 * F2 + B4 * F1 * F2, 2)
 
      x(i) = Rez
      
 Next i
Wdagon вне форума Ответить с цитированием
Старый 27.03.2014, 08:43   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

А что самостоятельно сделано по переводу? Тут тупо циклы, ничего особенного не вижу.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 27.03.2014, 09:07   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Приблизительно так:
Код:
For (i = 1;i<=N;i++){
    a13[i] = a11[i];         
    a14[i] = a12[i] ;          
    Koef[i] = ab[i];
 
    a15[i] = 0;
    a16[i] = 0;
 
}
 
For (i = 1;i<=N;i++){
    D1 = 0  ;        
    D2 = 0  ;       
    
 For (j = 1;j<=i;j++){
                    
        a15[i - j + 1] = a15[i - j];
        a16[i - j + 1] = a16[i - j];
 }
    
    a15[1] = a13[(i)]; 
    a16[1] = a14[(i)];
 
 For (j = 1;j<=i;j++){
        a18[(j)] = Koef[(j)] * a15[(j)];   
        D1 = D1 + a18(j);            
 
        a19[(j)] = Koef[(j)] * a16[(j)];   
        D2 = D2 + a19[(j)];           
      
 }
 
     F1 = A0 * D1;
     F2 = A0 * D2;
        
      Rez = Math.Round(B0 * F1 + B1 * F2 + B2 * F1 * F1 + B3 * F2 * F2 + B4 * F1 * F2, 2);
 
      x[(i)] = Rez;
      
}
Но это только часть кода.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.03.2014, 09:46   #4
Wdagon
 
Регистрация: 27.03.2014
Сообщений: 4
По умолчанию

[QUOTE=Stilet;1357168]Приблизительно так:
Код:
 For (j = 1;j<=i;j++){
                    
        a15[i - j + 1] = a15[i - j];
        a16[i - j + 1] = a16[i - j];
 }
здесь a15 выдает что индекс находится вне границ массива
Wdagon вне форума Ответить с цитированием
Старый 27.03.2014, 09:49   #5
Wdagon
 
Регистрация: 27.03.2014
Сообщений: 4
По умолчанию

Я вот так написал
Код:
public void Leb()
        {
            
            for (int i = 0; i < 91; i++)
            {
                QZ1[i] = Math.Exp(-A0 * N / 2);
                QZ2[i] = (1 - A0 * N) * QZ1[i];
                N++;
                a15[i] = 0;
                a16[i] = 0;
            }

                for (int i = 0; i < 91; i++)
                {
                    D11 = 0;
                    D21 = 0;

                    for (int j = 0; j < i; j++)
                    {
                        a15[i - j + 1] += a15[i - j];
                        a16[i - j + 1] += a16[i - j];
                    }
                    a15[0] = QZ1[i];
                    a16[0] = QZ2[i];

                    for (int j = 0; j < i; j++)
                    {
                        a18[j] = Q[j] * a15[j];
                        D11 += a18[j];

                        a19[j] = Q[j] * a16[j];
                        D21 += a19[j]; 
                    }

                    F1[i] = A0 * D11;
                    F2[i] = A0 * D21;
                    Qleb[i] = Math.Round(B0 * F1[i] + B1 * F2[i] + B2 * F1[i] * F1[i] + B3 * F2[i] * F2[i] + B4 * F1[i] * F2[i], 2);
                }
            
            QL();
        }
Но вот тут ошибка
Код:
For (Int j = 1; j<= i; j++)
{                 
        a15[i - j + 1] = a15[i - j];
        a16[i - j + 1] = a16[i - j];
 }

Последний раз редактировалось Wdagon; 27.03.2014 в 10:10.
Wdagon вне форума Ответить с цитированием
Старый 27.03.2014, 10:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Wdagon, во-первых, в упор не вижу в вашем коде, где Вы задаёте значение переменной N, вместо него, кое-где непонятные константы (вот, откуда у Вас появлись 91, которого не было в исходном коде на VBA) ?!

во-вторых, нумерация в массивах в бейсике от 1 до N, а в C# от 0 до N-1, нужно везде поправить индексацию в массивах...

это так, навскидку...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.03.2014, 10:28   #7
Wdagon
 
Регистрация: 27.03.2014
Сообщений: 4
По умолчанию

в vba N=91, я просто сразу написал 91
C# от 0 до N-1, Т.е. везде нужно 90 указать?
Wdagon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод кода из Delphi в VBA prem1era Microsoft Office Access 1 15.05.2012 12:39
Перевод кода в VBA prem1era Общие вопросы Delphi 0 14.05.2012 20:41
Перевод кода с VBA на С++ Evgen.O Общие вопросы C/C++ 0 11.12.2011 17:12
Перевод кода под VBA naboman Microsoft Office Excel 2 01.06.2011 19:59