- •Int main (void) {
- •Int main(void) {
- •Void f102(file* filein, double* y) {
- •Int main(void){
- •Int main (void) {
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void) {
- •Int main(void){
- •Int main(void) {
- •Int main(void) {
- •Int main(void) {
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
- •Int main(void){
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 *);