|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Автоматизация решения систем линейных алгебраических уравненийАвтоматизация решения систем линейных алгебраических уравнений20 РефератПояснительная записка: 42 с.,11 рис., 1 табл., 4 источника, 5 прил.Целью работы над данным курсовым проектом является написание программного продукта для решения систем линейных уравнений. Метод Гаусса. Программный продукт должен выводить на экран теоретическую информацию по теме "Системы линейных алгебраических уравнений. Метод Гаусса", давать возможность решать системы линейных уравнений, а также предоставлять необходимый справочный материал по требованию пользователя.Результаты работы может быть использованы на производстве, где допускается некоторая погрешность вычислений, а так же школьниками и студентами для сверки решаемых ими задач.При выполнении данного ПП мною были получены навыки в решении систем линейных уравнений, а также в достаточном объеме изучен язык программирования Pascal 7.0.РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫЙ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ, МЕТОД ГАУССА.Содержание
20 Рисунок 3.1 ВводНа рисунке 3.2 изображен цикл ввода коэффициентов.для i: =1 до NРисунок 3.2 Цикл.На рисунке 3.3 изображен цикл приведения матрицы к ступенчатому виду и нахождение корней.для i: =1 до N-1Рисунок 3.3 Ступенчатый видНа рисунке 3.4 показано что происходит если переменной Rez присваиваются значения 0, 1,2.Rez: =1для i: =1 до N20 Рисунок 3.4 Переменная RezРисунок 3.5 является продолжением рисунка 3.4если Rez=1 to для i:=N-1 до 1 шаг -1 {Вывод матрицы А и вектора х} Иначе Если Rez = 0 то Вывод Иначе выводРисунок 3.5 Переменная Rez.4. Проектирование интерфейсаВ данном программном продукте был использован текстовый интерфейс, т.к. разработчик отдает ему большее предпочтение. Был выбран комбинированный режим. Текстовый - для написания интерфейса, графический - для рисования графиков.Меню интерфейса состоит из 5 пунктов каждому из которых соответствует своя цифра:пункт вида "1 - Теория", означает, что для вызова теоретической информации нужно нажать клавишу 1;пункт вида "2 - Пример", означает, что для вызова примера решения СЛАУ методом Гаусса нужно нажать клавишу 2;пункт вида "3 - Решение", означает, что для вызова диалогового окна, где будет предложено пользователю ввести свои коэффициенты для решении СЛАУ, нужно нажать клавишу 3;пункт вида "4 - Справка", означает, что для вызова справочной информации нужно нажать клавишу 4;пункт вида "5 - Выход", означает, что для выхода из программы нужно нажать клавишу 1;Статусная строка отображает информацию следующего вида:подсказки пользователю, относительно дальнейших действий: " Нажмите номер пункта меню", "Для перехода укажите номер страницы (от 1 до 6), "Для возврата в меню нажмите Esc, для вывода справки нажмите 0", "Для возврата назад нажмите 1".5. Описание программной реализации5.1 Функционально-логическая схема программыДанная схема отражает укрупненный алгоритм работы программы с учетом интерфейсных решений (см. рисунок 5.1).Вначале происходит прорисовка главного окна программы, в результате чего на экран выводятся 5 пунктов главного меню. Если выбрана первый пункт (1 - Теория), то происходит вывод теоретической информации на экран. Если выбрана второй пункт меню (2 - Пример) - вывод примера решения СЛАУ на экран. Если выбрана третий пункт (3 - Решение) - происходит решение СЛАУ методом Гаусса. Если выбран четвертый пункт (4 - Справка) - на экран выводится справочная информация по методу Гаусса. Если выбран пятый пункт (5 - Выход) - происходит полный выход из программы. Если не выбран ни один пункт меню, на экране ничего не происходит.Рис.5.1 Функционально - логическая схема программы5.2 Описание процедур и функцийПроцедура LoadFile (Name: string); - открывает текстовые файлы.Name - имя открываемого файла.Процедура menu; - выводит на экран главное меню.Процедура menuTeorii; - выводит на экран файл с меню для теории.Процедура menuSpravki; - выводит на экран файл с меню для справки.Процедура menuPrimera; - выводит на экран файл с меню для примера.Процедура Spravka (var n: char); - выводит на экран справочную информацию.n - номер открываемой страницы.Процедура Teoria ( var n: char); - выводит на экран теоретическую информацию.n - номер открываемой страницы.Процедура Grafik (а1, b1, c1, a2, b2, c2, xc, yc: real); - выводит на экран график.а1, b1, c1, a2, b2, c2, xc, yc - коэффициенты матрицы.Процедура Vvod (var x: real; var code: integer); - процедура для ввода вещественного числа.x - вещественное число,соde - переменная ошибки.Процедура Vvod1 (var n: integer); - процедура для ввода целого числа.n - целое число;Процедура Rewenie; - решение СЛАУ.Процедура Primer - выводит на экран примеры решения СЛАУ методом Гаусса.Процедура Vuxod - выводит пользователя из программы.5.3 Описание структур и форматовВ исходном текстовом файле хранится информация в следующем формате (разделитель между элементами матрицы - один или несколько пробелов):(размер матрицы)(элементы матрицы).Пример исходного файла:41 5 2 3 51 5 6 9 41 4 5 6 43 6 5 4 86. Комплект поставки и порядок установкиВ комплект поставки входят следующие файлы:EGAVGA. BGI - файл драйвера графического режима;GRAPH. TRU-модуль графического режима;“menu. txt" - главное меню интерфейса;“Text1. txt", “Text2. txt”, “Text3. txt", “Text4. txt”, “Text5. txt", “Text6. txt" - теоретический материал.“Primer1. txt”, “Primer2. txt”, “Primer3. txt”, “Primer4. txt" - примеры решения СЛАУ.“SPRAVKA1. txt" - справочный материал.OSNOVN2 - весь программный продукт.Чтобы установить программу на ПК, необходимо просто скопировать папку с программой, в которой содержатся все вышеупомянутые файлы, на диск, с которого пользователь хочет вести работу. Чтобы начать работу с программой, необходимо запустить файл OSNOVN2.7. Тестирование программыДля тестирования программы разработчик решил несколько СЛАУ вручную, а потом ввел в программу такие же коэффициенты как и для ручного просчета. Вот что получилось:1) Исходная матрица:1 1 12 2 1Преобразованная матрица:1 1 10 0 - 1Решений нет. Ответ программы совпадает с ручным просчетом.2) Исходная матрица:1 1 21 - 1 0Преобразованная матрица:1 1 20 2 2Вектор ответов:х [1] = 1х [2] = 1Ответ программы совпадает с ручным просчетом.ВыводыВ процессе написания курсового проекта был создан пакет прикладных программ для реализации алгоритма решения систем линейных уравнений с помощью ПК.Достоинства данного метода, а также программы состоят в том, что с их помощью можно решать систем линейных уравнений, а также вычислять неизвестные переменные, не затрачивая времени на вычисления.Недостатком данного ПП является то, что программа может иметь мелкие погрешности.Если же говорить об интерфейсе программы, то следует отметить его простоту и легкость использования, поэтому с программой способен работать даже человек, который впервые имеет дело с компьютерами.Автор надеется, что после доработки программы, ПП можно будет использовать на производстве.Также следует отметить, что во время написания курсового проекта, автор изучил основы языка Turbo Pascal 7.0.Список использованных источников1. Турбо Паскаль 7.0/ Алексеев Е.Р., Чесноков О.В. - М.: НТ Пресс, 2004. - 320с2. Марченко А.И., Марченко Л.А. Программирование в среде Тurbo Рascal 7.0. - 6-е изд. стереотип. _Юбилейное - К.: ВЕК++, 2000 - 127с. э3. Петренко И.В., Беда Е.Н. Лекции и практикум по линейной алгебре: Учебное э пособие. - Донецк: ИПИИ "Наука 1 освіта"; 2005. - 76с.4. Культин Н.Б. Программирование в Turbo Pasсal 7.0 и Delphi / Второе издание, переработанное и дополненное. - СПб.: БХВ - Санкт Петербург, 1999. - 416 с., ил.Приложение АТЕХНИЧЕСКОЕ ЗАДАНИЕА.1. Общие сведенияОснованием для разработки курсовой работы "Метод Гаусса" является задание, выданное кафедрой Программного обеспечения интеллектуальных систем (ПОИС).Плановый срок начала работы: 15 февраля 2007 г.Дата защиты работы: 29 мая 2007 г. жКурсовая работа выполняется согласно графику, приведенному в таблице А.1.Таблица А.1. - График выполнения курсовой работы
А.2. Назначение и цели создания программы Курсовая работа предназначена для помощи в обучении решения систем алгебраических уравнений методом Гаусса. Проект может быть использован в общеобразовательных школах учениками старших классов, а также студентами математических специальностей высших учебных заведений. А.З. Требования к программному продукту А.3.1 Требования к программному продукту в целом; В целом к ПП предоставляются такие требования: интуитивно - понятый интерфейс наличие меню; наличие контекстных подсказок для текущих и возможных действий пользователя вывод подсказок при вводе данных; предоставление справочной информации по методу Гаусса, причем исходная информация должна храниться во внешних файлах. решение задач в рамках метода Гаусса. Предоставление пользователю возможности получить решение для конкретных входных данных с выводом результатов на экран и сохранением в файл. использование графических средств при решении задач или предоставлении теоретического материала по методу Гаусса. А.3.2 Требования к задачам и функциям, выполняемым программой; исходная матрица должна вводиться как с клавиатуры, так и из текстового файла; для СЛАУ второго ранга должно выводиться графическое решение. пользователю должна быть предоставлена справочная информация по методу Гаусса; результаты вычисления должны выводиться на экран и сохраняться в текстовый файл; А.3.3 Требование к программному обеспечению Требованиями ПО: ОС МS Windows XP Professional; наличие Турбо Паскаль. А.3.4 Требования к техническому обеспечению Для нормального функционирования программного продукта на машине требуется: процессор АВМ Аt1оn; операционная память (не менее 64 кб); клавиатура; свободное дисковое пространство (не менее 128 мб); А.3.5 Требование к организационному обеспечению Требования к ОО: пояснительная записка; приложения: техническое задание; руководство пользователя; экранные формы; тексты программ; результаты работы. Приложение БРУКОВОДСТВО ПОЛЬЗОВАТЕЛЯДанный программный продукт предназначен для помощи в обучении систем алгебраических уравнений методом Гауcса. Программа может быть использована в общеобразовательных школах учениками старших классов, а также студентами математических специальностей высших учебных заведений.Для того, чтобы войти в пункт "Теория" в окне меню нужно нажать цифру "1". Этот пункт служит для того, чтоб пользователь смог ознакомиться с теоретической стороной решения СЛАУ. Теория состоит из шести страниц, каждую из которых можно вывести на экран путем нажатием соответствующей страницы от 1 до 6. Для вывода на экран справки из пункта "Теория" нажмите цифру "0". Для возврата в главное меню нажмите "ESC".Для того чтобы войти в пункт "Пример" в окне меню нужно нажать цифру "2". Этот пункт состоит из трех страниц, каждую из которых можно вывести на экран путем нажатия соответствующей цифры от 1 до 3. Для вызова справки нажмите цифру "7". Для выхода в главное меню нажмите "Esc".Для того, чтобы войти в пункт "Решение" в окне меню нужно нажать цифру "3". Далее следуйте подсказкам внизу экрана. Для вызова справки нажмите цифру "0". Для выхода в главное меню нажмите "Esc".Для того, чтобы войти в пункт "Справка" в окне меню нужно нажать цифру "4". Для выхода в главное меню нажмите "Esc".Для того, чтобы выйти из программы в окне меню нужно нажать цифру "5". Приложение ВЭКРАННЫЕ ФОРМЫНа рисунок В.1 отображено главное меню текстового интерфейса.На рисунке В.2 отображено окно теории.На рисунке В.3 отображено окно справочной информации.На рисунке В.4 отображено окно примера решения СЛАУ.Рисунок В.1 Главное менюРисунок В.2 ТеорияРисунок В.3 СправкаРисунок В.4 ПримерПриложение ГРЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫНа рисунке Г.5 отображено окно решения матрицы на первом шаге. На рисунке Г.6 отображено окно решения матрицы на втором шаге и преобразованная матрица, а также вектор ответов.Рисунок Г.5 Решение на первом шагеРисунок Г.6 ОтветыПриложение ДЛИСТИНГ ПРОГРАММЫuses Crt, graph;Var ch: char;const Nmax=100;Procedure LoadFile (Name: string);Var f: text; S: string; code: integer;Beginassign (f,Name);{$I-}reset (f);code: =Ioresult;if code<>0 thenwriteln ('Ошибка. Файл не найден! ')else begin {clrscr}gotoxy (1,3);textcolor (10);TextBackground (0);while not eof (f) dobeginreadln (f,S);writeln (S);end;close (f);end;End;Procedure menu;BeginTextBackground (0);clrscr;LoadFile ('A: MENU. txt');textcolor (9);TextBackground (0);gotoxy (1,23);writeln ('-----------------------------------------------------------------');gotoxy (1,24);writeln ('Нажмите номер пункта меню');end;procedure menuTeorii;beginclrscr;textcolor (9);TextBackground (0);gotoxy (1,23);writeln ('------------------------------------------------------------------------');gotoxy (1,24);writeln ('Для перехода укажите номер страницы (от 1 до 6). ');writeln ('Для возврата в меню нажмите Esc. Для вывода справки нажмите цифру 0. ');end;procedure menuSpravki;beginclrscr;textcolor (9);TextBackground (0);gotoxy (1,23);writeln ('------------------------------------------------------------------------');gotoxy (1,24);writeln ('Для возврата назад нажмите "1". ');writeln ('Для возврата в меню нажмите (Esc). ');end;procedure menuPrimera;beginclrscr;textcolor (9);TextBackground (0);gotoxy (1,23);writeln ('------------------------------------------------------------------------');gotoxy (1,24);writeln ('Для перехода укажите номер страницы (от 1 до 4). ');writeln ('Для вывода справки нажмите "0". Для входа в меню нажмите (Esc). ');end;procedure Spravka;var n: char; {номер страницы}beginmenuSpravki;gotoxy (1,1);LoadFile ('A: Spravka1. txt');repeatn: =readkey; until n in ['1',#27] ;case n of'1': beginend;end;end;procedure Teoria;var n: char; {номер страницы}beginmenuTeorii;gotoxy (1,1);writeln ('страница 1');LoadFile ('A: Text1. txt');repeatrepeat n: =readkey; until n in ['0'. '6',#27] ;case n of'1': beginmenuTeorii;gotoxy (1,1);writeln ('страница 1');LoadFile ('A: Text1. txt');end;'2': beginmenuTeorii;gotoxy (1,1);writeln ('страница 2');LoadFile ('A: Text2. txt');end;'3': beginmenuTeorii;gotoxy (1,1);writeln ('страница 3');LoadFile ('A: Text3. txt');end;'4': beginmenuTeorii;gotoxy (1,1);writeln ('страница 4');LoadFile ('A: Text4. txt');end;'5': beginmenuTeorii;gotoxy (1,1);writeln ('страница 5');LoadFile ('A: Text5. txt');end;'6': beginmenuTeorii;gotoxy (1,1);writeln ('страница 6');LoadFile ('A: Text6. txt');end;'0': beginSpravka;gotoxy (1,1);LoadFile ('A: Spravka1. txt');end;end;until n=#27;end;procedure grafic (a1,b1,c1,a2,b2,c2,xc,yc: real);varminx,maxx,miny,maxy: real;mx,my: real;x1,y1,x2,y2: integer;x0,y0: integer;grDriver: Integer;grMode: Integer;ErrCode: Integer;begingrDriver: = Detect;InitGraph (grDriver, grMode,'c: \bps\bin\egavga. bgi');ErrCode: = GraphResult;if ErrCode = grOk thenbeginminx: =xc-2*xc;maxx: =xc+2*xc;miny: =yc-2*yc;maxy: =yc+2*yc;mx: =getmaxx;mx: =mx/ (maxx-minx);my: =getmaxy/ (maxy-miny);y0: =round (abs (xc) *mx);x0: =round (abs (yc) *my);setcolor (white);line (x0,0,x0,getmaxy);line (0,y0,getmaxx,y0);setcolor (red);x1: =x0+round (minx*mx);y1: =y0-round ( (c1-a1*minx) /b1*my);x2: =x0+round (maxx*mx);y2: =y0-round ( (c1-a1*maxx) /b1*my);line (x1,y1,x2,y2);setcolor (yellow);x1: =x0+round (minx*mx);y1: =y0-round ( (c2-a2*minx) /b2*my);x2: =x0+round (maxx*mx);y2: =y0-round ( (c2-a2*maxx) /b2*my);line (x1,y1,x2,y2);Readkey;CloseGraph;endelseWriteln ('Ошибка работы с графикой: ', GraphErrorMsg (ErrCode));end;{$S-}procedure vvod (var x: real; var code: integer);var s: string;beginreadln (s);val (s,x,code);if code<>0 thenwriteln ('Ошибка, повторите ввод');end;procedure vvod1 (var n: integer);var s: string;code: integer;beginrepeatwrite ('Введите количество элементов матрицы');readln (s);val (s,n,code);if (code<>0) or (N<0) or (N>Nmax) thenwriteln ('Ввод не верный. Повторите ввод... ');until (N>0) and (N<=Nmax) and (code=0);end;procedure Rewenie;varx: array [1. Nmax] of real;A: array [1. Nmax,1. Nmax] of real;B: array [1. Nmax] of real;N, i, ii,j,l,Rez,kol: integer;k,S: real;f,f1: text;code: integer;c: char;Name: string;Beginassign (f,'otvet. txt');rewrite (f);clrscr;gotoxy (30,12);writeln ('1-Ввод с клавиатуры');gotoxy (32,13);writeln ('2-Ввод с файла');gotoxy (28,14);writeln ('3-Выход в основное меню');repeat c: =readkey; until c in ['1','2','3'] ;if c='3' thenbeginreadkey;exit;end;if c='1' thenbeginvvod1 (n);writeln ('введите матрицу коэфициентов');for i: =1 to n dobeginfor j: =1 to N dorepeatwrite ('A [', i,',',j,'] =');vvod (A [i,j],code);until code=0;repeatwrite ('B [', i,'] =');vvod (B [i],code);until code=0;end;endelsebeginwriteln ('Задайте имя файла');readln (Name);assign (f1,Name);{$I-}reset (f);code: =Ioresult;if code<>0 thenbeginwriteln ('Ошибка. Файл не найден! ');writeln ('Для выхода в основное меню нажмите любую клавишу. ');readkey;exit;endelsebeginreadln (f1,n);if Ioresult<>0 thenbeginwriteln ('Ошибка чтения из файла! Для выхода в основное меню нажмите любую клавишу. ');readkey;exit;end;for i: =1 to n dobeginfor j: =1 to N dobeginread (f1,a [i,j]);if Ioresult<>0 thenbeginwriteln ('Ошибка чтения из файла! Для выхода в основное меню нажмите любую клавишу. ');readkey;exit;end; end;read (f1,b [i]);if Ioresult<>0 thenbeginwriteln ('Ошибка чтения из файла! Для выхода в основное меню нажмите любую клавишу. ');readkey;exit;end;end;end;close (f1);end;clrscr;writeln (f,'Исходная матрица: ');writeln ('Исходная матрица: ');for i: =1 to N dobeginfor j: =1 to N dobeginwrite (A [i,j]: 10: 4);write (f,A [i,j]: 10: 4);end;writeln (' I',B [i]: 10: 4);writeln (f,' I',B [i]: 10: 4);end;for i: =1 to N-1 do beginfor l: =i+1 to N do beginif a [l, i] =0 thenbeginwriteln ('Преобразования матрицы на ', i,'-м шаге выполнить нельзя! ');writeln ('Диагональный элемент равен 0! ');writeln (f,'Преобразования матрицы на ', i,'-м шаге выполнить нельзя! ');writeln (f,'Диагональный элемент равен 0! ');readkey;exit;end;k: =-A [i, i] /a [l, i] ;for j: =1 to n doA [l,j]: =A [l,j] *k+A [i,j] ;B [l]: =B [l] *k+B [i] ;end;writeln;writeln ('Преобразования матрицы на ', i,'-м шаге');writeln (f);writeln (f,'Преобразования матрицы на ', i,'-м шаге');for ii: =1 to N dobeginfor j: =1 to N dobeginwrite (A [ii,j]: 10: 4);write (f,A [ii,j]: 10: 4);end;writeln (' I',B [i]: 10: 4);writeln (f,' I',B [i]: 10: 4);end;readkey;writeln;writeln;writeln (f);writeln (f);end;rez: =1;for i: =1 to n dobeginkol: =0;for j: =1 to N doif A [i,j] =0 thenkol: =kol+1;if kol=N thenif B [i] =0 thenbeginRez: =2; break;endelsebeginRez: =0;break;end;end;if rez=1 thenbeginx [N]: =b [n] /a [n,n] ;for i: =N-1 downto 1 dobeginS: =0;for j: =i+1 to N doS: =S+x [j] *A [i,j] ;x [i]: = (B [i] -S) /A [i,j] ;end;writeln ('Преобразованная матрица');writeln (f,'Преобразованная матрица');for i: =1 to N dobeginfor j: =1 to N dobeginwrite (A [i,j]: 10: 4);write (f,A [i,j]: 10: 4);end;writeln (' I',B [i]: 10: 4);writeln (f,' I',B [i]: 10: 4);end;writeln ('Вектор ответов');writeln (f,'Вектор ответов');for i: =1 to N dobeginwriteln ('x [', i,'] =',x [i]: 10: 4);writeln (f,'x [', i,'] =',x [i]: 10: 4);end;if N=2 thenbeginwriteln ('Нажмите любую клавишу для просмотра графика');readkey;grafic (a [1,1],a [1,2],b [1],a [2,1],a [2,2],b [2],x [1],x [2]);end;endelseif rez=0 thenbeginwriteln ('Решений бесконечное множество');writeln (f,'Решений бесконечное множество');endelsebeginwriteln ('Решений НЕТ');writeln (f,'Решений НЕТ');end;readkey;close (f);end;procedure Primer;var n: char; {номер страницы}beginmenuPrimera;gotoxy (1,1);writeln ('страница 1');LoadFile ('A: Primer1. txt');repeatrepeat n: =readkey; until n in ['0'. '4',#27] ;case n of'1': beginmenuPrimera;gotoxy (1,1);writeln ('страница 1');LoadFile ('A: Primer1. txt');end;'2': beginmenuPrimera;gotoxy (1,1);writeln ('страница 2');LoadFile ('A: Primer2. txt');end;'3': beginmenuPrimera;gotoxy (1,1);writeln ('страница 3');LoadFile ('A: Primer3. txt');end;'0': beginSpravka;gotoxy (1,1);LoadFile ('A: Spravka1. txt');end;'4': beginmenuPrimera;gotoxy (1,1);writeln ('страница 4');LoadFile ('A: Primer4. txt');end;end;until n=#27;end;procedure Vuxod;beginexit;end;Beginrepeatmenu;repeat ch: =readkey;until ch in ['1'. '5'] ;case ch of'1': Teoria;'2': Primer;'3': Rewenie;'4': Spravka;'5': Vuxod;end;until ch='5';end. |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |