Разработка программы- "Решение СЛАУ методом Гаусса"

Автор работы: Пользователь скрыл имя, 13 Сентября 2011 в 12:12, курсовая работа

Описание

Разработать программу для решения системы линейных уравнений порядка N методом Гаусса с выбором главного элемента по столбцу и по строке. Исходные данные: порядок системы линейных уравнений N, матрица коэффициентов, вектор правых частей. Разработать тестовый пример для N=10 и определить погрешность расчета.

Содержание

1. АНАЛИЗ И ПОСТАНОВКА ЗАДАЧИ 4
1.1 Постановка задачи 4
1.2 Анализ задания 4
1.3. Техническое задание 5
1.3.1. Спецификация данных 5
1.3.2. Функциональные спецификации 5
1.3.3. Спецификация оборудования 6
2. ПРОЕКТИРОВАНИЕ 7
2.1. Модель использования 7
2.2. Структурная модель 8
2.3. Алгоритмы программы 9
3. РАБОЧИЙ ПРОЕКТ. 15
3.1. Описание исходного кода программы. 15
3.2. Описание интерфейса программы 15
4. ТЕСТИРОВАНИЕ 18
ЗАКЛЮЧЕНИЕ 23
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 24
ПРИЛОЖЕНИЕ А 25
ПРИЛОЖЕНИЕ Б 38

Работа состоит из  1 файл

Пояснительная записка.doc

— 776.00 Кб (Скачать документ)

            }

      } 

      // If you add a minimize button to your dialog, you will need the code below

      //  to draw the icon.  For MFC applications using the document/view model,

      //  this is automatically done for you by the framework. 

      void CfilereadDlg::OnPaint()

      {

            if (IsIconic())

            {

                  CPaintDC dc(this); // device context for painting 

                  SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 

                  // Center icon in client rectangle

                  int cxIcon = GetSystemMetrics(SM_CXICON);

                  int cyIcon = GetSystemMetrics(SM_CYICON);

                  CRect rect;

                  GetClientRect(&rect);

                  int x = (rect.Width() - cxIcon + 1) / 2;

                  int y = (rect.Height() - cyIcon + 1) / 2; 

                  // Draw the icon

                  dc.DrawIcon(x, y, m_hIcon);

            }

            else

            {

                  CDialog::OnPaint();

            }

      } 

      // The system calls this function to obtain the cursor to display while the user drags

      //  the minimized window.

      HCURSOR CfilereadDlg::OnQueryDragIcon()

      {

            return static_cast<HCURSOR>(m_hIcon);

      } 

      int CfilereadDlg::ReadFile(void)

      {

            CFileDialog OpenDialog(true,"txt",m_FileTitle,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY);

            OpenDialog.DoModal(); 

            m_FileTitle=OpenDialog.GetFileTitle();

            m_FilePath=OpenDialog.GetPathName(); 

            listbox.AddString("Нажмите  <Решить>"); 

            return 0;

      } 

      void CfilereadDlg::OnBnClickedOk()

      {

            // TODO: Add your control notification handler code here

            ReadFile();

      } 

      void CfilereadDlg::OnBnClickedButton1()

      {

            // TODO: добавьте свой  код обработчика уведомлений

            OnSysCommand(IDM_ABOUTBOX,SC_SCREENSAVE);

      } 

      void CfilereadDlg::OnBnClickedButton2()

      {

            CStdioFile fOpen(m_FilePath,CFile::modeRead);

            CString st="";

            CString tempAll="";

            CString tempCh=""; 

            int row=0,col=0; 

            while(fOpen.ReadString(st))

            {

                  row++;

            }

            fOpen.SeekToBegin();

            listbox.AddString("Система:"); 

            int  decimal, sign; 

            int colPos, rowPos;

          int i, j, k;

          double max;

          double temp;

          int m_nCols;

          int m_nRows;

          double** farray;

          double*  parray;

          unsigned int* ListVar;

          double* x; 

          m_nRows=row;

          m_nCols=m_nRows+1;

          parray=new double[m_nRows*m_nCols];

          farray=new double*[m_nRows];

          for (i=0; i<m_nRows; i++)

          {

              *(farray+i)=parray+i*m_nCols;

          } 

          ListVar=new unsigned int[m_nCols-1];

          for (j=0; j<m_nCols-1; j++)

              ListVar[j]=j+1; 

          x=new double[row]; 

          for (i=0; i<m_nRows-1; i++)

              x[i]=i+1; 

          for (i=0; i<m_nRows; i++)

            {

                  CString tempNall=""; 

                  int j=0;

                  fOpen.ReadString(st);

                  listbox.AddString(st);

                  st+=' ';

                  int l=st.GetLength(); 

                        for(int k=0;k<=l; ++k)

                        {

                              if(st[k]!=' ')

                              {

                                    if(st[k]!=(int)'\n')tempNall+=st[k];

                              }

                              else

                              {

                                    farray[i][j]=atof(tempNall);

                                    tempNall="";

                                    ++j;

                              }

                        }

            }

            fOpen.Close(); 

            listbox.AddString("  ");

            listbox.AddString("Решение:");

          for (k=0; k<m_nRows-1; k++)

          {

              colPos=rowPos=k;

              max=farray[k][k];

              for (i=k; i<m_nRows; i++)

                  for (j=k+1; j<m_nCols-1; j++)

                      if (abs(farray[i][j])>max)

                      {

                          max=farray[i][j];

                          rowPos=i;

                          colPos=j;

                      } 

              for (i=0; i<m_nRows; i++)

              {

                  temp=farray[i][k];

                  farray[i][k]=farray[i][colPos];

                  farray[i][colPos]=temp;

              } 

              for (j=0; j<m_nCols; j++)

              {

                  temp=farray[k][j];

                  farray[k][j]=farray[rowPos][j];

                  farray[rowPos][j]=temp;

              } 

              temp=ListVar[k];

              ListVar[k]=ListVar[colPos];

              ListVar[colPos]=temp; 
 

              for (j=m_nCols-1; j>=0; j--)

              {

                  farray[k][j]/=farray[k][k]; 

              }

              for (j=0; j<m_nCols; j++)

                  farray[k][j];

              for (i=k+1; i<m_nRows; i++)

                  for (j=m_nCols-1; j>=0; j--)

                     farray[i][j]-=farray[k][j]*farray[i][k]; 
 

              listbox.AddString("Далее -->");

              for (i=0; i<m_nRows; i++)

              {

                        tempAll=""; 

                  for (j=0; j<m_nCols; j++)

                        {

                              CString tempCh;

                              tempCh.Format("%.2f  ",farray[i][j]);

                              tempAll+=tempCh; 

                        }

                              listbox.AddString(tempAll);

                  listbox.AddString("  ");

              }

          } 

          double s=0;

          x[m_nRows-1]=farray[m_nRows-1][m_nCols-1]/

                           farray[m_nRows-1][m_nCols-2];

          for (i=m_nRows-2; i>=0; i--)

         {

              s=0;

              for (k=i+1; k<m_nRows; k++)

                  s+=farray[i][k]*x[k];

                  x[i]=farray[i][m_nCols-1]-s;

          } 

            listbox.AddString("   ");

            listbox.AddString("Ответ:");

            for (i=0; i<m_nRows; i++)

            {

                        tempCh.Format("X[%d] = %.3f",i,x[i]);

                        listbox.AddString(tempCh);

            }

            //UpdateData(false);

      }

      Файл filereadDlg.h

      // filereadDlg.h : header file

      // 

      #pragma once

      #include "afxwin.h" 
 

      // CfilereadDlg dialog

      class CfilereadDlg : public CDialog

      {

      // Construction

      public:

            CfilereadDlg(CWnd* pParent = NULL); // standard constructor

      // Dialog Data

            enum { IDD = IDD_FILEREAD_DIALOG }; 

            protected:

            virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 
 

      // Implementation

Информация о работе Разработка программы- "Решение СЛАУ методом Гаусса"