Создать файл чисел по правилу - 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, что означает успешное завершение программы.