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

Рекурсия - C++

Восстановить пароль Регистрация
 
kolob
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 3
10.12.2013, 20:58     Рекурсия #1
Есть функция, в нее передается массив из n элементов. Функция находит минимальный элемент и считает сколько раз он встречается в массиве, затем возводит минимальный элемент в эту степень. Проблема в том, что она не возвращает значение pow (min, ct), а вместо этого возвращает ноль. Что я делаю не так? Не судите строго если что.

C++ (Qt)
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
double minelem (double* mas, int n, int i, double min, int ct, double flag)
{
    if (i == n)
        return pow (min, ct);
    else
    {
        if (min > mas[i])
        {
            min = mas[i];
        }
        if (flag == min && min == mas[i])
            ct = ct + 1;
        if(flag != min)
        {
            flag = min;
            ct = 1;
        }
        i = i + 1;
        return minelem(mas, n, i, min, ct, flag);
    }
}
 
int main()
{
    int N;
    printf ("Vvedite kol-vo elementov: ");
    scanf ("%d", &N);
    double* mas = new double [N];
    printf ("vvedite %d elementov: ", N);
    for (int k = 0; k < N; k++)
    {
        scanf ("%f", &mas[k]);
    }
    double t = minelem(mas, N, 0, mas[0], 0, mas[0]);
    printf ("Rezyltat = %f\n", t);
    delete (mas);                                                                                                                                                                                                                                                                                                                                                                       
    mas = NULL;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.12.2013, 22:49     Рекурсия #2
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
#include "math.h"
double minelem (double* mas, int n, int i, double min, int ct, double flag)
{
    if (i == n)
        return pow (min, ct);
    else
    {
        if (min > mas[i])
        {
            min = mas[i];
        }
        if (flag == min && min == mas[i])
            ct = ct + 1;
        if(flag != min)
        {
            flag = min;
            ct = 1;
        }
        i = i + 1;
        return minelem(mas, n, i, min, ct, flag);
    }
}
 
int main()
{
    int N;
    printf ("Vvedite kol-vo elementov: ");
    scanf ("%d", &N);
    double* mas = new double [N];
    printf ("vvedite %d elementov: ", N);
    for (int k = 0; k < N; k++)
    {
        scanf ("%lf", &mas[k]);
    }   
    double t = minelem(mas, N, 0, mas[0], 0, mas[0]);
    printf ("Rezyltat = %lf\n", t);
    delete (mas);                                                                                                                                                                                                                                                                                                                                                                       
    mas = NULL;
}
kolob
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 3
11.12.2013, 19:42  [ТС]     Рекурсия #3
Спасибо, но все-равно не работает. Вот результат работы программы. И как мне избавиться от нулей после запятой?Рекурсия
kolob
0 / 0 / 0
Регистрация: 10.12.2013
Сообщений: 3
11.12.2013, 19:42  [ТС]     Рекурсия #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
#include "stdafx.h"
#include "math.h"
 
double minelem (double* mas, int n, int i, double min, int ct, double flag)
{
    if (i == n)
    {
        printf ("\nmin = %lf ctepen = %d pow (min, ct) =%lf\n",min, ct, pow (min, ct));
        return pow (min, ct);
    }
    else
    {
        if (min > mas[i])
        {
            min = mas[i];
        }
        if (flag == min && min == mas[i])
            ct = ct + 1;
        if(flag != min)
        {
            flag = min;
            ct = 1;
        }
        i = i + 1;
        return minelem (mas, n, i, min, ct, flag);
    }
}
 
int main()
{
    int N;
    printf ("Vvedite kol-vo elementov: ");
    scanf_s ("%d", &N);
    double* mas = new double [N];
    printf ("vvedite %d elementov: ", N);
    for (int k = 0; k < N; k++)
    {
        scanf_s ("%lf", &mas[k]);;
    }
    double t = minelem(mas, N, 0, mas[0], 0, mas[0]);
    printf ("Rezyltat = %lf\n", &t);
    delete (mas);                                                                                                                                                                                                                                                                                                                                                                       
    mas = NULL;
}
Yandex
Объявления
11.12.2013, 19:42     Рекурсия
Ответ Создать тему
Опции темы

Текущее время: 19:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru