Форум программистов, компьютерный форум CyberForum.ru

Какой из методов не верен? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в процедуре http://www.cyberforum.ru/cpp-beginners/thread793412.html
Добрый день, вечер, ночь. При проверке включения одного круга в другой программа вылетает, можете посмотреть код? struct cir { int x,y; float rad; }; //длинна окружности double dlinna(double length) //вычесление длинны окружности
C++ как понять код? #include <string.h> int main() { char str = "abcdef"; int slen = strlen(str); for(int i=0;i<slen/2;i++) { str = str + str; str = str - str; str = str - str; http://www.cyberforum.ru/cpp-beginners/thread793411.html
C++ Нужны комментарии к коду с указателями
Добавить комментарии к коду так, что бы можно было понять что и как используется. #include <iostream> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; void sum( int *a, const int N ) {
C++ Хеадер и исходник
Имеется к примеру класс: class Call{ public: print(const char *text); }; Записано это в хеадер. Вопрос. Как сделать так, чтобы можно было описать методы класса в исходнике? К примеру описание метода:
C++ Обработка элементов вектора на С++ http://www.cyberforum.ru/cpp-beginners/thread793379.html
Дан вектор - одномерный числовой массив. Определить количество элементов массива, расположенных между макимальным и «центральным» элементами массива (предполагается, что число элементов - нечётное и максимальный - единственный). Если по какой-либо причине количество элементов определить не удается, выдать об этом сообщение с указанием причины.
C++ Как проверить строку массива на наличее отрицательного члена Как проверить строку массива на наличее отрицательного члена? подробнее

Показать сообщение отдельно
Kill100
 Аватар для Kill100
356 / 245 / 32
Регистрация: 11.12.2010
Сообщений: 1,060
Завершенные тесты: 1
24.02.2013, 03:07     Какой из методов не верен?
Было задание написать метод Дихотомии и Золотого сечения.
Написал проги но на одних и тех же функциях с одинаковой погрешностью и интервалом, выдаётся разный ответ.
Какой метод я неверно написал не могу понять...
Дихотомия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Дихотомия.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"//все включения здесь
using namespace std;
 
//Функция
double f(double x)
{
    return x*sin(x);
}
 
//метод дихотомии, возвращает max значение на отрезке [a;b] 
double dichotomia(double a, double b, double e)
{
    double ak=a, bk=b,tau=(e/3);
    do 
    {
        //шаг 1 вычисление альфа и бета на текущей итерации
        double alpha_k=(ak + bk)/2-tau;
        double beta_k=(ak + bk)/2+tau;
        //шаг 2
        if(f(alpha_k) < f(beta_k))
        {
            bk = beta_k;
        }
        else
        {
            ak = alpha_k;
        }
    } 
    while (!(ak-bk<=e));//условие выхода из цикла с заданной погрешностью
    return (ak+bk)/2;//Возвращаем ответ
}
 
//точка входа в приложение
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");//русская локаль
    printf("Метод \"Дихотомии\"\nВведите интервал отрезка [a;b]\n");
    double a=0,b=0,e=0;
    cin>>a>>b;
    printf("Введите погрешность e\n");
    cin>>e;
    printf("Ответ: %f\n",dichotomia(a,b,e));
    system("pause");//ждём реакции юзера
    return 0;
}

Золотое сечение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Золотое_Сечение.cpp: определяет точку входа для консольного приложения.
//Реализует метод золотого сечения
 
#include "stdafx.h"//Все включения для этого проекта тут
using namespace std;
 
//Функция
double f(double x)
{
    return x*sin(x);
}
 
//метод золотого сечения, возвращает max значение на отрезке [a;b] 
double golden_ratio(double a, double b, double e)
{
    double ak=a, bk=b,lambda=sqrt((5)-1)/2;     
    //задаём начальные значения альфы и беты
    double alpha_k = a + (1 - lambda)*(b - a);
    double beta_k = a + lambda*(b - a);
    do //Начало цикла
    {
        if(f(ak)>f(bk))//если f(ak)>f(bk)
        {
            //шаг 2
            ak = alpha_k;
            alpha_k=beta_k;
            beta_k = ak + lambda*(bk - ak);
        }
        else
        {
            //шаг 3
            bk = beta_k;
            beta_k = alpha_k;
            alpha_k=ak + (1 - lambda)*(bk - ak);;
        }
    }
    while (!((bk-ak)<e));
    return f((ak+bk)/2);//результат выполнения функции
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    printf("Метод \"Золотого сечения\"\nВведите интервал отрезка [a;b]\n");
    double a=0,b=0,e=0;
    cin>>a>>b;
    printf("Введите погрешность e\n");
    cin>>e;
    printf("Ответ: %f\n",golden_ratio(a,b,e));
    system("pause");//ждём реакции юзера
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru