С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 6

Найти столбцы матрицы, которые содержат элементы равные 1

30.05.2018, 15:29. Показов 1412. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Найти столбцы матрицы, которые содержат элементы равные 1. И создать вектор из номеров столбцов матрицы, которые содержат элементы равные 1. Исправьте, пожалуйста, алгоритм, написанный ниже. Он работает только если один элемент в столбце равен 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
int counter = 0; 
for (int i = 0; i < n; i++) 
{ 
for (int j = 0; j < m; j++) 
{ 
if (a[i][j] == 1) 
counter++; 
} 
} 
int* res = new int[counter]; 
int c = 0; 
for (int i = 0; i < n; i++) 
{ 
for (int j = 0; j < m; j++) 
{ 
if (a[i][j] == 1) 
{ 
res[c] = j; 
c++; 
} 
} 
} 
return res; 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2018, 15:29
Ответы с готовыми решениями:

Матрицы: удалить из матрицы столбцы, в которых есть равные элементы
1.Необходимо удалить из матрицы столбцы, в которых есть равные элементы: для матрицы: 1 2 3 4 5 3 7 9 8 должно получаться: 1 2 ...

Среди тех строк целочисленной матрицы, которые содержат только нечетные элементы, найти строку с максимальной суммой модулей элементов
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cmath&gt; const int m=3,n=3; using namespace std; int a; void poisk(); int...

Поменять местами первую и последнюю строки матрицы, которые содержат одинаковые элементы
1. Дана целочисленная прямоугольная матрица. Поменять местами первую и последнюю строки матрицы, которые содержат одинаковые элементы. 2....

7
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
30.05.2018, 21:37
А теперь узнавай что такое break; и continue; и разбирайся в коде

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
#include<iostream>
 
using namespace std;
 
int * addElement(int * array, int * size, int element){
    int * a = new int[*size+1]; //новый массив для того, чтобы вернуть элементы
    for(int i = 0; i < *size; i++)
        a[i] = array[i]; //копируем массив
    a[*size] = element; //добавляем последний элемент
    (*size)++; //увеличиваем счетчик, так как он передан как указатель, то вне функции мы его тоже изменяем
    free(array); //освобождаем память предыдущего массива
    return a; //возвращаем новый массив
}
 
int main(){
 
    int ** a, n, m;
    cout << "Input matrix size [n m]: ";
    cin >> n >> m;
    a = new int*[n];
 
    cout << "Input matrix:" << endl;
    for(int i = 0; i < n; i++){
        a[i] = new int[m];
        for(int j = 0; j < m; j++)
            cin >> a[i][j];
    }
 
    int * result = new int[0], size = 0;
 
    for(int i = 0; i < m; i++) //m и n меняем местами, чтобы проходить по массиву вертикально
        for(int j = 0; j < n; j++)
            if(a[j][i] == 1){
                result = addElement(result, &size, i + 1); //ну или не +1, смотря как вы делаете вывод, с нуля или с единицы
                break;
            }
 
    cout << "Result:" << endl;
    for(int i = 0; i < size; i++)
        cout << result[i] << ' ';
    cout << endl;
 
    return 0;
}
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
30.05.2018, 21:52
Цитата Сообщение от mvngr Посмотреть сообщение
result = addElement(result, &size, i + 1);
Цитата Сообщение от Zheka_007 Посмотреть сообщение
создать вектор
Зачем так усложнять?
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
30.05.2018, 21:53
Herji, в понятии вектор у этого паренька не std::vector, а просто динамический массив, см. его код

Цитата Сообщение от Zheka_007 Посмотреть сообщение
int* res = new int[counter];
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
30.05.2018, 21:58
mvngr, для точек над Ё: в код я не вчитывался тут. Но и про понятие вектора у автора я не уверен - может он просто и не знает про вектора, а задание написал как есть.
С вектором-то - оно куда короче будет.
0
 Аватар для mvngr
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
30.05.2018, 22:02
Herji, зачем разводить эти беседы. Я знаю, что при помощи векторов это можно сделать быстрее, т.к. это готовый мощный инструмент. Но автор то об этом не знает, а может знает, но нельзя использовать (очень часто бывает). Я предложил код автору темы, а вы его то ли критикуете, то ли говорите, что нужно было сделать по-другому
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
30.05.2018, 22:13
Цитата Сообщение от mvngr Посмотреть сообщение
зачем разводить эти беседы.
сам не люблю такие беседы.
Цитата Сообщение от mvngr Посмотреть сообщение
то ли
Цитата Сообщение от mvngr Посмотреть сообщение
то ли
оба варианта мимо.

Там написано про создание вектора - от я и написал что, видимо, Вы себя зря мучили, создавая дополнительную функцию.
Вашу позицию я понял, надеюсь на взаимность. Кидаться друг в друга дерьмом желания не имею.
Автор вернется - всё встанет на свои места.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
31.05.2018, 12:01
как вариант:
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
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m, k, p=0, t=0;
    cout <<"Enter n: "; cin >>n;
    cout <<"Enter m: "; cin >>m;
    
      double **a = new double*[n]; 
    for (int i = 0; i < n; i++)
      a[i]=new double[m];
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    {
    a[i][j]=rand()%9 + 1;
    cout <<a[i][j]<<" ";
    }
    cout << endl;
    }
    
    for (int j = 0; j < m; j++)
    {
    k=0;    
    for (int i = 0; i < n; i++) 
    if (a[i][j]==1) {k++;break;};
    if (k!=0) p++;
    }
    
    cout <<"OUTPUT:\n";
    if (p==0) cout <<"Cols with 1 are absent\n";
    else
    {
    int*b = new int[p];
    
    for (int j = 0; j < m; j++)
    {
    k=0;    
    for (int i = 0; i < n; i++) 
    if (a[i][j]==1) {k++;break;}
    if (k!=0) b[t++]=j+1;
    }   
    
    for (int i = 0; i < p; i++)
      cout <<b[i]<<" ";
      cout <<endl;
    delete [] b;  
    }  
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;    
system("pause");
return 0;
}
Добавлено через 13 минут
если на выходе нужен не массив, а именно вектор добавьте вначале #include <vector>, вместо объявления массива
объявите вектор - строку 38 замените на vector<int> b(p); и удалите строку 51.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2018, 12:01
Помогаю со студенческими работами здесь

Поменять местами элементы главной и побочной диагонали матрицы и найти столбцы, элементы которых убывают
С++ Задана матрица A(n,n). Поменять местами элементы главной и побочной диагонали. В преобразованной матрице найти столбцы, элементы...

Сформировать матрицу В удалив из А столбцы, которые содержат элемент равный 7
Дана матрица А. Сформировать матрицу В удалив из А столбцы которые содержат элемент равный 7... #include &lt;iostream&gt; #include...

Найти в первой строчки матрицы элементы равные 1 и вывести номер элемента
Что надо исправить?? for ( i = 0; i &lt; N; i ++ ) for ( j = 0; j &lt; M; j ++ ) { if (T==1)...

Отсортировать методом выбора элементы тех строк матрицы, которые содержат символ "/"
помогите пожалуйста сделать задачку: разработать приложение выполняющее след. функции:ввести с клавы значение элементов символьного...

Найти сумму элементов в тех столбцах матрицы, которые содержат хотя бы один отрицательный элемент
Дана вещественная прямоугольная матрица A, размером nxm. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru