6 / 6 / 3
Регистрация: 19.09.2010
Сообщений: 173
1

Как посчитать количество итераций цикла?

29.11.2014, 21:36. Показов 27326. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не совсем представляю, как это осуществить. Т.е. возвращается х, а еще что-то вернуть, то будет немного не так, как хотелось бы, по идее. Т.е. посчитать в ду-вайл это не проблема, проблема именно это потом вывести в main() и только это. Т.е. нужно выводить x и этот счетчик.

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
#include <iostream>
using namespace std;
 
double fun(double Sa, double Sb, int a)
{
    double Pi = 3.14159265, fa, fx, e = pow(10, (-6)), x;
    fa = a*Sa - pow(cos(Pi*Sa), 2);
    do
    {
        x = (Sa + Sb) / 2;
        fx = a*x - pow(cos(Pi*x), 2);
        if (fx*fa <= 0) Sb = x;
        else Sa = x;
    } while (abs(Sa - Sb) > 2 * e);
    return x;
}
 
int main()
{
    double Sa = 0.2, Sb = 0.8, Pi = 3.14159265;
    int a;
    for (a = 1; a <= 3; a++)
    {
        if (a == 2) cout << "a=" << a << "   x=" << fun(Sa, Sb, a) << "       f(x)=" << a*fun(Sa, Sb, a) - pow(cos(Pi*fun(Sa, Sb, a)), 2) << '\n';
        else cout << "a=" << a << "   x=" << fun(Sa, Sb, a) << "   f(x)=" << a*fun(Sa, Sb, a) - pow(cos(Pi*fun(Sa, Sb, a)), 2) << '\n';     
    }   
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2014, 21:36
Ответы с готовыми решениями:

Посчитать количество итераций цикла
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main()...

Посчитать количество итераций цикла
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main()...

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++)
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real;...

Как посчитать количество итераций в сортировке слиянием?
void merge(int l, int r) { if (r == l) return; if (r - l == 1) { if (a &lt; a) swap(a,...

6
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,700
29.11.2014, 21:45 2
Лучший ответ Сообщение было отмечено Minchanin-Bel как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double fun(double Sa, double Sb, int a,int& kIter)
{
    double Pi = 3.14159265, fa, fx, e = pow(10, (-6)), x;
    fa = a*Sa - pow(cos(Pi*Sa), 2);
    kIter=0;
    do
    {
        x = (Sa + Sb) / 2;
        fx = a*x - pow(cos(Pi*x), 2);
        if (fx*fa <= 0) Sb = x;
        else Sa = x;
        kIter++;
    } while (abs(Sa - Sb) > 2 * e);
    return x;
}
Количество итерация вернется по ссылке в kIter
1
6 / 6 / 3
Регистрация: 19.09.2010
Сообщений: 173
29.11.2014, 22:17  [ТС] 3
Вот как-то так получилось. Немного напрягает, что во всех случаях 19, все верно?

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
#include <iostream>
using namespace std;
 
double fun(int a, int& k_iter)
{
    double Pi = 3.14159265, fa, fx, e = pow(10, (-6)), x, Sa = 0.2, Sb = 0.8;
    fa = a*Sa - pow(cos(Pi*Sa), 2);
    k_iter = 0;
    do
    {
        x = (Sa + Sb) / 2;
        fx = a*x - pow(cos(Pi*x), 2);
        if (fx*fa <= 0) Sb = x;
        else Sa = x;
        k_iter++;
    } while (abs(Sa - Sb) > 2 * e);
    return x;
}
 
int main( )
{
    double Pi = 3.14159265;
    int a, Kiter, *pk;
    for (a = 1; a <= 3; a++)
    {
        fun(a, Kiter);
        int *pk = &Kiter;
        if (a == 2) cout << "a=" << a << "   x=" << fun(a, Kiter) << "       f(x)=" << a*fun(a, Kiter) - pow(cos(Pi*fun(a, Kiter)), 2) << "   k_iter=" << *pk << '\n';
        else cout << "a=" << a << "   x=" << fun(a, Kiter) << "   f(x)=" << a*fun(a, Kiter) - pow(cos(Pi*fun(a, Kiter)), 2) << "   k_iter=" << *pk << '\n';
    }   
    system("pause");
    return 0;
}
0
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,700
29.11.2014, 22:20 4
1.А это зачем?
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
int *pk = &Kiter;
2. Вычислите значения функций в разные переменные,
а уж потом выводите.
пример подобной ошибки:
https://www.cyberforum.ru/cpp-... 93774.html
0
6 / 6 / 3
Регистрация: 19.09.2010
Сообщений: 173
29.11.2014, 22:40  [ТС] 5
1. Потому что если просто &k_iter или написать, то тогда "идентификатор не определен". Для &Kiter адрес выводит, что вполне логично. Что-то я определенно не понимаю.
2. Не функций, а счетчика, возможно? С функциями же, вроде как, все хорошо
0
Модератор
Эксперт С++
13502 / 10754 / 6409
Регистрация: 18.12.2011
Сообщений: 28,700
29.11.2014, 22:50 6
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
#include <iostream>
#include <cmath>
using namespace std;
const double Pi = 3.14159265; 
double fun(int a, int& k_iter)
{
    double fa, fx, e = 1e-6, x, Sa = 0.2, Sb = 0.8;
    fa = a*Sa - pow(cos(Pi*Sa), 2);
    k_iter = 0;
    do
    {
        x = (Sa + Sb) / 2;
        fx = a*x - pow(cos(Pi*x), 2);
        if (fx*fa <= 0) Sb = x;
        else Sa = x;
        k_iter++;
    } while (abs(Sa - Sb) > 2 * e);
    return x;
}
 
int main( )
{
    int a, Kiter1;
    for (a = 1; a <= 3; a++)
    {
        double r1=fun(a, Kiter1);
        if (a == 2) 
            cout << "a=" << a << "   x=" << r1 << "       f(x)=" << a*r1 - pow(cos(Pi*r1), 2) 
                << "   k_iter=" << Kiter1 << '\n';
        else 
            cout << "a=" << a << "   x=" << r1 << "   f(x)=" << a*r1 - pow(cos(Pi*r1), 2) 
                << "   k_iter=" << Kiter1 << '\n';
    }   
    system("pause");
    return 0;
}
1
6 / 6 / 3
Регистрация: 19.09.2010
Сообщений: 173
29.11.2014, 22:57  [ТС] 7
Ооо! Спасибо! Все проще, чем я думал Но все же, странно, что 19 каждый раз. Может быть, совпадение, но кто ж знает)
0
29.11.2014, 22:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2014, 22:57
Помогаю со студенческими работами здесь

Как посчитать количество итераций в методе сортировки
k = l = 0; r = n - 2; *pi = 0; while (l &lt;= r) { *pi = *pi + 1; for (i = l; i &lt;= r;...

Посчитать количество итераций при рекурсивном вызове функции
void hoarSort(int* arrPtr, int first_element, int last_element, int lenght_array, int etheration)...

Найти сумму кратных 5 чисел от 1 до N и посчитать их количество. Использовать оператор цикла for
Найти сумму кратных 5 чисел от 1 до N и посчитать их количество. Использовать оператор цикла for.

Количество итераций цикла
Привет, не могу разобраться как вывести количество итераций цикла if. Пробую через сделать это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru