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

Найти номер первого отрицательного числа в массиве - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
30.05.2013, 00:53     Найти номер первого отрицательного числа в массиве #1
Вот все задание:
Найти максимальный и минимальный элемент в двумерном массиве и указать их номера. Указать номер первого отрицательного числа в массиве; если таковой отсутствует выдать сообщение «такого элемента нет».
Написал код, но вот с нахождением первого отрицательного запутался, цикл ходит по всем индексам, и брейк тоже не помогает. Как доделать, не пойму..


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
#include <iostream>
using namespace std; 
 
int main()
{
    setlocale(0,"rus");
     
int mas[3][3]={{1,-1,4}, 
               {3,8,4}, 
               {5,6,9}};
int i,j;
int max,imax,jmax;
int min,imin,jmin;
int otric,iotric,jotric;
 
//Вывод массива
cout<<"Наш массив:"<<endl;
cout<<endl;
for (i=0; i<=2; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
    cout<<mas[i][j]<<" ";
    }
    cout<<endl;
}
cout<<endl;
 
//Максимальный и минимальный элемент
max=mas[0][0];
min=mas[0][0];
for(i=0 ; i<=2 ; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
        if(mas[i][j] >= max)
        {
            max=mas[i][j];
            imax=i;
            jmax=j;
        }
        if(mas[i][j] <= min)
        {
            min=mas[i][j];
            imin=i;
            jmin=j;
        }
    }
}
cout<<"Максимальный элемент массива: "<<max<<" под номером "<<"["<<imax+1<<"]"<<"["<<jmax+1<<"]"<<endl;;
cout<<"Минимальный элемент массива: "<<min<<" под номером "<<"["<<imin+1<<"]"<<"["<<jmin+1<<"]"<<endl;
 
//Номер отрицательного элемента
for(i=0 ; i<=2 ; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
        if(mas[i][j]<0)
        {
            otric=mas[i][j];
            iotric=i;
            jotric=j;
            cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric+1<<"]"<<"["<<jotric+1<<"]"<<endl;
        }
        else
        cout<<"Такого элемента нет!"<<endl; 
    }
}
 
cout<<endl;
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 00:53     Найти номер первого отрицательного числа в массиве
Посмотрите здесь:

C++ Номер первого отрицательного числа
C++ Найти номер первого отрицательного элемента, делящегося на 5 с остатком 2.
Найти величину и номер первого отрицательного и последнего положительного элементов в массиве C++
C++ Найти: Номер первого отрицательного элемента массива
Найти номер первого вхождения заданного числа в массиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
30.05.2013, 06:58     Найти номер первого отрицательного числа в массиве #2
Внеси поправки в эти строки:
где объявление переменных:
C++
1
int otric = NULL,iotric,jotric;
И в цикле убери условие что элемента нет, и добавь break, если элемент будет найдет, т.е. твоё цикл будет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(i=0 ; i<=2 ; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
        if(mas[i][j]<0)
        {
            otric=mas[i][j];
            iotric=i;
            jotric=j;
            cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric+1<<"]"<<"["<<jotric+1<<"]"<<endl;
            break;
        }
    }
}
А вот после цикла напиши такую строчку:
C++
1
2
if (otric == NULL)
   cout <<"Такого элемента нет!";
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
30.05.2013, 09:42  [ТС]     Найти номер первого отрицательного числа в массиве #3
Цитата Сообщение от skorik-1992 Посмотреть сообщение
Внеси поправки в эти строки:
где объявление переменных:
C++
1
int otric = NULL,iotric,jotric;
И в цикле убери условие что элемента нет, и добавь break, если элемент будет найдет, т.е. твоё цикл будет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(i=0 ; i<=2 ; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
        if(mas[i][j]<0)
        {
            otric=mas[i][j];
            iotric=i;
            jotric=j;
            cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric+1<<"]"<<"["<<jotric+1<<"]"<<endl;
            break;
        }
    }
}
А вот после цикла напиши такую строчку:
C++
1
2
if (otric == NULL)
   cout <<"Такого элемента нет!";
Но теперь он выводит все отрицательные элементы, которые есть в массиве, а мне нужно только первый!
dalay_lama
 Аватар для dalay_lama
65 / 65 / 7
Регистрация: 22.09.2012
Сообщений: 434
30.05.2013, 09:54     Найти номер первого отрицательного числа в массиве #4
Цитата Сообщение от gulllak Посмотреть сообщение
Но теперь он выводит все отрицательные элементы
странно. выложи переделанный код
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,049
Записей в блоге: 18
Завершенные тесты: 1
30.05.2013, 09:56     Найти номер первого отрицательного числа в массиве #5
для поиска первого отрицательного лучше использовать while я думаю
Ezembi
 Аватар для Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
30.05.2013, 10:01     Найти номер первого отрицательного числа в массиве #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(i=0 ; i<=2 ; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
        if(mas[i][j]<0)
        {
            otric=mas[i][j];
            iotric=i;
            jotric=j;
            cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric+1<<"]"<<"["<<jotric+1<<"]"<<endl;
            break;//Здесь break выкидывает только из внутреннего цикла и продолжает идти по внешнему
        }
    }
}
Попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool flag = false;
for(i=0 ; i<=2 ; i++)
{
    for(j=0 ; j<=2 ; j++)
    {
        if(mas[i][j]<0)
        {
            otric=mas[i][j];
            iotric=i;
            jotric=j;
            cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric+1<<"]"<<"["<<jotric+1<<"]"<<endl;
 
flag = true;
 
            break;//Здесь break выкидывает только из внутреннего цикла и продолжает идти по внешнему
        }
    }
if(flag)
break;
}
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
30.05.2013, 11:54  [ТС]     Найти номер первого отрицательного числа в массиве #7
Спасибо! Как будет возможность попробую с булевой переменной и с циклом While.

Добавлено через 1 час 46 минут
Сделал. Вот рабочий код кому надо!

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 <iostream>
using namespace std; 
 
int main()
{
    setlocale(0,"rus");
 
int i,j,n,m;
int max,imax,jmax;
int min,imin,jmin;
int otric=0,iotric,jotric;
 
cout<<"Задайте массив [n x m]"<<endl;
cout<<"Введите n:"<<endl;
cin>>n;
cout<<"Введите m:"<<endl;
cin>>m;
int **mas=new int*[n];
for (i=0;i<n;i++)
    mas[i]=new int[m];
 
cout<<"Введите элементы массива"<<endl;
for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
        cin>>mas[i][j];
    }
//Вывод массива
cout<<"Наш массив:"<<endl;
cout<<endl;
for (i=0; i<n; i++)
{
    for(j=0 ; j<m ; j++)
    {
    cout<<mas[i][j]<<" ";
    }
    cout<<endl;
}
cout<<endl;
 
//Максимальный и минимальный элемент
max=mas[0][0];
min=mas[0][0];
for(i=0 ; i<n ; i++)
{
    for(j=0 ; j<m ; j++)
    {
        if(mas[i][j] >= max)
        {
            max=mas[i][j];
            imax=i;
            jmax=j;
        }
        if(mas[i][j] <= min)
        {
            min=mas[i][j];
            imin=i;
            jmin=j;
        }
    }
}
cout<<"Максимальный элемент массива: "<<max<<" под номером "<<"["<<imax+1<<"]"<<"["<<jmax+1<<"]"<<endl;;
cout<<"Минимальный элемент массива: "<<min<<" под номером "<<"["<<imin+1<<"]"<<"["<<jmin+1<<"]"<<endl;
 
//Номер отрицательного элемента
for(i=0 ; i<n ; i++)
{
    for(j=0 ; j<m ; j++)
    {
        if(mas[i][j]<0)
            while (otric==NULL)
            {
                otric=mas[i][j];
                iotric=i;
                jotric=j;
                cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric+1<<"]"<<"["<<jotric+1<<"]"<<endl;
            }
    }
}
 
if(otric==0)
        cout<<"Отрицательного элемента нет!"<<endl;
 
cout<<endl;
system("pause");
return 0;
}
Чиффа
 Аватар для Чиффа
5 / 5 / 0
Регистрация: 24.09.2012
Сообщений: 54
30.05.2013, 12:46     Найти номер первого отрицательного числа в массиве #8
не очень понимаю смысл while.
Мне кажется лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
otric = 0;
for(i=0 ; i<n ; i++)
{
   for(j=0 ; j<m ; j++)
   {
        if(mas[i][j]<0)
             {
                  otric=mas[i][j];
                  iotric=i;
                  jotric=j;
                  cout<<"Первый отрицательный элемент массива: "<<otric<<" под номером "<<"["<<iotric<<"]"<<"["<<jotric<<"]"<<endl;
                break;//выходим из первого цикла
            }           
     }
     if(otric != 0)//если присвоили какое-нибудь значение otric'у
         break;   //выходим из второго цикла
}
if(otric==0)//если всё же otric равен нулю выводим соответствующее сообщение
  cout<<"Отрицательного элемента нет!"<<endl;
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
30.05.2013, 14:01  [ТС]     Найти номер первого отрицательного числа в массиве #9
While работает так: otric у меня присваевается 0, и когда программа находит первый отрицательный элемент, то присваивает его переменной otric, и выходит из цикла while, а при следующих итерациях программа проскакивает while, т.к. otric уже не равно 0.
Чиффа
 Аватар для Чиффа
5 / 5 / 0
Регистрация: 24.09.2012
Сообщений: 54
30.05.2013, 14:17     Найти номер первого отрицательного числа в массиве #10
В цикл while у тебя попадает только после того, как находит первый отрицательный элемент, сразу присваеваешь otric ненулевое значение и в цикл больше не попадаешь, хотя циклы for крутятся дальше, вместо того чтобы выйти, в данной задаче это не принципиально. но если будет задача на итерацию 1000 в одном и 1000 во втором for'е уже будет ощутимо, так что лучше через if и break. =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 14:35     Найти номер первого отрицательного числа в массиве
Еще ссылки по теме:

Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента C++
Определить номер первого отрицательного и номер последовательного отрицательного элементов массива C++
C++ Найти номер первого отрицательного элемента массива, делящегося на 5 с остатком 2

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

Или воспользуйтесь поиском по форуму:
chizz
 Аватар для chizz
975 / 489 / 54
Регистрация: 19.03.2013
Сообщений: 3,049
Записей в блоге: 18
Завершенные тесты: 1
30.05.2013, 14:35     Найти номер первого отрицательного числа в массиве #11
просто while надо нормально использовать без всяких for
Yandex
Объявления
30.05.2013, 14:35     Найти номер первого отрицательного числа в массиве
Ответ Создать тему
Опции темы

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