Перенести из C++ в Pascal ABC - Pascal ABC

  1. помогите пожалуйста перенести из C++ в Pascal ABCC++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 70 #include <iostream> #include<conio.h> #include<math.h> #include<cstdlib>   using namespace std;    int main() { setlocale(LC_CTYPE,"RUSSIAN");  int n,i,j,k=0; float eps; float norma; float w; float A[10][10],B[10],x[10],xn[10];             cout<<"Введите размерность матрицы N*N:";             cin>>n;             cout<<"Введите элементы матрицы: \n";             for(i=0;i<n;i++)             {                for(j=0;j<n;j++)                {                  cout<<"  A ["<<i+1<<"]["<<j+1<<"] = ";                   cin>>A[i][j];                }             }             cout<<"Введите свободные члены:\n";             for(i=0;i<n;i++)             {                 cout<<"  B ["<<"|"<<i+1<<"|"<<"] = ";                 cin>>B[i];             }             cout<<("Введите точность:");             cin>>eps;             cout<<"Введите параметр релаксации w: ";                 cin>>w;                       for(i=0;i<10;i++)             {             xn[i]=0;             x[i]=xn[i];             }             do             {  k++;                norma=0;                              for(i=0;i<n;i++)                {                   x[i]=B[i];                   for(j=0;j<n;j++)                   {                       if(i!=j)                           x[i]=x[i]-A[i][j]*x[j];                   }                   x[i]/=A[i][i];                                    x[i]=w*x[i]+(1-w)*xn[i];                                               if(fabs(x[i]-xn[i]) > norma)                       norma=fabs(x[i]-xn[i]);                       xn[i]=x[i];                }             }              while(norma > eps);              cout<<"Кол-во итераций: ";cout<<k<<" \n";              for(i=0;i<n;i++)                  cout<<"x ["<<i+1<<"] = "<<x[i]<<"; ";            getch();          return 0;   } и буду премного благодарен если эту тоже получится перевести в pascal ABCC++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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 //идея метода релаксации заключаеться в том что на каждом шаге обращаеться в //нуль максимальный по модулю вектор начальных изменений путем изменения //значения соответствуйщей компоненты приблежения . Процесс заканчиваеться когdа // все невязки последней преобразованной //системы будут равны нулю с заданой точностью   #include <cstdlib> #include <iostream> #include <fstream> #include <math.h> using namespace std; //начало, параметры функции: матрица А, ее размерность n, число t, матрица C= t*A int Mult(double **a, int n, double t, double **c) {int i,j;    for(i=0;i<n;i++) for(j=0;j<n;c[i][j]=t*a[i][j],j++); return 0; } //Сложение матриц, c=a+b int Sum(double **a, double **b,int n, double **c) {int i,j;    for(i=0;i<n;i++) for(j=0;j<n;c[i][j]=a[i][j]+b[i][j],j++); return 0; } //Умножение матрицы a на вектор b, результат вектор - g=a*b. int multV(double **a,double *b,int n,double *g) {int i,j; for(i=0;i<n;i++) for(g[i]=0,j=0;j<n;g[i]=g[i]+a[i][j]*b[j],j++); return 0; } //Умножение матрицы на матрицу, результат матрица c=a*b int multM(double **a,double **b,int n,double **c) {int i,j,k; for(i=0;i<n;i++) for(j=0;j<n;j++) for(c[i][j]=0,k=0;k<n;c[i][j]=c[i][j]+a[i][k]*b[k][j],k++); return 0; } //Вычисление модуля вектора X - корень из суммы квадратов элементов массива. double modul(double *X,int n) {int i;double s; for(s=0,i=0;i<n;s=s+X[i]*X[i],i++); return sqrt(s); } //Решение СЛАУ A*x=b методом Гаусса для решения системы квадратных уровнений и // обратной матрицы..b вектор правых частей   int SLAU(double **matrica_a, int n, double *massiv_b,double *x) { int i,j,k,r; double c,M,max,s, **a, *b;   a=new double *[n]; for(i=0;i<n;i++) a[i]=new double[n]; b=new double [n]; for(i=0;i<n;i++) for(j=0;j<n;j++) a[i][j]=matrica_a[i][j]; for(i=0;i<n;i++) b[i]=massiv_b[i]; for(k=0;k<n;k++) { max=fabs(a[k][k]); r=k; for(i=k+1;i<n;i++) if (fabs(a[i][k])>max) { max=fabs(a[i][k]); r=i;} for(j=0;j<n;j++) { c=a[k][j]; a[k][j]=a[r][j]; a[r][j]=c; } c=b[k]; b[k]=b[r]; b[r]=c; for(i=k+1;i<n;i++) { for(M=a[i][k]/a[k][k],j=k;j<n;j++)//приведение матрицы к диагональному виду a[i][j]-=M*a[k][j]; b[i]-=M*b[k]; } } if (a[n-1][n-1]==0) if(b[n-1]==0) return -1; else return -2; else {for(i=n-1;i>=0;i--) {for(s=0,j=i+1;j<n;j++) s+=a[i][j]*x[j]; x[i]=(b[i]-s)/a[i][i]; } return 0; } } //Вычисление обратной матрицы y=a^(-1) int INVERSE(double **a,int n,double **y) { int i,j,res; double *b,*x; b=new double [n]; x=new double [n]; for(i=0;i<n;i++) { for(j=0;j<n;j++) if(j==i) b[j]=1; else b[j]=0; res=SLAU(a,n,b,x); if(res!=0) break; else for(j=0;j<n;j++) y[j][i]=x[j]; } delete [] x; delete [] b; if (res!=0) return -1;//проверка существования обратной матрицы else return 0; } //Формирование из матрицы а верхнетреугольной матрицы u; int VT (double **a,int n,double **u) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) if(i<j) u[i][j]=a[i][j]; else u[i][j]=0; return 0; } //Формирование из матрицы а нижнетреугольной матрицы l       int NT (double **a,int n,double **l) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) if(i>j) l[i][j]=a[i][j]; else l[i][j]=0; return 0; } //Формирование из матрицы а диагональной матрицы d int DM (double **a,int n,double **d) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) if(i==j) d[i][j]=a[i][j]; else d[i][j]=0; return 0; }   //Решение СЛАУ Au=f методом релаксации;Т параметр который свойстенен //для метода релаксации и применянться для быстроты сходимости //u[k+1]=-(tL+D)^(-1)*(tU+(t-1)D)*u[k]+(tL+D)^(-1)*f //L- нижнетреугольная //U- верхнетреугольная //D - диагональная //A=L+D+U     int main(int argc, char *argv[]) {int result, i,j,K=0,N,M; double **TL,**A,*P,**L,**U,**D,T=1.6,*x0,*x1,*G,**Q,**W,**Q1,**Q2,**DT,**W1, **TU,**Q3,*u,z,*v,eps=0.001; //eps точность численного типа данных //cout<<"N="; //cin>>N; ifstream f; ofstream f1; f.open("Dan.txt",ios::in); f1.open("rez.txt",ios::out); f>>N;//размерность системы(N=8) A=new double *[N]; for(i=0;i<N;i++) A[i]=new double[N];   Q=new double *[N]; for(i=0;i<N;i++) Q[i]=new double[N];   Q2=new double *[N]; for(i=0;i<N;i++) Q2[i]=new double[N];   Q3=new double *[N]; for(i=0;i<N;i++) Q3[i]=new double[N];   W=new double *[N]; for(i=0;i<N;i++) W[i]=new double[N];   W1=new double *[N]; for(i=0;i<N;i++) W1[i]=new double[N];   Q1=new double *[N]; for(i=0;i<N;i++) Q1[i]=new double[N];   L=new double *[N]; for(i=0;i<N;i++) L[i]=new double[N];   U=new double*[N]; for(i=0;i<N;i++) U[i]=new double[N];   TU=new double*[N]; for(i=0;i<N;i++) TU[i]=new double[N];   TL=new double*[N]; for(i=0;i<N;i++) TL[i]=new double[N];   D=new double *[N]; for(i=0;i<N;i++) D[i]=new double[N];   DT=new double *[N]; for(i=0;i<N;i++) DT[i]=new double[N];   P=new double[N]; u=new double[N]; v=new double[N]; x0=new double[N]; x1=new double[N]; G=new double[N];   for(i=0;i<N;i++) for(j=0;j<N;j++)//считываю 8 строк из файла по 8 элемента (матирица А) f>>A[i][j]; for(j=0;j<N;j++)//считываю последнюю строку из 8 элементов (вектор P) f>>P[j]; f.close();   cout<<"Matrix A"<<endl; for(i=0;i<N;cout<<endl,i++) for(j=0;j<N;cout<<A[i][j]<<"\t",j++); cout<<endl; cout<<"Vector P"<<endl; for(j=0;j<N;cout<<P[j]<<"\t",j++); cout<<endl; f1<<"Matrix A"<<endl; for(i=0;i<N;f1<<endl,i++) for(j=0;j<N;f1<<A[i][j]<<"\t",j++); f1<<endl; f1<<"Vector P"<<endl; for(j=0;j<N;f1<<P[j]<<"\t",j++); f1<<endl; VT(A,N,U);//Формирование из матрицы А верхнетреугольной матрицы U NT(A,N,L);//Формирование из матрицы А нижнетреугольной матрицы L DM(A,N,D);//Формирование из матрицы А диагональной матрицы D Mult(L,N,T,TL);//TL=T*L Sum(D,TL,N,W);//W=D+TL INVERSE (W,N,Q1);//Q1=W^(-1)=(D+TL)^(-1) Mult(Q1,N,T,Q2);//Q2=T*Q1=T*(D+T*L)^(-1) multV(Q2,P,N,G);//G=Q2*P=T*(T*L+D)^(-1)*P Mult(Q1,N,-1,Q3);//Q3=-1*Q1=-1*(T*L+D)^(-1) Mult(D,N,T-1,DT);//DT=(T-1)*D Mult(U,N,T,TU);//TU=T*U Sum(DT,TU,N,W1);//W1=DT+TU=((T-1)*D+T*U) multM(Q3,W1,N,Q);//Q=U*W1=-(T*L+D)^(-1)*((T-1)*D+T*U) for(i=0;i<N;x0[i]=P[i],i++);//x0=P do { multV(Q,x0,N,u);//u=Q*x0 for(i=0;i<N;x1[i]=u[i]+G[i],i++);//x1=Q*x0+G for(i=0;i<N;v[i]=fabs(x1[i]-x0[i]),i++);//v=|x1-x0| for(i=0;i<N;x0[i]=x1[i],i++);//x0=x1 z=modul(v,N); //Модуль вектора - корень из суммы квадрвтов элементов вектора v:               //модуль каждый раз изменял вектор х если модуль меньше               //предназначеной точности то метод прошел.               //Для организации сходимости               //modul<eps процесс закончен точность достигнута и в х1 решение K++; //Подсчет количества итераций } while(z>=eps);//Продолжать цикл, пока модуль вектора V больше заданной точности cout<<"K="<<K<<endl; //Количество итераций cout<<"Vector x1"<<endl; //Вектор - решение СЛАУ //вывод на экрана for(j=0;j<N;cout<<x1[j]<<"\t",j++); cout<<endl; //вывод в текстовый файл f1<<"Vector X"<<endl; for(j=0;j<N;f1<<x1[j]<<"\t",j++); f1<<endl;   f1.close(); // for(i=0;i<N;i++) delete [] A[i]; delete [] A; for(i=0;i<N;i++) delete [] U[i]; delete [] U; for(i=0;i<N;i++) delete [] L[i]; delete [] L; for(i=0;i<N;i++) delete [] D[i]; delete [] D; for(i=0;i<N;i++) delete [] TL[i]; delete [] TL; for(i=0;i<N;i++) delete [] TU[i]; delete [] TU; for(i=0;i<N;i++) delete [] Q[i]; delete [] Q; for(i=0;i<N;i++) delete [] Q1[i]; delete [] Q1; for(i=0;i<N;i++) delete [] Q2[i]; delete [] Q2; for(i=0;i<N;i++) delete [] W[i]; delete [] W; for(i=0;i<N;i++) delete [] Q3[i]; delete [] Q3; for(i=0;i<N;i++) delete [] W1[i]; delete [] W1; for(i=0;i<N;i++) delete [] DT[i]; delete [] DT; for(i=0;i<N;i++) delete [] U[i]; delete [] U; for(i=0;i<N;i++) delete [] D[i]; delete [] D; for(i=0;i<N;i++) delete [] L[i]; delete [] L; delete [] P; delete [] u; delete [] x1; delete [] x0; delete [] u; delete [] v;     system("PAUSE");     return EXIT_SUCCESS; }//вектор свободных коэфициэнтов переносим в лево.linsolve функция // решает систему slau


textual

Код:

var
  n, i, j, k: integer;
  eps, norma, w: real;
  A: array [0..9,0..9] of real;
  B, x, xn: array [0..9] of real;
begin
  Assign(input,'input.txt'); Assign(output,'output.txt');
  Reset(input); Rewrite(output);
  ReadLn(n);
  for i:=0 to n-1 do for j:=0 to n-1 do Read(A[i,j]);
  for i:=0 to n-1 do Read(B[i]);
  ReadLn(eps,w);
  for i:=0 to n-1 do begin
    xn[i]:=0; x[i]:=0;
  end;
  repeat
    inc(k);
    norma:=0;
    for i:=0 to n-1 do begin
      x[i]:=B[i];
      for j:=0 to n-1 do
        if i<>j then x[i]:=x[i]-A[i,j]*x[j];
      x[i]:=x[i]/A[i][i];
      x[i]:=w*x[i]+(1-w)*xn[i];
      if abs(x[i]-xn[i])>norma then norma:=abs(x[i]-xn[i]);
      xn[i]:=x[i];
    end;
  until norma<=eps;
  WriteLn('Кол-во итераций: ',k);
  for i:=0 to n-1 do Write('x [',i+1,'] = ',x[i],'; ');
  WriteLn;
end.


Похожие ответы
  1. Проверьте, правильно ли работает программа. А именно PROCEDURE BSr, и правильность передачи переменных в основную программу. ЗАДАНИЕ: Сформировать массив из чисел, больших среднего.

  1. Нужно, чтобы не было лейбел, но программа не меняла своей сути . ОЧЕНЬ СРОЧНО!!!

  1. Составьте процедуру, выводящую строку из n одинаковых цифр. Длина строки и цифра, которая выводится, являются параметрами процедуры. Вывести пять строк разной длины из разных цифр. Процедуру оформить несколькими способами. P.S. Помогите пожалуйста с заданием)Заранее спасибо

  1. Заполнить числами, начиная с единицы, квадратный массив из NxN элементов «змейкой». Пример, для массива 4х4: Код 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13 Реализовать ввод размерности с клавиатуры

  1. Помогите исправить ошибку . Задание :Сформировать двумерный массив. Удалить из него строку и столбец, на пересечении которых находится минимальный элемент.

  1. Народ, плиз, помогите заочнику!Замучилась искать помощь в офлайне 1. Надо вычислить D при любых значениях a, x: D= (двойная скобка, не знаю, как тут ее найти) , если ; , если . 2. Заданы три числа a, d, c. Вывести на экран сообщение, превышает ли наибольшее из них заданную величину Q. 3. S=cos(x+1)+cos(x+2)+cos(x+3)+...+cos(x+21) Это срочно, зачет через полтора часа! Кто откликнется - самая огромная благодарность!!!!!!

  1. Добрый день. Знаю, что такое уже было на вашем форуме, но оно было не полностью, а как доделать я не сильно знаю. Задача: Написать программу перевода целого числа a из цифрового формата в прописной. a < 1012 Пример: a = 123 ⇒ cто двадцать три. Вот код, который я обнаружил на этом сайте:

  1. Создать одномерный числовой массив из 6 элементов и вывести результат на экран. Затем элементы, стоящие на нечетных местах уменьшить на 2, подсчитать сумму этих элементов и вывести эти значения на экран с пояснениями.

  1. Найти сумму целых положительных чисел из промежутка от А до B, кратных 4.(значения А и В вводятся с клавиатуры)

  1. Доброго времени суток! Необходима помощь: нужно организовать ввод данных в типизированный файл (.dat ) с возможность вывода их ( данных ) в виде таблицы через оный.Код: