Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
! ПОСЛЕДНЯЯ ВЕРСИЯ задачи по инфе. улучшеные и...doc
Скачиваний:
10
Добавлен:
01.05.2025
Размер:
118.78 Кб
Скачать

Void _tmain(int argc, _tchar* argv[])

{

printf ("Frolov Oleg, Zada4a 18. S treygolinika po formyle Gerona");

cin.get();

system ("cls");

double a1, b1, c1, a2, b2, c2, p1, p2, s1, s2, summa, raznost;

// вводим стороны

printf("a1:");

scanf("%lg", &a1);

printf("b1:");

scanf("%lg", &b1);

printf("c1:");

scanf("%lg", &c1);

printf("a2:");

scanf("%lg", &a2);

printf("b2:");

scanf("%lg", &b2);

printf("c2:");

scanf("%lg", &c2);

p1=(a1+b1+c1)/2; // для формулы герона нужны коэф. равный пол сумме всех сторон

p2=(a2+b2+c2)/2; // второй треугольник

s1=sqrt(p1*(p1-a1)*(p1-b1)*(p1-c1)); // собственно формула Гурона. сумма треугольника = корень квадратный из произведения коэф. и разности коэф и соответствующих сторон.

s2=sqrt(p2*(p2-a2)*(p2-b2)*(p2-c2)); // 2-ой треугольник

// на мой взгляд циклы избыточны но пусть будут

// после до срока...циклы отнюдь не избыточны. Если не напишите, то Вас могут попросить их дописать.

if (s1<0)

{

printf("\n ERROR, treygol'nika 1 net");

}

else

{

printf("s1=%lg", s1);

}

if(s2<0)

{

printf("\n ERROR, treygol'nika 2 net");

}

else

{

printf("s2=%lg",s2);

}

summa=s1+s2; // сумма

raznost=s1-s2; // разность

printf("\n summa=%lg \n raznost=%lg", summa, raznost);

cin.get();

cin.get();

}

// 19.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;

double f (double x)

{

return 1/x;

}

Void _tmain(int argc, _tchar* argv[])

{

printf("Frolov Oleg, Zada4a 19. Integral metodom trapecii (ln2 = integral ot 2 do 1 funkcii d(x)/x");

cin.get();

system ("cls");

double a, b, e, h, m1, m2, m3, m4, d;

// a и b - предел интегрирования

//h-длина шага

//m1-предыдущее приближение

//m2-полусумма у0 и уn

//m3-сумма у1+..+уn-1

//m4-текущее приближение для S

//d-модуль разности 2х посл.приближений

//e-точность вычислений

//n - кол-во отрезков разбиения

int n=7, i; // задаем для точности. я изменю 4 на 7. мне так больше нравиться. На самом деле чем больше будет n, тем точнее получиться результат.

// примечание. проверил с 4....кто у вас информатику ведет? ответ-то не праивльный будет! малова-то число разбиения.

printf("a=");

scanf("%lg", &a);

printf("b=");

scanf("%lg", &b);

printf("e=");

scanf("%lg", &e);

m1=5; // мне не совсем понятно почему приближение исходное мы берем равным 5. вероятно по тому, что оно гарантированно не попадет. я поменяю на 100. мне так больше нравиться.

m2=(f(a)+f(b))/2; // ну тут вроде понятно. берему полусумму значений функции на концах отрезка на котором интергрируем

do

{

h=(b-a)/n; // вообще говоря, длина отрезка или по другому - шаг

m3=0; // приравниваем нулю, так как потом в цикле суммируем.

for(i=0; i<=n; i++)

{

m3=m3+f(a+i*h); // вот тут. считаем сумму всех значаений функции в узлах (узлов(а1, а2 и тд) будет на 1 больше, чем отрезков) следует из условия

//i<=n (вообще говоря несколько сомнительная запись. не понял зачем мы приравняли. ну да Бог с ним.

}

m4=h*(m2+m3); // это есть площадь всех трапеций)) с её помощью и считаем интеграл. (условно говоря, можно было и не выносить m2 из цикла, но тогда

// он каждый раз считал бы в цикле, чем бы его перегружал.

d=fabs(m1-m4); // вообще говоря, это и есть точность вычисления метода

m1=m4; // присваемваем значение

n=n*2; // увеличиваем число отрезков разбиения, на случай, если нужная точность не достигнута)

}

while(d>e); // заканиваем цикла

printf("\n s=%lg", m4);

cin.get();

cin.get();

}

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

//( в онлайн калькуляторе ln2 = 0,69314718056, а у нас при точности 10^(-9) ln2 =0.69327

// 20.2.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;

double f (double x, double y)

{

return -x/y;

}