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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 00:58   #1
Шуик
 
Регистрация: 09.12.2011
Сообщений: 3
По умолчанию решает но показывает ошибку с++

Исходные данные: квадратная матрица чисел с заданным заранее размером NxN (N задавать через define). Для отладки матрицу можно создать прямо в программном коде, однако конечный вариант программы должен запрашивать элементы матрицы у пользователя. Исходная матрица выводится на экран для наглядности.
С этой матрицей необходимо произвести указанное ниже преобразование и вывести получившуюся матрицу на экран. Если требуется вместо преобразований произвести какие-либо вычисления, то на экран надо вывести результат этих вычислений.

Обнуление всех столбцов, содержащих максимальный элемент матрицы.

Выводит нужный результат но потом показывает завершение приложения и ошибка вылетает.
Код:
printf("vvedite massive\n");
	//вводим массив с клавиатуры
	int myarray[n+1][n];
	for (int i=0; i<n; i++)
	{
		for (int j=0; j<n; j++)
		{
			scanf("%d", &myarray[i][j]);
		}
	}
	printf("ishodniy massiv:\n");
	//описываем переменную для поиска максимального значения в массиве
	//и присваиваем ей минимальное возможное значение в данном типе данных
	int max=-32768;
	for (int i=0; i<n; i++)
	{
		myarray[n+1][i]=0;
		for (int j=0; j<n; j++)
		{
			//ищем максимальный элемент и выводим исходный массив
			if (max<myarray[i][j])
			{
				max=myarray[i][j];
			}
			printf("%d ",myarray[i][j]);
		}
		printf("\n");
	}
	printf("konechniy massiv:\n");
	//присваиваем "1" ячейке с индексами: ["мнимая" строка(n+1)][столбец, в котором находится максимальный элемент]
	for (int i=0; i<n; i++)
	{
		for (int j=0; j<n; j++)
		{
			if (max==myarray[i][j])
			{
				myarray[n+1][j]=1;
			}
				
		}
	}
	//обнуляем столбцы, в которых установлена метка в мнимой строке
	for (int j=0; j<n; j++)
	{
		if (myarray[n+1][j]==1)
		{
			for (int i=0; i<n; i++)
			{
				myarray[i][j]=0;
			}
		}
	}
	//выводим массив на экран
	for (int i=0; i<n; i++)
	{
		for (int j=0; j<n; j++)
		{
			printf("%d ",myarray[i][j]);
		}
		printf("\n");

Последний раз редактировалось Stilet; 11.12.2011 в 15:38.
Шуик вне форума Ответить с цитированием
Старый 11.12.2011, 11:28   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

В С++ не силен, но у меня в дэлфи было нечто подобное, программа вылетала на строчке с END. Проверь чтоб в массиве небыло ссылок на несуществующие элементы, грубо говоря myarray[10][15], тогда как максимальный элемент myarray[10][14]
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 11.12.2011, 12:07   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

//описываем переменную для поиска максимального значения в массиве
//и присваиваем ей минимальное возможное значение в данном типе данных

так тоже можно но как-то привычнее видеть присваивания типа
max = a[0];
rUs_LAN вне форума Ответить с цитированием
Старый 11.12.2011, 13:07   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

у вас везде где n+1 - выход за границы массива
onewho вне форума Ответить с цитированием
Старый 11.12.2011, 13:16   #5
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

я не смог найти у тебя ошибку (впринципе я долго и не искал)
вот держи
Код:
// bred.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
using namespace std;
#define n 3
int _tmain(int argc, _TCHAR* argv[])
{
	int input[n][n]; 
	for(int i = 0; i < n; i++) 
	{
		for(int j = 0; j < n; j++)
		{
			cout << "a["<<i<<","<< j <<"] =  ";
			cin >> input[i][j];
		}
	}
	int max = input[0][0];
	int index[n];
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			if(input[i][j] > max)
				max = input[i][j];
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			if (input[i][j] == max)
				index[j] = 1;
	for(int j = 0; j < n; j++)
	{
		if (index[j] == 1)
		{
			for(int i = 0;  i < n; i++)
				input[i][j] = 0;
		}
	}

	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < n; j++)
			cout << input[i][j] << " ";
		cout <<"\n";
	}
	_getch();
	
}
rUs_LAN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какую задачу решает каждый из представленных алгоритмов? ming_ruport Помощь студентам 1 13.10.2011 23:32
FireBug показывает ошибку (missing ; before statement) ЧебурашКо Помощь студентам 2 25.08.2011 14:46
все слетает - и показывает ошибку Anatolyi666 Операционные системы общие вопросы 4 17.11.2010 15:56
Кто решает задачи на с++ на заказ??????? Lesj Фриланс 5 04.06.2009 20:47
запускается VBA и показывает желтым ошибку User form1 Show Romuald Microsoft Office Excel 9 24.01.2009 23:45