Перевод из ПАскаль в С++

Тема в разделе "Общие вопросы по С и С++", создана пользователем flip, 15 дек 2010.

  1. flip

    flip Гость

    У меня не сильно складываются отношения с Паскалем))) Нужно перевести программку на С++. Помогите, пожалуйста, буду очень признателен. Заранее спасибо
    Код (Delphi):
    TYPE MAT=ARRAY [1..10, 1..10] OF REAL;
    VEC=ARRAY [1..10] OF REAL;
    VAR I,K,M,N: INTEGER; E,L: REAL; A:MAT; X:VEC;
    PROCEDURE MATR (N:INTEGER; VAR X:VEC; VAR A:MAT);
    VAR I,J: INTEGER;
    BEGIN
    FOR I:=1 TO N DO BEGIN WRITE (‘X’, I:2, ‘?’); READLN (X[I]);
    FOR J:=1 TO N DO BEGIN
    WRITE (‘A’,I:2,J:2,’?’); READLN (A[I,J])
    END
    END
    END;
    PROCEDURE EIGEN (N,M : INTEGER; VAR X:VEC; VAR A:MAT; E:REAL; VAR L:REAL; VAR K:INTEGER);
    VAR I,J: INTEGER; R,S: REAL; Y:VEC;
    BEGIN K:=0; L:=0.0;
    REPEAT R:=L; K:=K+1; L:=0.0;
    FOR I:=1 TO N DO BEGIN S:=0.0;
    FOR J:=1 TO N DO S:=A[I,J]*X[J];
    IF ABS (S)> ABS (L) THEN L:=S;
    Y[I]:=S
    END;
    FOR I:=1 TO N DO X[I]:=Y[I]/L  
    UNTIL (K=M) OR (ABS((L-R)/L)<E)
    END;
     
  2. ierofant

    ierofant Гость

    Вот в этой теме я занимался переводом из Паскаля:
    http://codeby.net/forum/threads/39977.html

    Я меня пока больше нет желания снова это делать. Может ты сам по аналогии перепишешь.
     
  3. flip

    flip Гость

    я смотрел, но, честно говоря, не совсем понятно. буду очень благодарен, если поможете с кодом
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Тут знака не хватает, что там должно быть? В обоих случаях "<"? И тег кода надо использовать
     
  5. flip

    flip Гость

    сори. действительно знаки потеряны
    вот правильно:
    (ABS((L-R)/L)<E)

    IF ABS (S)> ABS (L) THEN L:=S;
     
  6. ierofant

    ierofant Гость

    Теги кода-то поставь, чтобы хоть подсветка синтаксиса была, а-то глаза режет.
     
  7. ierofant

    ierofant Гость

    А где сама программа? Я тут только вижу две процедуры. Где основной блок?
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ierofant это, наверно, метод такой - выкладывать прогу по кусочкам =) А может, действительно самые сложные места - хотя что-то, а ввод вектора и матрицы на с++ самому сделать или нагуглить готовый - не проблема, имхо. Ну, вычисления-то ладно, мб, и не сразу там цикл напишешь правильно =)
     
  9. ierofant

    ierofant Гость

    Да, а потом, когда этот код переведём, он скажет: "ой, а я вот тут ещё кусочек забыл!". И вся концепция в корне изменится :(

    Добавлено: В общем как-то так:

    Код (C++):
    #include <iostream>
    #include <cmath>

    static const int SIZE = 10;
    typedef double Mat [SIZE][SIZE];
    typedef double Vec [SIZE];

    void matr (Vec &_x, Mat &_a)
    {
    for (int i = 0; i < SIZE; i++)
    {
    std::cout << "x[" << i << "]? ", std::cin >> _x [i];
    for (int j = 0; j < SIZE; j++) std::cout << "a[" << i << "][" << j << "]? ", std::cin >> _a [i] [j];
    }
    }

    void eigen (int _m, Vec &_x, Mat &_a, double _e)
    {
    int k = 0;
    double l = 0, r;
    Vec y;

    do
    {
    r = l;
    k++;
    l = 0;

    for (int i = 0; i < SIZE; i++)
    {
    double s = 0;
    for (int j = 0; j < SIZE; j++) s = _a [i][j] * _x [j];
    if (std::abs (s) > std::abs (l)) l = s;
    y [i] = s;
    }
    for (int i = 0; i < SIZE; i++) _x [i] = y [i] / l;

    } while (k == _m || std::abs ((l - r) / l) < _e);
    }
     
  10. flip

    flip Гость

    Спасибо всем огромное за помощь
     
Загрузка...
Похожие Темы - Перевод из ПАскаль
  1. aisylu
    Ответов:
    0
    Просмотров:
    1.092
  2. FaRReLL
    Ответов:
    0
    Просмотров:
    847
  3. FaRReLL
    Ответов:
    0
    Просмотров:
    890
  4. FaRReLL
    Ответов:
    0
    Просмотров:
    908
  5. FaRReLL
    Ответов:
    0
    Просмотров:
    735

Поделиться этой страницей