Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 15:43   #1
lpofigistl
 
Регистрация: 01.12.2009
Сообщений: 3
По умолчанию Двухмерный динамический массив в C

Помогите пожалуйста)
Требовалось: пользователь вводит размер массива, он заполняется случайными числами и выводится, потом пользователь вводит на сколько надо увеличить число строк и столбцов, массив должен увеличится с помощью функции realloc() и новые строки и стобцы должны заполнятся случайными числами. Нельзя создавать еще один массив. Надо увеличивать существующий. Массив хранится в динамической памяти.

Код не работает, помогите понять почему.
Код:

#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
        srand((unsigned int)time(NULL));
	int n,m;
	cin>>n;
	cin>>m;
	int **mtx;
	mtx=(int**)malloc(n*sizeof(int));
	for(int i=0;i<n;i++)
		mtx[i]=(int*)malloc(m*sizeof(int));
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			mtx[i][j]=rand()%100;
	for(int i=0;i<n;i++)
	{
		cout<<"\n";
		for(int j=0;j<m;j++)
			cout<<setw(3)<<mtx[i][j]<<" ";
	}
	cout<<"\n";
	int k;//увеличить массив на k
	cin>>k;
	//Здесь видимо ошибка.
	mtx=(int**)realloc(mtx,(n+k)*sizeof(int));
	for(int i=0;i<n;i++)
		mtx[i]=(int*)realloc(mtx[i],(m+k)*sizeof(int));
	//=(((((
	for(int i=n;i<n+k;i++)
		for(int j=m;j<m+k;j++)
			mtx[i][j]=rand()%100;
	for(int i=0;i<n+k;i++)
	{
		cout<<"\n";
		for(int j=0;j<m+k;j++)
			cout<<setw(3)<<mtx[i][j]<<" ";
	}
	cout<<"\n";
	return 0;
}

Последний раз редактировалось lpofigistl; 01.12.2009 в 15:57.
lpofigistl вне форума Ответить с цитированием
Старый 01.12.2009, 15:53   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а в чем вопрос?
NiCola999 вне форума Ответить с цитированием
Старый 02.12.2009, 00:54   #3
lpofigistl
 
Регистрация: 01.12.2009
Сообщений: 3
По умолчанию

помогите ктонибудь( Я так понимаю что проблема гдето тут:
Код:
mtx[i]=(int*)realloc(mtx[i],(m+k)*sizeof(int));
lpofigistl вне форума Ответить с цитированием
Старый 07.12.2009, 11:30   #4
vivcha
Новичок
Джуниор
 
Регистрация: 04.12.2009
Сообщений: 1
По умолчанию

Проблемное место указано правильно.
Вот вариант решения задачи

Код:
/* Задача.
пользователь вводит размер массива, он заполняется случайными числами
и выводится, потом пользователь вводит на сколько надо увеличить число
 строк и столбцов, массив должен увеличится с помощью функции realloc()
 и новые строки и стобцы должны заполнятся случайными числами.
 Нельзя создавать еще один массив. Надо увеличивать существующий.
 Массив хранится в динамической памяти.
 */
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int **mtx;
    srand((unsigned int)time(NULL));
	int n,m;
	cin>>n;
	cin>>m;


	mtx=(int**)malloc(n*sizeof(int*));
	for(int i=0;i<n;i++)
		mtx[i]=(int*)malloc(m*sizeof(int));


// заполняем массив

	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			mtx[i][j]=rand()%100;
//
	for(int i=0;i<n;i++)
	{
		cout<<"\n";
		for(int j=0;j<m;j++)
			cout<<setw(3)<<mtx[i][j]<<" ";
	}
	cout<<"\n";
	int k;//увеличить массив на k
	cin>>k;

	mtx=(int**)realloc((void *) mtx,(n+k)*sizeof(int*));

	for(int i=0;i<n;i++)
		mtx[i]=(int*)realloc(mtx[i],(m+k)*sizeof(int));
	for (int i=n; i<n+k; i++)                      // Память под новые указатели
        mtx[i]=(int*)malloc((m+k)*sizeof(int));    // их не было до realloc()

	for(int i=0;i<n+k;i++)                          // новые столбцы справа
		for(int j=m;j<m+k;j++)
			mtx[i][j]=rand()%100;

    for(int i=n;i<n+k;i++)                          // новые значения снизу
		for(int j=0;j<m;j++)
			mtx[i][j]=rand()%100;

	for(int i=0;i<n+k;i++)
	{
		cout<<"\n";
		for(int j=0;j<m+k;j++)
			cout<<setw(3)<<mtx[i][j]<<" ";
	}
	cout<<"\n";
	return 0;
}
vivcha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Borland C: динамический двухмерный массив в -zeus- Общие вопросы C/C++ 5 11.03.2009 19:20
Динамический двухмерный массив С++ EfiopianDIMON Общие вопросы C/C++ 7 19.11.2008 23:38
двухмерный массив Enchantner Паскаль, Turbo Pascal, PascalABC.NET 3 22.04.2008 20:47
Двухмерный массив xtraSHAD0W Паскаль, Turbo Pascal, PascalABC.NET 2 22.04.2008 18:17