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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Chanelly
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
#1

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

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

Здравствуйте! Будьте добры, помогите разобраться с этим: нужно написать программу, (используя массивы), которая будет искать максимальный елемент среди отрицательных и минимальный среди тех, что больше ноля. Вроде бы стандартная задача... но что-то неправильно получается... неправильно ищет эти еллементы, и, к тому же, еслив водить массив вручную - вообще не исполняет поиск... В чем ошибка?
[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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 00:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти максимальный элемент среди отрицательных (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MILAN
885 / 779 / 86
Регистрация: 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
Chanelly
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 01:15  [ТС] #3
Спасибо большое, но мне бы больше хотелось именно исправить ошибки в моем коде, а не абсолютно другой код... И, к тому же, нужно, чтобы можно было как и генерировать автоматически массив, так и вводить пользователю каждый еллемент вручную.
0
pahomych
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
Chanelly
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 02:34  [ТС] #5
Огромное спасибо! Действительно, все просто! Но... вот интересно, а как сделать так, чтобы можно было брать еллемент массива не ограниченный конкретно числами 15 и -15 или любыми другими, а были просто типа int? Что, так и писать
int max = -2147483648;
int min = 2147483648;
или есть какой-то другой способ?)
0
Dimon4ik32
13 / 13 / 1
Регистрация: 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
Woody-krsk
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 62
26.12.2010, 08:17 #7
По-моему чтобы не морочиться крайними положениями надо сначала жестко присвоить первый элемент массива переменным min и max, а потом начинать перебор.

Добавлено через 7 минут
Кстати, почему-то никто не делал замечания, а ведь массив то статический, а пользователь его размеры вводит. Надо либо отказаться от этого, либо массив с динамическим выделением памяти. Или я не прав?
0
Chanelly
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
Woody-krsk
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
Chanelly
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 12:29  [ТС] #10
А что такое checkPosit и checkNegat? Как оно проверяет, есть ли положительные/отрицательные елементы? Мне не совсем понятна эта строка
if (!checkNegat)

получается, что "Если не checkNegat, то ..." То есть если правда, то... А что - правда? Как они связанны - checkNegat и max?
0
lom80
4 / 4 / 0
Регистрация: 03.06.2010
Сообщений: 55
26.12.2010, 12:36 #11
if(checkNegat==0)
0
Chanelly
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 13:00  [ТС] #12
Как может переменная типа булеан біть равной нулю? И все равно, непонятно, как же все-таки связанны CheckNegat и max ???
0
Woody-krsk
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
Dimon4ik32
13 / 13 / 1
Регистрация: 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
Chanelly
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 19
26.12.2010, 14:05  [ТС] #15
Но почему тогда задача выполняется неправильно, если добавить checkNeegat и checkPozit? Тогда программа почему-то выводит одинаковые max и min в случае автоматической генерации массива и вообще не ищет максимального и минимального элемента, если пользователь вводит эллементы вручную???

Добавлено через 17 минут
Тогда если нет,к примеру, отрицательных элементов, то программа выводит max=0. Но ведь 0 не является ни положительным,ни отрицательным. Нужно, чтобы в случае отсутствия положительных или отрицательных элементов, программа выводила, что их не существует.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2010, 14:05
Привет! Вот еще темы с ответами:

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

Найти макс. элемент среди отрицательных и мин. элемент среди положительных элементов массива - C++
В массиве (введенном пользователем) найти максимальный элемент среди отрицательных массива и найти минимальный элемент среди положительных...

В целочисленном массиве найти максимальный элемент среди четных и среди нечетных элементов - C++
В целочисленном массиве X(N) найти max1 - максимальный элемент среди четных элементов массива и max2 - максимальный элемент среди нечетных...

Задана матрица целых чисел. Определить максимальный элемент среди отрицательных элементов этой матрицы - C++
помогите решить


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.12.2010, 14:05
Ответ Создать тему
Опции темы

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