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

Найти минимальный элемент главной диагонали

28.02.2021, 14:09. Показов 6321. Ответов 16

Студворк — интернет-сервис помощи студентам
Добрый день помогите пожалуйста с задачкой.
Вообще полностью задание выглядит вот тако вот

"Ввести с клавиатуры целые числа и сформировать из них массив a[n][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
#include <iostream>
#include <stdio.h>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main(){
    int n, m;
    cout << "Enter number of rows" << "\n";
    cin >> n;
    cout << "Enter number of column" << "\n";
    cin >> m;
    int x[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                x[i][j] = rand() % 100;
            }
        }
    for(int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << x[i][j] << "\t";
        }
        cout << endl;
    }
    int min=x[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if(x[i][j]<min)
            min=x[i][j];
        }
    }
    cout << "Min = " << min << "\n";
 
    return 0;
}
и тут пошли проблемы заметил, что массив создается не из рандомных чисел, а всегда из одних и тех же



и минимальное значение всегда 0.
И дальше я что-то не могу понять куда дальше копать.
Компилятор не ругается.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2021, 14:09
Ответы с готовыми решениями:

Найти произведение максимального элемента главной диагонали на минимальный элемент побочной диагонали
Всем привет! Мастера помогите доделать задание с матрицой. Вот само задание: Найти произведение максимального элемента главной...

Найти минимальный элемент на главной диагонали
В данной действительной квадратной матрице порядка N*N. Найти минимальный элемент на главной диагонали.

Найти минимальный элемент главной диагонали матрицы
Доброго времени суток, уважаемые форумчане. Помогите, пожалуйста, написать программу, согласно этому условию. Даны матрицы A (4×4),...

16
22 / 14 / 8
Регистрация: 19.03.2020
Сообщений: 55
28.02.2021, 14:18
Перед первым rand() в любом месте добавь.
C++
1
srand (time(NULL));
Это создаст стартовое значение генератора случайных чисел, зависящее от текущего времени.
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
28.02.2021, 14:22
Цитата Сообщение от PvPSova29 Посмотреть сообщение
и минимальное значение всегда 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
#include <iostream>
#include <stdio.h>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main() {
    int n, m;
    cout << "Enter number of rows" << "\n";
    cin >> n;
    cout << "Enter number of column" << "\n";
    cin >> m;
    int** x = new int* [n];
    for (int i = 0; i < n; i++)
        x[i] = new int[m];
 
    srand((int)time(0));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            x[i][j] = rand() % 100;
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << x[i][j] << "\t";
        }
        cout << endl;
    }
    int min = x[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (x[i][j] < min)
                min = x[i][j];
        }
    }
    cout << "Min = " << min << "\n";
    for (int i = 0; i < n; i++)
        delete[] x[i];
    delete[] x;
 
    return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.02.2021, 14:48
PvPSova29, числа по условию вводятся с клавиатуры, рандом не нужен, матрица квадратная - размер вводите только 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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main() 
{    
    int n, imin=0;
    cout << "n="; cin >> n;    
    
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
        a[i] = new int[n];
 
    cout << "Enter integer matrix " << n << "x" << n << ":\n";
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < n; j++)        
            cin >> a[i][j];
            
    for (int i = 0; i < n; i++)        
        if (a[i][i]<a[imin][imin]) imin=i;        
            
    cout << "index main diagonal min = " << imin << "\n";  
    
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a; 
system("pause");
return 0;
}
индекс можно найти и в цикле заполнения, вынес в отдельный цикл чтобы Вам было понятнее
0
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 20
28.02.2021, 14:54  [ТС]
Исправил, сейчас выглядит вот так
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
#include <iostream>
#include <stdio.h>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main(){
    int n, m;
    cout << "Enter number of rows" << "\n";
    cin >> n;
    cout << "Enter number of column" << "\n";
    cin >> m;
    //int x[n][m];
    int** x = new int* [n];
    for (int i = 0; i < n; i++)
        x[i] = new int[m];
 
    srand((int)time(0));
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                x[i][j] = rand() % 100;
            }
        }
    for(int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cout << x[i][j] << "\t";
        }
        cout << endl;
    }
    int min=x[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if(x[i][j]<min)
            min=x[i][j];
        }
    }
    cout << "Min = " << min << "\n";
    for (int i = 0; i < n; i++)
        delete[] x[i];
    delete[] x;
 
    return 0;
}
Но вот эта часть должна находить минимальный элемент главной диагонали, а находит просто минимальный элемент массива.
C++
1
2
3
4
5
int min=x[0][0];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if(x[i][j]<min)
            min=x[i][j];
Или я не так рассуждаю?
0
28.02.2021, 14:56

Не по теме:

Цитата Сообщение от PvPSova29 Посмотреть сообщение
Или я не так рассуждаю?
Вы прочитали моё сообщение ?

0
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 20
28.02.2021, 15:00  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
PvPSova29, числа по условию вводятся с клавиатуры, рандом не нужен, матрица квадратная - размер вводите только 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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main() 
{    
    int n, imin=0;
    cout << "n="; cin >> n;    
    
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
        a[i] = new int[n];
 
    cout << "Enter integer matrix " << n << "x" << n << ":\n";
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < n; j++)        
            cin >> a[i][j];
            
    for (int i = 0; i < n; i++)        
        if (a[i][i]<a[imin][imin]) imin=i;        
            
    cout << "index main diagonal min = " << imin << "\n";  
    
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a; 
system("pause");
return 0;
}
индекс можно найти и в цикле заполнения, вынес в отдельный цикл чтобы Вам было понятнее
Я прочитал, но не как не могу переварить
0
28.02.2021, 15:05

Не по теме:

что именно не понятно ?

0
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 20
28.02.2021, 15:08  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение

Не по теме:

что именно не понятно ?

Я наверно плохо теорию знаю, но почему ищем именно индекс, я думал искать нужно именно минимальный элемент и не понятный вот эти части когда

Что это и для чего?
C++
1
   int n, imin=0;
и

C++
1
if (a[i][i]<a[imin][imin]) imin=i;
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.02.2021, 15:16
Цитата Сообщение от PvPSova29 Посмотреть сообщение
почему ищем именно индекс
потому что Вам потом столбец удалять с этим индексом, само по себе значение min не интересует
C++
1
int n, imin=0; // n - переменная размера, imin - переменная индекса минимального значения
C++
1
if (a[i][i]<a[imin][imin]) imin=i; // так находится индекс минимального элемента диагонали
решите более простую задачу на нахождение индекса минимального элемента одномерного массива, возможно тогда
написанное станет понятнее
0
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 20
28.02.2021, 15:30  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
потому что Вам потом столбец удалять с этим индексом, само по себе значение min не интересует
C++
1
int n, imin=0; // n - переменная размера, imin - переменная индекса минимального значения
C++
1
if (a[i][i]<a[imin][imin]) imin=i; // так находится индекс минимального элемента диагонали
решите более простую задачу на нахождение индекса минимального элемента одномерного массива, возможно тогда
написанное станет понятнее
Я вроде начал потихоньку понимать
Можно еще вопросик для чего вот эта часть
C++
1
2
   delete[]a[i];
    delete[]a;
0
 Аватар для ant-ares
18 / 9 / 4
Регистрация: 22.04.2016
Сообщений: 310
28.02.2021, 15:40
вам надо перебрать только элементы у которых номер строки=номеру столбца, при этом подменой запоминать минимальное значение и вместе с этим также запоминать индекс столбца этого значения; в конце получите минимальное значение в главной диагонали и номер столбца где оно сидит; столбец удалите замещением следующими за ним столбцами, их смещением влево
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.02.2021, 15:44
PvPSova29, статический массив при вводе размера с клавиатуры не по стандарту С++, так как размер статического должен быть известен на стадии компиляции. при вводе размера массива с клавиатуры применяется динамический массив
C++
1
2
3
4
// объявление динамического массива
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
        a[i] = new int[m];
после того, как массив уже не нужен следует освободить память, выделенную под массив:
C++
1
2
3
4
// освобождение памяти
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
1
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 20
28.02.2021, 16:00  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
PvPSova29, статический массив при вводе размера с клавиатуры не по стандарту С++, так как размер статического должен быть известен на стадии компиляции. при вводе размера массива с клавиатуры применяется динамический массив
C++
1
2
3
4
// объявление динамического массива
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
        a[i] = new int[m];
после того, как массив уже не нужен следует освободить память, выделенную под массив:
C++
1
2
3
4
// освобождение памяти
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
Так хорошо, мы создали массив, нашли столбец(
C++
1
imin=i;
) в котором находится минимальный элемент главной диагонали
И последний тогда уж вопрос как его удалить обычного
C++
1
delete[]a[imin];
будет недостаточно?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.02.2021, 16:30
PvPSova29, освобождение памяти не имеет отношения к удалению. по-хорошему нужно создать массив b меньшего размера, освободить память начального и переименовать b в а

Добавлено через 10 минут

Не по теме:

p.s. не дублируйте в своих сообщениях предыдущий пост

0
0 / 0 / 0
Регистрация: 12.12.2020
Сообщений: 20
28.02.2021, 16:45  [ТС]
Yetty,

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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main() 
{    
    int n, imin=0;
    cout << "n="; cin >> n;    
    
      int **a = new int*[n];
    for (int i = 0; i < n; i++)
        a[i] = new int[n];
 
    cout << "Enter integer matrix " << n << "x" << n << ":\n";
    for (int i = 0; i < n; i++)    
        for (int j = 0; j < n; j++)        
            cin >> a[i][j];
    cout << "Original matrix" << "\n" <<endl;        
    for(int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << a[i][j] << "\t";
        }
        cout << endl;
    }        
    for (int i = 0; i < n; i++)        
        if (a[i][i]<a[imin][imin]) imin=i;        
            
    cout << "index main diagonal min = " << imin << "\n";
    
      int **b = new int*[n];
    for (int i = 0; i < n; i++)
        b[i] = new int[n];
        
    for(int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) 
            swap (a[i][j], b[i][j]);
    
    cout << "Corected matrix" << "\n" <<endl;        
    for(int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cout << b[i][j] << "\t";
        }
        cout << endl;
    }        
      
    for (int i = 0; i < n; i++)
    delete[]b[i];
    delete[]b; 
    
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;   
system("pause");
return 0;
}
Создал массив b и поменял его места с a, но не понял все таки как удалить столбец?

C++
1
2
3
4
5
6
7
int **b = new int*[n];
    for (int i = 0; i < n; i++)
        b[i] = new int[n];
        
    for(int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) 
            swap (a[i][j], b[i][j]);
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.02.2021, 19:53
PvPSova29, разве не очевидно что в массиве b должно быть на 1 столбец меньше ?
C++
1
2
3
      int **b = new int*[n];
    for (int i = 0; i < n; i++)
        b[i] = new int[n-1];
перенесите в него элементы начальной матрицы без столбца

Добавлено через 23 минуты
p.s. если вводите значение матрицы с клавиатуры, выводить матрицу на печать не нужно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2021, 19:53
Помогаю со студенческими работами здесь

Найти минимальный элемент на главной диагонали матрицы
Найти минимальный элемент на главной диагонали матрицы

Найти минимальный элемент главной диагонали матрицы
Создать квадратный массив 10x10. Найти минимальный элемент главной диагонали.

Найти минимальный элемент главной диагонали матрицы
Даны матрицы A (4×4), B (5×5), C (3×3). Вычислить значение выражения Amin Bmin – Cmin, где Amin (Bmin, Cmin) — минимальный элемент...

Найти минимальный элемент, расположенный на главной диагонали матрицы
1) Для массива А, состоящего из N элементов. a)Найти минимальный элемент, расположенный на главной диагонали матрицы A, а из элементов...

Найти минимальный элемент матрицы, расположенный ниже главной диагонали
Задана матрица размером NxN. Найти минимальный элемент, среди элементов, расположенных ниже главной диагонали, номер его строку и номер его...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru