Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Створення програми.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
143 Кб
Скачать
☆

2.Опис роботи програми

Матриця заноситья до файлу text.txt, який повинен знаходитись у тій же директорії, що і програма. Після запуску програма пропонує користувачу ввести кількість невідомих і кількість строчок у матриці. Потім програма починає виконувати усі необхідні дії над матрицею і заносить ці дії та результати цих дії до файлу res.txt, який теж буде знаходитисьв одній директорії з програмою. Все, програма завершує свою роботу.

3. Створення програми.

1. Основа програми

Спочатку створюємо основну функцію main(). Задаємо масив mas[15][15] типу float, а також лічильники i, j та кількість строчок і стовпців n, N типу int. Відкриваємо новий глобальний потік cool та fp. За допомогою потоку fp функція зчитує з файлу text.txt, який знаходиться у тій же директорії що і компілятор, матрицю коефіцієнтів. Потік cool заносить результати роботи програми до файлу res.txt, який знаходиться там же. Питаємо у користувача скільки строчок та невідомих містить матриця (це робиться для того, щоб занести матрицю до масиву mas[15][15] правильно). Інкременуємо кількість невідомих N, тому що ще залишився стовпець вільних коефіцієнтів, який теж потрібно занести до масиву. За допомоги функції fscanf та циклу for зчитуємо елементи матриці і заносимо їх до раніше створеного глобального масиву mas[15][15].

#include <stdio.h>

float mas[15][15];

FILE *cool;

int i,j,n,N;

void main(){

FILE *fp;

fp=fopen("text.txt","r");

cool=fopen("res.txt","w");

puts("kol-vo strok \n");

scanf("%i",&n);

puts("kol-vo neizv. \n");

scanf("%i",&N);

N++;

for(i=0;i<n;i++) for(j=0;j<N;j++) fscanf(fp,"%f",&mas[i][j]);

}

  1. Функція ділення

Далі за алгоритмом потрібно ділити i-ту строчку масиву на i-тий коефіцієнт. Створюємо функцію delenie() типу int. Вводимо за формальний параметр лічильник i (для того щоб у процесі виконання функції він не змінювався у головній функції main().) Створюємо нову глобальну змінну y типу float (тому що в процесі ділення змінюється і-тий коефіцієнт і-тої строчки і його потрібно зафіксувати новою змінною). За допомогою циклу ділимо кожен елемент строчки на і-тий елемент (значення якого ще до процесу ділення ми надали змінній y)

int delenie(int i){

y=mas[i][i];

for(k=0;k<N;k++) mas[i][k]=mas[i][k]/y;

return 0;

}

  1. Функція додавання

Треба помножити i-ту строчку на таке число q, щоб при додаванні цієї строчки до інших і-тий елемент кожної строчки дорівнював 0. Створюємо функцію slojenie() типу void. Вводимо формальну змінну-лічильник і і використовуємо додаткову змінну у (таж сама причина). Вводимо нову глобальну змінну-лічильник k. (у всіх лічильниках тип int). Використовуємо умовний оператор щоб не додавати i строчку саму до себе.

void slojenie(int i){

for(k=0;k<n;k++) {

y=mas[k][i];

for(j=0;j<N;j++) if(k!=i) mas[k][j]=mas[k][j]-mas[i][j]*(y/mas[i][i]);

}

}

  1. Роздрук результатів у файл

Створюємо функцію роздруку результатів роботи програми до файлу vivod() типу void.

За допомогою циклу друкуємо поелементно кожен елемент масиву mas[n][N]. Перед останнім елементом у кожній строчці друкуємо табуляцію та символ || (відділяємо стовбець вільних коефіцієнтів). Після кожної строчки ставимо знак переносу каретки на новий абзац. Також після роздрукування всієї матриці ставиться ще один знак переносу каретки.

void vivod(){

for(k=0;k<n;k++) {

for(j=0;j<N;j++) {

if(j==(N-1)) fprintf(cool,"\t || ");

fprintf(cool,"%.3f ",mas[k][j]);

}

fprintf(cool,"\n");

}

fprintf(cool,"\n");

}

Створюємо функцію, яка друкує назви дій програми viv() типу void. Функція досить проста. Також використовуємо умовний оператор щоб не друкувались дії над однією строчкою. Інкременуємо n та N тому що ми рахуємо, починаючи з 1, а програма з 0.

void viv(int i){

for(j=0;j<n;j++) if(i!=j) fprintf(cool,"umnojaem %i stro4ku na %.3f i skladivaem s %i stro4koi \n",i+1,-(mas[j][i]),j+1);

}