Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.66 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  Lab8
  4. //
  5. //  Created by Urbanovich on 15.03.17.
  6. //  Copyright © 2017 Urbanovich. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <fstream>
  11. #include <cmath>
  12. #include <iomanip>
  13.  
  14. using namespace std;
  15.  
  16. int main(int argc, const char * argv[]) {
  17.    
  18.     double epsilon, **a, **b, c, k;
  19.     int N, i, j;
  20.    
  21.     ifstream fin ("/Users/urbanovich/Programming/Lab8/text.txt");
  22.    
  23.     //считывание данных из файла.
  24.     if (!fin)
  25.         cout << "Файл не может быть открыт.";
  26.     else {
  27.         fin >> N;
  28.         a = new double *[N];
  29.         for (i=0;i<N;i++) a[i] = new double[N+1];
  30.        
  31.         for(i=0;i<N;i++)
  32.         {
  33.             for(j=0;j<N+1;j++)
  34.             {
  35.                 fin >> a[i][j];
  36.             }
  37.         }
  38.         fin >> epsilon;
  39.     }
  40.     fin.close();
  41.    
  42.    
  43.    
  44.     cout << "Вывод данных: \n";
  45.     for(int i=0;i<N;i++)
  46.     {
  47.         for(int j=0;j<N;j++)
  48.         {
  49.             cout << setw (4) << a[i][j] << " ";
  50.         }
  51.         cout << "|" << setw (3) << a[i][N];
  52.         cout << endl;
  53.     }
  54.     cout << "Размер матрицы: " << N << ". Точность: " << epsilon << endl;
  55.    
  56.     // Проверка на диагональное преобладание
  57.    
  58.     for (i = 0; i < N; i++)
  59.     {
  60.         c = 0;
  61.         for (j = 0; j < N; j++)
  62.         {
  63.             if (i == j)
  64.             {
  65.                 continue;
  66.             }
  67.             c += fabs(a[i][j]);
  68.         }
  69.         if (fabs(a[i][i]) < c)
  70.         {
  71.             cout << "Отсутствует преобладание диагонали. \n";
  72.             return -1;
  73.         }
  74.     }
  75.    
  76.     // Итерационный процесс
  77.     b = new double*[2];
  78.     for (i = 0; i < 2; i++)
  79.     {
  80.         b[i] = new double[N];
  81.     }
  82.    
  83.     k = 0;
  84.     while (k != N)
  85.     {
  86.         k = 0;
  87.         for (i = 0; i < N; i++)
  88.         {
  89.             c = 0;
  90.             for (j = 0; j < N; j++)
  91.             {
  92.                 if (i == j)
  93.                 {
  94.                     continue;
  95.                 }
  96.                 c += a[i][j] * b[1][j];
  97.             }
  98.             b[1][i] = (a[i][N] - c) / a[i][i];
  99.             if (fabs(b[1][i] - b[0][i]) < epsilon)
  100.             {
  101.                 k++;
  102.             }
  103.         }
  104.         b[0] = b[1];
  105.     }
  106.    
  107.     // Вывод неизвестных
  108.     for (i = 0; i < N; i++)
  109.     {
  110.         cout << "x[" << i + 1 << "] = " << b[1][i] << endl;
  111.     }
  112.    
  113.     // Освобождение памяти
  114.     for (i = 0; i < N; i++)
  115.         delete[]a[i];
  116.     delete[]a;
  117.     delete[]b;
  118.     return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement