Примеры разработки программ. Задача о разложении функции. Задача о площади пересечения прямоугольников презентация

Содержание

Слайд 2

План

Лекция 7

План
Пара заданий для самопроверки
Задача о разложении функции
Задача о площади пересечения прямоугольников

Слайд 3

Пара заданий для самопроверки

Слайд 4

Пара заданий для самопроверки

Задание «Циклы»

Что выведет программа?

#include
void main(){
int i=0;
for(;i<=2;)
printf("

%d",++i);
}

1 2 3

Слайд 5

Пара заданий для самопроверки

Задание «Циклы»

Что выведет программа?

#include
void main(){
int x;
for(x=1;x<=5;x++);
printf("%d",x);


}

6

Слайд 6

Задача о разложении функции

Постановка задачи
Алгоритм
Программа 1
Замечание об эффективности
Программа 2

Слайд 7

Задача о разложении функции

Разложение функции: постановка задачи

Необходимо численно убедиться в справедливости равенства, то

есть сравнить результаты вычисления значения функции для заданного значения аргумента, полученные двумя способами:
вычислением с использованием стандартных математических функций;
путем разложения функции с заданной точностью ε .
При вычислении разложения необходимо выяснить количество шагов разложения, потребовавшееся для достижения точности ε.

Слайд 8

Задача о разложении функции

Разложение функции: суть

Sn

f(x)

ε

n*

ε

Слайд 9

Задача о разложении функции

Разложение функции: алгоритм

Начало

Конец

x, eps

n = 0;
Sn = 1;

S = Sn;

fabs(fx-S)>eps

S = S + Sn;

fx, S, n

Слайд 10

Задача о разложении функции

Разложение функции: программа 1

ДЕМО

Слайд 11

Задача о разложении функции

Разложение функции: программа 1

// Основной цикл
while(fabs(fx-S) > eps) {
n++;

// Следующее слагаемое
// Знак
z=pow(-1.0,n);
// Числитель
a=1;
for(i=1; i<=n; i++)
a*=(3*i-2);
// Факториал
f=1;
for(p=1; p<=n; p++)
f*=p;
// Знаменатель
b=pow(3.0,n)*f;
Sn =(z*a/b)*pow(x,3.0*n);
S += Sn;
}

#include
#include
void main() {
double x,fx,Sn,S,eps,z,b;
int n,i,a,p,f;
printf(“ x=”);
scanf(“%lf”,&x);
printf(“eps=”);
scanf(“%lf”,&eps);
fx=1/pow(1+x*x*x,1./3.);
n=0; Sn=1; S=Sn;
// Сюда вставить основной цикл
printf(“ fx=%12.10lf\n”,fx);
printf(“ S=%12.10lf\n”,S);
printf(“ n=%d\n”,n);
}

Очевидное, но плохое решение

Слайд 12

Задача о разложении функции

Разложение функции: суть

Нетрудно заметить:

Слайд 13

Задача о разложении функции

Разложение функции: программа 2

ДЕМО

Слайд 14

Задача о разложении функции

Разложение функции: программа 2

#include
#include
#define MAX_ITER 1000.0
void main() {


double x,fx,Sn,S,eps,n;
printf(“x=”); scanf(“%lf”,&x);
printf(“eps=”); scanf(“%lf”,&eps);
fx=1/pow(1+x*x*x,1./3.);
Sn=1; S=Sn; n=0;
while(fabs(fx-S) > eps && n < MAX_ITER) {
Sn*=-(3*n+1)*x*x*x/(3*n+3);
S+=Sn;
n+=1;
}
printf(“fx=%12.10lf\n”,fx);
printf(“ S=%12.10lf\n”,S);
printf(“ n=%1.0lf\n”,n);
}

Хорошее решение

Слайд 15

Задача о площади пересечения прямоугольников

Постановка задачи
Алгоритм
Программа

Слайд 16

Задача о площади пересечения прямоугольников

Площадь пересечения прямоугольников: постановка задачи

В программу последовательно поступают габариты

прямоугольников a, b, c, d (a ≤ x ≤ b, c ≤ y ≤ d). Требуется, не запоминая габаритов всех прямоугольников, найти площадь их пересечения.

Если A < B и C < D, то
S = (B – A) ·(D – C),
иначе
S = 0.

A = max(ai)

B = min(bi)

C = max(ci)

D = min(di)

Слайд 17

Задача о площади пересечения прямоугольников

Площадь пересечения прямоугольников: алгоритм

Начало

Конец

a,b,c,d

A = min(max(a,A),B);
B = max(min(b,B),A);
C =

min(max(c,C),D);
D = max(min(d,D),C);

a!=0 || b!=0 || c!=0 || d!=0

S

A=a; B=b;
C=c; D=d;

S = (B-A)*(D-C);

1-ый прямоугольник?

нет

да

да

нет

Слайд 18

Задача о площади пересечения прямоугольников

Площадь пересечения прямоугольников: программа

ДЕМО

Слайд 19

Задача о площади пересечения прямоугольников

Площадь пересечения прямоугольников: программа

#include
#define min(x,y) ((x)<(y))?(x):(y)
#define max(x,y) ((x)>(y))?(x):(y)
void

main() {
float a,b,c,d,A,B,C,D,S=0;
int first=1;
do {
printf(“a, b, c, d:\n”); scanf(“%f%f%f%f”,&a,&b,&c,&d);
if (first) {
A=a; B=b; C=c; D=d; first=0;
} else {
A = min(max(a,A),B);
B = max(min(b,B),A);
C = min(max(c,C),D);
D = max(min(d,D),C);
}
}while(a!=0 || b!=0 || c!=0 || d!=0);
S = (B-A)*(D-C);
printf(“S = %f\n”,S);
}
Имя файла: Примеры-разработки-программ.-Задача-о-разложении-функции.-Задача-о-площади-пересечения-прямоугольников.pptx
Количество просмотров: 80
Количество скачиваний: 0