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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2016, 22:22   #1
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию Помощь с двумерным массивом С++

Код:
#include <iostream>
#include <cmath>

using namespace std;

int i, j, k, n, m;
char **matrix;//создание двумерного массива
int cnt = 0;
bool bp;

void function1() 
{
	cout << "Vvedite razmer matr.(nxm): "; cin >> n >> m; //запрашиваем один параметр, матрица квадратная
		matrix = new char*[n];
	for (i = 0; i<n; i++) matrix[i] = new char[n];
	for (i = 0; i<n; i++) 
	{
		cout << "Vvedite stroku " << i + 1 << ", " << n << " simvolov: ";
		for (j = 0; j<m; j++) cin >> matrix[i][j];
	}
};

void function2() 
{
	char *t = new char[n*m];
	for (i = 0; i<n; i++)
		for (j = 0; j<m; j++) 
		{
			bp = true;
			for (k = 0; k<cnt; k++) 
				if (matrix[i][j] == t[k]) { bp = false; break; }
			if (bp) { t[cnt] = matrix[i][j]; cnt++; }
		}
	cout << "Razlichnye simvoly: " << endl;
	for (k = 0; k<cnt; k++)cout << t[k] << ' ';
	cout << endl << "Kolichestvo: " << cnt << endl;
	
	delete[] t;
};

int main()
{
	function1();
	function2();

	for (i = 0; i < n; i++)//освобождение памяти

		delete[] matrix[i];
	delete[] matrix;

	system("pause");
	return 0;
}
Помогите с двумерным массивом, дело в том, что память высвобождается, как в одномерном массиве. Как я понял, дело в строке char *t = new char[n*m]. Подскажите, что нужно исправить.

Последний раз редактировалось Аватар; 07.01.2016 в 23:31.
max.sokol вне форума Ответить с цитированием
Старый 07.01.2016, 23:20   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,713
По умолчанию

Цитата:
Помогите с двумерным массивом
А что с ним не так? Задание то какое?

Цитата:
дело в том, что память высвобождается, как в одномерном массиве
Какая именно? У вас их минимум 2.

Цитата:
Как я понял, дело в строке char *t = new char[n*m].
А что с ней не так? Что вы хотели получить от этой строчки?

П.С. Вы бы лучше задумались над таким фактом:
Код:
 cin >> n >> m; //запрашиваем один параметр, матрица квадратная
matrix = new char*[n];
for (i = 0; i<n; i++) matrix[i] = new char[n];
Где ж один параметр если два? Почему выделяете для квадратной, а исользуете как прмоугольную?
p51x вне форума Ответить с цитированием
Старый 07.01.2016, 23:52   #3
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

Программа по теме двумерных массивов. Определяется количество различных элементов матрицы. Но, знающие люди говорят, что память высвобождается, как в одномерном массиве, хотя программа работает по назначению. Однако, не соответствует теме.
max.sokol вне форума Ответить с цитированием
Старый 08.01.2016, 00:01   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,713
По умолчанию

Ну покажите им цикл
Код:
for (i = 0; i < n; i++)//освобождение памяти
  delete[] matrix[i];
delete[] matrix;
p51x вне форума Ответить с цитированием
Старый 08.01.2016, 00:05   #5
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

Дело в том, что мне также не совсем понятно, что не понравилось, в конечном итоге, мне посоветовали глянуть на строку char *t = new char[n*m]
max.sokol вне форума Ответить с цитированием
Старый 08.01.2016, 07:16   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,713
По умолчанию

Ну тут я вижу три варианта:
1. вы не сумели показать, где у вас работа с двумерным и для чего нужен одномерный т
2. вам сказали переделать программу, что бы удаление стало как в одномерном массиве и подсказали куда посмотреть
3. вы не поняли задание или препод не знает чего хочет
p51x вне форума Ответить с цитированием
Старый 08.01.2016, 10:57   #7
max.sokol
Пользователь
 
Регистрация: 14.12.2015
Сообщений: 14
По умолчанию

Возможно я неправильно обьяснил ей код. Можете правильно прокомментировать в таком случае. Хотя помню, что она говорила, что там где одномерный должен быть двурмерный.
max.sokol вне форума Ответить с цитированием
Старый 08.01.2016, 11:18   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ребята. Такая простая задачка и такой холивар! Я в ужасе! Ну, блин, для кого я это пишу?
max.sokol. Скопипастил и не можешь разобраться? Так копипаст и видно. Скажи прямо. Я Своровал, но не знаю как этим пользоваться. Тут не нубы сидят.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с двумерным массивом Arsenikum C# (си шарп) 2 13.07.2015 14:29
Помогите с двумерным массивом. vlad333 Помощь студентам 10 17.10.2013 10:53
Проблема с двумерным массивом Dima-War Общие вопросы C/C++ 6 29.05.2013 20:07
c++ задача с двумерным массивом nnina Помощь студентам 0 01.03.2012 19:15
Нужна помощь с двумерным массивом в паскале.. MyLastHit Помощь студентам 3 20.12.2009 16:46