Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
1

Найти максимальный элемент среди отрицательных

26.12.2010, 00:35. Показов 5554. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Будьте добры, помогите разобраться с этим: нужно написать программу, (используя массивы), которая будет искать максимальный елемент среди отрицательных и минимальный среди тех, что больше ноля. Вроде бы стандартная задача... но что-то неправильно получается... неправильно ищет эти еллементы, и, к тому же, еслив водить массив вручную - вообще не исполняет поиск... В чем ошибка?
[CPP]
#include<iostream>
#include<stdlib.h>
#include <time.h>

using namespace std;

int size;
int a[10];

void selection()
{

cout<<"Choose:"<<endl;
cout<<"Press 1 to input massive"<<endl;
cout<<"Press 2 to generate massive"<<endl;
int answer;
cin>>answer;
if( answer==1)
{
int size;
int a[10];
cout<<"Enter the size of the massive:";
cin>>size;
for(int i = 0; i < size; ++i)
{
cout<<"a["<<i<<"]=";
cin >> a[i];
}
}

else if ( answer==2)
{
cout<<"Enter the size of the massive:"<<endl;
cin>>size;
srand((unsigned)(time(NULL)));
for(int i=0;i<size;i++)
{
a[i]=rand()%30-15;
cout<<a[i]<<endl;
}

}

else
{
cout<<"Uncorrect variant.Try again"<<endl;
}
}



void func()
{
int max = 0;
int min = 0;
int i;


for (i = 0; i < size; i++)
{
if (a[i] < 0)
{
max = a[i];

if (max < a[i])max = a[i];
cout<<"Max="<<max<<endl;

}
else if (a[i] > 0) // v[i] > 0
{
min = a[i];


if (min > a[i]) min = a[i];
cout<<"Min="<<min<<endl;



}
}
}
void main()
{
selection();
func();
system("Pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2010, 00:35
Ответы с готовыми решениями:

Найти максимальный элемент среди отрицательных чисел
1. Не заводить массив.Вводиться последовательность чисел,оканчивающийся на ноль.Найти максимальный...

Найти максимальный элемент среди отрицательных элементов массива
Привет. Помогите написать код. Необходимо используя классы найти максимальный элемент среди...

Найти среди отрицательных элементов максимальный элемент и его индекс
В каждом из массивов X(Nx), Y(Ny) и Z(Nz) вещественных чисел найти среди отрицательных элементов...

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

17
899 / 793 / 186
Регистрация: 21.02.2009
Сообщений: 1,722
26.12.2010, 00:44 2
Цитата Сообщение от Chanelly Посмотреть сообщение
Будьте добры, помогите разобраться с этим: нужно написать программу, (используя массивы), которая будет искать максимальный елемент среди отрицательных и минимальный среди тех, что больше ноля.
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 <iostream>
#include <ctime>
#include <iomanip>
 
using namespace std;
 
int main()
{
    srand(static_cast<int>(time(NULL)));
    const int N=10;
    int cnt_pos=0,cnt_neg=0,max_neg=0,min_pos=0;
    int arr[N];
    cout<<"Array -> "<<endl;
     for(int i=0; i<N; i++)
     {
           arr[i]=rand()%9-4;
           cout<<setw(3)<<arr[i]<<setw(3);
            if(arr[i]<0 && !cnt_neg)
            {
                max_neg=arr[i];
                cnt_neg++;
            }
            if(arr[i]>0 && !cnt_pos)
            {
                min_pos=arr[i];
                cnt_pos++;
            }
     }
     for(int i=0; i<N; i++)
     {
         if(arr[i]<0 && arr[i]>max_neg)
         {
             max_neg=arr[i];
         }
         if(arr[i]>0 && arr[i]<min_pos)
         {
             min_pos=arr[i];
         }
     }
    cout<<endl<<"Max in negative -> "<<max_neg<<endl;
    cout<<"Min in positive -> "<<min_pos<<endl;
    system("pause");
    return 0;
}
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 01:15  [ТС] 3
Спасибо большое, но мне бы больше хотелось именно исправить ошибки в моем коде, а не абсолютно другой код... И, к тому же, нужно, чтобы можно было как и генерировать автоматически массив, так и вводить пользователю каждый еллемент вручную.
0
1 / 1 / 0
Регистрация: 24.06.2010
Сообщений: 16
26.12.2010, 02:19 4
Старался не трогать код) все дело в начальных значениях.. ты пытаешься найти значения приближенные к нулю. а мин и макс у тебя = 0 .

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
#include<iostream>  
#include<stdlib.h> 
#include <time.h> 
 
using namespace std;
 
int size;   
int a[10];  
 
void selection()
{
 
    cout<<"Choose:"<<endl;
    cout<<"Press 1 to input massive"<<endl;
    cout<<"Press 2 to generate massive"<<endl;
    int answer;
    cin>>answer;
    if( answer==1)
    { 
        cout<<"Enter the size of the massive:"; 
        cin>>size;  
        for(int i = 0; i < size; ++i)
        {
            cout<<"a["<<i<<"]=";
            cin >> a[i];
        }
    }
 
    else if ( answer==2)
    {
        cout<<"Enter the size of the massive:"<<endl;   
        cin>>size;  
        srand((unsigned)(time(NULL)));
        for(int i=0;i<size;i++)
        {
            a[i]=rand()%30-15;
            cout<<a[i]<<endl;
        }
 
    }
    else
    { 
        cout<<"Uncorrect variant.Try again"<<endl;  
    }
}
 
void func()
{
    int max = -15;
    int min = 15;
 
    for (int i = 0; i < size; i++)
    {
        if (a[i] < 0 && max < a[i])     
                max = a[i];
        if (a[i] > 0 && min > a[i])
                min = a[i]; 
    }
    cout<<"Max="<<max<<endl;
    cout<<"Min="<<min<<endl;
}   
void main() 
{
    selection();
    func();
}
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 02:34  [ТС] 5
Огромное спасибо! Действительно, все просто! Но... вот интересно, а как сделать так, чтобы можно было брать еллемент массива не ограниченный конкретно числами 15 и -15 или любыми другими, а были просто типа int? Что, так и писать
int max = -2147483648;
int min = 2147483648;
или есть какой-то другой способ?)
0
13 / 13 / 6
Регистрация: 16.11.2010
Сообщений: 32
26.12.2010, 03:54 6
Надо здесь
C++
1
2
int max = -15;
        int min = 15;
писать так
C++
1
2
int max = -INT_MAX;
        int min = INT_MAX;
потому что если в массиве максимальное отрицательное меньше -15 то программа выведет -15, аналогично с положительными, если минальное больше 15, то выведет 15.


Chanelly, а что должна программа выводить если в массиве нет отрицательных(положительных) элементов?
0
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 62
26.12.2010, 08:17 7
По-моему чтобы не морочиться крайними положениями надо сначала жестко присвоить первый элемент массива переменным min и max, а потом начинать перебор.

Добавлено через 7 минут
Кстати, почему-то никто не делал замечания, а ведь массив то статический, а пользователь его размеры вводит. Надо либо отказаться от этого, либо массив с динамическим выделением памяти. Или я не прав?
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 12:11  [ТС] 8
Да, вот как раз над этим и думаю - как сообщить пользователю, что в данном массиве нет положительных/отрицательных елементов?Если бы изначально присваивать max=0 и min=0, то потом можно было бы написать
if (max==0)
{
cout << "array does't contain negative elements" << endl;
}
но как в этом коде такое написать?..
0
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 62
26.12.2010, 12:20 9
Если так
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
void func()
{
        int max = -15;
        int min = 15;
        bool checkPosit = false;
        bool checkNegat=false;
 
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0 && max < a[i])     
                                max = a[i];
                                checkNegat = true;
                if (a[i] > 0 && min > a[i])
                                min = a[i];
                                checkPosit = true; 
        }
        if (!checkNegat)
        {
         cout << "array does't contain negative elements" << endl; 
         }  else  {
    cout<<"Max="<<max<<endl;
         }
    if (!checkPosit)
        {
        cout << "array does't contain positive elements" << endl;
         } else {
        cout<<"Max="<<max<<endl;
         }
}
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 12:29  [ТС] 10
А что такое checkPosit и checkNegat? Как оно проверяет, есть ли положительные/отрицательные елементы? Мне не совсем понятна эта строка
if (!checkNegat)

получается, что "Если не checkNegat, то ..." То есть если правда, то... А что - правда? Как они связанны - checkNegat и max?
0
4 / 4 / 1
Регистрация: 03.06.2010
Сообщений: 55
26.12.2010, 12:36 11
if(checkNegat==0)
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 13:00  [ТС] 12
Как может переменная типа булеан біть равной нулю? И все равно, непонятно, как же все-таки связанны CheckNegat и max ???
0
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 62
26.12.2010, 13:22 13
Chanelly, добавил коменты
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
void func()
{
        int max = -15;
        int min = 15;
        //Объявляем метки и ставим обе в ложь
        bool checkPosit = false; 
        bool checkNegat=false; 
 
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0 && max < a[i])     
                                max = a[i];
                                checkNegat = true; //Если произвели замену, то меняем метку на истина
                if (a[i] > 0 && min > a[i])
                                min = a[i];
                                checkPosit = true;//тоже самое 
        }
        if (!checkNegat)//Если метка ложь, то пишем что элементов нет (не ложь = истина, при этом попадаем в блок if где сообщение об ошибке, не истина = ложь, попадаем в else), иначе выводим, то что нашли
        {
         cout << "array does't contain negative elements" << endl; 
         }  else  {
    cout<<"Max="<<max<<endl;
         }
    if (!checkPosit)
        {
        cout << "array does't contain positive elements" << endl;
         } else {
        cout<<"Max="<<max<<endl;
         }
}
0
13 / 13 / 6
Регистрация: 16.11.2010
Сообщений: 32
26.12.2010, 13:37 14
Да, на самом деле, немного нехорошо решать относительно крайних значений, но ведь Chanelly просил найти ошибки в его коде





А вот этот код мне не нравится совсем
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
void func()
{
        int max = -15;
        int min = 15;
        bool checkPosit = false;
        bool checkNegat=false;
 
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0 && max < a[i])     
                                max = a[i];
                                checkNegat = true;
                if (a[i] > 0 && min > a[i])
                                min = a[i];
                                checkPosit = true; 
        }
        if (!checkNegat)
        {
         cout << "array does't contain negative elements" << endl; 
         }  else  {
    cout<<"Max="<<max<<endl;
         }
    if (!checkPosit)
        {
        cout << "array does't contain positive elements" << endl;
         } else {
        cout<<"Max="<<max<<endl;
         }
}

я бы наверное завёл переменные k1 и k2 изначально равные нулю а потом бы использовал их как счётчики отрицательных и положительных соответственно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void func()
{
        int max = -INT_MAX;
        int min = INT_MAX;
          int k1=0,k2=0;
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0 && max < a[i])
                                {max = a[i];
                                 k1++;}
                if (a[i] > 0 && min > a[i])
                                {min = a[i];
                                k2++;}
        }
        cout<<"Max="<<max*(k1!=0)<<endl;/*если k1 не равно нулю то (k1!=0) возвращает единицу, если , то ноль и тогда max*(k1!=0) равно либо max либо ноль*/
        cout<<"Min="<<min*(k2!=0)<<endl;
}
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 14:05  [ТС] 15
Но почему тогда задача выполняется неправильно, если добавить checkNeegat и checkPozit? Тогда программа почему-то выводит одинаковые max и min в случае автоматической генерации массива и вообще не ищет максимального и минимального элемента, если пользователь вводит эллементы вручную???

Добавлено через 17 минут
Тогда если нет,к примеру, отрицательных элементов, то программа выводит max=0. Но ведь 0 не является ни положительным,ни отрицательным. Нужно, чтобы в случае отсутствия положительных или отрицательных элементов, программа выводила, что их не существует.
0
13 / 13 / 6
Регистрация: 16.11.2010
Сообщений: 32
26.12.2010, 14:14 16
тогда так:
C++
1
2
(k1!=0)? cout<<"Max="<<max<<endl:cout<<"There aren't any negative elements"<<endl;
        (k2!=0)? cout<<"Min="<<min<<endl:cout<<"There aren't any positive elements"<<endl;
0
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 62
26.12.2010, 14:28 17
Вот таком виде все заработало, но я все же настаиваю что надо делать динамику для работы с размерами массива которые задает пользователь
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
#include<iostream>      
#include<stdlib.h>
#include <time.h>
 
using namespace std;
 
int size;       
int a[10];      
 
void selection()
{
 
        cout<<"Choose:"<<endl;
        cout<<"Press 1 to input massive"<<endl;
        cout<<"Press 2 to generate massive"<<endl;
        int answer;
        cin>>answer;
        if( answer==1)
        { 
                cout<<"Enter the size of the massive:"; 
                cin>>size;      
                for(int i = 0; i < size; ++i)
                {
                        cout<<"a["<<i<<"]=";
                        cin >> a[i];
                }
        }
 
        else if ( answer==2)
        {
                cout<<"Enter the size of the massive:"<<endl;   
                cin>>size;      
                srand((unsigned)(time(NULL)));
                for(int i=0;i<size;i++)
                {
                        a[i]=rand()%30-15;
                        cout<<a[i]<<endl;
                }
 
        }
        else
        {
                cout<<"Uncorrect variant.Try again"<<endl;      
        }
}
 
void func()
{
        int max = -15;
        int min = 15;
        bool ch1 = false;
        bool ch2 = false;
 
        for (int i = 0; i < size; i++)
        {
                if (a[i] < 0 && max < a[i]) {
                                max = a[i];
                                ch1 = true;}
                if (a[i] > 0 && min > a[i]) {
                                min = a[i];
                                ch2 = true; }
        }
        if (!ch1)
        {
         cout << "array does't contain negative elements" << endl;
         }  else  {
          cout<<"Max="<<max<<endl;
         }
        if (!ch2)
        {
        cout << "array does't contain positive elements" << endl;
         } else {
        cout<<"Min="<<min<<endl;
         }
}
void main()
{
        selection();
        func();
        system("pause");
}
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 15:18  [ТС] 18
Спасибо огромное за то, что помогли разобраться!!!
0
26.12.2010, 15:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2010, 15:18
Помогаю со студенческими работами здесь

В вещественном массиве найти максимальный элемент среди его отрицательных элементов
всем привет помогите пожалуйста.Решить задачу: в вещественном массиве найти максимальный элемент...

Массивы: найти среди отрицательных элементов максимальный элемент и его индекс
В каждом из массивов X(Nx), Y(Ny) и Z(Nz) вещественных чисел найти среди отрицательных элементов...

Циклы. Найти минимальный (максимальный) элемент среди положительных (отрицательных) чисел
Хеллп,ребята. Дана последовательность целых чисел, за которой следует 0. Определить минимальный...

Найти максимальный элемент среди отрицательных элементов матрицы, расположенных над побочной диагональю
Помогите пожалуйста составить программу на C++: Дана матрица A(4,4) Найти максимальный элемент...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru