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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2010, 15:25   #1
Night_Stalker
Новичок
Джуниор
 
Регистрация: 03.10.2010
Сообщений: 2
По умолчанию Проблема задания матрицы

Здравствуйте.
Проблема состоит в следующем - при запуске (не компиляции) программы вылетает окно с сообщением "The wariable "matr" used without being defined.", после чего программа закрывается. Не могу понять, почему это произошло. Помогите разобраться, пожалуйста.
Код программы:
Код:
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
void min(int** matrix, int a, int b);
void max(int** matrix, int a, int b);

int main()
{
	time_t t;
	srand(time(&t));
	const int N = 9;
	int **matr; //матрица так задана для того, чтобы функция рассматривала ее как аргумент 
	int a = 0, b = 0, a2 = 0, b2 = 0; //в a и b будем хранить адрес максимума, в a2 и b2 - минимума
	int c = 0, i, j;

	for (i = 0; i < N; i++)
    { 
		for (j = 0; j < N; j++)
		{
			matr[i] = new int[N];
			matr[i][j] = rand()%10;
			cout<<setw(4)<<matr[i][j];
        }
		cout<<endl;
	}

	cout<<endl<<endl;
	
	min(matr, a, b); //ищет минимум
	max(matr, a2, b2); //ищет максимум

	c = matr[a][b]; //здесь меняем местами значения
	matr[a][b] = matr[a2][b2];
	matr[a2][b2] = c;

	for (i = 0; i < N; i++)
    {  
		for (j = 0; j < N; j++)
		{
			cout<<setw(4)<<matr[i][j];
        }
		cout<<endl;
	}

	cout<<endl<<endl;

	return 0;
}


void min(int** matrix, int a, int b) //определим поиск минимумов
{
	int box = matrix[1][0]; //с этим элементом будем сравнивать остальные
	for(int i = 0; i < a; i++)
	{
		for(int j; j < b; j++)
		{
			if(i > j && matrix [i][j] <= box)
			{
				box = matrix[i][j];
				a = i;
				b = j;
			}
		}
	}
}

void max(int** matrix, int a, int b) //здесь все аналогично, но для максимумов
{
	int box = matrix[0][1];
	for(int i = 0; i < a; i++)
	{
		for(int j; j < b; j++)
		{
			if(i < j && matrix [i][j] >= box)
			{
				box = matrix[i][j];
				a = i;
				b = j;
			}
		}
	}
}
Заранее спасибо.

Последний раз редактировалось Stilet; 03.10.2010 в 19:19.
Night_Stalker вне форума Ответить с цитированием
Старый 03.10.2010, 16:24   #2
sergey.d
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 98
По умолчанию

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

matr = new int * [N];

Следующая ошибка -- строка matr[i] = new int[N]; должна быть в объемлющем цикле а не во вложенном.

Да, и еще ошибка -- при поиске минимума/максимума изменяются значения локальных переменных a, b. Используйте ссылки (или указатели), например:

void min(int** matrix, int &a, int &b)

Последний раз редактировалось sergey.d; 03.10.2010 в 16:40.
sergey.d вне форума Ответить с цитированием
Старый 03.10.2010, 16:24   #3
savva
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 225
По умолчанию

for(int j; j < b; j++)

в функции min и max тоже не определено j??инициализируй нулём что ли

int **matr;
и строка
matr[i] = new int[N];

вот выделение памяти разве нет?

переведите ошибку и поймёте,что не дело в выделении памяти
За помощь: Нажмите на весы слева от сообщения!

Последний раз редактировалось Stilet; 03.10.2010 в 19:20.
savva вне форума Ответить с цитированием
Старый 03.10.2010, 18:55   #4
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

sergey.d абсолютно прав. Выделение памяти должно выглядеть так:
Код:
 int** matr;
 matr = new int* [N];

 for (i = 0; i < N; i++)
    { 
        matr[i] = new int[N];

        for (j = 0; j < N; j++)
            matr[i][j] = rand()%10;          
     }
coinkrsk вне форума Ответить с цитированием
Старый 03.10.2010, 18:58   #5
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

А освобождение памяти, кстати, где?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 03.10.2010, 21:55   #6
Night_Stalker
Новичок
Джуниор
 
Регистрация: 03.10.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Syuf Посмотреть сообщение
А освобождение памяти, кстати, где?
Забыл написать, все думал об ошибке.
Спасибо за замечания, исправлю.
Night_Stalker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с чтением матрицы с txt-файла в C# Денис89 Помощь студентам 5 08.09.2010 17:40
Проблема. задания на Delphi [adel]444 Помощь студентам 0 26.05.2010 08:58
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19
Проблема с формулировкой задания, Delphi Absentik Помощь студентам 1 23.11.2009 09:43
DevС++ Транспонирование матрицы. Проблема Shoberg Помощь студентам 4 25.05.2009 05:46