- •Постановка задачі
- •1. Загальні відомості про слау
- •Методи розв’язування задачі
- •2.Опис роботи програми
- •3. Створення програми.
- •1. Основа програми
- •Функція ділення
- •Функція додавання
- •Роздрук результатів у файл
- •5 . Аналіз введених даних
- •Зміни у коді програми та написання остаточного коду
- •Тестування результатів
- •Висновок
- •Список використаної літератури:
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]);
}
-
Функція ділення
Далі за алгоритмом потрібно ділити 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;
}
-
Функція додавання
Треба помножити 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]);
}
}
-
Роздрук результатів у файл
Створюємо функцію роздруку результатів роботи програми до файлу 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);
}
