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

Исключить из матрицы строку и столбец на пересечении которых расположен максимальный элемент главной диагонали

19.05.2018, 21:52. Показов 4314. Ответов 9

Author24 — интернет-сервис помощи студентам
Задана квадратная матрица действительных чисел 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <limits.h>
#include<stdio.h>
#include<locale.h> 
#include <locale> 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    int a[n][n];
    int n;
    std::cin >> n;
    int* array = new int[n];
    printf("Размер квадратной матрицы n*n = ");
    scanf("%d", &n);
 
    int i, j;
    for (i = 0; i<n; i++)
        for (j = 0; j<n; j++) {
            printf("a[%d][%d]= ", i, j);
            scanf("%d", &a[i][j]);
        }
    printf("\n    МАТРИЦА\n");
    for (i = 0; i<n; i++) {
        for (j = 0; j<n; j++)
            printf("%5d", a[i][j]);
        printf("\n");
    }
    int max = a[0][0];
    int i_max = 0;
    int j_max = 0;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (a[i][j] > max) {
                max = a[i][j];
                i_max = i;
                j_max = j;
            }
 
    for (i = 0; i < n; i++)
        for (j = j_max; j < n - 1; j++)
            a[i][j] = a[i][j + 1];
 
    for (j = 0; j < n - 1; j++)
        for (i = i_max; i < n - 1; i++)
            a[i][j] = a[i + 1][j];
    printf("\nОТРЕДАКТИРОВАННАЯ МАТРИЦА\n");
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1; j++)
            std::cout << std::setw(4) << a[i][j];
        std::cout << std::endl;
    }
    return 0;
}
Ошибка: (12): error C2065: n: необъявленный идентификатор
Подскажите, знающие, что делаю не так?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2018, 21:52
Ответы с готовыми решениями:

Исключить строку и столбец матрицы, на пересечении которых расположен максимальный элемент главной диагонали
Задана квадратная матрица. Исключить из неё строку и столбец, на пересечении которых расположен...

Исключить из нее строку и столбец,на пересечении которых расположен максимальный элемент главной диагонали.
Двумерные массивы. Задание 2. В каждом варианте дан двумерный массив A из N строк и М...

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

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

9
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
19.05.2018, 23:07 2
Цитата Сообщение от shiryaev74 Посмотреть сообщение
for (i = 0; i < n; i++)
* * * * for (j = 0; j < n; j++)
это лишнее. Ежели матрица квадратна -
C++
1
2
for (i = 0; i < n; i++) 
...a[i][i]...
Цитата Сообщение от shiryaev74 Посмотреть сообщение
int a[n][n];
* * int n;
порядок неверный, а как строки местами поменяешь - так тоже не делается. (хотя что за 'a'?)
Цитата Сообщение от shiryaev74 Посмотреть сообщение
int* array = new int[n];
это НЕ квадратная матрица

ну и всё такое, вытекающее из

Добавлено через 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
    int n = 0;
    std::cin >> n;
 
    int v_x = n;
    int v_y = n; //эти штуки понадобятся в будущем
 
    // создаём квадратную матрицу размерности n и заполняем случайными числами
    int **arr = new int*[n];
    for(int i=0; i<n; i++)
    {
                arr[i] = new int[n];
        for(int j=0; j<n; j++)
        {
            arr[i][j] = rand()%10;
            std::cout << arr[i][j] << " "; //а заодно и выводим в консоль
        }
        std::cout << "\n";
    }
 
 
    int max = arr[0][0];
    int maxIndex = 0;
    for(int i=1; i<n; i++)
    {
        if(arr[i][i] > max) // а тут найдем наибольший элемент
        {
            max = arr[i][i];
            maxIndex = i;
        }
    }
 
    //deleteRow(arr, v_x, maxIndex);  //а тут удалим ряд из динамического массива. Функции эти я описал на форуме неоднократно
    //deleteCol(arr, v_y, maxIndex); //..и столбец. Не помню как там точно всё называлось, но v_x и v_y тут важны
 
    for(int i=0; i<v_x; i++)
        delete [] arr[i];
    delete [] arr;
1
Заблокирован
20.05.2018, 00:00 3
Как написал Herji, порядок неверный. Т.е. сначала мы пишем int n, а уже потом int a. Как вы поняли, читаем программу только сверху вниз, если вверху его нет то ошибка.
И зачем писать std::cin, если Вы используете уже этот namespace std (using namespace std)?
Т.к. вы освоили stdio.h, рекомендую не использовать iostream вообще, т.к. программа с использованием stdio меньше весит и лучше работает.
Ну и не вижу, зачем Вам argc и argv, если параметры Вы будете вводить уже когда программа запустилась.
Можете попробовать сделать с параметрами (argc и argv), почитайте в интернете, так намного проще .
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.05.2018, 01:37 4
Лучший ответ Сообщение было отмечено shiryaev74 как решение

Решение

если max на главной диагонали несколько, удалит строку и столбец с первым max:
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
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, imax=0;
    cout <<"Enter n: "; cin >>n;
    
      double **A = new double*[n], max;
    for (int i = 0; i < n; i++)
         A[i]=new double[n];
         
      double **B = new double*[n-1];
    for (int i = 0; i < n-1; i++)
         B[i]=new double[n-1];
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < n; j++)
    {
      A[i][j]=rand()%9+ 1;    
      cout <<A[i][j]<<" ";
    }
    if (i==0 || A[i][i]>max) {max=A[i][i];imax=i;}
    cout <<endl;
    }    
    cout <<endl;
    
    for (int i = 0; i < n; i++)
    for (int j = imax; j < n-1; j++)
    A[i][j]=A[i][j+1];
    
    for (int i = imax; i < n-1; i++)
    for (int j = 0; j < n-1; j++)
    A[i][j]=A[i+1][j];   
    
    for (int i = 0; i < n-1; i++)    
    for (int j = 0; j < n-1; j++)     
    B[i][j]=A[i][j];    
 
    for (int i = 0; i < n; i++)
    delete [] A[i];
    delete [] A;    
    
    A=B;
    
    for (int i = 0; i <n-1; i++) 
    {
    for (int j = 0; j <n-1; j++)
    cout <<A[i][j]<<" ";
    cout <<endl;
    }    
    
    for (int i = 0; i < n-1; i++)
    delete [] B[i];
    delete [] B;    
system("pause");
return 0;
}
1
0 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 4
20.05.2018, 06:47  [ТС] 5
Ребят, всем спасибо, помогли, всем +100 к карме
0
0 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 4
25.05.2018, 12:18  [ТС] 6
Цитата Сообщение от Yetty Посмотреть сообщение
if (i==0 || A[i][i]>max) {max=A[i][i];imax=i;}
можешь объяснить что значит этот фрагмент?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
25.05.2018, 13:10 7
Цитата Сообщение от shiryaev74 Посмотреть сообщение
можешь объяснить что значит этот фрагмент?
определяется max элемент диагонали и его индекс. По индексам: для диагонали i=j, поэтому imax=jmax. По max элементу диагонали: сначала за текущий max принимается первый элемент диагонали a[0][0], далее второй элемент диагонали a[1][1]сравнивается с ним и если он больше, становится текущим max (а если a[1][1]<=a[0][0] текущим max останется первый элемент a[0][0]), затем третий сравнивается с текущим max и т.д. пока не сравнит все элементы диагонали.
0
0 / 0 / 0
Регистрация: 16.05.2018
Сообщений: 4
25.05.2018, 15:33  [ТС] 8
Всем привет!
Знатоки, помогите, как здесь можно убрать из матрицы строку и столбец с максимальным элементом (элемент программа определяет, а вот как можно убрать и сместить матрицу не знаю)



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
#include <stdafx.h>
#include <iostream>
#include <time.h>
#include "conio.h"
#include "locale"
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RUS");
    srand(time(NULL));
    int n, m, i, j;
    cout << "Введите размер квадратной матрицы n: ";
    cin >> n;
    int** U = NULL;
    m = n;
    U = new int*[n];
    for (i = 0; i < n; ++i)
        U[i] = new int[n];
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
        {
            U[i][j] = rand() % 9;
            cout << U[i][j] << "\t";
        }
        cout << endl;
    }
    int Max = U[0][0];
    int iMax, jMax;
    iMax = 0;
    jMax = 0;
    for (i = 0; i<n; i++)
        for (j = 0; j<m; j++)
            if (U[i][j]>Max)
            {
                Max = U[i][j];
                iMax = i;
                jMax = j;
            }
    printf("\nМаксимальное число=%d", Max);
 
    _getch();
    return 1;
}
Добавлено через 7 минут
пытался применить вот такую вот штуку:
C++
1
2
3
4
5
    for (i = iMax; i<n - 1; i++)
        for (j = 0; j<m; j++)
            U[i][j] = U[i + 1][j];
    n--;
    printf("\n%d", U[i][j]);
выдавал вот такую вот это:
Исключить из матрицы строку и столбец на пересечении которых расположен максимальный элемент главной диагонали
0
MrGluck
25.05.2018, 15:43
  #9
 Комментарий модератора 
shiryaev74, дублирование тем запрещено
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
25.05.2018, 16:46 10
Цитата Сообщение от shiryaev74 Посмотреть сообщение
как можно убрать и сместить матрицу не знаю
shiryaev74, тебе ведь предложил код, который это делает. ещё разок его сбросить ?
0
25.05.2018, 16:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2018, 16:46
Помогаю со студенческими работами здесь

Задана квадратная матрица порядка n. Исключить из нее строку и столбец, на пересечении которых расположен минимальный элемент главной диагонали
Задана квадратная матрица порядка n. Исключить из нее строку и столбец, на пересечении которых...

Исключить строку и столбец, на пересечении которых находится минимальный элемент главной диагонали
Задана матрица n*n. Исключить строку и столбец, на пересечении которых находится минимальный...

Задано квадратную матрицу. Уничтожить строку и столбец, на пересечении которых расположен минимальный элемент главной диагонали
Задано квадратную матрицу. Уничтожить строку и столбец, на пересечении которых расположен...

Задана матрица Исключить из нее строку и столбец, на пересечении которых min элемент главной диагонали
Нужно написать программы... 3. Задана квадратная матрица. Исключить из нее строку и столбец, на...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru