Список использованных источников
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. - График выполнения курсовой работы
№ | Этапы работы | Срок выполнения |
1 | Постановка задачи: определение требований к программному комплексу. | 15.02-22.02 |
2 | Составление технического задания. | 22.02-01.03 |
3 | Разработка методов решения задачи. | 01.03-08.03 |
4 | Разработка алгоритма функционирования программы. | 15.03 |
5 | Определение структур входных и выходных данных, алгоритмов работы модулей. Описание входных и выходных данных. | 22.03 - 29.03 |
6 | Написание программы. | 05.04-19.04 |
7 | Отладка программы. | 19.04-26.04 |
8 | Тестирование программы. | 26.04-03.05 |
9 | Написание пояснительной записки. | 03.05-17.05 |
10 | Защита курсовой работы | 29.05 |
|
|
А.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;
Begin
assign (f,Name);
{$I-}
reset (f);
code: =Ioresult;
if code<>0 then
writeln ('Ошибка. Файл не найден! ')
else begin {clrscr}
gotoxy (1,3);
textcolor (10);
TextBackground (0);
while not eof (f) do
begin
readln (f,S);
writeln (S);
end;
close (f);
end;
End;
Procedure menu;
Begin
TextBackground (0);
clrscr;
LoadFile ('A: MENU. txt');
textcolor (9);
TextBackground (0);
gotoxy (1,23);
writeln ('-----------------------------------------------------------------');
gotoxy (1,24);
writeln ('Нажмите номер пункта меню');
end;
procedure menuTeorii;
begin
clrscr;
textcolor (9);
TextBackground (0);
gotoxy (1,23);
writeln ('------------------------------------------------------------------------');
gotoxy (1,24);
writeln ('Для перехода укажите номер страницы (от 1 до 6). ');
writeln ('Для возврата в меню нажмите Esc. Для вывода справки нажмите цифру 0. ');
end;
procedure menuSpravki;
begin
clrscr;
textcolor (9);
TextBackground (0);
gotoxy (1,23);
writeln ('------------------------------------------------------------------------');
gotoxy (1,24);
writeln ('Для возврата назад нажмите "1". ');
writeln ('Для возврата в меню нажмите (Esc). ');
end;
procedure menuPrimera;
begin
clrscr;
textcolor (9);
TextBackground (0);
gotoxy (1,23);
writeln ('------------------------------------------------------------------------');
gotoxy (1,24);
writeln ('Для перехода укажите номер страницы (от 1 до 4). ');
writeln ('Для вывода справки нажмите "0". Для входа в меню нажмите (Esc). ');
end;
procedure Spravka;
var n: char; {номер страницы}
begin
menuSpravki;
gotoxy (1,1);
LoadFile ('A: Spravka1. txt');
repeat
n: =readkey; until n in ['1',#27] ;
case n of
'1': begin
end;
end;
end;
procedure Teoria;
var n: char; {номер страницы}
begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 1');
LoadFile ('A: Text1. txt');
repeat
repeat n: =readkey; until n in ['0'. '6',#27] ;
case n of
'1': begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 1');
LoadFile ('A: Text1. txt');
end;
'2': begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 2');
LoadFile ('A: Text2. txt');
end;
'3': begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 3');
LoadFile ('A: Text3. txt');
end;
'4': begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 4');
LoadFile ('A: Text4. txt');
end;
'5': begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 5');
LoadFile ('A: Text5. txt');
end;
'6': begin
menuTeorii;
gotoxy (1,1);
writeln ('страница 6');
LoadFile ('A: Text6. txt');
end;
'0': begin
Spravka;
gotoxy (1,1);
LoadFile ('A: Spravka1. txt');
end;
end;
until n=#27;
end;
procedure grafic (a1,b1,c1,a2,b2,c2,xc,yc: real);
var
minx,maxx,miny,maxy: real;
mx,my: real;
x1,y1,x2,y2: integer;
x0,y0: integer;
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver: = Detect;
InitGraph (grDriver, grMode,'c: \bps\bin\egavga. bgi');
ErrCode: = GraphResult;
if ErrCode = grOk then
begin
minx: =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;
end
else
Writeln ('Ошибка работы с графикой: ', GraphErrorMsg (ErrCode));
end;
{$S-}
procedure vvod (var x: real; var code: integer);
var s: string;
begin
readln (s);
val (s,x,code);
if code<>0 then
writeln ('Ошибка, повторите ввод');
end;
procedure vvod1 (var n: integer);
var s: string;
code: integer;
begin
repeat
write ('Введите количество элементов матрицы');
readln (s);
val (s,n,code);
if (code<>0) or (N<0) or (N>Nmax) then
writeln ('Ввод не верный. Повторите ввод... ');
until (N>0) and (N<=Nmax) and (code=0);
end;
procedure Rewenie;
var
x: 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;
Begin
assign (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' then
begin
readkey;
exit;
end;
if c='1' then
begin
vvod1 (n);
writeln ('введите матрицу коэфициентов');
for i: =1 to n do
begin
for j: =1 to N do
repeat
write ('A [', i,',',j,'] =');
vvod (A [i,j],code);
until code=0;
repeat
write ('B [', i,'] =');
vvod (B [i],code);
until code=0;
end;
end
else
begin
writeln ('Задайте имя файла');
readln (Name);
assign (f1,Name);
{$I-}
reset (f);
code: =Ioresult;
if code<>0 then
begin
writeln ('Ошибка. Файл не найден! ');
writeln ('Для выхода в основное меню нажмите любую клавишу. ');
readkey;
exit;
end
else
begin
readln (f1,n);
if Ioresult<>0 then
begin
writeln ('Ошибка чтения из файла! Для выхода в основное меню нажмите любую клавишу. ');
readkey;
exit;
end;
for i: =1 to n do
begin
for j: =1 to N do
begin
read (f1,a [i,j]);
if Ioresult<>0 then
begin
writeln ('Ошибка чтения из файла! Для выхода в основное меню нажмите любую клавишу. ');
readkey;
exit;
end;
end;
read (f1,b [i]);
if Ioresult<>0 then
begin
writeln ('Ошибка чтения из файла! Для выхода в основное меню нажмите любую клавишу. ');
readkey;
exit;
end;
end;
end;
close (f1);
end;
clrscr;
writeln (f,'Исходная матрица: ');
writeln ('Исходная матрица: ');
for i: =1 to N do
begin
for j: =1 to N do
begin
write (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 begin
for l: =i+1 to N do begin
if a [l, i] =0 then
begin
writeln ('Преобразования матрицы на ', i,'-м шаге выполнить нельзя! ');
writeln ('Диагональный элемент равен 0! ');
writeln (f,'Преобразования матрицы на ', i,'-м шаге выполнить нельзя! ');
writeln (f,'Диагональный элемент равен 0! ');
readkey;
exit;
end;
k: =-A [i, i] /a [l, i] ;
for j: =1 to n do
A [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 do
begin
for j: =1 to N do
begin
write (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 do
begin
kol: =0;
for j: =1 to N do
if A [i,j] =0 then
kol: =kol+1;
if kol=N then
if B [i] =0 then
begin
Rez: =2;
break;
end
else
begin
Rez: =0;
break;
end;
end;
if rez=1 then
begin
x [N]: =b [n] /a [n,n] ;
for i: =N-1 downto 1 do
begin
S: =0;
for j: =i+1 to N do
S: =S+x [j] *A [i,j] ;
x [i]: = (B [i] -S) /A [i,j] ;
end;
writeln ('Преобразованная матрица');
writeln (f,'Преобразованная матрица');
for i: =1 to N do
begin
for j: =1 to N do
begin
write (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 do
begin
writeln ('x [', i,'] =',x [i]: 10: 4);
writeln (f,'x [', i,'] =',x [i]: 10: 4);
end;
if N=2 then
begin
writeln ('Нажмите любую клавишу для просмотра графика');
readkey;
grafic (a [1,1],a [1,2],b [1],a [2,1],a [2,2],b [2],x [1],x [2]);
end;
end
else
if rez=0 then
begin
writeln ('Решений бесконечное множество');
writeln (f,'Решений бесконечное множество');
end
else
begin
writeln ('Решений НЕТ');
writeln (f,'Решений НЕТ');
end;
readkey;
close (f);
end;
procedure Primer;
var n: char; {номер страницы}
begin
menuPrimera;
gotoxy (1,1);
writeln ('страница 1');
LoadFile ('A: Primer1. txt');
repeat
repeat n: =readkey; until n in ['0'. '4',#27] ;
case n of
'1': begin
menuPrimera;
gotoxy (1,1);
writeln ('страница 1');
LoadFile ('A: Primer1. txt');
end;
'2': begin
menuPrimera;
gotoxy (1,1);
writeln ('страница 2');
LoadFile ('A: Primer2. txt');
end;
'3': begin
menuPrimera;
gotoxy (1,1);
writeln ('страница 3');
LoadFile ('A: Primer3. txt');
end;
'0': begin
Spravka;
gotoxy (1,1);
LoadFile ('A: Spravka1. txt');
end;
'4': begin
menuPrimera;
gotoxy (1,1);
writeln ('страница 4');
LoadFile ('A: Primer4. txt');
end;
end;
until n=#27;
end;
procedure Vuxod;
begin
exit;
end;
Begin
repeat
menu;
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.
Дата добавления: 2019-07-15; просмотров: 84; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!