Обработка текстового файла и запись в бинарный файл - C (СИ)
Формулировка задачи:
Задача:
Создать бинарный файл f и записать в него действительные числа. Организовать просмотр бинарного файла и его обработку: найти сумму чисел, расположенных после первого минимального. Результат сохранить в текстовом файле.
На данный момент у меня выполнено часть задачи, после чего вообще запуталась:
Извиняюсь, если что-то не так указала, на данный момент меня трудно назвать программистом.
// прототип функции обработки текстового файла void work(void); // прототип функции просмотра бинарного файла void view(void); void main(void) { work(); //вызов функции обработки текстового файла view(); //вызов функции просмотра бинарного файла } // определение функции обработки текстового файла void work(void) { int a; FILE * fb; ifstream f; // объявление потока для чтения f.open("D:\\abcd.txt"); // режим ios::in fb = fopen("D:\\abcd.dat","wb"); if (f) { while(!f.eof()) { f >> a; // чтение из файла if (a > 0) fwrite(&a,sizeof(a),1,fb); } f.close(); fclose(fb); } else cout << "File not found \n"; cout << "File write! \n";getch(); } // определение функции просмотра бинарного файла void view(void) { int a; FILE * fb; if ((fb = fopen("D:\\abcd.dat","rb"))!= NULL) { while (fread(&a,sizeof(int),1,fb)) cout << a << " " ; cout << "\n"; getch(); fclose(fb); } else { printf("Error open file!\n"); getch(); } }
Решение задачи: «Обработка текстового файла и запись в бинарный файл»
textual
Листинг программы
double min; int i, imin; imin = i = 0; while (fread(&a,sizeof(a),1,fb)) { if (i==0) { min = a; imin = i; } else if (a<min) { min = a; imin=i; } i++; } // imin - стал = номеру миним.элемента fseek(fb, (long)(imin+1)*sizeof(a), 0); // установились на элемент за минимальным double s = 0; while (fread(&a,sizeof(int),1,fb)) s += a; cout << s;
Объяснение кода листинга программы
- Объявлены переменные: double min; int i, imin;
- Инициализированы переменные: min = 0; i = 0; imin = 0;
- Запущен цикл while, который выполняется до тех пор, пока fread(&a,sizeof(a),1,fb) возвращает значение true (что означает успешное чтение одного элемента из файла).
- Внутри цикла:
- Если текущее значение i равно 0, то min = a (т.е. первый прочитанный элемент становится минимальным).
- Если текущее значение a меньше min, то обновляются значения min и imin (т.е. текущий элемент становится новым минимальным).
- Значение i увеличивается на 1.
- После окончания цикла, переменная imin содержит номер минимального элемента в файле.
- Используя fseek(fb, (long)(imin+1)*sizeof(a), 0), мы перемещаемся в файле на элемент, следующий за минимальным.
- Объявлена переменная double s = 0; (сумма).
- Запущен цикл while, который выполняется до тех пор, пока fread(&a,sizeof(int),1,fb) возвращает значение true.
- Внутри цикла:
- Значение a добавляется к переменной s.
- После окончания цикла, выводится значение s.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д