Поиск максимального элемента матрицы - 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;
}

Объяснение кода листинга программы

В этом коде осуществляется поиск максимального элемента в заданной матрице. Вот список действий, которые выполняются в коде:

  1. Объявление переменных:
    • i, k, n - счетчики для чтения матрицы;
    • a - временная переменная для хранения значения элемента матрицы;
    • max - переменная для хранения максимального значения;
    • line, column - переменные для хранения координат максимального элемента.
  2. Открытие файла input.txt для чтения.
  3. Чтение размера матрицы из файла.
  4. Чтение первого элемента матрицы и обновление значения max, если новый элемент больше текущего максимального.
  5. Начальные значения i и k равны нулю.
  6. Цикл чтения элементов матрицы до тех пор, пока не будет достигнут конец файла.
  7. Внутри цикла обновление значения max, если новый элемент больше текущего максимального, и обновление значений i и k для отслеживания позиции максимального элемента.
  8. После окончания цикла вычисление координат максимального элемента, используя значения i и k.
  9. Вывод сообщения, содержащего размер матрицы, имя файла, координаты и значение максимального элемента.
  10. Закрытие файла после чтения.
  11. Возврат 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы