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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
#1

В двумерном массиве определить первый отрицательный элемент на интервале [a,b] - C++

24.03.2013, 12:07. Просмотров 1727. Ответов 32
Метки нет (Все метки)

Подскажите пожалуйста что мне нужно про писать в 5 строке чтобы определить первый отрицательный элемент массива
не используя break

C++
1
2
3
4
5
6
7
for (i=1; i<3; i++)
    for (j=1; j<3; j++)
    
    if(a<= M[i][j] && M[i][j]<=b)
       
       
    cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 12:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В двумерном массиве определить первый отрицательный элемент на интервале [a,b] (C++):

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

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

Переставить в 1-м массиве первый отрицательный и последний положительный элемент местами - C++
Переставить в 1-м массиве первый отрицательный и последний положительный элемент местами!

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

В произвольно заданном одномерном массиве заменить первый отрицательный элемент нулем - C++
В произвольно заданном одномерном массиве заменить первый отрицательный элемент нулем QtCreator, помогите сделать

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
tratata171
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 4
24.03.2013, 12:17 #2
можно создать дополнительную переменную типа bool, и в условие добавить проверку на ее истинность


C++
1
2
3
4
5
6
7
8
9
bool q=true;
for (i=1; i<3; i++)
    for (j=1; j<3; j++)
    
    if(a<= M[i][j] && M[i][j]<=b&&q)
       {
           cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
           q=false;
       }
0
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
24.03.2013, 12:22  [ТС] #3
Цитата Сообщение от tratata171 Посмотреть сообщение
C++
1
           cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
А выводим мы z или другую букву?
0
tratata171
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 4
24.03.2013, 12:27 #4
перед cout добавляем строчку
C++
1
z=M[i][j];
предварительно объявив переменную z, и выводим тогда z

Добавлено через 2 минуты
а почему вообще, в поиске отрицательного элемента ты сравниваешь текущий элемент с a и b? вместо того чтоб проверять не меньше ли он 0
0
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
24.03.2013, 12:31  [ТС] #5
Программа мне выдает что первый отрицательный элемент на интервале [a,b] = 5
Даже если я меняю все элементы массива

Добавлено через 2 минуты
Вот посмотри мой код, подправь пожалуйста может где то я не так поставил
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
#include <iostream>
#include <conio.h>
#include <clocale>
using namespace std;
 
int main()
{   setlocale (LC_ALL, "Russian");
 
int j,i,a,b,M[3][3],z;
//вводим массив
cout<<"Введите элементы массива: \n";
    for (i=0; i<3; i++)
    for (j=0; j<3; j++)
    {
        cout <<"mas["<<(i)<<"]";
        cout <<"["<<(j)<<"]->";
        cin >> M[i][j];
    }
    // вводим интервал
{
        cout<<"Введите a:=";
        cin>>a;
        cout<<"Введите b:=";
        cin>>b;
}
 
// вывести массив построчно
for (int i = 0; i < 3; i++)
{
for (j=0; j < 3; j++)
{
cout << M [i] [j] << " ";
}
cout << endl;
}
 //первый отрицательный
bool q=true;
for (i=1; i<3; i++)
    for (j=1; j<3; j++)
    
    if(a<= M[i][j] && M[i][j]<=b&&q)
       {
           z=M[i][j];
           cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
           q=false;
       }
 
_getch();
return 0;
}
0
tratata171
0 / 0 / 0
Регистрация: 24.03.2013
Сообщений: 4
24.03.2013, 12:33 #6
a и b у тебя какие? если они оба положительные то и элемент будет положительным. вообще это условие для поиска первого элемента, входящего в диапазон от а до b, но никак не для поиска отрицательного

если тебе нужен элемент в данном диапазоне и отрицательный, то условие должно быть следующим:

C++
1
if(a<= M[i][j] && M[i][j]<=b && q && M[i][j]<0)
0
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
24.03.2013, 12:37  [ТС] #7
Не работает, нужно чтобы в этом интервале нашел 1 отрицательный элемент
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
24.03.2013, 12:45 #8
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
#include <iostream>
 
void main()
{
    const int N = 3;
    int matrix[N][N] = { 3, -4, 5,
                         5, 6, -3,
                         10, 9, 4 };
    int a, b;
        // Ввод интервала проверки.
    std::cout << "a >> ";
    std::cin >> a;
    std::cout << "b >> ";
    std::cin >> b;
 
    int first_neg_el = 1;    // Сюда запишем наш первый отрицательный элемент, если найдем.
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (matrix[i][j] >= a && matrix[i][j] <= b && matrix[i][j] < 0)  // Если эл. матр. входит в интервал и он
                                                                                                         // отрицательний, то
            {
                first_neg_el = matrix[i][j];                    // в first_neg_el записать этот эл.
                break;                                         // Прервать внутренний цикл.
            }
        }
 
        if (first_neg_el < 0)          // Если отрицательный эл. найден, то
            break;                    // прервать внишний цикл.
    }
 
        // Это конструкция, заменяющая if ([условие]) [код] else [код].
        // Делаем проверку на отрицательность first_neg_el. Если проверку прошли - вывели эл. Нет - вывели сообщение, что отрицательного эл. на заданном промежутке нет.
    first_neg_el < 0 ? std::cout << "First negative element = " << first_neg_el << std::endl : std::cout << "No negative element was found\n";
    system("pause");
}
0
Banddk
37 / 37 / 1
Регистрация: 08.12.2012
Сообщений: 157
Записей в блоге: 1
24.03.2013, 12:46 #9
Цитата Сообщение от Basill Посмотреть сообщение
for (i=1; i<3; i++)
* * for (j=1; j<3; j++)
if(a<= M[i][j] && M[i][j]<=b&&q)
* * * *{
* * * * * *z=M[i][j];
* * * * * *cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
* * * * * *q=false;
* * * *}
а вот как должно быть
C++
1
2
3
4
5
6
7
8
for (i=0; i<3; i++)
* * for (j=0; j<3; j++)
if((a<= M[i][j]) && (M[i][j]<=b)&&(M[i][j]<0)&&q)
* * * *{
* * * * * *z=M[i][j];
* * * * * *cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
* * * * * *q=false;
* * * *}
цикл for с 0!
1
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
24.03.2013, 12:53  [ТС] #10
Спасибо, но у нас препод старой закалки и не примет работу где есть
C++
1
std::cout << "a >> ";
или break
он хочет чтобы выглядело как в моем примере

Добавлено через 4 минуты
Цитата Сообщение от Banddk Посмотреть сообщение
а вот как должно быть
C++
1
2
3
4
5
6
7
8
for (i=0; i<3; i++)
* * for (j=0; j<3; j++)
if((a<= M[i][j]) && (M[i][j]<=b)&&(M[i][j]<0)&&q)
* * * *{
* * * * * *z=M[i][j];
* * * * * *cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
* * * * * *q=false;
* * * *}
цикл for с 0!
не работает(
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
24.03.2013, 13:00 #11
Basill, тогда препод, мягко говоря не очень умный человек. Зачем сто раз проходить один и тот же цикл, если то, что нам нужно мы уже нашли и break-ом просто прервали этот цикл, что бы лишний раз не грузить процессор?
C++
1
std::cout >> ...
Тоже странно... В чем разница, что ты запишешь using namespace std и дельше будешь писать без std::, что так, как я делаю. Тем более, многие программисты не рекомендуют использовать using namespace в больших проектах.

Добавлено через 4 минуты
И еще одно: это условие
C++
1
if((a<= M[i][j]) && (M[i][j]<=b)
он сам его дал? Оно ведь бессмысленно. Если в промежутке [a, b], то панятно, что a < b. Соответственно если эл. меньше a и меньше b, то оно исполнится, но число же при этом не входит в заданный промежуток. Я бы его записал так:
C++
1
if((a>= M[i][j]) && (M[i][j]<=b)
0
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
24.03.2013, 13:04  [ТС] #12
Цитата Сообщение от ReasonX7 Посмотреть сообщение
C++
1
if((a>= M[i][j]) && (M[i][j]<=b)
Вооооот теперь работает только я записал так

C++
1
2
3
4
5
6
7
8
9
10
 //первый отрицательный
          bool q=true;
          for (i=0; i<3; i++)
          for (j=0; j<3; j++)
          if((a>= M[i][j]) && (M[i][j]<=b)&&(M[i][j]<0)&&q)
          {
          z=M[i][j];
          cout <<"Первый отрицательный элемент массива в интервале [a,b] ="<<z<<endl;
          q=false;
           }
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
24.03.2013, 13:06 #13
Ладно, сдавать-то тебе, так что вот поправленный код:
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
#include <iostream>
 
using namespace std;
 
void main()
{
    const int N = 3;
    int matrix[N][N] = { 3, -4, 5,
                         5, 6, -3,
                         10, 9, 4 };
    int a, b;
    cout << "a >> ";
    cin >> a;
    cout << "b >> ";
    cin >> b;
 
    int first_neg_el = 1;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (matrix[i][j] >= a && matrix[i][j] <= b && matrix[i][j] < 0 && first_neg_el >= 0)
            {
                first_neg_el = matrix[i][j];
                break;
            }
        }
    }
 
    if (first_neg_el < 0)
        cout << "First negative element = " << first_neg_el << '\n';
    else 
        cout << "No negative element was found\n";
 
    system("pause");
}
0
Basill
40 / 40 / 13
Регистрация: 16.02.2013
Сообщений: 197
24.03.2013, 13:08  [ТС] #14
Это была первая часть задания. вторая заключается в том, что нужно вывести на экран номер строки и номер столбца первого отрицательного элемента всей этой матрицы, без интервала.
0
ReasonX7
47 / 46 / 2
Регистрация: 11.12.2011
Сообщений: 147
24.03.2013, 13:16 #15
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
#include <iostream>
 
using namespace std;
 
void main()
{
    const int N = 3;
    int matrix[N][N] = { 3, -4, 5,
                         5, 6, -3,
                         10, 9, 4 };
    int a, b;
    cout << "a >> ";
    cin >> a;
    cout << "b >> ";
    cin >> b;
 
    int first_neg_el = 1;
    int i_row, i_column;   // Номер строки и столбца соответственно.
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (matrix[i][j] >= a && matrix[i][j] <= b && matrix[i][j] < 0 && first_neg_el >= 0)
            {
                first_neg_el = matrix[i][j];
                i_row = i;   // Записали номер строки и
                i_column = j; // столбца.
                break;
            }
        }
    }
 
    if (first_neg_el < 0)
    {
        cout << "First negative element = " << first_neg_el << " [" << i_row << ", " << i_column << ']' << '\n';
    }
    else 
        cout << "No negative element was found\n";
 
    system("pause");
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2013, 13:16
Привет! Вот еще темы с ответами:

В двумерном массиве L (M, N) первый элемент поменять с последним и найти сумму отрицательных элементов - C++
Здравствуйте. помогите с задачей. В двумерном массиве L (M, N) первый элемент поменять с последним и найти сумму отрицательных...

Определить наибольший элемент в двумерном массиве - C++
#include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; void main() { clrscr();...

Определить последний отрицательный максимальный элемент и его позицию в массиве - C++
мальчики помогите пожалуйста решить задачи 1)Для заданного двумерного массива из n строк и m столбцов: a.)Определить последний...

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


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

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

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