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

  • Автор темы flip
  • Дата начала
F

flip

#1
У меня не сильно складываются отношения с Паскалем))) Нужно перевести программку на С++. Помогите, пожалуйста, буду очень признателен. Заранее спасибо
Код:
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;
 
I

ierofant

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

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

flip

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

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

ierofant

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

ierofant

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

hosm

* so what *
18.05.2009
2 442
6
#8
ierofant это, наверно, метод такой - выкладывать прогу по кусочкам =) А может, действительно самые сложные места - хотя что-то, а ввод вектора и матрицы на с++ самому сделать или нагуглить готовый - не проблема, имхо. Ну, вычисления-то ладно, мб, и не сразу там цикл напишешь правильно =)
 
I

ierofant

#9
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);
}