Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Rexer
165 / 164 / 46
Регистрация: 10.10.2010
Сообщений: 725
1

Найти сумму положительных элементов массива, расположенных между минимальным и максимальным элементами

19.08.2011, 19:00. Просмотров 1008. Ответов 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
#include<stdio.h>
#include<string.h>
void array_in(int array[],int size);
int sum_arr(int array[],int size);
int max_element(int array[],int size);
int min_element(int array[],int size);
int main(void)
{
   // ,proiz = 1;
    int i_min,i_max;
    int i;
    int size,sum;
    int array[100];
    freopen("input.txt","r",stdin);
   // freopen("output.txt","w",stdout);
    scanf("%d",&size);
 
    array_in(array,size);
    sum = sum_arr(array,size);
    i_max = max_element(array,size);
    printf("%d ",i_max);
    i_min = min_element(array,size);
    printf("%d",i_min);
    //printf("%d ",sum);
}
void array_in(int array[],int size)
{
    int i;
    for(i = 0; i < size; i++)
        scanf("%d",&array[i]);
}
int sum_arr(int array[],int size)
{
    int sum = 0;
    int i;
    for(i = 0; i < size; i++)
    {
        if(array[i] > 0)
            sum += array[i];
    }
    return sum;
}
int max_element(int array[],int size)
{
    int i,i_max;
    int max = array[0];
    for(i = 0; i < size; i++)
    {
        if(array[i] > max)
         {
             max = array[i];
             i_max = i;
         }
    }
    return i_max;
}
int min_element(int array[],int size)
{
    int i,i_min;
    int min = array[0];
    for(i = 1; i < size; i++)
    {
        if(array[i] < min)
         {
             min = array[i];
             i_min = i;
         }
    }
    return i_min;
}
Но тут одно 'но'.
i_max находится нормально,а вот вместо i_min выводится какое-то число,похожее на адрес.
В чем проблема?Очень хотелось бы понять свою ошибку.
Заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2011, 19:00
Ответы с готовыми решениями:

Найти сумму и количество положительных элементов, расположенных между минимальным и максимальным элементами массива
Найти сумму и количество положительных элементов, расположенных между минимальным и максимальным...

Определить сумму положительных элементов, расположенных между минимальным и максимальным элементами данного массива
В массиве А, содержащем 14 элементов, определить сумму положительных элементов, расположенных между...

Найти сумму элементов массива, расположенных между максимальным и минимальным элементами
Всем привет. Сегодня столкнулся с проблемой, моя программа не хочет выполнять действия после 3...

Вычислить сумму нечетных элементов массива, расположенных между максимальным и минимальным элементами
В одномерном массиве состоящем из 10 вещественных элементов,вычислить сумму нечетных элементов...

В массиве вычислить сумму нечетных элементов массива, расположенных между максимальным и минимальным элементами
1. В одномерном массиве, состоящем из 8 вещественных элементов, вычислить сумму нечетных элементов...

5
germeticus
27 / 27 / 1
Регистрация: 21.06.2011
Сообщений: 82
19.08.2011, 19:15 2
В функции min_element скорей всего не выполняется условие array[i] < min.

Посмотрите дебаггером.
1
grizlik78
Эксперт С++
2030 / 1510 / 207
Регистрация: 29.05.2011
Сообщений: 3,135
19.08.2011, 19:21 3
И i_max и i_min надо инициализировать нулём. Без этого обе функции неправильные.
1
Overmind024
100 / 100 / 27
Регистрация: 10.09.2010
Сообщений: 267
19.08.2011, 19:57 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
77
78
79
80
81
82
83
84
85
86
87
#include<stdio.h>
#include<string.h>
#include <conio.h>
 
void array_in(int array[],int size)
{
    for(int i = 0; i < size; ++i)
        scanf("%d",&array[i]);
}
 
int sum_arr(int array[],int size)
{
    int sum = 0;
    for(int i = 0; i < size; ++i)
    {
        if(array[i] > 0)
            sum += array[i];
    }
    return sum;
}
 
int product_arr(int array[],int i_min, int i_max)
{
    if(i_min > i_max)
    {
        int temp = i_min;
        i_min = i_max;
        i_max = temp;
    }
 
    int product = 1;
 
    for(int i = i_min + 1; i < i_max ; ++i)
    {
        product*= array[i];
    }
 
    return product;
}
int max_element(int array[],int size)
{
    int i_max = 0;
    int max = array[0];
    for(int i = 1; i < size; ++i)
    {
        if(array[i] > max)
        {
            max = array[i];
            i_max = i;
        }
    }
    return i_max;
}
 
int min_element(int array[],int size)
{
    int i_min = 0;
    int min = array[0];
    for(int i = 1; i < size; ++i)
    {
        if(array[i] < min)
        {
            min = array[i];
            i_min = i;
        }
    }
    return i_min;
}
int main(void)
{
    int size,sum,product;
    int array[100];
 
    printf("size = ");
    scanf("%d",&size);
 
    array_in(array,size);
    sum = sum_arr(array,size);
    product = product_arr(array,min_element(array,size),max_element(array,size));
    
    printf("sum = %d \n",sum);
    printf("product = %d \n",product);
 
    _getch();
 
    return 0;
}
Добавлено через 21 минуту
А на плюсах:
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
#include <iostream>
#include <vector>
#include <numeric>
 
using namespace std;
 
template<class T>
class plus_if_positive
{
public:
    T operator()(T &Left, T &Right) const
    {
        if(Right > 0)
        {
            return Left + Right;
        }
        else
        {
            return Left;
        }
    }
};
 
int main()
{
    vector<int> v;
    size_t size;
    cout << "size = "; cin >> size;
 
    {
        int temp;
        for(size_t i = 0;i < size;++i)
        {
            cin >>temp;
            v.push_back(temp);
        }
    }
 
    cout << "sum = " << accumulate(v.begin(),v.end(),0,plus_if_positive<int>()) << endl;
 
    pair<vector<int>::iterator,vector<int>::iterator> p(min(v.begin(),v.end()),max(v.begin(),v.end()));
    cout << "product = " << accumulate(begin(p), end(p),1, multiplies<int>()) << endl;
 
    cin.get();
    cin.get();
    return 0;
}
1
Olga_
844 / 186 / 18
Регистрация: 01.08.2011
Сообщений: 502
19.08.2011, 20:54 5
Цитата Сообщение от Rexer Посмотреть сообщение
произведение чисел, расположенных между минимальным и максимальным элементами.
А вы не учитываете, что минимальных и максимальных элементов может быть несколько...

Добавлено через 14 минут
А еще не учитываете, что все элементы массива могут иметь одинаковое значение
1
silentnuke
Android Programmer
139 / 140 / 10
Регистрация: 08.12.2010
Сообщений: 421
20.08.2011, 15:17 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
#include <fstream>
using namespace std;
int main(){
    int n,s=0,p=1; 
    ifstream in("input.txt");
    in>>n;
    int *a=new int[n], mini=0,maxi=0;
    for (int i=0;i<n;++i){
        in>>a[i];
        if(a[i]>0) s+=a[i];
        if(i>0)
        {
            if(a[i]>a[maxi])maxi=i;
            if(a[i]<a[mini])mini=i;
        }
    }
    if(maxi<mini)
    {
        int temp=maxi;
        maxi=mini;
        mini=temp;
    }
    for (int i=mini+1;i<maxi;++i)
        p*=a[i];
    ofstream("output.txt")<<s<<" "<<p;
}
1
20.08.2011, 15:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2011, 15:17

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Помогите, пожалуйста, найти ошибки. При выводе выдает все нули =/ Само задание : В одномерном...

Найти произведение элементов массива, расположенных между максимальным и минимальным элементами
Ребят, подскажите хотя бы с чего начать и как делать Необходимо в одномерном массиве,состоящем...

Найти количество элементов массива, расположенных между минимальным и максимальным элементами
В одномерном массиве, состоящем из вещественных элементов, вычислить: А) произведение элементов...


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

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

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