Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
#1

Затруднения с итерацией и подсчетом количеста функций - C++

09.06.2011, 16:32. Просмотров 274. Ответов 4
Метки нет (Все метки)

Подскажите, что не так делаю

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <conio.h>  //для _getch()
#include <math.h>   //для pow(), sqrt()
 
float a,b,c=1;
float k,e,x_a,x_b,l,xm,fm,x1,x2,f1,f2;
long int i, j;
 
float f(float fa, float fb, float fc, float fx)
{
      ++j;
      return fa*(pow(fx,2))+fb*fx+fc;
}
void proc1(void)
{
     x1=x_a+(1-k)*(x_b-x_a);
     f1=f(a,b,c,x1);
}
void proc2(void)
{
     x2=x_a+k*(x_b-x_a);
     f2=f(a,b,c,x2);
}
int main(int argc)
{
    char *locale;
    
    printf("Metodi zolotogo secheniya\n",locale);
    printf("Funkciya: f(x)=Ax2+Bx+C\n",locale);
    printf("\nKoefficienti:",locale);
    printf("\nA=",locale); scanf("%f",&a);
    printf("\nB=",locale); scanf("%f",&b);
    printf("\nC=",locale); scanf("%f",&c);
    printf("\nInterval:",locale);
    printf("\not a=",locale); scanf("%f",&x_a);
    printf("\not b=",locale); scanf("%f",&x_b);
    printf("\nTochnost:",locale);
    printf("\ne=",locale); scanf("%f",&e);
    
    i=0;
    j=0;
    k=(sqrt(5.0)-1)/2;
    
    proc1();
    proc2();
    
    do
    {
            ++i;
            l=x2-x1;
            if(f1<f2)
            {
                     x_b=x2;
                     x2=x1;
                     f2=f1;
                     proc1();
            }
            if (f1>f2)
            {
                      x_a=x1;
                      x1=x2;
                      f1=f2;
                      proc2();
            }
    }
    while (l>=e);
    xm=(x1+x2)/2;
    fm=f(a,b,c,xm);
    printf("\nFunkciya f(x)min=%f\n",fm,locale);
    printf("Argument x=%f\n",xm,locale);
    printf("Kolichestvo iteracii i=%f\n",i,locale);
    printf("Kolichestvo vizovov funkcii j=%f\n",j,locale);
    
    _getch();
    return 0;
}
Вроде бы все правильно сделал, но почему-то не работает подсчет количества итераций и количества вызовов функций, вместо этого пишет все по нулям.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2011, 16:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Затруднения с итерацией и подсчетом количеста функций (C++):

Трудности с итерацией и подсчетом количеста функций - C++
Возникли трудности в подсчете количества итераций и количества функций #include &lt;iostream&gt; #include&lt;windows.h&gt; using namespace...

Увеличивается память с каждой итерацией - C++
Здорова! Написал программку и че то ниче не ясно, с каждой итерацией увеличивается память на 100 - 200 кб. сжирает оперативы. Это что...

В чем разница между Рекурсией и Итерацией? - C++
Рекурсия позволяет сэкономить время но требует больше памяти, а циклы длятся дольше рекурсии но при этом занимают меньше памяти? Я...

Поиск корня нелинейного уравнения простой итерацией, половинным делением, методом Ньютона - C++
Найти корень уравнения sin x = x с погрешностью не более 0.000001 и для каждого метода определить количество шагов алгоритма. ...

затруднения с ShowMessage - C++
Есть два поля ввода, в каждое из них должно вводится не пустое значение, иначе должна быть проверка ввода значений. Написал бодро первую...

Затруднения с циклом do-while - C++
Здравствуйте! Дано задание: Используя оператор цикла do-While, составить программу, которая вычисляет сумму уравнения , при этом х...

4
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.06.2011, 16:39 #2
%f поменять на %ld
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
09.06.2011, 16:40 #3
Спецификатор типа тут неверный (%f). Точно не скажу, но по-моему для long int нужен %ld.
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
09.06.2011, 16:56  [ТС] #4
То есть заменить вот на эту часть:

C++
1
2
3
4
    printf("\nFunkciya f(x)min=%f\n",fm,locale);
    printf("Argument x=%f\n",xm,locale);
    printf("Kolichestvo iteracii i=%ld\n",i,locale);
    printf("Kolichestvo vizovov funkcii j=%ld\n",j,locale);
А саму прогу,я правильно-то написал, вроде все верно, но все же неуверен?
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
09.06.2011, 19:20  [ТС] #5
Вот что получилось в итоге:

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <conio.h>  //для _getch()
#include <math.h>   //для pow(), sqrt()
 
float a,b,c=1;
float k,e,x_a,x_b,l,xm,fm,x1,x2,f1,f2;
long int i, j;
 
float f(float fa, float fb, float fc, float fx)
{
      ++j;
      return fa*(pow(fx,2))+fb*fx+fc;
}
void proc1(void)
{
     x1=x_a+(1-k)*(x_b-x_a);
     f1=f(a,b,c,x1);
}
void proc2(void)
{
     x2=x_a+k*(x_b-x_a);
     f2=f(a,b,c,x2);
}
int main(int argc)
{
    char *locale;
    
    printf("===Metodi zolotogo secheniya===\n\n",locale); //Метод золотого сечения
    printf("Funkciya: f(x)=Ax2+Bx+C\n",locale);
    printf("\nKoefficienti:",locale);
    printf("\nA=",locale); scanf("%f",&a);
    printf("\nB=",locale); scanf("%f",&b);
    printf("\nC=",locale); scanf("%f",&c);
    printf("\nInterval:",locale);
    printf("\not a=",locale); scanf("%f",&x_a);
    printf("\ndo b=",locale); scanf("%f",&x_b);
    printf("\nTochnost:",locale);
    printf("\ne=",locale); scanf("%f",&e);
    
    i=0;
    j=0;
    k=(sqrt(5.0)-1)/2;
    
    proc1();
    proc2();
    
    do
    {
            ++i;
            l=x2-x1;
            if(f1<f2)
            {
                     x_b=x2;
                     x2=x1;
                     f2=f1;
                     proc1();
            }
            if (f1>f2)
            {
                      x_a=x1;
                      x1=x2;
                      f1=f2;
                      proc2();
            }
    }
    while (l>=e);
    xm=(x1+x2)/2;
    fm=f(a,b,c,xm);
    
    printf("\n===OTVET===\n");
    printf("\nFunkciya f(x)min=%f\n",fm,locale);
    printf("Argument x=%f\n",xm,locale);
    printf("Kolichestvo iteracii i=%ld\n",i,locale);
    printf("Kolichestvo vizovov funkcii j=%ld\n",j,locale);
    
    _getch();
    return 0;
}
0
09.06.2011, 19:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2011, 19:20
Привет! Вот еще темы с ответами:

Затруднения в программе - C++
Здравствуйте. Когда писала программу столкнулась с вот таким вопросом от преподавателя: float time_max(int n, float *Uvx, float *t) ...

Затруднения по динамическим переменным - C++
Всем привет! Когда создаю динамическую переменную, то чтобы вывести ее значение, то пишу *переменная. Если выделяю массив, то обращаюсь...

switch есть небольшие затруднения - C++
Есть программа #include &lt;windows.h&gt; #include &lt;iostream.h&gt; int main() { char *ch; cout&lt;&lt;&quot;Enter ab,asd,voro or...

Затруднения с Wise Installer"ом - C++
Постоянно возникает одна и таже ошибка прои компиляции просто при пробном запуске или сохранении в Wise for Windows Installer 3.0,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru