Создать файл чисел по правилу - C (СИ)
Формулировка задачи:
Дан текстовый файл, элементами которого есть числа типа double а1, а2... аn. Создать файл чисел типа double b1, b2,...,bn, где
bi=аi/(1+(a1+a2+...+an)2) , i=1,2,...,n
Есть код, но заносить данные в файлы не хочет. Подскажите, пожалуйста, что не так
#include <stdio.h> #include <iostream> #include <math.h> void CreateFile (const char *filename) { FILE *fp; double x; fp=fopen(filename,"w+b"); if(!fp) {puts("File not open"); exit (1); } printf("Enter numbers: "); scanf("%f",&x); while(x!=999) {fwrite(&x,sizeof(double),1,fp); scanf("%f",&x); } fclose(fp); } void PrintFile(const char *filename) { FILE *fp; double x; fp=fopen(filename, "r+b"); fread(&x,sizeof(double),1,fp); while(!feof(fp)) {printf("%f", x); printf(" "); fread(&x,sizeof(double),1,fp); } fclose(fp); } int main() { FILE *fp,*jp; char fname[128]; char jname[128]; double x, a, b=0,c=0; printf("Enter the name of file1: "); gets(fname); printf("Enter the name of file2"); gets(jname); CreateFile(fname); PrintFile(fname); fp=fopen(fname,"r+b"); jp=fopen(jname,"w+b"); a=fread(&x,sizeof(double),1,fp); while(!feof(fp)) {c+=a; b=a/(1+powf(c,2)); fwrite(&b,sizeof(double),1,jp); a=fread(&x,sizeof(double),1,fp); } fclose(fp); printf("\nFile 2: \n"); PrintFile(jname); fclose(jp); system("pause"); return 0; }
Решение задачи: «Создать файл чисел по правилу»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> #define ERR_USE 1 #define ERR_OPEN_FILE 2 int main(int argc, char *argv[]) { FILE *in, *out; double temp, denom; if(argc != 3){ puts("Use: <name_prog> <in_file> <out_file>"); exit(ERR_USE); } in = fopen(argv[1], "rt"); if(!in) exit(ERR_OPEN_FILE); out = fopen(argv[2], "wt"); if(!out) exit (ERR_OPEN_FILE); denom = 0.0; while(fscanf(in, "%lf", &temp) == 1) denom += temp; denom = denom * denom + 1; rewind(in); while(fscanf(in, "%lf", &temp) == 1) fprintf(out, "%.3lg\n", temp / denom); fclose(in); fclose(out); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек
- Объявление переменных:
- temp - для хранения временного значения;
- denom - для хранения числителя.
- Проверка корректности использования программы
- Если аргументов больше или равно 3, то выводится сообщение об ошибке и программа завершается с кодом ошибки ERR_USE.
- Открытие файлов:
- Входной файл в режиме чтения (rt);
- Выходной файл в режиме записи (wt).
- Проверка на открытие файлов
- Если файл не открылся, то программа завершается с кодом ошибки ERR_OPEN_FILE.
- Считывание чисел из входного файла в переменную temp и суммирование их
- Инициализация числителя denom результатом суммирования
- Переход к началу файла
- Запись в выходной файл значения temp, разделенного на denom, с точностью до трех знаков после запятой.
- Закрытие файлов
- Возврат 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д