Пользователь
Регистрация: 01.04.2017
Сообщений: 27
|
Считать из файла и произвести вычисления
Помогите пожалуйста, как можно сделать попроще процедуру OPEN, именно момент с массивом, остальное все нужно оставить
Код:
#include "stdafx.h"
#include <locale.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
//#include <stdlib.h>
#define size 15
#define element 4
double Input();
//int Open(double *mas);
int Open (double *x, double *b, double *h, double *eps);
int Entry();
int main()
{
double x = 0, b = 0, h = 0, eps = 0, buf = 0, d;
int prec,p;
unsigned int k, count;
double s, si, temp;
double mas[element];
char *line = "======================================";
char X = 'X', *fx = "F(x)", *nom = "№ чл.р.";
FILE *fp; /*исходный файл*/
FILE *fo;
setlocale(LC_ALL, "Russian");
printf("\tДанная программа предназначена для вычисления таблицы значений функции заданной в виде разложения в ряд.\n");
p= Entry();
if (p == 2) {
/*/////////////////////////////////////////////////////////////////////////////////////*/
Open(&x, &b, &h, &eps);
}
else {
/*////////////////////////////////////////////////////////////////////////////////////*/
printf("Введите нижнюю границу интервала x = ");
x = Input();
while (b < x)
{
printf("Введите верхнюю границу интервала b > %.2lf, b = ", x);
b = Input();
}
buf = b - x;
do
{
printf("Введите величину шага изменения аргумента h < %.2lf = ", buf);
h = Input();
} while (h > buf);
do
{
printf("Введите точность вычисления функции eps(0..1), eps = ");
eps = Input();
} while ((eps < 0) && (eps > 1));
}
/*------------------------------------*/
temp = eps;
prec = 0;
while (temp < 0.9999999)
{
prec++;
temp *= 10;
}
printf("\n\n\n");
printf("%s\n", line);
printf("| #| %*.*c| %*.*s| %*.*s|\n", 5 + prec, 3 + prec, X, 7 + prec, 3 + prec, fx, 6 + prec, 5 + prec, nom);
printf("%s\n", line);
count = 0;
do
{
count++;
s = 0;
si = x;
k = 0;
while (fabs(si) > eps)
{
s += si;
k++;
si = (si*pow(x, 2)) / (2 * k * (2 * k + 1));
}
printf("|%3d| %*.*lf| %*.*lf| %9d|\n", count, 5 + prec, prec, x, 7 + prec, prec, s, k);
x = x + h;
} while (!(x > b));
printf("%s", line);
printf("\n");
return 0;
}
double Input()
{
double loc;
int ver;
do
{
fflush(stdin);
ver = scanf("%lf", &loc);
if (ver != 1)
{
printf("Введено не корректное значение, повторите ввод\n");
}
} while ((ver != 1)& ((getchar()) != '\n') );
return loc;
}
int Open(double *x, double *b, double *h, double *eps)
{
char filename[50]; /*имя файла*/
int i;
double mas[element];
//double x = 0, b = 0, h = 0, eps = 0;
FILE *fp;
printf("Введите имя исходного файла/ путь к файлу\n");
/*scanf("%s", filename);
fp = fopen(filename, "r");*/
fp = fopen("C:\\Users\\Ekaterina\\Desktop\\KKR_2.txt", "r");
if (fp == NULL)
{
perror("Error opening file");
return 0;
}
else
{
printf("Файл открыт для чтения\n");
printf("Информация, считанная из файла\n\n");
for (i = 0; i < element; i++)
{
fscanf(fp, "%lf\n", &mas[i]);
//printf("%.3lf\n", mas[i]);
}
}
i = 0;
*x = mas[i]; printf("x = %.3lf\n", x); i++;
*b = mas[i]; printf("b = %.3lf\n", b); i++;
*h = mas[i]; printf("h = %.3lf\n", h); i++;
*eps = mas[i]; printf("eps = %.3lf\n", eps);
}
int Entry()
{
int p;
do
{
printf("Введите 1 для ввода значений с клавиатуры, введите 2 для считывания из файла: ");
scanf("%d", &p);
} while ((p <1 ) || (p > 2));
return p;
}
Последний раз редактировалось KariLex; 12.06.2017 в 16:50.
|