Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 3

Из матрицы размером n получить матрицу размером n-1 путем удаления строки и столбца на пересечении max элемент

01.12.2014, 22:15. Показов 4757. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день дорогие друзья программисты. Уже пару недель не могу полностью разобраться в указателях и динамических массивах в Builder C++. На данный момент не могу разрешить следующую задачу:

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

В интернете, и в частности на cyberforum задавалась такая задача, правда ответы были даны в другой среде, непонятной для меня (у меня в билдере ничего не получается, а там делфи....).

Делаю в оконном/форменном режиме. И нужен именно это вариант!

Пока что имею следующий код:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n,m;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  n=StrToInt(Edit1->Text);
  m=StrToInt(Edit2->Text);
  StringGrid1->RowCount=n;
  StringGrid1->ColCount=m;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
  if (Edit1->Text=="") return;
  n=StrToInt(Edit1->Text);
  StringGrid1->RowCount=n;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
  if (Edit2->Text=="") return;
  m=StrToInt(Edit2->Text);
  StringGrid1->ColCount=m;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{  double **a;
int max1,max2;
 
 a=new double *[n]; 
 for (int i=0; i<n; i++)
    a[i]=new double [m+1];
 
 
 for (int i=0; i<n; i++)
   for (int j=0; j<m; j++)
     a[i][j]=StrToFloat(StringGrid1->Cells[j][i]);
 
     max1=0; max2=0;
 for (int i=0; i<n; i++)
 for (int j=0; j<m; j++)
 if (a[i][j]>=a[max1][max2])
 {
      max1=i; max2=j;
   }
 
 
 delete []a[i];
 delete []a; 
 a=NULL;
 
}
//---------------------------------------------------------------------------
Картинка:


То есть в итоге, получилось найти только этот максимальный элемент и соответственно номер нужной строки и столбца. А как теперь удалить эту строку и столбец, чтобы получить n-1 m-1?

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

Честно, сижу уже пару недель. Мозг атрофирован. Очень надеюсь на вашу помощь!!! Последняя надежда! Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2014, 22:15
Ответы с готовыми решениями:

Из матрицы N получить матрицу размером N–1 путем удаления из матрицы строки и столбца с [max] элементом
Вот код программы. Посмотрите пожалуйста, что в нём не так? При запуске ничего не происходит. ...

Как из матрицы размером MxN получить матрицу размером 1xN, содержащую максимальные элементы каждой строки исходной матрицы
Напишите функцию получающую в качестве входного параметра матрицу размера MxN и вовзращающую матрицу размера 1xN содержащую значения...

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

3
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
02.12.2014, 00:17
Во первых так логичнее
C++
1
a[i]=new double [m];
.
Прям удалить строку и столбец нельзя. Есть 2 варианта: 1-создать новый размер размером поменьше и скопировать туда не стертое; 2-сместить строки и столбцы на одну позицию, так чтобы последняя строка и столбец были пустыми, но тогда нужно будет помнить, что последние строка и столбец пустые.
И удаление массива не правильно его нужно удалять также как создавали, т.е. с циклом.
0
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 3
02.12.2014, 00:35  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Во первых так логичнее
Код C++
1
a[i]=new double [m];
Тут и в правду) Да, и с удалением массива я тоже затупил - это поправимо. Спасибо.

Ну а вот с удалением строки и столбца я как раз и не могу разобраться. Это понятно, что самой команды удаления нет.

Ну вот к примеру: дана матрица 5 на 5 . Максимальный элемент в 3 строчке и 2 столбце. Как задать перемещение строк и столбцов, чтобы в итоге как-то избавиться от нужных строки и столбца и получить в итоге матрицу 4 на 4? Сам алгоритм не могу написать даже.

Я думал каким-то чудом свести эту строку и столбец в самый низ и в право, то есть на пятую строчку и пятый столбец. После чего сокращаем размер матрицы на 1, в итоге избавляемся он этого пересечения.

Но вот как это всё реализовать? ) Вообще не могу допереть. Буду рад если кто-то подскажет кодом.
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
02.12.2014, 02:21
Можно как то так (не проверял):
C++
1
2
3
4
5
6
7
8
9
10
11
void DelRow(double** a, int Height, int Row)
{
    for(int y=Row+1; y<Height; y++)
        a[y-1]=a[y];
};
void DelCol(double** a, int Height, int Width, int Col)
{
    for(int y=0; y<Height; y++)
        for(int x=Col+1; x<Width; x++)
            a[y][x-1]=a[y][x];
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2014, 02:21
Помогаю со студенческими работами здесь

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

Из заданной матрицы A размером N*M получить матрицу В размером K*3 по правилу: первый столбец состоит из полож
Из заданной матрицы A размером N*M получить матрицу В размером K*3 по правилу: первый столбец состоит из положительных элементов, второй...

Даны матрицы А размером m*k и В размером k*n получить матрицу С=A*В
двумерный массив Даны матрицы А размером m*k и В размером k*n получить матрицу С=A*В

Из заданной матрицы A размером получить матрицу В размером по правилу: первый столбец состоит из положительных элементов, второй – из отрицате
1. Из заданной матрицы A размером получить матрицу В размером по правилу: первый столбец состоит из положительных элементов, второй –...

Переставить строки и столбцы матрицы так, чтобы max элемент располагался на пересечении К строки и К столбца
Задана квадратная матрица. Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрици таким образом, чтобы...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru