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

16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов - C++

Восстановить пароль Регистрация
 
Valera1984
1 / 1 / 0
Регистрация: 02.02.2014
Сообщений: 104
11.02.2014, 11:19     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #1
Удалить из матрицы A(m*n) строку, содержащую наибольшее количество нулевых элементов.

Программа отлажена работает, но падает когда матрица попадается без нулей как это исправить.
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
#include"stdafx.h"
#include"iostream"
#include"conio.h"
#include<time.h>
#include<iomanip>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    
 
    cout<<"      Avtor – Kondratiev V.V., student gr. ISEbv-11"<<endl;
    cout<<"      Variant N 16"<<endl;
    cout<<"      Dana matrica A(n x m)  Udalit stroky sodergashij bolshe vsego nuleii.Ishodnyumatricu sgenerirovats sluchainimi chislami."<<endl<<endl;
    int n = 5;
    int m = 7;
    int noll=0;
    int ind;
    int a[5][7];
cout<<"Isxodnaya matrica:"<<endl;   
srand(time(NULL));
cout.precision(10);
 
    for (int i = 0; i< n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            a[i][j]=rand() %20-10 ;
            cout<<setw(3)<<a[i][j]<<" ";
        }
        
        cout<<endl;
    }
    
    
 
 
    for(int i = 0; i< n; i++)
    {
        int k=0;
        for(int j = 0; j < m; j++)
        {
            if(a[i][j] ==0)
            {
                k++;
                
            }
            
        }
      
 
       if (k>noll)
            {
                noll=k;
                ind=i;
            }
      
    }
 
 
 
for (int i=ind; i<n-1;i++)
    
 
 {
     for (int j=0; j<m;j++)
         a[i][j]= a[i+1][j];
 
 }
 
    cout<<"Nulivish ilementov bolshe v stroke ="<<ind<<" "<<endl;
    cout<<"  Rezult matrica:"<<endl;
    for (int i = 0; i< n-1; i++)
    {
        for(int j = 0; j < m; j++)
        {
            cout<<setw(3)<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    _getch();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 11:19     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов
Посмотрите здесь:

C++ В матрице целых чисел поменять нулевую строку со строкой, содержащей наибольшее количество повторяющихся элементов.
Удалить из матрицы те строки, для которых количество ненулевых элементов больше количества нулевых элементов в строке C++
Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент C++
C++ Массив: Удалить строку, в котором есть слово, имеющее наибольшее количество разных букв.
C++ Найти сумму положительных элементов матрицы А, количество нулевых элементов матрицы B
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 11:32     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #2
у вас в ind рандомное число получается так как вы его не инициализируете и соответственно когда вы пишите:
C++
1
for (int i=ind; i<n-1;i++)
фиг его знает куда оно укажет, а указывает оно за приделами вашей матрицы
Я бы посоветовал бы вам сделать ее равной -1, а потом делать проверку если она равна -1, то пропустить участок кода где вы переносите элементы

и соответственно исправить ваш цикл при выводе.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
11.02.2014, 11:35     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #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
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
#include<iostream>
#include<conio.h>
#include<time.h>
#include<iomanip>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    
 
    cout<<"      Avtor – Kondratiev V.V., student gr. ISEbv-11"<<endl;
    cout<<"      Variant N 16"<<endl;
    cout<<"      Dana matrica A(n x m)  Udalit stroky sodergashij bolshe vsego nuleii.Ishodnyumatricu sgenerirovats sluchainimi chislami."<<endl<<endl;
    int n = 5;
    int m = 7;
    int noll=0;
    int ind=-1;
    int a[5][7];
cout<<"Isxodnaya matrica:"<<endl;   
srand(time(NULL));
cout.precision(10);
 
    for (int i = 0; i< n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            a[i][j]=rand() %20-10 ;
            cout<<setw(3)<<a[i][j]<<" ";
        }
        
        cout<<endl;
    }
    
    
 
 
    for(int i = 0; i< n; i++)
    {
        int k=0;
        for(int j = 0; j < m; j++)
        {
            if(a[i][j] ==0)
            {
                k++;
                
            }
            
        }
      
 
       if (k>noll)
            {
                noll=k;
                ind=i;
            }
      
    }
 
 
if( ind != -1 )
 for (int i=ind; i<n-1; i++)
  {
     for (int j=0; j<m; j++)
         a[i][j] = a[i+1][j];
 
  }
    if( ind != -1 )
      cout<<"Nulivish ilementov bolshe v stroke ="<<ind<<" "<<endl;
    else
      cout<<"Nulivish ilementov net"<<endl;
 
    cout<<"  Rezult matrica:"<<endl;
    for (int i = 0; i< (ind!=-1 ? n-1 : n); i++)
    {
        for(int j = 0; j < m; j++)
        {
            cout<<setw(3)<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    _getch();
    return 0;
}
Valera1984
1 / 1 / 0
Регистрация: 02.02.2014
Сообщений: 104
11.02.2014, 11:42  [ТС]     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #4
SatanaXIII, Спасибо но этот код у меня не компилируется...
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
11.02.2014, 11:44     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Valera1984, это потому, что он уже скомпилировался у меня.
Замените вон те зелененькие фигнюшечки в начале кода на ваши:
C++
1
2
3
4
5
#include"stdafx.h"
#include"iostream"
#include"conio.h"
#include<time.h>
#include<iomanip>
Valera1984
1 / 1 / 0
Регистрация: 02.02.2014
Сообщений: 104
11.02.2014, 11:47  [ТС]     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #6
Спасибо
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 11:49     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #7
SatanaXIII, может речь не идет тут о скорости выполнения программы но запись:
C++
1
for (int i = 0; i< (ind!=-1 ? n-1 : n); i++)
Каждый раз при прохождении цикла будет проверятся условие ind!=-1, думаю лучше записать так:
C++
1
2
n-=(ind!=-1 ? 1 : 0);
for (int i = 0; i< n; i++)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 11:52     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов
Еще ссылки по теме:

C++ Сформировать одномерный массив, содержащий количество нулевых элементов каждой строки матрицы
Определить количество положительных, отрицательных и нулевых элементов матрицы A(10,15). (Создать три функции для нахождения этих значений) C++
Найти строку матрицы, в которой наибольшее количество разных чисел, и отсортировать её по убыванию C++

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
11.02.2014, 11:52     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов #8
Цитата Сообщение от ShadowFirst Посмотреть сообщение
думаю лучше записать так
Хоть всю перепишите. Там хороший фронт работ.
Yandex
Объявления
11.02.2014, 11:52     16. Удалить из матрицы строку, содержащую наибольшее количество нулевых элементов
Ответ Создать тему
Опции темы

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