Форум программистов, компьютерный форум CyberForum.ru

Функция time для вычисления скорости нахождения Определителя.Dev-C++7.3.1.3 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ дорешать класс http://www.cyberforum.ru/cpp-beginners/thread264869.html
Разработать класс, набор методов(конструктор, деструктор и указанные методы) для программной модели заданного объекта. Объект "вектор на плоскости" заданный в системе декарт.координат.Начало вектора расположено на начале координат.Конструктор должен позволять создавать объекты без и с начальной инициализацией.Реализовать метод print и EQ- сравнение двух векторов и перевод координат вектора в...
C++ Записать текст из консоли в файл Написать программу выводящую текст в файл (system("echo text >> text.txt") не подходит, так как пользователь сам должен вводить текст). Буду очень благодарен. http://www.cyberforum.ru/cpp-beginners/thread264862.html
последовательные классы C++
Составить программу, используя последовательные классы стандартной библиотеки шаблонов С++, которая содержит текущую информацию о заявках на авиабилеты. Каждая заявка содержит: • пункт назначения; • номер рейса; • фамилию и инициалы пассажира; • желаемую дату вылета. Программа должна обеспечивать: • хранение всех заявок в виде списка; • добавление заявок в список; • удаление...
C++ Класс-шаблон
Создать класс-шаблон, содержащий поля для хранения одномерного массива и количества элементов в массиве. Описать методы для инициализации и вывода элементов массива на экран, а так же для подсчета суммы элементов массива, расположенных между первым и последним нулевыми элементами. Продемонстрировать работу методов класса.
C++ ошибка в программе? http://www.cyberforum.ru/cpp-beginners/thread264829.html
написать программу по решению системы уравнений. y=(-1)^(x-a) если x>a y=(x^3)/(x+a) если x<a y=sin(3x) если x=a^3 y=sqrt(a-5) если a-2<=x<=2a #include<math.h> #include<conio.h>
C++ Условие победы! Никак не могу понять как сделать условие победы для игры крестики нолики на большом поле. Там где для победы надо выстроить 5 в ряд(по горизонтали либо по вертикали либо по диагоналям). Поле у меня размерности 15 на 15. Помогите пожалуйста! подробнее

Показать сообщение отдельно
USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93

Функция time для вычисления скорости нахождения Определителя.Dev-C++7.3.1.3 - C++

27.03.2011, 14:16. Просмотров 1350. Ответов 17
Метки (Все метки)

Добрый день.
Помогите немного подкорректировать код.
В main'е switch'ом выбирается 3 пользовательских варианта:
1.Вычисление определителя матрицы;
2.Вычисление корней системы линейных уравнений;
3.0-для выхода из этой безнадежной программы =)

С вычислением корней системы линейных уравнений проблема.
Определитель вроде сносно отрабатывает.
Пытаюсь "засечь" скорость выполнения алгоритма нахождения определителя.
На выходе - стабильно "0".

Код:
Код
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <vector>
using namespace std;
void showMenu();
void showInputMatrix(std::vector< std::vector<double> > sq_matrix);
void showInputMatrix_Vector(std::vector< std::vector<double> > sl_matrix, std::vector<double> lf);
                    
double determinant(std::vector< std::vector<double> >& matrix);
void slau_funct(std::vector< std::vector<double> > sl_matrix, std::vector<double> lf, std::vector<double> lx);
int main(int argc, char *argv[])
{
    
    int choice;
    double dtm;
    //clock_t time;
         
   showMenu();
   cin>>choice;
   
   while(choice != 0){
   switch(choice)
   {
     case 1:{
          vector<vector<double> > square_matrix; 
          vector<double> line;
          int n; 
          cout<<"Vvedite razmernost' matrix:\n";
          cin>>n;
          double temp;
          cout<<"Vvedite znachenie:\n";
          for(int i=0;i<n;i++)
          {
            line.clear();
             for(int j=0;j<n;j++)
             {
               cin>>temp;
               line.push_back(temp);                  
                cout<<"Vvedite znachenie:\n";
             }
      
            square_matrix.push_back(line);
          }
    
          showInputMatrix(square_matrix);
          //time = clock();
          dtm = determinant(square_matrix);
          //time = clock() - time;
          cout<<"Determinant = ";
          dec(cout);
          cout<<dtm<<endl;
          //cout<<"time: "<<time/CLOCKS_PER_SEC<<endl;
     break;}//end case 1
    
     case 2:{
          vector<vector<double> > slau_matrix; 
          vector<double> line2;
          vector<double> line_x;
          vector<double> line_f;    // *****slau_matrix * line_x = line_f*****
    
        int m,i2,j2;
        double temp2;
        double temp_f;
        cout<<"Vvedite razmernost' matrix:\n";
        cin>>m;
        cout<<"Vvedite znacheniya v matrix:\n";
           for( i2=0;i2<m;i2++)
           {
             line2.clear();             //ochishaem vector line
             line_x.clear();           //ochishaem vector line_x
             for(j2=0;j2<m;j2++)
             {
                cin>>temp2;
                line2.push_back(temp2);                  
                cout<<"Vvedite znacheniya v matrix:\n";
             }
      
            slau_matrix.push_back(line2);    //sozdaem 2merny massiv
           }
    
            cout<<"Vvedite znacheniya v vector_f (znachenia dlya funczcii_f):\n";
            for(i2=0;i2<m;i2++)
            {
               cin>>temp_f;
               line_f.push_back(temp_f);      //zanosim znachenia v vector line_f
               cout<<"Vvedite znacheniya v vector_f (znachenia dlya funczcii_f):\n";
            }
    
         showInputMatrix_Vector(slau_matrix, line_f);
         slau_funct(slau_matrix, line_f, line_x);
         
        /* cout<<"Naidennie znachenia x:\n";
         for(i2=0;i2<line_x.size();i2++)
         {
                cout<<line_x[i2]<<"|";
         }*/
         
     break;}//end case 2
     
     default :
            cout<<"exit...\n";
     break;   
   }//end switch
  
   showMenu();
  cin>>choice;
}//end while 


    system("PAUSE");
    return EXIT_SUCCESS;
}

//################opredelenie Function's##################
void showInputMatrix(std::vector< std::vector<double> > matrix)
{    int i,j;
     cout<<"Matrix\n";
       for(i=0;i<matrix.size();i++)
       {
         for(j=0;j<matrix.size();j++)
         { 
           dec(cout);
           cout.width(11);
           cout.precision(10);
           cout<<matrix[i][j]<<"|";
         }
        cout<<endl;
       }
}


void showInputMatrix_Vector(std::vector< std::vector<double> > sl_matrix, std::vector<double> lf)
{       
      int i,j;
        cout<<"Sistema lineynih uravneniy\n";
          for(i=0;i<sl_matrix.size();i++)
          {
            for(j=0;j<sl_matrix.size();j++)
            { 
              dec(cout);
              cout.width(11);
              cout.precision(10);
              cout<<sl_matrix[i][j]<<"|";
            }
           cout<<endl;
          } 
           
           for(j=0;j<lf.size();j++)   //vivod vectora line_f
            { 
              dec(cout);
              cout.width(11);
              cout.precision(10);
              cout<<lf[j]<<"\n";
            } 
            
}


void showMenu()
 {
    cout<<"vvedite 1,2 ili 0:\n"
    "1 - Vichislyaem opredelitel matrizcy\n"
    "2 - Reshaem sistemu lineinih uravneny\n"
    "0 - Vihod\n";
 }
 
double determinant(std::vector< std::vector<double> >& matrix)  //nahodim opredelitel 
{   //function find determinant
    //
    int i=0, j=0;
    double koef = 1;
    double lastKoef = 0;
    bool checkKoefIsNull = false;
    int length = matrix.size();
    int fullCol = length;
    
    clock_t time_on;
    time_on = clock();
     for(i=0; i<length && koef; i++)
    {
        if(matrix[i][j] != 0)
        {
            if(matrix[i][j] < 0)
            {
                for(int j=0; j<fullCol; j++)
                    matrix[i][j] *= -1;
                koef *= -1;
            }
            double lastKoef = matrix[i][j];
            for(int k=0; k<fullCol; k++)
                matrix[i][k] /= lastKoef;
            koef *= lastKoef;
            for(int nextRow=i+1; nextRow<length; nextRow++)
            {
                lastKoef = matrix[nextRow][j];
                for(int nextCol=j; nextCol<fullCol; nextCol++)
                    matrix[nextRow][nextCol] -= lastKoef*matrix[i][nextCol];
            }
            ++j;
            checkKoefIsNull=false;
        }
        else
        {
            for(int k=0; k<fullCol; k++)
                std::swap(matrix[i][k],matrix[length-1][k]);
            --i;
            koef *= -1;
            if(checkKoefIsNull)
            {
                ++i;
                koef = 0;
            }
            checkKoefIsNull = true;
        }
     }//end for
     
  
     cout<<"time: "<<((double)clock() - time_on)/CLOCKS_PER_SEC<<endl;
        return koef;
}


void slau_funct(std::vector< std::vector<double> > sl_matrix, std::vector<double> lf, std::vector<double> lx)
{   //nahodim korni x1,x2,...xn  v  s.l.a.u. 
    int n = lx.size();
    int l = n - 1;
    int j;
    int m;
    int i2;
    double sum;
    lx[l] = lf[l] / sl_matrix[l][l];     // *****slau_matrix * line_x = line_f*****
    for(m = l-1; m > -1; m--)    
    {
      sum = 0;
         for(j = m+1; j < n; j++) 
         {  
          sum = sum + (sl_matrix[m][j] * lx[j]);   
         }
    
      lx[m] = ( 1 /  sl_matrix[m][m]  ) * ( lf[m]  -  sum );
      cout<<endl;
      cout<<lx[m]<<"|";
    }
    
}
Перечисление небольшой суммы на wmz гарантирую.
Вложения
Тип файла: rar opredelitel.rar (197.1 Кб, 14 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru