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

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

Войти
Регистрация
Восстановить пароль
 
mishe4ka
0 / 0 / 0
Регистрация: 21.09.2011
Сообщений: 21
#1

Удаление столбцов из матрицы содержащих число 1 - C++

30.01.2012, 18:14. Просмотров 718. Ответов 3
Метки нет (Все метки)

дана матрица необходимо удалить столбцы содержащие 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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<cstddef>
using namespace std;
/////////////////////////////////////////////
//void deleteone(int n,int m,int one);
void outputm(double** a,int n,int m);
double** inputm(int n,int m);
double** udal(double** a,int n,int m,int &r);
 
///////////////////////////////////////////////
void deleteone(double** a,int n, int m, int one)
{
        int i,j;
        cout<<"Udalen stolb: "<<one<<endl;
        for(j=one; j<m-1; j++)
        {
           for(i=0; i<n; i++)
           {
                        a[i][j]=a[i][j+1];
           }
        }
}
// vvod matrici
double** inputm(int n,int m)
{
    int i,j;
    double** a;
    a=new double*[n];
    if(a==NULL)
    {cout<<endl;
                 exit(1);
    }
 
    for(i=0;i<n;i++)
    {
        a[i]=new double[m];
        if(a[i]==NULL)
        {
            cout<<"net op";
        }
    }
    //vvod matrici
    for(i=0;i<n;i++)
    {
        cout<<"\nVvesti "<<i<<"stroky"<<endl;
        for(j=0;j<m;j++)
            cin>>a[i][j];
    }
    return a;
}
//////////////////////////////////////////////////
//vivod matrici
void outputm(double** a,int n,int m)
{
    int i,j;
    
    for(i=0;i<n;i++)
    {
        cout<<endl;
        for(j=0;j<m;j++)
            cout<<setw(10)<<a[i][j];
    }
}
 
/////////////////////////////////////////////////////////////////
 
//iskluchenie stolbcov s chislom 1
double** udal(double** a,int n,int m,int &r)
{
    int i,j;
    double** b;
    bool  isOne;
 
 
    b=new double*[n];
    if(b==NULL)
    {cout<<endl;
                 exit(1);
    }
 
    for(i=0;i<n;i++)
    {
        b[i]=new double[m];
        if(b[i]==NULL)
        {
            cout<<"net op";
        }
    }
    //kopiryem matr a v matr b
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            b[i][j]=a[i][j];
          
        }
    }   
    /////////////////////////////////////////////////////////////////
  for(j=0; j<m; j++)      // Удаление столбцов
        
  {
      isOne=true;
           for(i=0; i<n; i++)
           
                        if (b[i][j] != 1)
                        {
                                isOne=false;
                                break;
                        }
           
           if(isOne)
           {
             int  one=j;
             cout<<"Udalen stolb: "<<one<<endl;
             r=m-1;
              for(j=one; j<r; j++)
              {
                for(i=0; i<n; i++)
                    {
                        b[i][j]=b[i][j+1];
                       
                     }
              }
           }
  }
 
 
 return b;
    
}
 
 
/////////////////////////////////////////////////////////////////////
void main()
{
    int n,m,r;
    double** matr;
    double** b;
    cout<<"\nVvedite chislo strok\n";
    cin>>n;
    cout<<"\nVvedite chislo stolbcov\n";
    cin>>m;
    cout<<"\nVvesti cherez probel koordinati massiva matr\n";
    matr=inputm(n,m);
 
    cout<<"\nVivod massiva\n";
    outputm(matr,n,m);
    cout<<"\n yplotnenai matrica\n";
    b=udal(matr,n,m,r);
    outputm(b,n,r);
    
 
 
 
    cout<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 18:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление столбцов из матрицы содержащих число 1 (C++):

Определить количество столбцов матрицы, содержащих нуль - C++
Дана матрица 5х4. - Определить количество стобцов, содержащих нуль.

Определить номера столбцов матрицы не содержащих нулевых элементов - C++
Задание: Определить номера столбцов без нулевых элементов. Вывести на экран исходный массив и новый, в котором к элементам первой строки...

Найти количество столбцов матрицы, не содержащих нулевого элемента - C++
Дано целочисленную прямоугольную матрицу 1). Количество столбцов, что не содержащих нулевого элемента ; 2). Расположить строки матрицы...

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

Определить количество столбцов матрицы, не содержащих ни одного отрицательного элемента - C++
Двумерные массивы Дана целочисленная прямоугольная матрица. 1) определить количество столбцов, не содержащих ни одного...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.01.2012, 18:22 #2
Цитата Сообщение от mishe4ka Посмотреть сообщение
необходимо удалить
А что Вы понимаете под удалением столбцов? В Си/С++ нельзя так просто взять и удалить. Можно создать новый массив и скопировать туда все значения. Можно затереть столбцы с единицами другими столбцами. Можно много еще чего. Так что именно Вам нужно?
mishe4ka
0 / 0 / 0
Регистрация: 21.09.2011
Сообщений: 21
30.01.2012, 20:33  [ТС] #3
Сформировать матрицу В, исключив из матрицы А столбцы,содержащие элементы, равные 1.
Сформировать массив D номеров столбцов матрицы содержащей элементы, равные 1.
Матрица динамическая. Далее буду реализовывать в однодокументном приложении
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
01.02.2012, 07:10 #4
Для динамических структур лучше использовать контейнеры stl, но если нужны именно массивы, то вот мой вариант:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
using namespace std;
 
typedef const size_t cst;
typedef unsigned ui;
 
// создание двухмерного динамического массива
ui** create_array_2d( cst, cst );
// удаление двухмерного динамического массива
void free_array_2d( ui**, cst );
// заполнение двухмерного массива псевдослучайными целочисленными значениями
void fill_rand_array_2d( ui**, cst, cst );
// вывод двухмерного массива на экран
void print_array_2d( ui**, cst, cst );
// вывод одномерного массива на экран
void print_array_1d( ui*, cst );
// формирование массива индексов столбцов другого массива, в которых содержаться элементы равные 1
ui* generate_array_num_cols( ui**, cst, cst );
// формирование массива из столбцов другого массива, в которых отсутствуют элементы, равные 1
ui** generate_array_scheme( ui**, ui*, cst, cst, cst );
 
int main() {
    srand( time( NULL ) );
 
    size_t rows, a_cols, b_cols, d_size = 0;
    ui **a, **b;
    ui *d;
 
    // вводим исходные данные для массива a
    cout << "Введите количество строк и количество столбцов через пробел"
            << endl;
    cin >> rows >> a_cols;
 
    a = create_array_2d( rows, a_cols ); //создаем массив a
    fill_rand_array_2d( a, rows, a_cols ); // заполняем массив a
    d = generate_array_num_cols( a, rows, a_cols ); // генерируем массив d
    d_size = d[ -1 ]; //узнаем размер массива d, если больше нуля, то массив сгенерирован
    b_cols = a_cols - d_size; // считаем размер массива b
 
    // выводим на экран массив a
    cout << "Исходный массив A:" << endl;
    print_array_2d( a, rows, a_cols );
 
    // если размер массива b больше нуля, то генерируем его
    if ( b_cols ) {
        b = generate_array_scheme( a, d, rows, a_cols, b_cols );
 
        // выводим на экран массив b
        cout
                << "Новый массив B - столбцы массива A, в которых отсутствуют элементы равные 1:"
                << endl;
        print_array_2d( b, rows, b_cols );
 
        // освобождаем память от массива b
        free_array_2d( b, rows );
    }
    //  если размер массива b равен нулю, то выводим на экран сообщение
    else
        cout
                << "Массив B пустой, так как в каждом столбце массива A содержаться элементы равные 1"
                << endl;
 
 
 
    // если размер массива d больше нуля, то выводим его на экран
    if ( d_size ) {
        cout
                << "Новый массив D - индексы столбцов массива A, в которых содержаться элементы равные 1:"
                << endl;
        print_array_1d( d, d_size );
 
        // освобождаем память от массива d
        delete[] --d;
 
    } else
        cout
                << "Массив D пустой, так как массив A на содержит элементов равных 1"
                << endl;
 
 
    // // освобождаем память от массива a
    free_array_2d( a, rows );
 
    return 0;
}
 
ui** create_array_2d( cst dimm1, cst dimm2 ) {
    ui** temp_arr = new ui*[ dimm1 ];
 
    for ( size_t i = 0; i != dimm1; ++i )
        temp_arr[ i ] = new ui[ dimm2 ];
 
    return temp_arr;
}
 
void free_array_2d( ui** arr, cst dimm ) {
    for ( size_t i = 0; i < dimm; i++ )
        delete[] arr[ i ];
    delete[] arr;
 
}
 
void fill_rand_array_2d( ui** arr, cst dimm1, cst dimm2 ) {
    for ( size_t i = 0; i != dimm1; ++i )
        for ( size_t j = 0; j != dimm2; ++j )
            arr[ i ][ j ] = rand() % 11; //[ 0..10 ]
}
 
void print_array_2d( ui** arr, cst dimm1, cst dimm2 ) {
    for ( size_t i = 0; i != dimm1; ++i ) {
        for ( size_t j = 0; j != dimm2; ++j )
            cout << setw( 3 ) << arr[ i ][ j ];
        cout << endl;
    }
}
 
void print_array_1d( ui* arr, cst dimm ) {
    for ( size_t i = 0; i != dimm; ++i )
        cout << setw( 3 ) << arr[ i ];
    cout << endl;
}
 
ui* generate_array_num_cols( ui** src_arr, cst dimm1, cst dimm2 ) {
    size_t temp_dimm = 0;
    ui *temp_arr = new ui[ dimm2 ], *dest_arr;
 
    for ( size_t j = 0; j != dimm2; ++j )
        for ( size_t i = 0; i != dimm1; ++i )
            if ( src_arr[ i ][ j ] == 1 ) {
                temp_arr[ temp_dimm ] = j;
                ++temp_dimm;
                break;
            }
 
    if ( temp_dimm ) {
        dest_arr = new ui[ temp_dimm + 1 ];
        dest_arr[ 0 ] = temp_dimm; // тут храним размер массива
        for ( size_t i = 1; i <= temp_dimm; ++i )
            dest_arr[ i ] = temp_arr[ i - 1 ];
    }
 
    delete[] temp_arr;
 
    return ++dest_arr;
}
 
ui** generate_array_scheme( ui** src_arr, ui* arr_nums, cst dimm1, cst dimm2,
        cst dimm_dest_cols ) {
    ui** dest_arr = create_array_2d( dimm1, dimm_dest_cols );
    size_t temp_dimm = dimm2 - dimm_dest_cols, ind = 0;
    bool flag;
 
    for ( size_t j = 0; j != dimm2; ++j ) {
        flag = false;
        for ( size_t i = 0; i != dimm1; ++i ) {
            for ( size_t k = 0; k != temp_dimm; ++k )
 
                if ( arr_nums[ k ] == j ) {
                    flag = true;
                    ++ind;
                    break;
                }
 
            if ( flag )
                break;
            else
                dest_arr[ i ][ j - ind ] = src_arr[ i ][ j ];
        }
    }
    return dest_arr;
}
Консоль
Введите количество строк и количество столбцов через пробел
3 6
Исходный массив A:
8 1 7 1 9 6
2 10 9 1 6 0
7 3 9 5 5 7
Новый массив B - столбцы массива A, в которых отсутствуют элементы равные 1:
8 7 9 6
2 9 6 0
7 9 5 7
Новый массив D - индексы столбцов массива A, в которых содержаться элементы равные 1:
1 3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2012, 07:10
Привет! Вот еще темы с ответами:

Определить количество столбцов матрицы, не содержащих ни одного нулевого элемента - C++
1. Условные операторы. а.) Вычислить значения функциии при заданных условиях. Подготовить тесты (число тестов...

Определить номера столбцов содержащих только отрицательные элементы матрицы - C++
Помогите пожалуйста сделать задание : определить номера столбцов содержащих только отрицательные элементы матрицы nxm

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

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


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

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

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