Реферат по предмету "Информатика, программирование"


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

ФЕДЕРАЛЬНОЕАГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАВТ
РАЗРАБОТКАПРОГРАММЫ ДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
Пояснительнаязаписка
Курсовая работапо дисциплине
«Информатика»
ТПЖА.12203-01 8101 ПЗ
Разработал   студент гр. СК-00           ____________  /А. И. Иванов/
Руководительпреподаватель
ФАВТ                                     ____________/ К. И. Петров/ 
Курсовая работазащищена с оценкой“___________” “__”_____2002 г.                   
Киров  2002

Реферат
А. И. Иванов.Разработка программы для решения систем линейных уравнений: ТПЖА 12203-01 81 01ПЗ. Курсовая работа/ВятГУ, ФАВТ, рук. К. И. Петров – Киров, 2002. ПЗ 7 с., 3табл., 8 рис., 4 источника, 4 прил.; програм. докум. 18 л.
 
СИСТЕМА ЛИНЕЙНЫХУРАВНЕНИЙ, МЕТОД ЗЕЙДЕЛЯ, МЕТОД ПРОСТЫХ ИТЕРАЦИЙ, МАТРИЦА КОЭФФИЦИЕНТОВ, ВЕКТОРСВОБОДНЫХ ЧЛЕНОВ, УСЛОВИЕ СХОДИМОСТИ
Объектом исследованияявляются итерационные методы решения систем линейных алгебраических уравнений(далее СЛАУ): метод простых итераций и метод Зейделя.
Цель работы –разработка программы для решения СЛАУ с произвольным количеством уравнений.
Для получения векторарешений СЛАУ реализованы методы Зейделя и  простых итераций.
Недостаткомисследуемого метода – невозможность нахождения решения за конечное числоитераций даже при отсутствии вычислительной погрешности. 
Результаты проведённойработы могут быть использованы при решении СЛАУ с произвольным количествомуравнений.
Среда программирования– Borland C.
 

Содержание
Введение    2
1       Анализ задания и выбор методарешения       3
1.1    Анализ задания  3
1.2    Выбор метода решения        3
1.2.1  Метод простых итераций     4
1.2.2  Метод Зейделя   4
2       Реализация метода решения задачи       5
2.1    Контроль входной информации    5
2.2    Формат вывода выходной информации 5
2.3    Выбор типов входных, рабочих ивыходных переменных,
используемых в программе 6
2.4    Проектирование программы         6
2.5    Анализ результата      6
Заключение         7
Приложение А (обязательное) Разработкапрограммы для решения систем линейных уравнений. Описание программы.ТПЖА.12203-01 13 01        8
Приложение Б (обязательное). Разработкапрограммы для решения систем линейных уравнений. Руководство пользователя.ТПЖА.12203-01 34 01..
Приложение В (обязательное). Разработкапрограммы для решения систем линейных уравнений. Текст программы. ТПЖА.12203-0112 01      23
Приложение Г (справочное) 45
 

Введение
Решение СЛАУ являетсяодной из важных вычислительных задач, часто встречающихся в прикладнойматематике. К решению систем линейных уравнений сводится ряд задач анализа,связанных с приближением функций, решение систем дифференциальных уравнений иинтегральных уравнений и т.д.
В связи сиспользованием большого количества переменных в системе ручной расчёт СЛАУдовольно трудоёмкий и может занять много времени. Актуальность данной курсовойработы заключается в том, что вышеописанная проблема разрешается с помощьюразработанной курсовой программы.
Курсовая работа носитучебный характер. В ходе её программист реализовал имеющиеся знания из курсалинейной алгебры по решению СЛАУ в программной интерпретации на языкепрограммирования С. А знание компьютера и наличие опыта в программировании внаше время особенно приветствуется в фирмах, работающих в сфере информационныхтехнологий.
 
1 Анализ задания ивыбор метода решения
1.1 Анализ задания
В соответствии сзаданием на курсовую работу необходимо разработать программу для решения СЛАУметодом простых итераций и методом Зейделя. Предусмотреть ввод числа уравнений,матрицы коэффициентов и вектора свободных членов, а также вывод вектора решенийна экран.
Для удобстватестирования программа должна обладать понятным и логичным интерфейсом,рассчитанным на неопытного пользователя.
1.2 Выбор методарешения
В соответствии сзаданием на курсовую работу в программе реализованы итерационные методы:простых итераций и Зейделя.
Пусть ищется решениеневырожденной системы уравнений[1]
 .
(1)
Первым шагом витерационном методе является преобразование исходной системы к виду[1]
 ,
(2)
где матрицы С, В ивектор d определяются по матрицы А и вектору b. Причём системы (1) и (2)являются эквивалентными, т.е. их решения совпадают, а построение обратнойматрицы С-1 проще, чем А-1. [1]
Вторым шагом являетсярасстановка индексов или номеров приближений в (2) и задание нулевогоприближения. Например,
 
(3)
где  — заданный вектор [1]
Третьим шагомитерационного метода является обоснование сходимости последовательныхприближений , полученных из (3), к точному решению х системы и оценкапогрешности k-го приближения[1]
 
(4)
Оценка (4) призаданном   позволяет остановить итерационный про-цесс (3). [1]
Различные итерационныеметоды отличаются первыми двумя шагами, а выбор конкретного метода долженпроизводиться на основании оценки(4). [1]
1.2.1 Метод простыхитераций
В методе простыхитераций матрица С (2) выбирается единичной: С=Е. Итерационный процессописывается формулой
 
(5)
где  — заданный вектор.[1]
1.2.2  Метод Зейделя
Отличие метода Зейделяот простой итерации состоит лишь в том, что при вычислении (k+1)-го приближенияполученные   компоненты вектора   сразу же используются в вычислениях. Вматричной записи это можно представить так:
 
где матрицы U и Lполучены разложением В в сумму:
 
матрица U – верхняятреугольная часть B, включая диагональ; L – нижняя поддиагональная часть В. [1]
Таким образом методЗейделя можно записать в следующей форме
 
(6)
Заметим, что построениематрицы, обратной , не представляет труда, так как это нижняя треугольнаяматрица. [1]
2 Реализация методарешения задачи
2.1 Контроль входнойинформации
Метод контроля входнойинформации должен обеспечить максималь-ную защиту от некорректности вводимыхданных, защиту от переполнения строки и минимальный перечень ограничений привводе информации.
В программе входныеданные, задаются пользователем в режиме диалогового окна. Это позволяетпрактически полностью контролировать входную информацию и избежатьнекорректности вводимых данных, так как далее эта информация используется ввычислениях. Функции float_input() и n_input() предназначены для защиты отнекорректного ввода действительных и натуральных чисел соответственно(приложение В).
2.2 Формат выводавыходной информации
Вывод результатоврасчёта производится в окне Output.
В окне выводитсяисходная  СЛАУ, ниже вектор решений, а также число итераций, необходимых длянахождения решения.
2.3 Выбор типоввходных, рабочих и выходных переменных, используемых в программе
В программеиспользованы следующие переменные:
charch
ints
intn
double**A
double*B
double*X
boolinpflag=false
booldecflag=false
перемещение междуокнами
число итераций
размерность матриц
матрица коэффициентов
вектор свободных членов
вектор решений
флажок выполненияоперации ввода
флажок выполненияоперации решения
2.4 Проектированиепрограммы
Рабочий модульпрограммы – Zeidel.cpp.
Для корректной работыпрограммы реализованы методы корректного ввода входной информации, решение СЛАУс пояснением выполняемых действий, форматированный вывод выходной информации наэкран и в файл. Для удобства тестирования разработан интерфейс, рассчитанный нанеопытного пользователя.
2.5 Анализ результата
В результатепроделанной программистом работы разработана программа, реализующая решениеСЛАУ методами Зейделя и простых итераций и выполненная в удобном и понятноминтерфейсе, понятном неопытному пользователю.
Пример расчета СЛАУ соследующими входными данными:
Исходная матрица А   45 8.6
7.3  8.1
Вектор свободных членовВ          12
4.5
Результаты расчёта:
Вектор решений 0.1938
0.3809
Число итераций  5
Заключение
В ходе курсовой работыбыл разработан программный продукт, в рамках которого были реализованы:
         методпростых итераций для решения СЛАУ;
         методЗейделя для решения СЛАУ;
         удобныйоконный интерфейс для неопытного оператора;
         защитаот неправильного ввода входной информации;
 

Приложение А
(обязательное)
ФЕДЕРАЛЬНОЕАГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАВТ
РАЗРАБОТКАПРОГРАММЫ ДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
ОПИСАНИЕ ПРОГРАММЫ
Лист утверждения
ТПЖА.12203-01 13 01-ЛУ
Листов 2
Разработал    студентгр. СК-00           ____________  / А. И. Иванов /
Руководитель   преподаватель
                          ФАВТ                   ____________ / К. И. Петров/ 
Киров  2002

Приложение А
(обязательное)
ФЕДЕРАЛЬНОЕ АГЕНТСТВОПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГООБРАЗОВАНИЯ
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙУНИВЕРСИТЕТ
ФАВТ
Лист утверждения
ТПЖА.12203-01 13 01-ЛУ
РАЗРАБОТКА ПРОГРАММЫДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
ОПИСАНИЕ ПРОГРАММЫ
ТПЖА.12203-01 13 01
Листов 8
Киров  2002

Аннотация
В разделе «Описаниепрограммы» рассмотрены функциональные характеристики программы. Перечисленытребуемые технические средства для её нормальной работы, а также входные ивыходные данные. Приведены необходимые схемы алгоритмов.
 
Содержание
1       Общие сведения 12
2       Состав иструктура программного модуля     12
3       Описаниелогической структуры  13
4       Входные данные 14
5       Выходные данные       14
6       Схемыалгоритмов программы     15
 
1 Общие сведения
Исходный текстпрограммы написан на языке С.
2 Состав и структурапрограммного модуля
Программный кодпредставлен в модуле Zeidel.cpp, состав которого представлен в таблице А.1.
Таблица А.1 – Составпрограммного модуля Zeidel.cpp
Функция    Назначение
main  Основная функцияпрограммы
input Ввод исходныхданных
float_input Вводдействительных чисел
n_input      Вводнатуральных чисел
decision      РешениеСЛАУ
output        Выводрезультата работы программы
menu Функция рисованияпунктов меню
help   Вывод на экранинформации о программе и разработ-чике
cursor         Навигациякурсора
 
Данный программныйпродукт имеет структуру, представленную на рисунке А.1.
 
Рисунок А.1 – Структурапрограммного модуля
3 Описание логическойструктуры
Функция main – основнаяфункция программы, реализующая меню для выбора требуемой операции. Тело функциипредставляет собой цикл, в котором производится вывод строк меню, ожиданиеввода символа с клавиатуры и последующий анализ введенного символа.
Навигация в менюосуществляется клавишами курсора. И в соответствии с выбранным пунктомоткрывается диалоговое окно.
Функция menu играетсвязующее звено в интерфейсе программы – вы-водит на экран  меню программы.
Ввод данныхпроизводится функцией input, а проверка корректности вводимой информациифункциями float_input, которая позволяет вводить действительные числа, иn_input, позволяющая вводить натуральные числа, а также ограничивает ввод цифрв числе и препятствует вводу иных символов.
Решение введенной СЛАУреализовано в функции decision. При этом пользователю предлагается выбор методарешения СЛАУ (метод Зейделя или
метод простыхитераций).
Вывод результатовпроизводится функцией output на экран.
В случае выбора опций«Decision» и «Output» без выполнения опции «Input» и опции «Output» без«Decision» программа выдаст предупредительное сообщение с напоминаниемвыполнения требуемых действий.
3 Входные данные
Входные данныепредставлены в таблице A.2.
Таблица А.2 – Входныеданные
Переменная        Диапазон   Назначение
int n  1…10         Размерностьматриц
double **А -99.99…99.999   Матрицакоэффициентов
double *В            Векторсвободных членов
4 Выходные данные
Выходные данныепредставлены в таблице A.3.
Таблица А.3 – Входныеданные
Переменная        Диапазон   Назначение
double *X   -3.4Е-38…3.4Е+38      Векторрешений СЛАУ
 5 Схемы алгоритмовпрограммы
Схема алгоритма функцииdecision представлена на рисунке A.2.
 
РисунокА.2– Схемаалгоритмафункции
voiddecision(double **&A, double *&B, double *&X, int &n, int&s)
 

Приложение Б
(обязательное)
ФЕДЕРАЛЬНОЕАГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАВТ
РАЗРАБОТКА ПРОГРАММЫДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
РУКОВОДСТВООПЕРАТОРА
Лист утверждения
ТПЖА.12203-01 3401-ЛУ
Листов 2
Разработал   студент гр. СК-02           ____________  / А. И. Иванов /
Руководитель   преподаватель
                          ФАВТ                   ____________ / К. И. Петров/ 
Киров  2002
Приложение Б
(обязательное)
ФЕДЕРАЛЬНОЕАГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙ ГОСУДАРСТВЕННЫЙУНИВЕРСИТЕТ
ФАВТ
Лист утверждения
ТПЖА.12203-01 34 01-ЛУ
РАЗРАБОТКА ПРОГРАММЫДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
РУКОВОДСТВО ОПЕРАТОРА
ТПЖА.12203-01 34 01
Листов 7
Киров 2002
 Аннотация
В приложении«Руководство оператора» указаны подробные инструкции по работе с программой. Вэтом приложении указаны условия, необходимые  для запуска программы, а также счего следует начинать работу. Также приложение содержит подробное описаниепользовательского интерфейса программы.
 
Содержание
1       Условиявыполнения программы  20
2       Запуск        20
3       Обработкакритических ситуаций 20
4       Работа спрограммой  21
4.1    Ввод исходныхданных        21
4.2    Решение СЛАУ   21
4.3    Вывод результатаработы    21
 1 Условия выполненияпрограммы
Файл Zeidel.exeявляется главным модулем, и его присутствие гарантирует корректный запускпрограммы.
2 Запуск
Для начала работы спрограммой следует запустить файл Zeidel.exe. Экранная форма программы послезапуска показана на рисунке Б.1.
 
Рисунок Б.1 – Экраннаяформа программы
3 Обработка критическихситуаций
Навигация в программеосуществляется клавишами курсора (зелёная полоска в меню).
Программа снабженазащитой от некорректных действий пользователя, в частности: выбор пунктов«Decision» и «Output» без ввода исходных данных в программу, выбор пункта«Output» не выполнив опцию «Decision». На рисунке Б.2 показан пример работыпрограммы в критической ситуации.
Рисунок Б.2 – Примерработы программы в критической ситуации
4 Работа с программой
4.1 Ввод исходныхданных
При выборе пункта меню«Input» экране появится диалоговое окно ввода данных, показанное на рисункеБ.3.
 
Рисунок Б.3 – Окноввода исходных данных
4.2 Решение системы
Решение СЛАУреализовано в опции «Decision» (см. рисунок Б.4).
 
Рисунок Б.4 – Окнорешения СЛАУ
4.3 Вывод результатаработы
Вывод полученноговектора решений СЛАУ предусмотрен на экран. Диалоговое окно, вызванноеобращением пользователя «Output» представлено на рисунке Б.5.
 
Рисунок Б.5 – Окновывода результата на экран
При вводе более 5уравнений система полностью не помещается в окно вывода результата. В этомслучае предусмотрена прокрутка матрицы влево, вправо, вниз и вверх. Диалоговоеокно при скроллинге представлено на рисунке Б.6.
Рисунок Б.6 – Окновывода результата на экран
 

Приложение В
(обязательное)
ФЕДЕРАЛЬНОЕАГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАВТ
РАЗРАБОТКАПРОГРАММЫ ДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
ТЕКСТ ПРОГРАММЫ
Лист утверждения
ТПЖА.12203-01 1201-ЛУ
Листов 2
Разработал    студентгр. СК-00          ____________  /А. И. Иванов/
Руководитель   преподаватель
                          ФАВТ                   ____________ / К. И. Петров/ 
Киров  2002
Приложение В
(обязательное)
ФЕДЕРАЛЬНОЕАГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГОПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ВЯТСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультетприкладной математики и телекоммуникаций
Кафедрарадиоэлектронных средств
Лист утверждения
ТПЖА.12203-01 1201-ЛУ
РАЗРАБОТКАПРОГРАММЫ ДЛЯ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ
ТЕКСТ ПРОГРАММЫ
ТПЖА.12203-01 1201
Листов 22
Киров  2002

Аннотация
Приложение «Текстпрограммы» содержит полный код программы.
 
Содержание
1       menu 27
2       cursor         28
3       float_input 31
4       n_input      32
5       about 33
6       task   34
7       help   34
8       input 35
9       decision      37
10     output        39
11               42
 
/*
  Разработать программудля решения систем линейных уравнений.
  Реализовать методыа)простых итераций; б) Зейделя.
  Предусмотреть вводчисла уравнений(до 10), матрицы коэффициентов
  и вектора свободныхчленов.
  Выполнил студент гр.СК-06 МамаевС.В.
*/
#include
#include
#include
#include
#include
//функция отрисовкименю
//------------------------------------------------------------------------------
void menu()
{
 window(1,1,80,25);
 textbackground(BLACK);
 clrscr();
 window(1,1,80,1);
 textbackground(LIGHTGRAY);
 clrscr();
 gotoxy(1,1);
 textcolor(RED);
 cprintf("%s",«H»);
 textcolor(BLACK);
 cprintf("%s",«elp»);
 gotoxy(9,1);
 textcolor(RED);
 cprintf("%s",«I»);
 textcolor(BLACK);
 cprintf("%s",«nput»);
 gotoxy(18,1);
 textcolor(RED);
 cprintf("%s",«D»);
 textcolor(BLACK);
 cprintf("%s",«ecision»);
 gotoxy(29,1);
 textcolor(RED);
 cprintf("%s",«O»);
 textcolor(BLACK);
 cprintf("%s",«utput»);
 window(1,25,80,25);
 textbackground(LIGHTGRAY);
 clrscr();
 cprintf(«Alt+X- exit»);
 gotoxy(70,1);
 textcolor(BLACK);
}
//------------------------------------------------------------------------------
//курсор
//------------------------------------------------------------------------------
voidcursor(int n)
{
 if(n==1)
 {
  window(1,1,5,1);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«H»);
  textcolor(BLACK);
  cprintf("%s",«elp»);
  window(5,1,5,1);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==2)
 {
  window(9,1,14,1);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«I»);
  textcolor(BLACK);
  cprintf("%s",«nput»);
  window(14,1,14,1);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==3)
 {
  window(18,1,26,1);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«D»);
  textcolor(BLACK);
  cprintf("%s",«ecision»);
  window(26,1,26,1);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==4)
 {
  window(29,1,35,1);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«O»);
  textcolor(BLACK);
  cprintf("%s",«utput»);
  window(35,1,35,1);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==6)
 {
  window(3,3,8,3);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«A»);
  textcolor(BLACK);
  cprintf("%s",«bout»);
  window(8,3,8,3);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==7)
 {
  window(3,4,7,4);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«T»);
  textcolor(BLACK);
  cprintf("%s",«ask»);
  window(7,4,7,4);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==8)
 {
  window(10,3,18,3);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«K»);
  textcolor(BLACK);
  cprintf("%s",«eyboard»);
  window(18,3,18,3);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==9)
 {
  window(10,4,14,4);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«F»);
  textcolor(BLACK);
  cprintf("%s",«ile»);
  window(14,4,14,4);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==10)
 {
  window(30,3,37,3);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«D»);
  textcolor(BLACK);
  cprintf("%s",«isplay»);
  window(37,3,37,3);
  textbackground(LIGHTGRAY);
  clrscr();
 }
 if(n==11)
 {
  window(30,4,34,4);
  textbackground(GREEN);
  clrscr();
  textcolor(RED);
  cprintf("%s",«F»);
  textcolor(BLACK);
  cprintf("%s",«ile»);
  window(34,4,34,4);
  textbackground(LIGHTGRAY);
  clrscr();
  }
}
//------------------------------------------------------------------------------
//функция вводанатурального числа
//------------------------------------------------------------------------------
intn_input(int max)
{
  char ch;
  char str[100];
  int i=0;
  do
  {
    ch = (char)getch();
     if (i==0)
       {
        if ((ch>'0')&&(ch
        {
         str[i++]=ch;
         putch(ch);
        }
       }
     else
      {
       if ((ch>='0')&&(ch
        {
         str[i++]=ch;
         putch(ch);
        }
       }
      if((ch=='\r')&&(i==0))    //если нажата клавиша ENTER и ничего невведено
         {
         ch='x';
         printf(" \b");         //backspace
        }
      if ((ch=='\b')&&(i>0))    //еслинажатаклавишаBACKSPACE
        {
         i--;
         printf("\b \b");
        }
      if(i==(max+1))           //если достиглиmax количествацифр
        {
         i--;
         printf("\b \b");
        }
  }
  while (ch!='\r');
  str[i]='\0';
  for (int j=i;j>0;j--)
     printf("\b \b");
  printf("%d",atoi(str));
  returnatoi(str);         //преобразуем в число
}
//------------------------------------------------------------------------------
//функция вводадействительного числа
//------------------------------------------------------------------------------
double float_input()
{
    constmax=6;         //максимальное количество цифр в числе
    inti=0;              //счётчик вводасимвола
   char ch,buffer[max];
   boolflp=0;           //флажок ввода символа "."
    boolfle=0;           //флажок ввода «е»
    do
   {
       ch = (char)getch();
       if ((ch=='-')&&((i==0)||(buffer[i-1]=='e')))  //ввод"-"
       {                                            //в начале строки
          buffer[i++]=ch;                            //и после «е»
           putch(ch);
       }
       if ((ch>='0')&&(ch
       {
          buffer[i++]=ch;
          putch(ch);
       }
       if (((ch=='.')||(ch==','))&&(flp==0))      //вводплавающей
       {                                          //точки
          buffer[i++]='.';
          putch('.');
          flp=1;
       }
       if ((ch=='e' || ch=='E') && i>0 && fle==0)
       {                                          //ввод«е»
          buffer[i++]='e';
          putch('e');
          fle=1;
       }
       if ((ch=='\b')&&(i>0))                     //вводкода
       {                                          //клавиши
          i--;                                    //BACKSPACE
          cprintf("\b \b");
          if (buffer[i]=='.') flp=0;
          if (buffer[i]=='E') fle=0;
       }
       if ((ch=='\r')&&(i==0)) ch='\0';
     if(i==(max+1))
     {
        i--;
        cprintf("\b \b");
     }
   } while (ch!='\r');
   buffer[i]='\0';                 //«закрытие»строки
   for (int j=i;j>0;j--)
      cprintf("\b \b");
   cprintf("%2.2e",strtod(buffer,0));
   returnstrtod(buffer,0);        //преобразование к веществ. значению
}
//------------------------------------------------------------------------------
//Опрограмме
//------------------------------------------------------------------------------
voidabout()
{
 charch;
 window(25,8,59,18);
 textbackground(BLACK);
 clrscr();
 window(24,7,58,17);
 textbackground(LIGHTGRAY);
 textcolor(BLACK);
 clrscr();
 cprintf("\n\rђ§аЎ®вЄ Їа®Ја¬¬л¤«паҐиҐ­Ёп");
 cprintf("\n\r    бЁб⥬«Ё­Ґ©­легаў­Ґ­Ё©");
 cprintf("\n\n\r        ‚ҐабЁп1.0 2007Ј.");
 cprintf("\n\n\r    ‚лЇ®«­Ё«бв㤥­вЈа.‘Љ-06");
 cprintf("\n\r           Њ¬ Ґў‘.‚.");
 cprintf("\n\n\r „«пЇа®¤®«¦Ґ­Ёп­ ¦¬ЁвҐ");
 do
 {
  ch=(char)getch();
 }
 while(ch!=13);              //поканенажатENTER
}
//------------------------------------------------------------------------------
//текстзадания
//------------------------------------------------------------------------------
voidtask()
{
 charch;
 window(21,6,62,20);
 textbackground(BLACK);
 clrscr();
 window(20,5,61,19);
 textbackground(LIGHTGRAY);
 textcolor(BLACK);
 clrscr();
 cprintf("\n\n\n\rђ§аЎ®ввмЇа®Ја¬¬г¤«паҐиҐ­ЁпбЁб⥬");
 cprintf("\n\r«Ё­Ґ©­легаў­Ґ­Ё©.ђҐ«Ё§®ўв쬥⮤л:");
 cprintf("\n\r )Їа®бвлеЁвҐажЁ©;Ў)‡Ґ©¤Ґ«п.ЏаҐ¤гᬮ-");
 cprintf("\n\rваҐвмўў®¤зЁб« гаў­Ґ­Ё©(¤®10), ¬ в-");
 cprintf("\n\rаЁжлЄ®нддЁжЁҐ­в®ўЁўҐЄв®а бў®Ў®¤­ле");
 cprintf("\n\rз«Ґ­®ў.");
 cprintf("\n\n\n\n\n\r     „«пЇа®¤®«¦Ґ­Ёп­ ¦¬ЁвҐ");
 do
 {
  ch=(char)getch();
 }
 while(ch!=13);            //поканенажатENTER
}
//------------------------------------------------------------------------------
//окноhelp
//------------------------------------------------------------------------------
voidhelp()
{
 charans;
 inth_num=1;
 do
 {
  menu();                       //отрисовкаменю
  window(3,4,12,5);
  textbackground(BLACK);
  clrscr();
  window(2,3,11,4);
  textbackground(LIGHTGRAY);
  clrscr();
  textcolor(RED);
  cprintf("%s"," A");
  textcolor(BLACK);
  cprintf("%s",«bout»);
  textcolor(RED);
  cprintf("%s","\n\r T");
  textcolor(BLACK);
  cprintf("%s",«ask»);
  cursor(h_num+5);
  ans=(char)getch();
  if(ans==80) {if(h_num!=2) h_num++;}     //еслинажали«стрелкувниз»
  if(ans==72) {if(h_num!=1) h_num--;}     //еслинажали«стрелкувверх»
 }
 while((ans!=27)&&(ans!='a')&&(ans!='A')&&(ans!='t')&&(ans!='T')&&(ans!=13));
 if((ans=='t')||(ans=='T')||((h_num==2)&&(ans==13)))
 {
 window(2,3,14,6);
 textbackground(BLACK);
 clrscr();
 task();                                  //окновыводатекстазадания
 }
 if((ans=='a')||(ans=='A')||((h_num==1)&&(ans==13)))
 {
 window(2,3,14,6);
 textbackground(BLACK);
 clrscr();
 about();                               //окновыводаинформацииоразработчике
 }
}
//------------------------------------------------------------------------------
//функциявводаданных
//------------------------------------------------------------------------------
voidinput(double **&A,double *&B,int &n)
{
 charch;
 window(8,3,20,6);
 textbackground(BLACK);
 clrscr();
 window(15,6,64,18);
 textbackground(LIGHTGRAY);
 clrscr();
 textcolor(BLACK);
 cprintf("%s","\n\n\r‚ўҐ¤ЁвҐзЁб«®гаў­Ґ­Ё©(1..10)");
 window(48,8,51,8);
 textbackground(BLACK);
 textcolor(LIGHTGRAY);
 clrscr();
 bool fl=false;
 do                                  //защита от ввода числа уравнений более 10
  {
  n=n_input(2);                      //функция ввода двузначного числа
   if((n=1))fl=true;
  else clrscr();
 }
 while(fl!=true);
 A=(double**)malloc(n*n*sizeof(double)); //выделениепамятидлямассива
 B=(double*)malloc(n*sizeof(double));
 window(15,10,64,10);
 textbackground(LIGHTGRAY);
 clrscr();
 textcolor(BLACK);
 cprintf("%s","\r‚ўҐ¤ЁвҐн«Ґ¬Ґ­вл¬ ваЁжлЄ®нддЁжЁҐ­в®ў");
 window(15,11,64,11);
 textbackground(LIGHTGRAY);
 clrscr();
 for(inti=0;i
  {
   A[i]=(double*)malloc(n*sizeof(double));
   for(int j=0;j
     {
      clrscr();
      cprintf("\r A[%d][%d]=",i+1,j+1);
      A[i][j]=float_input();             //ввод действительного числа
      }
   }
 window(15,13,64,13);
 textbackground(LIGHTGRAY);
 clrscr();
 cprintf("%s","\n\n\r‚ўҐ¤ЁвҐ н«Ґ¬Ґ­вл ўҐЄв®а  бў®Ў®¤­ле з«Ґ­®ў");
 window(15,14,64,14);
 textbackground(LIGHTGRAY);
 clrscr();
 for(inti=0;i
  {
   clrscr();
   cprintf("\r B[%d]=",i+1);
   B[i]=float_input();                  //ввод действительного числа
   }
 window(15,17,64,17);
 textbackground(LIGHTGRAY);
 clrscr();
 cprintf("%s","\r        „«пЇа®¤®«¦Ґ­Ёп­ ¦¬ЁвҐ");
 do
 {ch=(char)getch();}
 while(ch!=13);                 //поканенажатENTER
}
//------------------------------------------------------------------------------
//функциярешения
//------------------------------------------------------------------------------
voiddecision(double **&A,double *&B,double *&X,int &n,int &s)
{
 charch,ans;
 intk;
 double*Z;                                //вспомогательныйвектор
 X=(double*)malloc(n*sizeof(double));     //Векторрешений
 Z=(double*)malloc(n*sizeof(double));     //Векторначальныхприближений
 for(inti=0;i
 window(23,7,57,16);
 textbackground(LIGHTGRAY);
 textcolor(BLACK);
 clrscr();
 cprintf("\n\r ‚лЎЁаЁвҐ¬Ґв®¤аҐиҐ­Ёп:");
 cprintf("\n\r 1-ЊҐв®¤Їа®бвлеЁвҐажЁ©");
 cprintf("\n\r 2-ЊҐв®¤‡Ґ©¤Ґ«п");
 do
  {ans=(char)getch();}
 while((ans!='1')&&(ans!='2'));
 if(ans=='1')                                      //Метод простых итераций
  {
  s=0;
  do
   {
    k=0;
    for(int i=0;i
      {
       X[i]=B[i]*(-1);
       for(int j=0;j
         {X[i]=X[i]+(double)A[i][j]*Z[j];}
       if(A[i][i]!=0)
       {
        if(fabs((double)X[i]/A[i][i])>=0.0001) k=1;   //проверканасходимость
        X[i]=Z[i]-(double)X[i]/A[i][i];               //еслисходится->k=0->выходизцикла
       }
      }
    for(int i=0;i
     Z[i]=X[i];
    s++;                                  // ++итерация
    if(s==100)k=0;                       //если итераций > 100->выход из цикла
    }
  while(k!=0);
 }
 if(ans=='2')                                    //МетодЗейделя
 {
  s=0;
  do
   {
    k=0;
    for(int i=0;i
     {
      X[i]=B[i]*(-1);
      for(int j=0;j
        {
         if(A[i][j]!=0)
          X[i]=X[i]+(double)A[i][j]*Z[j];
        }
        if(A[i][i]!=0)
          {
           if(fabs((double)X[i]/A[i][i])>=0.001) k=1;  //проверканасходимость
           X[i]=Z[i]-(double)X[i]/A[i][i];
           Z[i]=X[i];
           }
      }
     s++;
     if(s==100)k=0;        //количество итераций должно быть менее 100
   }                       //иначе цикл прекращается->система не имеет решений
   while(k!=0);
  }
 cprintf("\n\n\r       ђ бзсвл н Є®­зҐ­л");
 cprintf("%s","\n\n\n\r „«пЇа®¤®«¦Ґ­Ёп­ ¦¬ЁвҐ");
 do
 {ch=(char)getch();}
 while(ch!=13);
}
//------------------------------------------------------------------------------
//функция вывода данныхна экран или в файл
//------------------------------------------------------------------------------
voidoutput(double **&A,double *&B,double *&X,int &n,int &s)
{
 char ch_out;
 int xx=5,yy=5;    //переменные скроллинга
 float temp;       //вспомогательная переменная
 window(1,25,80,25);
 textbackground(LIGHTGRAY);
 clrscr();
 cprintf(«Alt+X- exit            Arrows — scrolling»);
 gotoxy(70,1);
 textcolor(BLACK);
 window(3,3,78,23);
 textbackground(LIGHTGRAY);
 textcolor(BLACK);
 clrscr();
 if(s!=100)                              //если система имеет решения
  {
   window(3,4,66,4);
  textbackground(LIGHTGRAY);
   clrscr();
   cprintf("\r‘Ёб⥬  га ў­Ґ­Ё©:");      //система уравнений
   window(3,12,66,12);
  textbackground(LIGHTGRAY);
   clrscr();
   cprintf("\r ‚ҐЄв®ааҐиҐ­Ё©");          //вектор решений
   for(inti=0;i
    {
     if(i==0)
      {
       window(3,13,30,19);
       textbackground(LIGHTGRAY);
       clrscr();
       }
     if(i==5)                       //если число уравнений>5->во второйстолбец
       {
       window(32,13,70,19);
       textbackground(LIGHTGRAY);
       clrscr();
      }
     cprintf("\n\r  X(%d)=%.4f",i+1,X[i]); //выводрешения
    }
  window(3,20,66,20);
  textbackground(LIGHTGRAY);
  clrscr();
  cprintf("\n\n\r —Ёб«®ЁвҐажЁ©:%d",s);   //число итераций
 }                                          //if...
 elsecprintf("\n\n ‘Ёб⥬ ­ҐЁ¬ҐҐваҐиҐ­Ё©");
 window(14,22,66,22);
 textbackground(LIGHTGRAY);
 clrscr();
 cprintf("\n\n\r       „«пЇа®¤®«¦Ґ­Ёп­ ¦¬ЁвҐ");
 if(s!=100)        //если система имеет решения, т.е. число итераций
  {
   window(4,5,77,10);                 //окно вывода системы уравнений(неактивное)
    textbackground(LIGHTGRAY);        //серыйфон
   textcolor(BLACK);
   clrscr();
    if(n
    {
        for(int i=0;i
          {
        cprintf("\n\r ");
        for(int j=0;j
          {
         if(j==n)cprintf("=%.2f",B[i]);    //вывод вектора свободных членов
         else
                  {
                   if(j
                    {
                  if(A[i][j]>0) cprintf(" + %.2fX(%d)",A[i][j],j+1);
                  else
                     {
                     temp=A[i][j]*(-1);  //если выводится отрицательный коэффициент
                      cprintf("- %.2fX(%d)",temp,j+1);
                    }
                     }
                   }
          }
           }          //for(i
    }               //if(n
   else            //если система имеет более 5 уравнений
      {
      window(4,6,72,10);                   //окно вывода системы уравнений(активное)
       textbackground(BLUE);               //синийфон
      textcolor(WHITE);
      do
       {
        clrscr();
        for(int i=xx-5;i
             {
           cprintf("\n\r ");
           for(int j=yy-5;j
             {
               if(j==n)cprintf(" = %.2f",B[i]);  //вывод вектора свободных членов
            else
                  {
                      if(j
                       {
                     if(A[i][j]>0) cprintf(" + %.2fX(%d)",A[i][j],j+1);
                     else
                       {
                        temp=A[i][j]*(-1);
                        cprintf(" — %.2fX(%d)",temp,j+1);
                       }
                       }
                     }
             }
          }
        ch_out=(char)getch();
        if((ch_out==80)&&(xx!=n)) xx++;  //принажатии«стрелкивниз»прокруткавниз
        if((ch_out==72)&&(xx!=5))xx--;  //при нажатии «стрелки вверх» прокрутка вверх
        if((ch_out==77)&&(yy!=n)) yy++;  //при нажатии «стрелкивправо» прокрутка вправо
        if((ch_out==75)&&(yy!=5)) yy--;  //при нажатии «стрелки влево»прокрутка влево
        }
      while(ch_out!=27);                 //принажатииESC
                                         //скроллингстановится неактивным
      window(4,6,77,10);                 //окно вывода системы уравнений(неактивное)
       textbackground(LIGHTGRAY);        //серыйфон
      textcolor(BLACK);
      clrscr();                                         //выводим систему уравнений в новом неактивном окне
       for(inti=xx-5;i
             {
           cprintf("\n\r ");
           for(int j=yy-5;j
             {
               if(j==n)cprintf(" = %.2f",B[i]);  //вывод вектора свободных членов
            else
                  {
                      if(j
                       {
                     if(A[i][j]>0) cprintf(" + %.2fX(%d)",A[i][j],j+1);
                     else
                       {
                        temp=A[i][j]*(-1);
                        cprintf(" — %.2fX(%d)",temp,j+1);
                       }
                       }
                     }
             }
          }
      window(22,22,53,22);
      textbackground(BLUE);
      textcolor(WHITE);
      clrscr();
      cprintf("\r„«п Їа®¤®«¦Ґ­Ёп­ ¦¬ЁвҐ");  //подсвечиваемстрокусинимфоном
     }                                  //else(n
  }
 do                                      //пока не нажата клавиша ENTER
  {ch_out=(char)getch();}
 while(ch_out!=13);
}
//------------------------------------------------------------------------------
//==============================================================================
main()
{
 int n,       //числоуравнений
     m_num=1,
     s;       //числоитераций
 char ch,ch2;
 boolinpflag=false,decflag=false;  //флагисостояния
 double*X,   //вектор решений
      **A,    //матрицакоэффициентов
       *B;    //векторсвободных членов
 _setcursortype(_NOCURSOR);       //убираем курсор
 do
 {
 menu();
 cursor(m_num);
 ch=(char)getch();
 if((ch=='h')||(ch=='H')||((ch==13)&&(m_num==1))) help();
 if((ch=='i')||(ch=='I')||((ch==13)&&(m_num==2)))
   {input(A,B,n);inpflag=true;}
 if(((ch=='o')||(ch=='O')||((ch==13)&&(m_num==4)))&&(inpflag==false)&&(decflag==false))
   {
    window(28,9,55,14);
    textbackground(BLACK);
    clrscr();
    window(27,8,54,13);
    textbackground(LIGHTGRAY);
    textcolor(BLACK);
    clrscr();
    cprintf("\r\n   „ ­­лҐ­ҐўўҐ¤Ґ­лЁ­Ґ");
    cprintf("\r\n      Ї®«г祭®аҐиҐ­ЁҐ!");
    cprintf("\n\n\r   „«п ўл室 ­ ¦¬ЁвҐEsc");
    do
     {ch2=(char)getch();}
    while(ch2!=27);
   }
 if(((ch=='o')||(ch=='O')||((ch==13)&&(m_num==4)))&&(inpflag==true)&&(decflag==false))
   {
    window(28,9,55,14);
    textbackground(BLACK);
     clrscr();
    window(27,8,54,13);
    textbackground(LIGHTGRAY);
     textcolor(BLACK);
     clrscr();
    cprintf("\r\n    ЌҐ Ї®«г祭® аҐиҐ­ЁҐ!");
    cprintf("\n\n\n\r   „«п ўл室  ­ ¦¬ЁвҐ Esc");
     do
     {ch2=(char)getch();}
    while(ch2!=27);
   }
 if(((ch=='o')||(ch=='O')||((ch==13)&&(m_num==4)))&&(inpflag==true)&&(decflag==true))
   {output(A,B,X,n,s);decflag=false;}
 if(((ch=='d')||(ch=='D')||((ch==13)&&(m_num==3)))&&(inpflag==true))
   {decision(A,B,X,n,s);decflag=true;}
 if(((ch=='d')||(ch=='D')||((ch==13)&&(m_num==3)))&&(inpflag==false))
   {
    window(28,9,55,14);
    textbackground(BLACK);
    clrscr();
    window(27,8,54,13);
    textbackground(LIGHTGRAY);
    textcolor(BLACK);
     clrscr();
    cprintf("\r\n     „ ­­лҐ ­Ґ ўўҐ¤Ґ­л!");
     cprintf("\n\n\n\r  „«п ўл室  ­ ¦¬ЁвҐ Esc");
     do
     {ch2=(char)getch();}
     while(ch2!=27);
    }
  if(ch==77){if(m_num!=4) m_num++;}         //клавиши «стрелка вправо» и
  if(ch==75){if(m_num!=1) m_num--;}         //«стрелка влево»
 }
 while(ch!=45);                             //пока не нажата комбинация ALT+X
}
//==============================================================================

Приложение Г
(справочное)
Библиографический список
1.      Боглаев, Ю.П. Вычислительнаяматематика и программирование: Учебное пособие для студентов ВТУЗов[текст]/Ю.П.Боглаев. -М.: Высшая школа, 1990.- 544с.
2.      Подбельский, В.В.Программирование на языке Си: Учебное пособие [Текст]/ С.С. Фомин  — М.:Финансы и статистика, 1998. — 600 с.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.