Fclose ( fp ); // закрыть файл по ошибке

Return 1; // выход по ошибке, код ошибки 1

}

Fclose (fp); // закрыть файл норматьно

// работа с матрицей

}

Вывести матрицу в текстовый файл можно так же, как и на экран, только надо сначала открыть текстовый файл на запись, затем в двойном цикле использовать функцию fprintf вместо printf, и в конце закрыть файл (см. вывод одномерных массивов в файл).

Двоичные файлы

С двоичным файлом удобно работать тогда, когда данные записала (или будет читать)

другая программа и их не надо просматривать вручную. Основное преимущество этого способа— скорость чтения и записи, поскольку весь массив читается (или записывается) сразу единым блоком. При этом функциям fread и fwrite надо указать размер одного элемента массива и количество таких элементов, то есть M*N.

В программе, которая приведена ниже, матрица читается из двоичного файла, затем с ней

выполняются некоторые действия (они обозначены многоточием) и эта же матрица записывается в выходной файл.

#include <stdio.h>

const int M = 5; // числострок

const int N = 4; // числостолбцов

Main()

{

int total, A[M][N];

FILE *fp;

fp = fopen("input.dat", "rb");

total = fread(A, sizeof(int), M*N, fp); // чтениематрицы

fclose (fp);

if (total!= M*N) // обработкаошибки

{

printf("Не хватает данных");

Return 1; // выход по ошибке, код ошибки 1

}

// работа с матрицей

fp = fopen("output.dat", "wb"); // запись матрицы в файл

if (M*N!= fwrite(A, sizeof(int), M*N, fp))

printf("Ошибка записи в файл");

fclose (fp);

}

Для обработки ошибок используется тот факт, что функции fread и fwrite возвращают ко-

личество реально прочитанных (записанных) элементов, и если оно не равно заданному (M*N),то произошла ошибка.

Алгоритмы для работы с матрицами

Перебор элементов матрицы

В отличие от одномерных массивов, для перебора всех элементов матрицы надо исполь-

зовать двойной цикл. Ниже показано, как найти минимальный элемент в массиве и его индексы.Сначала считаем, что минимальным является элемент A[0][0] (хотя можно начать и с любого другого), а затем проходим все элементы, проверяя, нет ли где еще меньшего. Так же, как и для одномерного массива, запоминаются только индексы, а значение минимального элемента «вытаскивается» прямо из массива.

float A[M][N], i, j, row, col;

...

row = col = 0; // сначала считаем, что A[0][0] - минимальный

for (i = 0; i < M; i ++) // просмотр всех строк

for (j = 0; j < N; j ++) // просмотр всех столбцов

if (A[i][j] < A[row][col]) {

row = i; // запомнили новые индексы

col = j;

}

printf ("Минимальный элемент A[%d][%d]=%d",

row, col, A[row][col]);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: