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

Найти ошибку в перегруженной функции - C++

Восстановить пароль Регистрация
 
A0A
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 36
17.11.2013, 16:13     Найти ошибку в перегруженной функции #1
Почему-то произведению присваивется размер массива.

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
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include <iostream>
#include <fstream> 
#include <time.h> 
#include <conio.h>
using namespace std;
 
int Fun(int *p,int n)
{   int i, proizv=1;
    for(i = 0; i < n; i++)
        if (p[i]>0)
        proizv *= p[i]; 
    return p, n;
}
int Fun(int *p,int n,int imin)
{
    int sum = 0;
for (int i=0; i<imin; i++)
        sum += p[i];
       return sum;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"russian");
 
    int *p,A,B, summ; 
    int n,j,s;
    ofstream out("fail.txt"); 
    srand(time(0));
    cout << "Число элементов массива: "; cin >> n;
            p=new int[n];
    for(j=0;j < n;p[j++]=(rand()-16384)/100); 
    for(j=0;j < n;cout << p[j++] << '\t'); cout << endl;
        cout << "Произведение положительных элементов " <<Fun(p,n)<<endl;
            int min=0, imin;
           for(int i = 0; i < n; i++)
  if (p[i] < min)
    {min = p[i];
  imin = i;}
        cout << "Минимальный элемент " <<min<<endl;
        cout<< "Номер минимального элемента: "<<imin<<endl;
       cout << "Сумма элементов до минимального элемента " <<Fun(p,n,imin)<<endl;
    system ("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
17.11.2013, 16:47     Найти ошибку в перегруженной функции #2
строку 13 замените на return proizv;
A0A
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 36
24.11.2013, 16:13  [ТС]     Найти ошибку в перегруженной функции #3
Не работает всё равно - теперь выдаёт какое-то странное число.

Добавлено через 2 часа 21 минуту
Ошибка не исчезла, только изменилась.
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
24.11.2013, 16:25     Найти ошибку в перегруженной функции #4
Не работает всё равно - теперь выдаёт какое-то странное число.
выдавать должно произведение положительных элементов - ваше странное число...
A0A
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 36
24.11.2013, 17:42  [ТС]     Найти ошибку в перегруженной функции #5
Ну да, только оно отрицательное.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 20:09     Найти ошибку в перегруженной функции #6
Цитата Сообщение от A0A Посмотреть сообщение
Ну да, только оно отрицательное.
С чего бы это? Код показывайте.
A0A
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 36
24.11.2013, 20:17  [ТС]     Найти ошибку в перегруженной функции #7
Он и есть, только в первой функции return p,n; изменено на return proizv;
fridi
-8 / 40 / 1
Регистрация: 21.09.2009
Сообщений: 145
24.11.2013, 20:20     Найти ошибку в перегруженной функции #8
Цитата Сообщение от A0A Посмотреть сообщение
Он и есть, только в первой функции return p,n; изменено на return proizv;
Значит смотрите код заполнения массива
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 20:24     Найти ошибку в перегруженной функции #9
Цитата Сообщение от A0A Посмотреть сообщение
Он и есть, только в первой функции return p,n; изменено на return proizv;
Скрин с выводом результатов покажите.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 20:25     Найти ошибку в перегруженной функции #10
Вот код и вывод. Где здесь отрицательное произведение?
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
#include <iostream>
#include <fstream> 
#include <time.h> 
#include <conio.h>
using namespace std;
 
int Fun(int *p,int n)
{   int i, proizv=1;
    for(i = 0; i < n; i++)
        if (p[i]>0)
        proizv *= p[i]; 
    return proizv;
}
int Fun(int *p,int n,int imin)
{
    int sum = 0;
for (int i=0; i<imin; i++)
        sum += p[i];
       return sum;
}
 
int main()
{
    setlocale(LC_ALL,"russian");
 
    int *p,A,B, summ; 
    int n,j,s;
    ofstream out("fail.txt"); 
    srand(time(0));
    cout << "Число элементов массива: "; cin >> n;
            p=new int[n];
    for(j=0;j < n;p[j++]=(rand()-16384)/100); 
    for(j=0;j < n;cout << p[j++] << '\t'); cout << endl;
        cout << "Произведение положительных элементов " <<Fun(p,n)<<endl;
            int min=0, imin;
           for(int i = 0; i < n; i++)
  if (p[i] < min)
    {min = p[i];
  imin = i;}
        cout << "Минимальный элемент " <<min<<endl;
        cout<< "Номер минимального элемента: "<<imin<<endl;
       cout << "Сумма элементов до минимального элемента " <<Fun(p,n,imin)<<endl;
    system ("pause");
    return 0;
}
Миниатюры
Найти ошибку в перегруженной функции  
A0A
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 36
24.11.2013, 21:19  [ТС]     Найти ошибку в перегруженной функции #11
Вот
Миниатюры
Найти ошибку в перегруженной функции  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2013, 21:26     Найти ошибку в перегруженной функции #12
Слишком большое число для int получается. Задайте другой тип.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 21:35     Найти ошибку в перегруженной функции
Еще ссылки по теме:

C++ Неоднозначный вызов перегруженной функции
Передача перегруженной функции как аргумента C++
C++ Неоднозначный вызов перегруженной функции

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

Или воспользуйтесь поиском по форуму:
A0A
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 36
24.11.2013, 21:35  [ТС]     Найти ошибку в перегруженной функции #13
Изменил тип, и на всякий случай уменьшил диапазон чисел.
Yandex
Объявления
24.11.2013, 21:35     Найти ошибку в перегруженной функции
Ответ Создать тему
Опции темы

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