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

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 *);

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