Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 30.11.2013
Сообщений: 19
1

Перевод кода с СИ на Delphi

06.01.2015, 00:02. Показов 1381. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно вот такой код перевести на Delphi!Это функция, которая возвращает ранг матрицы!Помогите пожалуйста!
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
// Приведение вещественной матрицы
// к ступенчатому виду методом Гаусса с выбором
// максимального разрешающего элемента в столбце.
// Функция возвращает ранг матрицы
int gaussMethod(
    int m,          // Число строк матрицы
    int n,          // Число столбцов матрицы
    double *a,      // Адрес массива элементов матрицы
    double eps      // Точность вычислений
) {
    int i, j, k, l;
    double r;
 
    i = 0; j = 0;
    while (i < m && j < n) {
        // Инвариант: минор матрицы в столбцах 0..j-1
        //   уже приведен к ступенчатому виду, и строка
        //   с индексом i-1 содержит ненулевой эл-т
        //   в столбце с номером, меньшим чем j
 
        // Ищем максимальный элемент в j-м столбце,
        // начиная с i-й строки
        r = 0.0;
        for (k = i; k < m; ++k) {
            if (fabs(a[k*n + j]) > r) {
                l = k;      // Запомним номер строки
                r = fabs(a[k*n + j]); // и макс. эл-т
            }
        }
        if (r <= eps) {
            // Все элементы j-го столбца по абсолютной
            // величине не превосходят eps.
            // Обнулим столбец, начиная с i-й строки
            for (k = i; k < m; ++k) {
                a[k*n + j] = 0.0;
            }
            ++j;      // Увеличим индекс столбца
            continue; // Переходим к следующей итерации
        }
 
        if (l != i) {
            // Меняем местами i-ю и l-ю строки
            for (k = j; k < n; ++k) {
                r = a[i*n + k];
                a[i*n + k] = a[l*n + k];
                a[l*n + k] = (-r); // Меняем знак строки
            }
        }
 
        // Утверждение: fabs(a[i*n + k]) > eps
 
        // Обнуляем j-й столбец, начиная со строки i+1,
        // применяя элем. преобразования второго рода
        for (k = i+1; k < m; ++k) {
            r = (-a[k*n + j] / a[i*n + j]);
 
            // К k-й строке прибавляем i-ю, умноженную на r
            a[k*n + j] = 0.0;
            for (l = j+1; l < n; ++l) {
                a[k*n + l] += r * a[i*n + l];
            }
        }
 
        ++i; ++j;   // Переходим к следующему минору
    }
 
    return i; // Возвращаем число ненулевых строк
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2015, 00:02
Ответы с готовыми решениями:

Перевод C++ кода на Delphi
Кто-нибудь из присутствующих занимался сим странным занятием? Интересует перевод данного кода на...

Перевод кода из С# в Delphi
Здравствуйте. Помогите пожалуйста перевести код из С# в Delphi или исправить ошибки в моём коде на...

Перевод кода с C++ на Delphi
Помогите пожалуйста перевести задачу:help:...

Перевод кода из с++ в Delphi
помогите пожалуйста перевести код этой функции в делфи, а то ни как не могу догнать как это сделать...

5
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,252
06.01.2015, 03:25 2
Цитата Сообщение от CyberFru1 Посмотреть сообщение
Нужно вот такой код перевести на Delphi
Зачет 100500 раз переводить один и тот же фортрановский код с СИ на Паскаль и обратно?
Лень искать во всемирной помойке?
0
0 / 0 / 0
Регистрация: 01.01.2015
Сообщений: 21
06.01.2015, 03:41 3
Delphi
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
// Приведение вещественной матрицы
// к ступенчатому виду методом Гаусса с выбором
// максимального разрешающего элемента в столбце.
// Функция возвращает ранг матрицы
function gaussMethod(
    m: integer;                // Число строк матрицы
    n: integer;                // Число столбцов матрицы
    eps: double;              // Точность вычислений
    var a: array of double   // Адрес массива элементов матрицы
) : integer;
var
    i, j, k, l: integer;
    r: double;
begin
    i := 0; j := 0;
    while (i < m) and (j < n) do begin
        // Инвариант: минор матрицы в столбцах 0..j-1
        //   уже приведен к ступенчатому виду, и строка
        //   с индексом i-1 содержит ненулевой эл-т
        //   в столбце с номером, меньшим чем j
 
        // Ищем максимальный элемент в j-м столбце,
        // начиная с i-й строки
        r := 0.0;
        for k := i to m - 1 do begin
            if (abs(a[k*n + j]) > r) then begin
                l := k;      // Запомним номер строки
                r := abs(a[k*n + j]); // и макс. эл-т
            end;
        end;
        if (r <= eps) then begin
            // Все элементы j-го столбца по абсолютной
            // величине не превосходят eps.
            // Обнулим столбец, начиная с i-й строки
            for k := i to m - 1 do begin
                a[k*n + j] := 0.0;
            end;
            inc(j);      // Увеличим индекс столбца
            continue; // Переходим к следующей итерации
        end;
 
        if l <> i then begin
            // Меняем местами i-ю и l-ю строки
            for k := j to n - 1 do begin
                r := a[i*n + k];
                a[i*n + k] := a[l*n + k];
                a[l*n + k] := (-r); // Меняем знак строки
            end;
        end;
 
        // Утверждение: abs(a[i*n + k]) > eps
 
        // Обнуляем j-й столбец, начиная со строки i+1,
        // применяя элем. преобразования второго рода
        for k := i+1 to m - 1 do begin
            r := (-a[k*n + j] / a[i*n + j]);
 
            // К k-й строке прибавляем i-ю, умноженную на r
            a[k*n + j] := 0.0;
            for l := j+1 to n-1 do begin
                a[k*n + l] := a[k*n + l] + r * a[i*n + l];
            end;
        end;
 
        inc(i); inc(j);   // Переходим к следующему минору
    end;
 
    Result := i; // Возвращаем число ненулевых строк
end;
Цитата Сообщение от northener Посмотреть сообщение
Зачет 100500 раз переводить один и тот же фортрановский код с СИ на Паскаль и обратно?
Лень искать во всемирной помойке?
ничего, может теперь найти будет проще
0
1 / 1 / 1
Регистрация: 30.11.2013
Сообщений: 19
06.01.2015, 18:00  [ТС] 4
tuwm, Cпасибо за помощь!
0
174 / 160 / 71
Регистрация: 22.02.2013
Сообщений: 1,769
Записей в блоге: 2
06.01.2015, 20:07 5
Цитата Сообщение от tuwm Посмотреть сообщение
ничего, может теперь найти будет проще
это наврятли)) про то что это метод гауса нет ни слова..
0
0 / 0 / 0
Регистрация: 01.01.2015
Сообщений: 21
06.01.2015, 21:05 6
NotBeginner, комментарии в коде
Цитата Сообщение от tuwm Посмотреть сообщение
// Приведение вещественной матрицы
// к ступенчатому виду методом Гаусса с выбором
// максимального разрешающего элемента в столбце.
Добавлено через 20 минут
Это если не учитывать твой комментарий.
0
06.01.2015, 21:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2015, 21:05
Помогаю со студенческими работами здесь

Перевод кода VB в Delphi
Совсем уже голову сломала. В общем, мне нужно перевести кусок кода из VB в его аналог на Delphi....

Перевод кода с C++ на Delphi.
Добрый день. Взялся давеча помочь одному человечку с задачей о рюкзаке, написал программу на C++,...

Перевод кода в Delphi
Помогите перевести этот кусок кода из С в Delphi void SelectLine(TRichEdit *Editor, DWORD nLine)...

Перевод кода c++ на delphi
Здравствуйте, есть очень простой код на c++. Он считает количество совпадений каждого символа в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru