Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
enkei
0 / 0 / 0
Регистрация: 01.12.2014
Сообщений: 3
#1

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

01.12.2014, 22:15. Просмотров 1216. Ответов 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 получить матрицу размером n-1 путем удаления строки и столбца на пересечении max элемент


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

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

Честно, сижу уже пару недель. Мозг атрофирован. Очень надеюсь на вашу помощь!!! Последняя надежда! Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2014, 22:15
Ответы с готовыми решениями:

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

Получить массив B из матрицы размером nxm
задана матрица размером nxm. Получить массив B, присвоив его k-му элементу...

"Обработка двухмерных динамических массивов" (с++ builder) (нужно из матрицы размером N×M получить
Ребят, нужна ваша помощь) нужно из матрицы размером N×M получить вектор B,...

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

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

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

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

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

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

Но вот как это всё реализовать? ) Вообще не могу допереть. Буду рад если кто-то подскажет кодом.
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
02.12.2014, 02:21 #4
Можно как то так (не проверял):
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
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 получить...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru