Разработка программного комплекса решения математической задачи численными методами

Автор работы: Пользователь скрыл имя, 26 Октября 2010 в 22:52, Не определен

Описание работы

Курсовая работа

Файлы: 1 файл

курсовая по программированию.doc

— 767.00 Кб (Скачать файл)

    Данная  программа предназначена только для решения систем, в которых количество неизвестных равно количеству уравнений. 

    Сообщение выдаётся при вводе пользователем  некорректных размеров расширенной  матрицы (количество строк в расширенной  матрице должно быть на единицу меньше количества столбцов). 

    Не  удалось выделить память под матрицу  указанного размера! Нажмите "h", если хотите получить справочную информацию об ошибке или любую другую клавишу для возврата в главное меню. 

    Сообщение выдаётся, если не удалось выделить память под матрицу указанного пользователем размера. Размер матрицы ограничен размером оперативно памяти. После появления такой ошибки рекомендуется перезапустить программу. 

    ОШИБКА: Не удалось выделить память под хранение результата! Нажмите  любую клавишу... 

    Сообщение выдаётся, если не удалось выделить память под массив для хранения найденных в ходе решения значений. Размер массива ограничен размером оперативной памяти. 

    ОШИБКА: Вы не ввели два целых числа! Нажмите любую клавишу... 

    ОШИБКА: Вы должны ввести только два целых положительных числа, разделённых символом "*"! Нажмите любую клавишу... 

    Сообщения выдаются при некорректном вводе  размеров расширенной матрице (ввод отрицательных чисел, символов, не являющихся цифрами). 

    ОШИБКА: Слишком большое  число! Нажмите любую клавишу... 

    Сообщение выдаётся при вводе в качестве одного из размеров расширенной матрицы числа, превосходящего 2147483647. 

    ОШИБКА: Неверно введено  вещественное число! (Отсутствует целая или дробная часть.). Нажмите любую клавишу... 

    ОШИБКА: В записи одного из чисел содержится недопустимый символ! Нажмите любую клавишу...

    Сообщения выдаются при некорректном вводе  элементов расширенной матрицы. 

    ОШИБКА: Одно из чисел слишком  велико по модулю! Нажмите  любую клавишу... 

    Сообщение выдаётся при вводе в качестве элемента расширенной матрицы числа, превосходящего 1073741823. 

4. ОПИСАНИЕ КОНТРОЛЬНОГО ПРИМЕРА 

4.1. ОБЪЕКТ ИСПЫТАНИЙ 

    Программа для решения систем линейных уравнений  методом Гаусса (Gauss.exe). 

4.2. ЦЕЛЬ ИСПЫТАНИЙ 

    Проверка  правильности работы программы. 

4.3. ТРЕБОВАНИЯ К ПРОГРАММЕ 
 

    При запуске программы пользователь попадает в главное меню, где ему  предлагается выбрать одно из трёх возможных действий: решить систему  линейных уравнений методом Гаусса, перейти в справочный раздел, выйти  их программы. 

Рисунок 1. Главное меню. 

    Выбрав  пункт меню "Решить СЛУ методом  Гаусса" пользователь перенаправляется в раздел "Решение СЛУ методом  Гаусса", где ему необходимо ввести размер расширенной матрицы и  значения её элементов. (При необходимости  пользователь может получить справочную информацию по вводу.)

4.3.1. КОРРЕКТНЫЕ ВХОДНЫЕ  ДАННЫЕ

Рисунок 2. Ввод входных данных 

    После окончания ввода на консоль выводится  ход решения и ответ. 

    Рисунок 3. Вывод решения и ответа 

 

4.3.2. ОШИБОЧНЫЕ ВХОДНЫЕ ДАННЫЕ 

    При вводе ошибочных входных данных, например, отрицательного числа в качестве одного из размеров расширенной матрицы, должно быть выдано сообщение об ошибке. 

Рисунок 4. Вывод сообщения об ошибке при  некорректных входных данных

 

5. ТЕКСТ ПРОГРАММЫ 

help.h: 
int GaussMethod();

int MemoryMatrix();

int StartHelp();

interface.h:

int Header(char *Content, char *Type, int MaxLength);

int Alert(char *Content);

int Error(char *Content);

int DelLastSymbols(int NumSymbols);

solution.h:

int FindSolution();

int SizeFormatCheck(unsigned int *NumRow, unsigned int *NumCol, char String[]);

int DigitCheck(char *Symbol);

int ElementsCheck(float *Element, char String[]);

int Gauss(float **Matrix, int NumRow, int NumCol);

int ChangeStrings(float **Matrix, int NumRow, int NumCol, int NowI);

int ReverseGauss(float **Matrix, int NumRow, int NumCol, float *Result);

matrix.h:

float** CreateMatrix(unsigned int NumRow, unsigned int NumCol);

void DelMatrix(float **Matrix, int NumRow);

int FullMatrix(float **Matrix, int NumRow, int NumCol);

int PrintMatrix(float **Matrix, int NumRow, int NumCol);

help.cpp:

#include <stdio.h>

#include "interface.h"

#include "help.h"

int GaussMethod(){ 

      Header("Решение СЛУ методом Гаусса", "-", 42);

      printf("\n\n");

      printf("Метод Гаусса — классический метод решения системы линейных уравнений. Это метод\nпоследовательного исключения переменных, когда с помощью элементарных\nпреобразований система уравнений приводится к равносильной системе ступенчатого\n(или треугольного) вида, из которого последовательно, начиная с последних\n(по номеру) переменных, находятся все остальные переменные.\n\n");

      printf("A11X1 + ... + A1nXn = B1\n");

      printf("........................\n");

      printf("Am1X1 + ... + AmnXn = Bm\n");

      printf("\nВ данной системе линейных уравнений набор строк и столбцов из коэффициентов Aij\nсоставляют основную матрицу, элементы Bi - столбец свободных членов.\nРасширенная матрица состоит из основной матрицы и столбца свободных членов.\nВ этом примере расширенная матрица будет выглядеть следующим образом:\n\n");

      printf("A11 ... A1n B1\n");

      printf("..............\n");

      printf("Am1 ... Amn Bm\n");

      return 0;

}

int MemoryMatrix(){ 

      Header("Выделение  памяти под матрицу", "-", 42);

      printf("\n\n");

      printf("Для решения СЛУ методом Гаусса вам необходимо ввести размер матрицы\nв формате m*n, после чего программа должна выделить память для хранения самой\nматрицы. В связи с этим максимальный размер матрицы ограничен объёмом\nоперативной памяти вашего компьютера. Появление в процессе работы с программой\nошибки\"Не удалось выделить память под матрицу\", означает, что превышен\nмаксимальный размер матрицы.\nПосле появления такой ошибки рекомендуется перезапустить программу.");

      return 0;

}

int StartHelp(){

      Header("Общая  информация", "-", 42);

      printf("\n\n");

      printf("Данная программа предназначена для решения систем линейных уравнеий методом\nГаусса (приведение матрицы к треугольному виду). Решение уравнения состоит из\nдвух этапов: ввод данных (I), вывод результатов каждого шага решения и ответа\n(II). В качестве входных данных вам необходимо будет ввести размер расширенной\nматрицы, затем её саму. Размер расширенной матрице следует вводить в формате\nm*n, где m - количество строк, n - количество столбцов (то есть, если вы хотите\nввести матрицу с 3-мя строками 4-мя столбцами, формат ввода будет 3*4; важно\nпомнить, что количество строк должно быть на единицу меньше количества\nстолбцов). Элементы матрицы могут быть как целыми, так и вещественными,\nчислами. При вводе вещественных чисел целую часть от дробной следует отделять\nс помощью запятой. Все вещественные числа выводятся на экран с точностью до\n5-ти знаков после запятой.\n");

      return 0;

}

interface.cpp:

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "interface.h"

int Header(char *Content, char *Type, int MaxLength){

      printf("\t\t");

      int ContLength = strlen(Content);

      if (ContLength > MaxLength) {

            printf("%s", Type);

            for (int i = 0; i < MaxLength - 3; i++) {printf("%c", Content[i]);}

            printf("...%s", Type);

      } else {

            int i, N = (MaxLength - ContLength) /2;

            for (i = 0; i < N; i++) {printf("%s", Type);}

            printf("%s", Content);

            for (i = 0; i < MaxLength - ContLength - N; i++) {printf("%s", Type);}

      }

      return 0;

}

int Alert(char *Content){

      system("cls");

      system("color 4F");

      Header("Предупреждение", "*", 42);

      printf("\n\n%s\n\nНажмите любую клавишу...", Content);

      return 0;

}

int Error(char *Content){

      system("color 4F");

      printf ("%s", Content);

      getch();

      system("color F0");

      return 0;

}

int DelLastSymbols(int NumSymbols){

      for (int i = 0; i < NumSymbols; i++) {printf("\b \b");}

      return 0;

}

solution.cpp:

#include <conio.h>

#include <malloc.h>

#include <math.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "interface.h"

#include "matrix.h"

#include "help.h"

#include "solution.h"

int FindSolution(){

      char Action = 'h';

      while (Action != 's') {

            system("cls");

            system("color F0");

            Header("Меню >> Решение СЛУ методом Гаусса >> I", "=", 42);

            printf("\n\nДля решения СЛУ методом Гаусса вам необходимо ввести размер расширенной матрицы\nв формате m*n, затем построчно ввести саму матрицу. При вводе вещественных\nчисел целую часть от дробной следует отделять с помощью запятой.");

            printf("\nДля начала работы нажмите \"s\", для вызова справки нажмите \"h\"; вернуться в\nглавное меню - \"q\".");

            Action = getch(); 

            if (Action != 'h' && Action != 's' && Action != 'q') {

                  Alert("Для навигации в этом разделе меню вы можете использовать только\nклавиши \"s\", \"h\" и \"q\" в нижнем регистре (убедитесь, что не активирован\nCaps Lock). Раскладка клавиатуры должна быть английской.");

                  getch();

                  continue;

            }

            if (Action == 'q') {break;}

            if (Action == 'h') {

                  system("cls");

                  system("color 70");

                  Header("Справка", "=", 42);

Информация о работе Разработка программного комплекса решения математической задачи численными методами