Изменение файла с матрицей - 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; }
Объяснение кода листинга программы
- Объявляем файловую переменную
fl
. - В функции
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)
. - В функции
main()
мы открываем файлfile.dat
для записи в двоичном режиме с помощьюfopen(
file.dat,
wd)
, запрашиваем у пользователя количество строк и столбцов с помощьюscanf(
%d,&h)
иscanf(
%d,&w)
, заполняем таблицу данными, записывая их в файл с помощьюfwrite(&data,sizeof(data),1,fl)
, закрываем файл с помощьюfclose(fl)
. - Затем мы открываем файл
file.dat
для чтения с помощьюfopen(
file.dat,
r)
и проверяем, что лежит в файле, читая и выводя данные на экран с помощьюfread(&data,sizeof(data),1,fl)
иprintf(
%lf,data)
. - После этого мы снова открываем файл
file.dat
для записи с помощьюfopen(
file.dat,
r+)
, запрашиваем у пользователя новое значение с помощьюscanf(
%lf,&data)
, вызываем функциюReplaceItem(data)
, которая заменяет последнее значение в файле на новое, и снова проверяем, что лежит в файле, читая и выводя данные на экран с помощьюfread(&data,sizeof(data),1,fl)
иprintf(
%lf,data)
. - В конце программы мы закрываем файл с помощью
fclose(fl)
и возвращаем 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д