Поиск максимального элемента матрицы - C (СИ)
Формулировка задачи:
Доброго времени суток. Есть задача со следующими условиями:
Пусть в файле, компонентами которого являются целые числа, первым элементом является размерность квадратной матрицы, остальные элементы образуют строки этой матрицы. Написать программу поиска макс. элемента матрицы, определить номер строки и столбца. Использовать только файловые операции.
Вобщем, начал я было писать, и застрял. В тексте ниже есть несколько упрощений (наподобие того того, что первый элемент от 2 до 5, и это условие пока не проверяется - суть не в этом). Главная проблема - как используя только файловые операции перебирать значения? Т.е. когда используешь матрицу - все понятно, пишешь цикл for и перебираешь по индексу, а как быть здесь?
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void main ()
{
int mas[26];
puts ("Vvedite elemetbI massiva (n1 от 2 до 5)");
FILE *x = fopen ("kontwork.txt", "w+b"); //создание файла
if (x == NULL)
{
puts ("Error!");
exit (1);
}
for (int i = 0; i < 26; i++) //запись в файл значений
{
scanf("%d", &mas[i]);
fwrite (&mas[i], sizeof (int), 1, x);
printf("Input:%d\n", mas[i]);
}
rewind (x); //возврат каретки к началу файла
int size, *arr;
fread (&size, sizeof(int), 1, x);
printf("Razmer = %d", size); //проверка размера
FILE* tmpfile (void); //создание временного файла
fread (tmpfile, sizeof(int)*size, 1, x); //считали первую строку в ТМРРешение задачи: «Поиск максимального элемента матрицы»
textual
Листинг программы
#include <stdio.h>
int main(){
int i,k,n;
int a;
int max;
int line,column;
FILE *in=fopen("input.txt", "r");
if (in==NULL){
perror ("ne ydalos otkrit file");
}
fscanf (in,"%d",&n);
fscanf(in,"%d",&max);
i=0;
k=0;
while (fscanf(in,"%d",&a)==1){
++i;
if (a>max){
max=a;
k=i;
}
}
line=1+k/n;
column=1+k%n;
printf ("matrica razmernosti %d, imeet max element [%d][%d] ravnii %d",n,line,column,max);
fclose (in);
return 0;
}
Объяснение кода листинга программы
В этом коде осуществляется поиск максимального элемента в заданной матрице. Вот список действий, которые выполняются в коде:
- Объявление переменных:
i,k,n- счетчики для чтения матрицы;a- временная переменная для хранения значения элемента матрицы;max- переменная для хранения максимального значения;line,column- переменные для хранения координат максимального элемента.
- Открытие файла
input.txtдля чтения. - Чтение размера матрицы из файла.
- Чтение первого элемента матрицы и обновление значения
max, если новый элемент больше текущего максимального. - Начальные значения
iиkравны нулю. - Цикл чтения элементов матрицы до тех пор, пока не будет достигнут конец файла.
- Внутри цикла обновление значения
max, если новый элемент больше текущего максимального, и обновление значенийiиkдля отслеживания позиции максимального элемента. - После окончания цикла вычисление координат максимального элемента, используя значения
iиk. - Вывод сообщения, содержащего размер матрицы, имя файла, координаты и значение максимального элемента.
- Закрытие файла после чтения.
- Возврат 0, что означает успешное выполнение программы.