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

Задача №1.

Вычислить среднее арифметическое непустой последовательности вещественных чисел. Считать, что в последовательности есть хотя бы одно число.

Ответ: одно число – искомое среднее арифметическое n.

 

 

#include <stdio.h>

#include <assert.h>

void f101(FILE*, double*);

 

int main (void) {

FILE* in;

FILE* out;

double result;

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

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

f101 (in, &result);

fprintf(out, "%lf", result);

fclose(in); fclose(out);

return 0;

}

void f101(FILE* filein, double* y){

double a, s=0.0; int q, n=0;

while( (q=fscanf(filein, "%lf", &a))==1){s=s+a; n=n+1;}

assert(q==EOF);

assert(n>0);

*y=s/n;

return;

}

 

 

Задача №2.

Вычислить среднее геометрическое непустой посл-ти вещественных чисел. В последовательности есть хотя бы одно число. Числа неотрицательны.

Ответ: одно число – искомое среднее геометрическое n.

 

#include <stdio.h>

#include <assert.h>

#include <math.h>

void f102(FILE*, double*, log*);

 

int main (void) {

FILE* in;

FILE* out;

double result;

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

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

f102 (in, &result);

fprintf(out, "%lf", result);

fclose(in); fclose(out);

return 0;

}

void f102(FILE* filein, double* y){

double a, p=1.0; int q, n=0;

while( (q=fscanf(filein, "%lf", &a))==1){p=p*a; n=n+1;}

assert(q==EOF);

assert(n>0);

*y=exp(log (p)/n);

return;

}

 

Задача №3.

Вычислить среднее гармоническое непустой последовательности положительных вещественных чисел. В последовательности есть хотя бы одно число.

Ответ: одно число – искомое среднее гармоническое n.

 

#include <stdio.h>

#include <assert.h>

void f103(FILE*, double*);

 

int main(void) {

FILE* in;

FILE* out;

double result;

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

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

f103(in, &result);

fprintf(out, “%lf”, result);

fclose(in); fclose(out);

return 0;

}

 

void f103(FILE* filein, double* y) {

double a, s=0.0; int q, n=0;

while ((q=fscanf(filein, “%lf”, &a))==1) {s=s+(1/a); n++;}

assert (q==EOF);

assert (n>0);

*y=n/s;

return;

}

 

Задача №4.

Вычислить количество чисел, больших предыдущего, в последовательности вещественных чисел.

Ответ: одно число – искомое количество. Для пустой или одноэлементной последовательности – ответ 0.

 

#include <stdio.h>

#include <assert.h>

void f104(FILE*, double*);

 

int main(void) {

FILE* in;

FILE* out;

double result;

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

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

f10(in, &result);

fprintf(out, “%lf”, result);

fclose(in); fclose(out);

return 0;

}

 

void f102(FILE* filein, double* y) {

double a, s=0.0; int q, n=0;

while ((q=fscanf(filein, “%lf”, &a))==1) {s=s+(1/a); n++;}

assert (q==EOF);

assert (n>0);

*y=n/s;

return;

}

Задача №5.

Определить, есть ли в последовательности целых чисел данное число Х. В файле с данными сначала записано число Х, а далее за ним записываются элементы последовательности.

Ответ: слово true, если такой элемент есть, и слово false, если такого элемента нет. Для пустой последовательности ответ false.

 

Задача №6.

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

Ответ: одно число – искомый номер, если такой элемент есть, и значение -1, если такого элемента нет. Для пустой последовательности ответ -1.

 

Задача №7.

Определить, все ли элементы последовательности целых чисел равны между собой.

Ответ: слово yes, если все элементы одинаковы, и слово no в противном случае. Для пустой последовательности ответ yes.

 

Задача №8.

Определить монотонность последовательности вещественных чисел.

Ответ: 1, если строго возрастающая; -1, если строго убывающая, 0 в противном случае. Для пустой и одноэлементной ответ 0.

 

Задача №9.

Определить удовлетворяет ли последовательность вещественных чисел данному трехчленному рекуррентному соотношению с точностью е=0.0001. Пусть с1, с2, с3, d – заданные числа и обозначим х1, х2, х3 – 3 любых соседних последовательно идущих элемента последовательности. Тогда должно выполняться неравенство |x1*c1+x2*c2+x3*c3-d| < 0.0001.

Ответ: слово true, если указанное неравенство всегда выполнено, слово false, если неравенство нарушается хотя бы для одной тройки последовательных элементов или если последовательность содержит менее трех членов. В файле данных сначала записаны числа с1, с2, с3, а затем элементы последовательности.

 

Задача №10.

Определить количество различных элементов неубывающей последовательности чисел (при решении считается, что неубывание последовательности гарантировано, и его проверять не надо).

Ответ: одно число – искомое количество. Для пустой последовательности правильный ответ 0.

 

Задача №11.

Определить общее количество элементов во всех постоянных участках последовательности целых чисел.

Ответ: одно число-искомое количество. Для пустой последовательности ответ 0.

 

#include <stdio.h>

#include <assert.h>

void f111(FILE*, int*);

int main(void){

FILE*in;

FILE*out;

int result;

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

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

f111(in, &result);

fprintf(out, "%d", result);

fclose(in); fclose(out);

return 0;

}

 

void f111(FILE* filein, int*otvet){

int q, a1, a2, d, M;

q=fscanf(filein, "%d", &a1);

if (q==EOF) {*otvet=0; return;}

assert (q==1);

d=1; M=0;

while ((q=fscanf (filein, "%d", &a2))==1){

if (a1==a2) d++;

else {

if (d>=2) {M=M+d; d=1;}

a1=a2;

}

}

assert (q==EOF);

if (d>=2) M=M+d;

*otvet=M;

return;

}

 

Задача №12.

Определить порядковый номер первого элемента, который является максимальным во всей последовательности вещественных чисел (нумерация начинается с 1).

Ответ: одно число – искомый номер. Для пустой последовательности правильный ответ -1.

 

Задача №13.

Определить порядковый номер последнего элемента, который является минимальным во всей последовательности вещественных чисел (нумерация элементов начинается с 1).

Ответ: одно число – искомый номер. Для пустой последовательности правильный ответ -1.

 

Задача №14.

Определить количество элементов последовательности целых чисел, равных минимальному значению по всем элементам последовательности.

Ответ: одно число – искомое количество. Для пустой последовательности правильный ответ 0.

 

#include <stdio.h>

#include <assert.h>

void f114(FILE*, int*);

 

int main (void) {

FILE* in;

FILE* out;

int result;

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

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

f114 (in, &result);

fprintf(out, "%d", result);

fclose(in); fclose(out);

return 0;

}

void f114(FILE* filein, int* otvet){

int q, n=0, min, a;

q=fscanf(filein, "%d", &a);

if (q==EOF) {*otvet=0; return;}

assert (q==1);

min=a; n=1;

while( (q=fscanf(filein, "%d", &a))==1){

 

if (a<min) {min=a; n=1;}

else if (a==min) n++;

 

}

assert(q==EOF);

 

*otvet=n;

return;

}

 

Задача №15.

Вычислить среднеквадратическое отклонение от среднего арифметического для вещественной последовательности, т.е. сумму D=1/N sum_{i=1}^{N} (x_i – M)^2, где М – среднее арифметическое последовательности, x_i – элементы последовательности.

Ответ: одно вещественное число – искомое отклонение. При решении задачи можно считать, что исходная последовательность непуста.

 

Задача №16.

Вычислить максимальное отклонение элементов последовательности вещественных чисел от среднего арифметического этой последовательности.

Ответ: одно вещественное число – искомое отклонение. При решении задачи можно считать, что исходная последовательность непуста.

 

Задача №17.

Определить количество возрастающих участков в последовательности вещественных чисел.

Возрастающий участок – это группа из более чем одного элемента последовательности, где каждый следующий элемент строго больше предыдущего.

Ответ: одно целое число – искомое количество. Для последовательности, содержащей менее двух элементов, правильный ответ 0.

 

Задача №18.

Определить сумму всех четных элементов, расположенных в возрастающих участках последовательности целых чисел. (см 17)

Ответ: одно целое число – искомая сумма. Для последовательности, содержащей менее двух элементов или не умеющей возрастающих участков, правильный ответ 0.

 

#include <stdio.h>
#include <assert.h>
void f118(FILE*, int*);

int main(void){
FILE*in;
FILE*out;
int result;
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, “%d”, &last);
f118(in, &result);
fprintf(out, “%d”, result);
fclose(in); fclose(out);
return 0;
}

 

void f118(FILE* filein, int* otvet){
int last, s=0.0, n=1.0, q, a;
q=fscanf(filein, “%d”, &last);
if(q==EOF) {*otvet=0; return;}
while ((q=fscanf(filein, “%d”, &a))==1){
if (last<a) {n++;}
if((n>1)&&(last%2==0)) {s+=last; last=a;}
else if(last>=a) {n=1; last=a;}
last=a;
}
if ((n>1)&&(last%2==0)) s+=last;
}
*otvet=s;
assert(q==EOF);
return;
}

 

/*

void f18(FILE* filein, int* otvet){
int h=0, t=0, s=0, a, aold=1000000, q;
while ((q=fscanf(filein, “%d”, &a)==1)){
if (a>aold) {h++; t++;}
if ((h>0)&&(aold%2==0)) {s+=aold;}
if (a<=aold) {h=0;}
aold=a;
}
if ((h>0)&&(aold%2==0)) {s+=aold;}
if (t=0) {*otvet=0;}
else {*otvet=s;}
return;
}

Задача №19.

Определить каких участков в последовательности вещественных чисел больше – возрастающих или невозрастающих. Если в последовательности более одного элемента, то возрастающие и невозрастающие участки в ней естественным образом чередуются так, что конец одного участка является началом другого.

Ответ: 1, если возрастающих больше, -1, если невозрастающих больше, 0, если поровну. Для последовательности, содержащей менее двух элементов, правильный ответ 0.
n-невозрастающих, N-возрастающих


#include <stdio.h>
#include <assert.h>
void f119(FILE*, int*);

int main(void){
FILE*in;
FILE*out;
int result;
out=fopen(“output.txt”, “w”); if(out==NULL) return 1;
in=fopen(“input.txt”, “r”); if(in==NULL) {fclose(out); return 1;}
f119(in, &result);
fprintf(out, “%d”, result);
fclose(in); fclose(out);
return 0;

}

 

void f119(FILE* filein, int* otvet){
int q, a1, a2, N=0.0, n=0.0, last:

q=fscanf(filein, “%d”, &last);
if(q==EOF) {*otvet=0; return;}
assert(q==1);

while((q=fscanf(filein, “%d”, &a1))==1){
if(last<a1&&a1<a2) N++;
else if(last>=a1&&a1>=a2) n++;

last=a1;

assert(q==EOF);

if(N>n) *otvet=1;

else if(N<n) *otvet=-1;
else if(N=n) *otvet=0;

}

return;

}

 

/*

void f19(FILE* filein, int* y){

int up=0, down=0, q, h=0, t=0;

double a, aold;

q=fscanf(filein, “%lf”, &aold);
if (q==EOF) {*y=0; return;}

while ((q=fscanf(filein, “%lf”, &a))==1){
if ((a>aold)&&(k==0)) {t=0; h=1; up++;}

else if (t==0) {t=1; h=1; down++;}

aold=a;

}

if (up==down {*y=0} else
if (up>down) {*y=1} else {*y=-1;}

return;

}

 

Задача №20.

Определить наибольшее количество подряд идущих элементов последовательности целых чисел, имеющих одно и то же значение.

Ответ: одно число – искомое максимальное количество. Если в последовательности нет соседних элементов с одинаковым значением, то ответ 1, для пустой – 0.

 

#include <stdio.h>

#include <assert.h>

void f120(FILE*, int*);

int main(void){

FILE* in;

FILE* out;

int result;

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

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

f120(in, &result);

fprintf(out, “%d”, result);

fclose(in); fclose(out);

return 0;

}

 

void f120(FILE* filein, int* otvet){

int q, a1, a2, d, M;

q=fscanf(filein, “%d”, &a1;);

if(q==EOF) {*otvet=0; return;}

assert (q==1);

d=1; M=0;

while ((q=fscanf(filein, “%d”, &a2))==1){
if(a1==a2) d++;
else {
if(d>=2&&d>M) {M=d; d=1;}
}
a1=a2;
}
assert(q==EOF);
*otvet=M;
return;
}

 

Задача №21.

Определить длину (количество элементов) в постоянном участке последовательности целых чисел, имеющем наибольшую сумму своих элементов.

Ответ: одно число – искомое количество элементов. Если в последовательности нет постоянных участков, то в файл ответа вывести слово false. Если же в последовательности несколько участков с максимальной суммой, то нужно вывести длину первого из них.

 

#include <stdio.h>

#include <assert.h>

void f121(FILE*, int*);

int main(void){

FILE* in;

FILE* out;

int result;

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

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

f121(in, &result);

fprintf(out, “%d”, result);

fclose(in); fclose(out);

return 0;

}

 

void f121(FILE* filein, int* otvet){

int q, s=0, sold=-1000000, l=0, lfin=0, b=0, a, aold, h;

q=fscanf(filein, “%d”, &aold);

if(q==EOF) {*otvet=10000000; return;}

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

if(a=aold) {
if (h=0) {s=a+aold; l=2; b=1;}

else {s+=a; l++;}

} else {

if(h=1) {

if (s>sold) {

lfin=l;

sold=s;

}
h=0;
}

}

aold=a;

}

if (b=0) {*y=1000000;}

else {*y=lfin;}

return;

}

 

Задача №22.

Определить наибольшую длину (количество элементов) возрастающих участков последовательности вещественных чисел.

Ответ: одно число – искомое количество элементов. Если в последовательности нет возрастающих участков (в том числе, для пустой и одноэлементной последовательностей), то в качестве ответа надо вывести в файл слово false.

 

Задача №23.

Определить наибольшую сумму элементов по возрастающим участкам последовательности вещественных чисел (т.е. максимум из сумм элементов по каждому возрастающему участку).

Ответ: одно число – искомая максимальная сумма. Если в последовательности нет возрастающих участков, то в ответ записать слово false.

 

Задача №24.

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

Ответ: одно число – искомое среднее арифметическое. Если в последовательности нет экстремумов (в том числе и для пустой последовательности), то в ответ надо записать слово false.

 

#include <stdio.h>

#include <assert.h>

void f124(FILE*, int*);

#define False 0

int main(void){

FILE*in;

FILE*out;

int result;

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

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

f124(in, &result);

if (result==False) fprintf(out, “false”);

fprintf(out, “%d”, result);

fclose(in); fclose(out);

return 0;

}

 

void f124(FILE* filein, int* otvet){

int q, a1, a2, a3, s=0.0, n=0.0; double y=0.0;

q=fscanf(filein, “%d”, &a1);

if(q==EOF) {*otvet=0; return;}

assert(q==1);

while((q=fscanf(filein, “%d”, &a2))==1){

if(a1<a2&&a3<a2) or (a1>a2&&a3>a2) {s+=a1; n++;}

y=(double)s/(double)n;

*otvet=y;

else {*otvet=False; return ;}

}

assert(q==EOF);

return;

}

 

Задача №25.

Вычислить максимальное расстояние (разность порядковых номеров) между соседними максимумами в последовательности целых чисел. Первый и последний элементы могут быть максимумами, в этом случае сравнение рассматривается только для одного соседнего элемента.

Ответ: одно число – искомое расстояние. Если в последовательности менее двух максимумов, то в ответ надо записать слово false.

 

Задача №26.

Определить среднее арифметическое всех значений элементов последовательности целых чисел, учитывая только одно из значений для каждого постоянного участка.

Ответ: одно вещественное число – искомое среднее арифметическое. При решении можно считать, что последовательность не пуста.

 

#include <stdio.h>

#include <assert.h>

void f126(FILE*, double*);

int main(void) {

FILE*in;

FILE*out;

double result;

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

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

 

f126(in, &result);

fprintf(out, “%d”, result);

fclose(in); fclose(out);

return 0;

}

 

void f126(FILE* filein, double*otvet){

int q, a1, a2, s=0.0, n=0.0; double t;

q=fscanf(filein, “%d”, a1);

s+=a1; n=1.0;

while ((q=fscanf(filein, “%d”, &a2))=1); {

if (a2!=a1) {s+=a2; n++; a1=a2;}

}

assert (q==EOF);

t=(double)s/(double)n;

*otvet=t;

return;

}

 

Задача №27.

Определить среднее арифметическое значений постоянных участков последовательности целых чисел.

Ответ: одно вещественное число – искомое среднее арифметическое. Если в последовательности нет постоянных участков, то ответ должен быть 0.

 

#include <stdio.h>

#include <assert.h>

void f127(FILE*, int*);

int main(void){

FILE*in;

FILE*out;

int result;

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, “%d”, &last);

f127(in, &result);

fprintf(out, “%d”, result);

fclose(in); fclose(out);

return 0;

}

 

void f127(FILE* in, int* otvet){

int a1, a2, s=0.0, n=0.0, q; double y;

q=fscanf(filein, “%d”, &a1);

if(q==EOF) {*otvet=0; return;} assert(q==1);

while ((q=fscanf(filein, “%d”, &a2))==1){

if (a1==a2) {s+=a1; n++;}

 

y=(double)s/(double)n;

*otvet=y;

return;

}

 

Задача №28.

Определить максимальную сумму подряд идущих элементов в последовательности вещественных чисел (т.е. элементов, имеющих последовательные номера от некоторого k до некоторого m).

Ответ: одно число – значение искомой максимальной суммы. При решении задачи можно считать, что последовательность не пуста.

 

Задача №29.

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

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

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

Для фиксированного вещественного числа х сопоставим последовательности w длины >=1 четыре числа:

P=Pw(x); dp=P ҆ w(x), n-число элементов в w, M=x^(n-1) (считаем, что нулевая степень любого числа х равна 0, в частности 0.0^0=0.0). При переходе от последовательности w к последовательности w*a эти 4 числа пересчитываются следующим образом:

p(new)=p+a*M(new); dp(new)=dp+n*a*M; n(new)=n+1; M(new)=M*x

 

#include <stdio.h>

#include <assert.h>

void f129(FILE*, double *, double *);

 

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;

}