Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadachi_avtomatizirovannogo_zacheta.docx
Скачиваний:
1
Добавлен:
20.07.2019
Размер:
52.51 Кб
Скачать

Int main(void) {

FILE* in;

FILE* out;

double q;

double y, dy;

out=fopen(“output.txt”, “w”); if (out==NULL) return 1;

in = fopen(“input.txt”, “r”); if (in==NULL) { fclose(out); return 1; }

q=fscanf(in, “%lf”, &x);

f129(in, &y, &dy);

fprintf(out, “%lf”, y, dy);

fclose(in); fclose(out);

return 0;

}

void f129(FILE* filein, double* x, double* y, double* dy) {

int n; double a, p, dp, M, q;

dp=0.0; n=1.0; M=1.0;

while ((q=fscanf(filein, “%lf”, &a))==1) {

dp=dp+n*a*M;

M=M*x;

n++;

p=p+a*M;

}

assert (q==EOF);

*y=p; *dy=dp;

return;

}

Задача №30.

Последовательность вещественных чисел представляет собой коэффициенты многочлена, записанные в порядке убывания степеней. Требуется вычислить значение многочлена и его производной в заданной точке Х. В файле данных сначала записано число Х, а далее за ним записываются элементы последовательности коэффициентов. Хотя бы одно число из последовательности и число Х обязательно присутствуют в файле.

Ответ: два числа – значение многочлена и производной.

Последовательности w={a1,a2,…,an} сопоставим многочлен Pw(t)=a1 t^(n-1)+a2 t^(n-2)+…+an-1 t + an, причем будем считать, что пустой последовательности сопоставлен многочлен, тождественно равный 0. Поскольку w*a={a1,…,an,a} при n>1, то получаем Pw*a(t)=Pw(t)*t + a, откуда P ҆ w*a(t)=P ҆ w(t)*t+Pw(t)

Для фиксированного вещественного числа х: y=Pw(x); dy=P ҆ w(x); y(new)=Pw*a(x); dy(new)=P ‘ w(x). Тогда: y(new)=Pw(x)*x+a; dy(new)=P ҆ w(x)*x+Pw(x); то есть y(new)=y*x+a; dy(new)=dy*x+y.

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

#include <math.h>

void f130(FILE* f, double* p, double* dp);

Int main(void) {

FILE* in;

FILE* out;

int q; double X, Y, DY;

out=fopen(“output.txt”, “w”); if (out==NULL) return 1;

in = fopen(“input.txt”, “r”); if (in==NULL) { fclose(out); return 1; }

q=fscanf(in, “%lf”, &X); assert (q==1);

f130(in, X, &Y, &DY);

fprintf(out, “%lf %lf”, Y, DY);

fclose(in); fclose(out);

return 0;

}

void f130(FILE* filein, double* x, double* y, double* dy) {

int q; double a;

while ((q=fscanf(filein, “%lf”, &a))==1) {

*dy=dy*x+y;

*y=y*x+a;

}

assert (q==EOF);

return;

}

/*

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

#include <math.h>

void f130(FILE* f, double* p, double* dp);

Int main(void) {

FILE* f=fopen(“input.txt”, “r”); if (f==NULL) return (-1);

double p, dp;

f130(f, &p, &dp);

fclose(f);

FILE* out = fopen(“output.txt”, “w”); if (out==NULL) return (-1);

fprintf(out, “%lf %lf\n”, p, dp);

fclose(out);

return 0;

}

void f130(FILE* f, double* p, double* dp) {

double pv=0., dpv=0., a, t;

if (fscanf(filein, “%lf”, &t)<1)

exit(-1);

while (fscanf(filein, “%lf”, &a)==1) {

dp=dpv*t+pv;

pv=pv*t+a;

*p=pv; *dp=dpv;

}

return;

}

Задачи автоматизированного зачета на массивы. Осень 2011, 1 курс, 1 поток, 105 гр.

/* Задача 201. Среднее арифметическое положительных элементов массива */

#include <stdio.h>

#include <assert.h>

#include <stdlib.h>

void f201(double*, int, double*, int *);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]