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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2016, 20:06   #1
ggjgj
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 83
По умолчанию Заменить первый минимальный четный элемент в двумерном массиве - C++

Задание 13. Заменить первый минимальный четный элемент в заштрихованной
области, включая границы, на первый максимальный нечетный элемент
из незаштрихованной области, не включая границы. Ноль не учитывать.
Если таких элементов нет, выдать сообщение о том, какого именно
элемента (четного или нечетного) нет в массиве.
Помогите пожалуйста, пропустил все связанное с массивами. Можно хотя бы что-то подобное или же сам алгоритм решения.Заранее спасибо)
Вложения
Тип файла: pdf zadachimass1 (1).pdf (93.8 Кб, 21 просмотров)
ggjgj вне форума Ответить с цитированием
Старый 07.11.2016, 18:06   #2
ggjgj
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 83
По умолчанию

Ну напишите хоть что-то ,чтобы начать
ggjgj вне форума Ответить с цитированием
Старый 07.11.2016, 19:47   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Минимальный нечётный - это минимальный, который при этом чётный, или наименьший из чётных?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 07.11.2016, 20:10   #4
ggjgj
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 83
По умолчанию

минимальный четный- это минимум,который при этом и четный . посмотрите пример во вложении под примером 13, там меняется 2, она является в этой области минимальным+четным элементом
ggjgj вне форума Ответить с цитированием
Старый 07.11.2016, 22:32   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Для начала, скажи: условия "ниже главной диагонали" и "выше главной диагонали" какие?

Не знаешь, читай теорию:

http://programmersforum.ru/showthrea...EE%ED%E0%EB%E8

Последний раз редактировалось ura_111; 07.11.2016 в 23:08.
ura_111 вне форума Ответить с цитированием
Старый 08.11.2016, 13:01   #6
ggjgj
Пользователь
 
Регистрация: 25.10.2016
Сообщений: 83
По умолчанию

ниже главной диагонали: j < i

Код:
for(int i = 0; i < n; i++)
for (int j = 0; j < i; j++)
выше главной диагонали: j>i

Код:
for(int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
ggjgj вне форума Ответить с цитированием
Старый 08.11.2016, 16:05   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Код:
#include <iostream>
using namespace std;

int **create_mas(int n)
{
	//создание массива
	int **a = new int *[n];     //выделение памяти под массив 
	for (int i = 0; i < n; i++)
	{
		a[i] = new int[n];
	}
	for (int i = 0; i < n; i++) //заполняем массив 
	{
		for (int j = 0; j < n; j++)
		{
			a[i][j] = rand() % 10;
		}
	}
	return a;
}

void print_mas(int **mas, int n) //вывод массива на экран 
{
	cout << endl << "Masiv mas:" << endl;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cout << " " << mas[i][j];
		}
		cout << endl;
	}
}

int minimum(int **mas, int n, int &min_i, int &min_j)
{
	int min = 0;
	min_i = -1;
	min_j = -1;
	// находим мин
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (i >= j && mas[i][j] < min && mas[i][j] % 2 == 0)
			{
				min = mas[i][j];
			}
		}
	}
	// находим место
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < i; j++)
		{
			if (mas[i][j] == min)
			{
				min_i = i;
				min_j = j;
				break;
			}
		}
	}
	return min;
}

int maximum(int **mas, int n, int &max_i, int &max_j)
{
	int max = 0;
	max_i = -1;
	max_j = -1;
	// находим мax
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (j > i && mas[i][j] > max && mas[i][j] % 2 == 1)
			{
				max = mas[i][j];
			}
		}
	}
	// находим место
	for (int i = 0; i < n; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (mas[i][j] == max)
			{
				max_i = i;
				max_j = j;
				break;
			}
		}
	}
	return max;
}

int main()
{
	int n;
	int min, min_i, min_j, max, max_i,max_j;
	cout << "Vvedite n= "; cin >> n;
	//создаём матрицу "mas"
	int **mas = create_mas(n);
	//вывод на экран матрицу "mas"
	print_mas(mas, n);
	//находим мин
	min = minimum(mas, n, min_i, min_j);
	//находим мax
	max = maximum(mas, n, max_i, max_j);	
	//выводим мин
	if (min_i != -1)
		cout << endl << "min: A[" << min_i << "][" << min_j << "]= " << min;
	else
		cout << endl << "minimalnogo net";
	//выводим мax
	if (max_i != -1)
		cout << endl << "max: A[" << max_i << "][" << max_j << "]= " << max;
	else
		cout << endl << "maximalnogo net";
	//////////////////////////////////////////////////////////////////////
	cout << endl;
	//замена (если все элементы есть)
	int z;
	if ((min_i != -1) && (max_i != -1))
	{
		z = mas[min_i][min_j];
		mas[min_i][min_j] = mas[max_i][max_j];
		mas[max_i][max_j] = z;
		//вывод на экран матрицу "mas"
		print_mas(mas, n);
	}
	
	cout << endl;
	system("pause");
	return 0;
}

Я программу не тестировал (в хорошей программе времени на тестирование иногда даже больше чем на написание самого текста)...
Но, уже вижу ошибку (мин =0):

1.jpg


Короче, ты понял что нужно делать?
На время тестирования программы, ты поменяй "заполняемость массива random" на "жесткое задание массива", типо такого:

int **create_mas(int n)
{
//создание массива
int **a = new int *[n]; //выделение памяти под массив
for (int i = 0; i < n; i++)
{
a[i] = new int[n];
}
// for (int i = 0; i < n; i++) //заполняем массив
// {
// for (int j = 0; j < n; j++)
// {
// a[i][j] = rand() % 10;
// }
// }

a[0][0]=5;
a[0][1]=5;
a[0][2]=6;
..............
..............

return a;
}


Напиши на листочке саму матрицу, чтобы не ошибиться при её заполнении... А дальше, манипулируя с числами "жесткого задаванья матрицы" выясни:
- выводит ли мин=0 (в нижней части)?
- корректно ли находит( выводит) мин. четный
- корректно ли находит( выводит) мах. нечетный
- корректно ли выводит, если мах. нечетного нет
- корректно ли выводит, если мin. четного нет
- про элементы на главной диаг. не забудь
............... короче по заданию...........................

Ты понимаешь, что все эти проверки требуют матриц с соответствующими элементами, стоящими в соответствующих местах относительно главной диагонали... Поэтому то удобно задавать элементы матрицы жестко... Ну, а когда все проверки пройдёшь - верни "random".

Последний раз редактировалось ura_111; 08.11.2016 в 16:15.
ura_111 вне форума Ответить с цитированием
Старый 08.11.2016, 16:42   #8
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ещё ошибка выплыла

1.jpg
ura_111 вне форума Ответить с цитированием
Старый 08.11.2016, 18:00   #9
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ладно, если не понимаешь, тогда будем делать по частям...
Начнём с поиска максимума.
Вот что сделай:
1) Этот проект пока закрой. Создай новый проект.
2) Всё делай в одной функции "main()" (для простоты). Создай массив int 5x5 и его инициализируй, типо такого:

___________________________________ ____________________________

main()
{
int mas[5][5];
// инициализация элементов матрицы
1.jpg
// вывод на экран
cout << endl << "Masiv mas:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cout << " " << mas[i][j];
}
cout << endl;
}
}

___________________________________ _________________________

Пока это всё, потом я скажу что нужно для продолжения.

Покажешь код на фоне консоли - а то у меня впечатление, что ты не работаешь с кодом (а рассматриваешь всё теоретически).

Последний раз редактировалось ura_111; 08.11.2016 в 18:03.
ura_111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить минимальный элемент массива(вернусь ссылку на него ), заменить этой суммой минимальный элемент mari_ly Общие вопросы C/C++ 1 30.03.2016 16:31
В двумерном массиве найти минимальный максимальный элемент в строке\столбце Proskurina Паскаль, Turbo Pascal, PascalABC.NET 6 08.09.2012 21:14
В двумерном массиве найти минимальный максимальный элемент в строке\столбце Proskurina Помощь студентам 3 08.09.2012 11:07
Поменять в двумерном массиве местами первый и последний столбец }|{eka Паскаль, Turbo Pascal, PascalABC.NET 6 21.06.2012 20:19
Минимальный элемент в массиве (Visual C++) Афанасий[vedma] Помощь студентам 1 29.11.2011 17:13