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

Дана матрица вывести номер ее последней строки

11.01.2017, 10:38. Показов 1817. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана матрица вывести номер ее последней строки, содержащей хотя бы один элемент, равный 0. Если такой строки нет вывести -1.

С положительными получилось а во с 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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <time.h>
 
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
 
    const int M = 20;
    const int N = 4;
 
    int Arr[M][N];
    while (true)
    {
        system("cls");
 
        cout << "\t\tИсходный массив:\n" << endl;
 
        for (int i(0); i < M; i++)
        {
            cout << "Строка " << (i + 1) << ":\t";
            for (int j(0); j < N; j++)
            {
                Arr[i][j] = (rand() % 201) - 100;
                cout << setw(4) << Arr[i][j];
            }
            cout << endl;
        }
 
        bool Flag = false;
        int Key = 0;
        
        for (int i(0); i < M; i++)
        {
            for (int j(0); j < N; j++)
            {
                if (Arr[i][j] < 0)
                {
                    Key = 0;
                    break;
                }
                Key++;
                if (Key == N)
                {
                    Flag = true;
                    cout << "Первая строка с положительными элементами: " << (i + 1) << endl;
                }
            }
            if (Flag) 
                break;
            if (i == (M - 1))
                cout << "В массиве нет строк состоящих только из элементов больших 0 : -1" << endl;
        }
        _getch();
    }
    return 0;
}
Добавлено через 59 минут
почти но не то....кто чем может)))

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 <iomanip>
#include <time.h>
 
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
 
    const int M = 20;
    const int N = 4;
 
    int Arr[M][N];
    
        system("cls");
        int Key = 0;
        cout << "\t\tИсходный массив:\n" << endl;
 
        for (int i(0); i < M; i++)
        {
            cout << "Строка " << (i + 1) << ":\t";
            for (int j(0); j < N; j++)
            {
                Arr[i][j] = rand() %21-10;
                cout << setw(4) << Arr[i][j];
            }
            cout << endl;
        }
 
        
        for (int i(0); i < M; i++)
        {
            for (int j(0); j < N; j++)
            {
                if (Arr[i][j] == Key)
                {
                    
                cout << "Последняя строка со значением 0: " << (i + 1) << endl;
                }
            
            }
                
        }
        _getch();
    
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2017, 10:38
Ответы с готовыми решениями:

Дана матрица размера MxN. Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также
Дана матрица размера MxN. Найти номер ее строки с наибольшей суммой элементов и вывести данный...

Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих только четные числа
Matrix34. Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих...

Дана матрица A(3,4): Найти наименьший элемент матрицы и соответствующий ему номер строки
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Дана целочисленная матрица размера M x N. Вывести номер ее последнего столбца, содержащего максимальное количество одина
Написал код, но он не компилируется. Только недавно начали учить С++ и сразу такие задачи....

5
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
11.01.2017, 10:50 2
Лучший ответ Сообщение было отмечено labelminsk как решение

Решение

C++
1
2
3
4
5
6
7
8
int rowIndx = -1;
for (size_t j = 0; j != M; ++j)
  for (size_t k = 0; k != N; ++k)
    if (Arr[j][k] == 0)
    {
       rowIndx = j;
       break;
    }
1
2 / 2 / 1
Регистрация: 13.10.2016
Сообщений: 34
11.01.2017, 11:18  [ТС] 3
Идеально подходит))) Благодарю!!

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
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <time.h>
 
using namespace std;
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
    srand(time(0));
 
    const int M = 20;
    const int N = 4;
 
    int Arr[M][N];
    
        system("cls");
        int Key = 0;
        int total = 0;
        cout << "\t\tИсходный массив:\n" << endl;
 
        for (int i(0); i < M; i++)
        {
            cout << "Строка " << (i + 1) << ":\t";
            for (int j(0); j < N; j++)
            {
                Arr[i][j] = rand() %21-10;
                cout << setw(4) << Arr[i][j];
            }
            cout << endl;
        }
 
        
        int rowIndx = -1;
        for (size_t j = 0; j != M; ++j)
          for (size_t k = 0; k != N; ++k)
            if (Arr[j][k] == 0)
            {
              rowIndx = j;
              break;
            }
            cout << "Последняя строка со значением 0: " << rowIndx + 1;
 
            _getch();
    
    return 0;
}

По size_t если не сложно объясните это псевдоним чего типа "размера"?
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
11.01.2017, 11:35 4
labelminsk, почти тоже самое что и unsigned int... полезно применять при индексации массивов и как счетчики циклов.
1
2 / 2 / 1
Регистрация: 13.10.2016
Сообщений: 34
11.01.2017, 12:10  [ТС] 5
Подскажите еще такой вопрос к примеру вывести последнюю строку сумма элементов которой четная.......
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
11.01.2017, 12:44 6
Лучший ответ Сообщение было отмечено labelminsk как решение

Решение

Цитата Сообщение от labelminsk Посмотреть сообщение
Подскажите еще такой вопрос к примеру вывести последнюю строку сумма элементов которой четная.......
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
rowIndx = 0;
int sum = 0;
for (size_t j = 0; j != M; ++j)
{
  for (size_t k = 0; k != N; ++k)
    sum += Arr[j][k];
 
  if (!(sum % 2))
    rowIndx = j;
 
  sum = 0;
}
 
for (size_t k = 0; k != N; ++k)
  std::cout << Arr[rowIndx][k] << " ";
std::cout << std::endl;
предполагается, что код написанный выше, вы вставите в своей программе после 43 строки

Не по теме:

если у вас возникают новые вопросы - следует создать новую тему :)



Добавлено через 6 минут
labelminsk, и да, намного эффективней сделать это все так:
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
int rowIndx = -1;
for (int j = M - 1; j != -1; --j)
{
  for (size_t k = 0; k != N; ++k)
    if (Arr[j][k] == 0)
    {
      rowIndx = j;
      break;
    }
 
  if (rowIndx != - 1)
    break;
}
cout << "Последняя строка со значением 0: " << rowIndx + 1;
 
rowIndx = 0;
int sum = 0;
for (int j = M - 1; j != -1; ++j)
{
  for (size_t k = 0; k != N; ++k)
    sum += Arr[j][k];
 
  if (!(sum % 2))
  {
    rowIndx = j;
    break;
  }
 
  sum = 0;
}
 
for (size_t k = 0; k != N; ++k)
  std::cout << Arr[rowIndx][k] << " ";
std::cout << std::endl;
Добавлено через 11 минут
внесены правки:
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
int rowIndx = -1;
for (int j = M - 1; j != -1; --j)
{
  for (size_t k = 0; k != N; ++k)
    if (Arr[j][k] == 0)
    {
      rowIndx = j;
      break;
    }
 
  if (rowIndx != - 1)
    break;
}
cout << "Последняя строка со значением 0: " << (rowIndx == -1 ? rowIndx : rowIndx + 1) << "\n\n";
 
rowIndx = -1;
for (int j = M - 1; j != -1; --j)
{
  int sum = 0;
  for (size_t k = 0; k != N; ++k)
    sum += Arr[j][k];
 
  if (!(sum % 2))
  {
    rowIndx = j;
    break;
  }
}
 
if (rowIndx != -1)                        // else - сумма элементов во всех строках нечетная
{
  for (size_t k = 0; k != N; ++k)
    std::cout << Arr[rowIndx][k] << " ";
  std::cout << std::endl;
}
1
11.01.2017, 12:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2017, 12:44
Помогаю со студенческими работами здесь

Вывести номер первой(последней) строки(столбца), содержащего равное количество положительных и отрицательных элементов
Здравствуйте! Дана целочисленная матрица размера 5 x 10. Вывести номер ее первый|последней...

Дана целочисленная прямоугольная матрица. Определить номер строки, в которой находится самая длинная серия одинаковых элементов
Дана целочисленная прямоугольная матрица. Определить номер строки, в которой находится самая...

Дана матрица. Вывести на экран все четные строки, то есть с четными номерами
Дана матрица. Вывести на экран все четные строки, то есть с четными номерами.

Матрица двузначных чисел: первая цифра указывает на номер строки, а вторая – на номер столбца
Заполнить массив N x M двузначными числами так, чтобы первая цифра указывала номер строки, а...


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

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