Изменение файла с матрицей - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не очень понимаю, как решить задачу, помогите, пожалуйста. С файлами совсем плохо Задано вещественно (типа double) число x и полное имя двоичного файла, в котором хранится таблица вещественных чисел из h строк и w столбцов, записанная с помощью стандартной функции fwrite(). Определить функцию с именем ReplaceItem(), выполняющую замену в файле элемента из последней строки и последнего столбца числом x.

Решение задачи: «Изменение файла с матрицей»

textual
Листинг программы
#include <stdio.h>
 
FILE *fl;//объявляем файловую переменную
 
void ReplaceItem(double x)
{
    printf("%lf \n",x);
    fl=fopen("file.dat","r+");//открываем с возможностью дописать в файл
    fseek(fl,-1*sizeof(x),SEEK_END);//позиционируем на последний элемент
    fwrite(&x,sizeof(x),1,fl);
    fclose(fl);
}
 
int main()
{
    int h;//количество строк
    int w;//количество столбцов
    int i,j,k;
    double data;//данные
    fl=fopen("file.dat","wd");//открываем файл для записи в двоичном режиме
    printf("Введите количество строк: ");
    scanf("%d",&h);//вводим число строк
    printf("Введите количество столбцов: ");
    scanf("%d",&w);//вводим число столбцов
    //заполняем таблицу с записью в файл
    for(i=0;i<h;i++)
    {
    printf("Заполняем %d строку\n",i+1);
    for(j=0;j<w;j++)
    {
        printf("Введите элемент %d столбца ",j+1);
        scanf("%lf",&data);
        fwrite(&data,sizeof(data),1,fl);//пишем очередной элемент в файл
    }
    }
    fclose(fl);//закрываем файл
    //проверяем, что лежит в файле
    fl=fopen("file.dat","r");//открыли файл для чтения
    for(i=0;i<h;i++)
    {
    for(j=0;j<w;j++)
    {
        fread(&data,sizeof(data),1,fl);//читаем из файла
        printf("%lf  ",data);//и выводим на экран
    }
    printf("\n");
    }
    fclose(fl);//закрыли файл
    printf("Введите новое значение: ");
    scanf("%lf",&data);//вводим новое значение (на которое нужно поменять)
    ReplaceItem(data);//вызываем функцию
    //проверяем, как получилось
    fl=fopen("file.dat","r");
    for(i=0;i<h;i++)
    {
    for(j=0;j<w;j++)
    {
        fread(&data,sizeof(data),1,fl);
        printf("%lf  ",data);
    }
    printf("\n");
    }
    fclose(fl);
    return 0;
}

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

  1. Объявляем файловую переменную fl.
  2. В функции ReplaceItem(double x) мы выводим значение x на экран с помощью printf, открываем файл file.dat с возможностью дописать в него данные с помощью fopen(file.dat,r+), перемещаемся в конец файла с помощью fseek(fl,-1*sizeof(x),SEEK_END), записываем значение x в файл с помощью fwrite(&x,sizeof(x),1,fl), закрываем файл с помощью fclose(fl).
  3. В функции main() мы открываем файл file.dat для записи в двоичном режиме с помощью fopen(file.dat,wd), запрашиваем у пользователя количество строк и столбцов с помощью scanf(%d,&h) и scanf(%d,&w), заполняем таблицу данными, записывая их в файл с помощью fwrite(&data,sizeof(data),1,fl), закрываем файл с помощью fclose(fl).
  4. Затем мы открываем файл file.dat для чтения с помощью fopen(file.dat,r) и проверяем, что лежит в файле, читая и выводя данные на экран с помощью fread(&data,sizeof(data),1,fl) и printf(%lf  ,data).
  5. После этого мы снова открываем файл file.dat для записи с помощью fopen(file.dat,r+), запрашиваем у пользователя новое значение с помощью scanf(%lf,&data), вызываем функцию ReplaceItem(data), которая заменяет последнее значение в файле на новое, и снова проверяем, что лежит в файле, читая и выводя данные на экран с помощью fread(&data,sizeof(data),1,fl) и printf(%lf  ,data).
  6. В конце программы мы закрываем файл с помощью fclose(fl) и возвращаем 0, что означает успешное выполнение программы.

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


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

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

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