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

что-то не так - C++

Восстановить пароль Регистрация
 
Ronflat
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 37
26.05.2011, 22:28     что-то не так #1
Нужно сделать программу возвращающую произведение n последних элементов массива. Вот программа,но она почеу то возвращает n первых элементов,и непойм почему.

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 <cstdlib>
#include <ctime>
#include <iomanip>
 
 
using namespace std;
     int proizv(int N, int a[5]);
     int i,n,a[5];
 
     void main()
     {
    
       printf("\nkolvo alimentov massiva? "); 
       scanf("%d", &n);
       printf("\nv massive %d chisel:\n", n);
       srand(time(NULL));
       
           for (i=0; i<5; i++)
          {
              a[i]=rand()%9+2; 
              printf("%d  ", a[i]);
           }
       printf("proizv: %d", proizv(n-1, a));
system("pause");
     }
     int proizv(int N, int a[5])
     {
        if (N==0) 
            return a[0];
        else 
            return a[N]*proizv(N-1, a);
    return 0;
 
         
     }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2011, 22:28     что-то не так
Посмотрите здесь:

что не так? C++
C++ что-то не так
что не так? C++
C++ Что-то не так?
C++ Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
26.05.2011, 22:32     что-то не так #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
#include <iostream>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <iterator>
#include <functional>
 
using namespace std;
 
int main()
{
   const size_t N = 7;
   int arr[N];
   
   int n = 3;
   
   srand((unsigned)time(0));
   
   for(size_t i=0;i<N;i++)
      arr[i]=rand()%10-5;
      
   copy(arr, arr+N, ostream_iterator<int>(cout, " "));
   
   cout<<endl<<"multiplies: "<<accumulate((arr+N)-n, arr+N, 1, multiplies<int>())<<endl;
}
Ronflat
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 37
26.05.2011, 22:37  [ТС]     что-то не так #3
Дело в том что нужно реализовать это все,именно рекурсивным методом
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
26.05.2011, 22:39     что-то не так #4
Ну так правильно, рекурсия идет от N до 0. Должно быть так
C++
1
2
3
4
5
int proizv(int N, int a[5])
{
if (N == n - 1) return a[n - 1];
else return a[N] * proizv(N + 1, a);
}
А так вообще образцовый быдлокод
Ronflat
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 37
27.05.2011, 06:52  [ТС]     что-то не так #5
С данной поправкой программа прсто выводит n-ный элемент сначала. а нужно произведение n с конца
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
27.05.2011, 07:19     что-то не так #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 <cstdlib>
#include <ctime>
#include <iostream>
 
int proizv (int *a, int size, int n)
{
    if (n == 1)
        return a[size-1];
    else
        return a[size-1] * proizv(a, size - 1, n - 1);
}
 
int main()
{
    int * arr, size, n, i;
    
    srand(time(0));
    
    std::cout << "Vvedite razmer massiva: ";
    std::cin >> size;
    
    arr = new int[size];
    
    for (i = 0; i < size; ++i)
    {
        arr[i] = rand() % 10;
        std::cout << arr[i] << ' ';
    }
    
    std::cout << "Vvedite kolvo elementov: ";
    std::cin >> n;
    
    std::cout << proizv(arr, size, n);
 
        return 0;
}
Yandex
Объявления
27.05.2011, 07:19     что-то не так
Ответ Создать тему
Опции темы

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