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

Составить одномерный массив из номеров столбцов матрицы

03.01.2021, 15:38. Показов 2701. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Целочисленная прямоугольная матрица X, размерностью k×n, задана с клавиатуры. Составить одномерный массив Z из номеров столбцов, в которых элементы не упорядочены по возрастанию (строго). Вывести в текстовый файл исходную матрицу X и одномерный массив Z (если таких столбцов нет, то выводим строку “Noy”).
Оформить также вывод на экран с помощью вспомогательной функции.
Например:

X: 7 0 -2 7
-3 2 5 14
4 4 5 15
0 9 7 22
Z: 0 2
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2021, 15:38
Ответы с готовыми решениями:

Составить одномерный массив из средних значений элементов нечетных столбцов матрицы
С клавиатуры вводится вещественная матрица MxN (M<=12, N<=18). Составить одномерный массив из средних значений элементов нечетных столбцов...

Получить одномерный массив из номеров столбцов, все элементы которых нули
Вот условие: Для двовимірного масиву з M*N чисел отримати новий одновимірний масив з номерів стовпців, усі елементи яких нулі. Получить...

Составить одномерный массив из номеров столбцов матрицы, элементы которых упорядоченны по порядку
Дана вещественная матрица размером mxn . Составить одномерный массив из номеров столбцов, элементы которых упорядоченны по порядку .

10
168 / 73 / 33
Регистрация: 13.04.2019
Сообщений: 370
03.01.2021, 18:46
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
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int** a = new int* [n];
    for (int i = 0; i < n; ++i)
        a[i] = new int [n];
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            a[i][j] = 0;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n - i; ++j)
        {
            a[i][j] = i + 1;
        }
    }
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }   
    return 0;
}
Добавлено через 5 минут
Извините, не то скинула
0
0 / 0 / 0
Регистрация: 16.12.2020
Сообщений: 10
03.01.2021, 19:46  [ТС]
Есть код, который выводит номера строк (по возрастанию) на экран. Как его можно переделать под условия моей задачи?
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
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, m;
    cout << "Введите число строк ";
    cin >> n;
    cout << "Введите число стобцов ";
    cin >> m;
    int** b = new int*[n];
    vector<int> z;
    for (int i = 0; i < n; i++)
        b[i] = new int[m];
    cout << "Введите элементы матрицы" << endl;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            cin >> b[i][j];
    cout << "Матрица:" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << " " << b[i][j];
        cout << endl;
    }
    bool t;
    for (int i = 0; i < n; i++)
    {
        t = true;
        for (int j = 0; j < m - 1 && t; j++)
        {
            if (b[i][j] >= b[i][j + 1]) t = false;
        }
        if (t) z.push_back(i);
    }
    cout << "Массив z: ";
    if (z.size() > 0)
    {
        for (int i = 0; i < z.size(); i++)
            cout << z[i] << ", ";
    }
    else cout << "Noy" << endl;
    system ("pause");
    return 0;
}
0
168 / 73 / 33
Регистрация: 13.04.2019
Сообщений: 370
03.01.2021, 21:37
Alexxxx312,
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
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
int main()
{
    srand(time(0));
    ofstream outf("output.txt");
    int n, k, index = 0;
    cin >> k >> n;
    int** a = new int* [k];
    for (int i = 0; i < k; ++i)
        a[i] = new int [n];
    int* z = new int [n];
    for (int i = 0; i < k; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            a[i][j] = 10 + rand() % 90;
            outf << a[i][j] << " ";
        }
        outf << "\n";
    }
    for (int i = 0; i < k; ++i)
    {
        for (int j = 0; j < n; ++j)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    for (int j = 0; j < n; ++j)
    {
        int count = 0;
        for (int i = 0; i < k - 1; ++i)
        {
            if (a[i+1][j] > a[i][j])
            {
                ++count;    
            }
        }
        if (count < k - 1)
        {
            z[index] = j;
            ++index;
        }       
    }
    for (int i = 0; i < index; ++i)
        cout << z[i] << " ";
    outf << "\n";
    if (index == 0)
        outf << "Noy";
    else
    {
        for (int i = 0; i < index; ++i)
            outf << z[i] << " ";
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 16.12.2020
Сообщений: 10
03.01.2021, 21:50  [ТС]
А возможно ли в данном случае реализовать метод ручного ввода элементов матрицы? (как из моего примера)
0
168 / 73 / 33
Регистрация: 13.04.2019
Сообщений: 370
04.01.2021, 00:14
Alexxxx312, Да, просто замените 19 строчку
C++
1
a[i][j] = 10 + rand() % 90;
на
C++
1
cin >> a[i][j];
Не забудьте перед этим ввести размерность матрица k*n(значение строк и столбца)
Можете тогда убрать строчки 24-31, которые отвечают за вывод массив в консоль (у вас просто 2 раза будут выводиться, так как один раз вручную сделали, а потом программа еще раз ее выведет)
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.01.2021, 05:56
Marina-Marina, у ТС ведь не зря в коде вектор, создать массив большего размера чем количество нужных столбцов не является решением, кроме того зачем усложнили алгоритм ? также нет функций:
Цитата Сообщение от Alexxxx312 Посмотреть сообщение
вывод на экран с помощью вспомогательной функции
Цитата Сообщение от Alexxxx312 Посмотреть сообщение
Z: 0 2
столбцы нумеруются с единицы, ответ: Z: 1 3

Alexxxx, переделал Ваш код под столбцы, добавил функции вывода на печать и освобождение памяти - поменяйте название переменных на на k,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
#include <iostream>
#include <vector>
using namespace std;
 
void Print2D (int **X, int n, int m)
{
    cout << "X: ";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)       
        cout << X[i][j] << " ";        
    cout << "\n";
    }
}
 
void Print (const vector<int>& Z)
{   
    cout << "Z: ";
    for (size_t i=0; i < Z.size(); i++)               
        cout << Z[i] << " ";        
    cout << "\n";    
}
 
int main()
{    
    int n, m, t;
    cout << "n="; cin >> n;
    cout << "m="; cin >> m;    
 
      int** X = new int*[n];   
    for (int i = 0; i < n; i++)
        X[i] = new int[m];       
       
        vector<int> Z;
        
    cout << "Enter matrix X " << n << "x" << m << ":\n";
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            cin >> X[i][j];            
    
    Print2D (X,n,m);    
    
    for (int j = 0; j < m; j++)
    {
        t=0;
        for (int i = 0; i < n-1; i++)        
            if (X[i][j] >= X[i+1][j]) {t=1;break;}        
        if (t) Z.push_back(j+1);
    }
    
    if (Z.size()>0) Print(Z);        
    else cout << "NO\n";    
    
    for (int i = 0; i < n; i++)
    delete[]X[i];
    delete[]X;
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 16.12.2020
Сообщений: 10
05.01.2021, 19:17  [ТС]
Yetty, при использовании вывода результата в файл через ofstream outf у меня не отображается вывод в самой консоли, как это можно исправить?
( На название переменных не обращайте внимание)
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
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ofstream outf("Результат.txt");
 
void Print2D (int **M, int k , int n )
{
    cout << "M: ";
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < n; j++)       
        outf << M[i][j] << " ";     
    outf << "\n";
    }
}
 
void Print (const vector<int>& A)
{   
    cout << "A: ";
    for (size_t i=0; i < A.size(); i++)               
        outf << A[i] << " ";        
    outf << "\n";    
}
 
int main()
{   
    setlocale(LC_ALL, "Russian");
    int k, n, t;
    cout << "Введите число строк k: "; cin >> k;
    cout << "Введите число столбцов n: "; cin >> n;    
 
      int** M = new int*[k];
      for (int i = 0; i < k; i++)
          M[i] = new int[n];
      vector<int> A;
        
    cout << "Введите элементы матрицы M: " << k << "x" << n << ":\n";
    for (int i = 0; i < k; i++)
        for (int j = 0; j < n; j++)
            cin >> M[i][j];
    system("cls");
    
    Print2D (M,k,n);
    
    
    for (int j = 0; j < n; j++)
    {
        t=0;
        for (int i = 0; i < k-1; i++)        
            if (M[i][j] >= M[i+1][j]) {t=1;break;}        
        if (t) A.push_back(j+1);
    }
    
    if (A.size()>0) Print(A);        
    else outf << "Noy\n";    
    
    for (int i = 0; i < k; i++)
    delete[]M[i];
    delete[]M;
system("pause");
return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.01.2021, 19:49
Цитата Сообщение от Alexxxx312 Посмотреть сообщение
у меня не отображается вывод в самой консоли
так если Вы вместо вывода на экран (как было) перенаправили вывод в файл, понятно что не отображается

я бы не рекомендовал Вам портить фунции вывода на экран, по условию:
Цитата Сообщение от Alexxxx312 Посмотреть сообщение
Оформить также вывод на экран с помощью вспомогательной функции
вывод в файл напишите в основной функции или отдельные функции создайте - это уже на Ваше усмотрение
0
0 / 0 / 0
Регистрация: 16.12.2020
Сообщений: 10
05.01.2021, 22:06  [ТС]
Yetty, как это можно реализовать через основную функцию? (язык начал изучать недавно, имеются проблемы с матчастью )

Добавлено через 1 час 34 минуты
Вывод матрицы на экран и в файл у меня получился, а вот с номерами столбцов проблема
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 <fstream>
#include <vector>
using namespace std;
ofstream outf("Результат.txt");
 
 
void Print2D (int **M, int k , int n )
{
    cout << "Матрица: " << endl;
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < n; j++)       
        cout << M[i][j] << " ";
    cout << "\n";
    }
}
void Result (int **M, int k , int n )
{
    outf << "Матрица: " << endl;
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < n; j++)       
        outf << M[i][j] << " ";
    outf << "\n";
    }
}
 
void Print (const vector<int>& A)
{   
    cout << "Столбцы: ";
    for (size_t i=0; i < A.size(); i++)               
        cout << A[i] << " ";        
    cout << "\n";    
}
 
void Result2 (const vector<int>& A)
{   
    outf << "Столбцы: ";
    for (size_t i=0; i < A.size(); i++)               
        outf << A[i] << " ";        
    outf << "\n";    
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int k, n, t;
    cout << "Введите число строк k: "; cin >> k;
    cout << "Введите число столбцов n: "; cin >> n;   
      int** M = new int*[k];
      for (int i = 0; i < k; i++)
          M[i] = new int[n];
      vector<int> A;
        
    cout << "Введите элементы матрицы M: " << k << "x" << n << ":\n";
    for (int i = 0; i < k; i++)
        for (int j = 0; j < n; j++)
            cin >> M[i][j];
    system("cls");
 
    Print2D (M,k,n);
    Result (M,k,n);
   
    for (int j = 0; j < n; j++)
    {
        t=0;
        for (int i = 0; i < k-1; i++)        
            if (M[i][j] >= M[i+1][j]) {t=1;break;}        
        if (t) A.push_back(j+1);
    }
    if (A.size()>0) Print(A);        
    else cout << "Noy\n";
 
    if (A.size()>0) Result2(A);        
    else outf << "Noy\n";
    
    for (int i = 10; i < k; i++)
    delete[]M[i];
    delete[]M;
system("pause");
return 0;
}
Добавлено через 10 минут
Yetty, Upd с проблемой разобрался, всё работает.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
06.01.2021, 04:50
Цитата Сообщение от Alexxxx312 Посмотреть сообщение
с проблемой разобрался, всё работает
исправьте опечатку в строке 79 i=0, новым функциям дайте осмысленное название, чтобы было понятно что они делают, например для матрицы output_file_2D, верните название массивам как они названы в условии
Цитата Сообщение от Alexxxx312 Посмотреть сообщение
Целочисленная прямоугольная матрица X, одномерный массив Z
поток лучше назвать out, строки 73-77 так:
C++
1
2
3
4
5
6
if (Z.size()>0) 
{
    print(Z);
    output_file(Z);
}        
else {cout << "N0\n";out << "NO\n";}
Добавлено через 17 минут
попробуйте открыть файл для записи в основной функции, добавить проверку на успешное открытие и передать в функцию так:
C++
1
void output_file_2D(ofstream &out,int **M, int k , int n)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2021, 04:50
Помогаю со студенческими работами здесь

Составить одномерный массив из номеров столбцов матрицы, элементы которых упорядочены по возрастанию
Дана вещественная матрица размером NxM. Составить одномерный массив из номеров столбцов ,элементы которых упорядочены по возрастанию

Дан двухмерный массив A[m,n]. Составить одномерный массив из номеров столбцов исходного двухмерного массива, в
Добрый день, никак не получается решить данную задачу. Дан двухмерный массив A. Составить одномерный массив из номеров столбцов...

Дан двумерный массив А. Составить одномерный массив В из номеров столбцов, где все элементы простые числа
Дан двумерный массив А. Составить одномерный массив В из номеров столбцов, где все элементы простые числа. :gsad: Добавлено через 9...

Дан двумерный массив. Составить одномерный массив из номеров столбцов, где на главной диагонали число Фибоначчи
Дан двумерный массив. Составить одномерный массив из номеров столбцов, где на главной диагонали число Фибоначчи. Оформить в виде...

Составить одномерный массив В из номеров столбцов, все элементы которых отрицательны
Помогите написать программу. Дана матрица А(m,n). Составить одномерный массив В, в котором В(j) (j=1,2,...,N) равно номерам столбцов, все...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru