Задача: Массивы, удаление столбца

Ponuliam

New member
28.12.2009
1
0
#1
Задание звучит следующим образом : Дано число k и матрица размера M x N. Удалить столбец матрицы с номером k.

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




Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i,j,k,a[100][100];
int n, m;
n=StrToInt(Edit2->Text);
m=StrToInt(Edit3->Text);
k=StrToInt(Edit1->Text);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{a[j][i]=StrToInt(StringGrid1->Cells[j][i]);	}

}
k--;
for (i=0;i<=n;i++)
{for (j=k;j<=m;j++)
{a[j][i]=a[j+1][i];
StringGrid1->Cells[j][i]=a[j][i];}
StringGrid1->ColCount=m-1;

}	
}
 
G

Guest

#2
Лучше массив а создавать динамически уже после ввода размерностей m и n.Затем переписать этот массив в другой ,допустим b с размерностью:b [m][n-1]. Присваивать будешь до k затем от k+1;
 

DarkKnight

Well-known member
01.08.2010
653
0
#3
C++:
/*
Дано число k и матрица размера M x N. Удалить столбец матрицы с номером k.
*/
/*
codeby.net
Autor: DarkKnight125
*/

#include <iostream>
#include <time.h>

using namespace std;

void main(void)
{
int m,n;
int k;
int **Arr; //Наша матрица (указатель на массив указателей)
int **Arr2; //Наша итоговая матрица без столбца
setlocale(LC_ALL,".1251");// Поставим локаль в кодовую страницу 1251
cout<<"Введите размерность 2-мерной матрицы(через пробел) : ";
cin>> m >> n;
cout<<"Введите номер удаляемого столбца k = ";
cin>>k;
srand(time(NULL)); //Инициализируем генератор случайной величины

Arr = new int*[m]; //Выделим память под строки матрицы

//Цикл заполнения матрицы случайными значениями и вывод ее на экран
cout<< endl << "Искомая матрица :" << endl;
for (int i = 0; i < m; i++)
{
Arr[i] = new int[n]; //Выделим память под столцы
for (int j = 0; j<n; j++)
{
Arr[i][j] = rand()%100;
cout<< Arr[i][j] << " ";
}
cout<< endl;
}

//Теперь к удалению столбца
if (k > n) //Проверим не больше ли вообще k кол-ва наших столбцов в искомой матрице
{
cout<<"Error: Введенное значение K > N" << endl;
return; //Если больше то выйдем
}
Arr2 = new int*[m]; //Выделим память кол-во строк у нас не поменялось
cout<< endl << "Полученная матрица : " << endl;
for (int i = 0; i < m; i++)
{
Arr2[i] = new int[n-1]; //Выделим память под столбцы на 1 меньше чем в искомой
int pos = 0; //Позиция текущего столбца в новой матрице
for (int j = 0; j < n; j++)
{
if (j != k-1) //Если j != k-1 то копируем элемент (k-1) используется потому что счет в массиве идет с нуля 0
{
Arr2[i][pos] = Arr[i][j];
//сразу выводим на экран
cout<<Arr2[i][pos]<< " ";
pos++; //Увеличим позицию
}	
}
cout<<endl;
}

//Почистим выделеную память
for (int i = 0; i<m; i++)
{
delete Arr[i];
delete Arr2[i];
}
delete[]Arr;
delete[]Arr2;
}
 

Вложения