Программирование на C / C++ / Лабораторные работы1 / Лабораторная работа 2 / Лабораторная работа 2
.docЛабораторная работа № 2
(вариант № 10 )
Программирование алгоритмов циклической структуры и обработка статических массивов.
Задание 1. Составьте 3 варианта программ циклической структуры типа for , while, do…while и сравните полученные результаты.
Варианты задания 1
10. .
//Lab 2_1
#include <STDIO.h>
#include <MATH.h>
#include <CONIO.h>
main()
{ int i, N; float x, S1, S2, S3;
clrscr ();
printf("\n Vvedite N i x: "); scanf("%d %f", &N, &x);
S1=0; S2=0; S3=0;
for (i=1; i<=N; i++) S1+=(x*x+1)/i;
i=0;
while (i<N)
{i++; S2+=(x*x+1)/i;}
i=0;
do
{i++; S3+=(x*x+1)/i;}
while (i<N);
printf ("\nS1=%f \nS2=%f \nS3=%f", S1, S2, S3);
getch (); return 0;
}
Пояснение: Все варианты написал в одной программе. Разница в видах циклов: цикл с параметром, цикл с предусловием и постусловием. И если при N=0 – S1 и S2 будут равно 0, а S3≠0 из-за того, что цикл с постусловием выполниться хотя бы один раз.
Задание 2. Даны вещественные числа a, b. Значения функции (согласно вариантам) записать в массив. Вычислить значение интеграла, используя:
1) Формулу трапеций
I1=h*[f(a)/2+f(a+h)+f(a+2h)+…+f(a+(n-1)h)+f(b)/2]
2) Формулу Симпсона
I2=h/3*(f(a)+f(b)+4*(f(a+h)+f(a+3h)+…+f(a+(n-1)h))+
2*(f(a+2h)+f(a+4h)+…+f(a+(n-2)h)))
h=(b-a)/n, n=100.
Варианты задания 2
10. f(x)=√(2+x)3/x2; a=0.2; b=10;
//Lab 2_2_1
//Integral po formule Tropecii
#include <STDIO.h>
#include <MATH.h>
#include <CONIO.h>
#define n 100
int i;
float a, b, h, x, s, sn, f[n];
main()
{
clrscr ();
a=0.2; b=10;
h=(b-a)/n;
f[1]=sqrt(pow((2+a),3))/(a*a);
f[100]=sqrt(pow((2+b),3))/(b*b);
for(i=1; i<n; i++)
{
x=(a+i*h);
f[i]=sqrt(pow((2+x),3))/(x*x);
sn+=f[i];
}
s=(h/2)*(f[1]+f[100]+2*sn);
printf ("\nZnachenie integrala s=%f", s);
getch ();
}
//Lab 2_2_2
//Integral po formule Simpsona
#include <STDIO.h>
#include <MATH.h>
#include <CONIO.h>
#define n 100
int i;
float a, b, h, x, s, s1, s2, f[n];
main()
{
clrscr ();
a=0.2; b=10;
h=(b-a)/n;
f[1]=sqrt(pow((2+a), 3))/(a*a);
f[100]=sqrt(pow((2+b), 3))/(b*b);
for(i=1; i<n-1; i++)
{
x=(a+i*h);
if (i%2==0)
{
f[i]=sqrt(pow((2+x),3))/(x*x);
s1+=f[i];
}
else
{
f[i]=sqrt(pow((2+x), 3))/(x*x);
s2+=f[i];
}
}
s=(h/3)*(f[1]+f[100]+(2*s1)+(4*s2));
printf ("\nZnachenie integrala s=%f", s);
getch ();
}
Пояснение: Значение интеграла подсчитал с помощью формулы трапеции и Симпсона. Для этого каждую формулу разделил на 3 составляющие и рассчитал их, одну из составляющей с помощью цикла, потом сложил. Значение функций, при расчете формул, записал в массив.