Знаходження оберненої матриці методом Гауса.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2006
Тип роботи:
Курсова робота
Предмет:
Програмно-орієнтовані мови програмування
Група:
КН-1

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” кафедра ЕОМ Курсова робота   з курсу “Програмно-орієнтовані мови програмування” Виконав: ст.гр. КH-1 Перевірив: Львів – 2006 Завдання для роботи Знаходження оберненої матриці методом Гауса. Вимоги до програми: введення-виведення даних виконати у зручній формі у вигляді таблиць; забезпечити можливість редагування вхідних даних у межах визначених полів введення даних; програма повинна бути реалізована на мові С/С++; програма повинна працювати у вікні MS-DOS під керуванням операційної системи Windows; передбачити введення/виведення даних з клавіатури та з файлу; керування режимами роботи програми виконати за допомогою клавіатури та миші. Вступ Комп’ютер – це машина, що обробляє інформацію. Вивчення засобів програмування передбачає вивчення того, яким чином ця інформація організована всередині ЕОМ, як вона обробляється і як може бути використана. Тому, для вивчення дисципліни студенту особливо важливо зрозуміти концепцію організації даних і роботи з ними. Програма представляє собою в кінцевому рахунку конкретні формулювання абстрактних алгоритмів, що базуються на конкретних представленнях і структурах даних. Зрозуміло, що рішення про структури даних які необхідно застосувати неможливо прийняти без знання алгоритмів, що застосовуються до цих даних, і навпаки, вибір алгоритмів суттєво залежить від вибраних структур даних. Отже, структури програм і структури даних нерозривно пов’язані. Мова С – це універсальна мова програмування, для якої характерні економічність виразів, сумісний потік управління та структури даних , багатий набір операторів. Мова С не являється ні мовою «дуже високого рівня», ні «великою» мовою, і не предназначається для деякої спеціальної області застосувань, але відсутність обмежень і загальність мови роблять її більш зручною і ефективною для багатьох задач. Методи та засоби розвязування задачі Для розвязання задачі ми напишем програму. Програма повинна мати меню для вибору режиму роботи. Ми повинні реалізувати ввід матриці. На виході ж має бути матриця, обернена до вхідної. Крім цього слід розділити спосіб вводу/виводу даних з клавіатури та з файлу. Щоб створити таку прграму створим головне меню програми, де можна буде вибрати один з наступних варіантів: ввід матриці з клавіатури; ввід матриці з файлу; обрахунок оберненої матриці. Кожен із пунктів головного меню реалізуємо як окрему функцію. Знаходження оберненої матриці відбуватиметься методом Гауса. Блок-схема функції знаходження оберненої матриці  SHAPE \* MERGEFORMAT Створення одиничної матриці Перебір стовбців Зведення першого ненульового елемента рядка до 1. Аналогічні математичні дії виконуються з одиничною матрицею Проходження по рядку Віднімання рядків задля встановлення потрібних елементів в 0. Аналогічні математичні дії виконуються з одиничною матрицею Перебір рядків  Блок-схема функції вводу матриці з клавіатури  SHAPE \* MERGEFORMAT Зчитування розрядності матриці Виділення памяті для розміщення матриці Введення з клавіатури наступного елемента матриці Запит чи всі дані уже введено  Блок-схема функції вводу матриці з файлу SHAPE \* MERGEFORMAT Відкриття файлу. Зчитування розмірності матриці Виділення памяті для розміщення матриці Зчитування з рядка файлу елемента матриці Запит чи всі дані уже введено  Опис алгоритму знаходження оберненої матриці методом Гауса Матрицю що була введена ми зводим до одиничної матриці методом Гауса. При цьому усі дії що були виконані над матрицею ми виконуємо і над одиничною матрицею в тому ж порядку. Коли матриця зведена до одиничної, матриця, що спочатку була одиничною і буде оберненою до початкової матриці, введеної з клавіатури. Метод Гауса зведення до одиничної матриці полягає в тому, що ми перетворюємо елементи в головній діагоналі матриці в одиниці шляхом ділення всього рядка на елемент що знаходиться на діагоналі. Решта елементів зводяться до нулів шляхом множення та додавання рядків. Результат виконання програми  Основне меню програми, що зоображене на малюнку, дозволяє нам ввести вхідні дані з клавіатури, файлу, знайти обернену матрицю методом Гауса чи вийти з програми. Щоб вибрати бажану дію слід ввести номер потрібного пункту меню та натиснути Ввід. При виборі першого пункту «Ввід матриці з клавіатури» нам потрібно вказати розмірність матриці і після цього вводити елементи матриці.  При виборі другого пункту «Ввід матриці з файлу» нам слід вказати відносний шлях до файлу, з якого відбудеться читання вхідних даних. Після цього слід вказати розмірність матриці, яку ми бажаємо зчитати з файлу. Після виконання необхідних дій програма поверне нас в головне меню. Вхідний файл повинен містити елементи матриці, тобто дійсні числа розташовані в стовбчик.  При виборі третього пункту «Обрахунок оберненої матриці» програма знаходить обернену матрицю до вхідної та виводить її на екран. Після виведення інформації ми знов опинимось в головному меню.  При виборі четвертого пункту «Впорядкування даних» список, що був введений за допомогою пункту 1 або 2 буде відсортовано. Щоб продивитись відсортований список слід вибрати пункт 3 «Вивід списку» після виконання сортування. При виборі четвертого пункту «Вихід» виконується вихід з програми в операційну систему. Програма #include <stdio.h> #include <alloc.h> #include <string.h> #include <math.h> int n,i,j; double **m,**z; char t[20]; void kl(){ printf("Vvedit rozmirnist matryci: "); scanf("%d",&n); m=(double**)malloc(n*sizeof(double*)); for(i=0;i<n;i++) m[i]=(double*)malloc(n*sizeof(double)); for(i=0;i<n;i++) for(j=0;j<n;j++){ printf("M[%d,%d]=",i,j); scanf("%s",&t); m[i][j]=atof(t);}; } void fa(){ FILE *f; char pat[150],qq[50]; printf("Vvedit shlyah do fajlu: "); scanf("%s",&pat); printf("Vvedit rozmirnist matryci: "); scanf("%d",&n); m=(double**)malloc(n*sizeof(double*)); for(i=0;i<n;i++) m[i]=(double*)malloc(n*sizeof(double)); f=fopen(pat,"r"); for(i=0;i<n;i++) for(j=0;j<n;j++){ fgets(qq,45,f); m[i][j]=atof(qq); }; } void vyv(){ int k; z=(double**)malloc(n*sizeof(double*)); for(i=0;i<n;i++) z[i]=(double*)malloc(n*sizeof(double)); for(i=0;i<n;i++) for(j=0;j<n;j++){ if(i==j) z[i][j]=1; else z[i][j]=0;}; for(i=0;i<n;i++){ for(j=0;j<n;j++){ z[i][j]/=m[i][i]; m[i][j]/=m[i][i]; }; for(j=0;j<n;j++) if(j!=i) for(k=0;k<n;k++){ z[j][k]-=m[j][i]*z[i][k]; m[j][k]-=m[j][i]*m[i][k]; };}; for(i=0;i<n;i++){ printf("\n"); for(j=0;j<n;j++) printf("%6.2f",z[i][j]);}; printf("\n");} void main() { int c=0; while(c!=4){ printf("\nZNAHODJENNYA OBERNENOYI MATRUCI METODOM GAUSA.\n \ 1. Vvid matryci z klaviatury.\n \ 2. Vvid matryci z fajlu.\n \ 3. Obrahunok obernenoi matryci.\n \ 4. Vyhid.\n"); scanf("%d",&c); if(c==1) kl(); if(c==2) fa(); if(c==3) vyv();}; } Висновки У курсовій роботі систематизовано, закріплено та розширено теоретичні і практичні знання з програмування за допомогою застосування різноманітних структур даних та алгоритмів при розв’язуванні конкретних прикладних задач; набуто навики розробки більш складних програмних продуктів і оформлення програмної документації. Моя програма знаходить обернену матрицю методом Гауса. Список використаної літератури 1. Громов Ю.Ю., Татаренко С.И. Прогаммирование на языке СИ, Учебное пособие, 1995. 2. Маслов А.Н. Введение в язык программирования С, 1991. 3. Страуструп Б. Введение в язык C++, 1985.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!