Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 11125
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 5020
∙ повысить рейтинг »
CradleA
Статус: Специалист
Рейтинг: 2720
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1817
Дата выхода:17.12.2015, 22:21
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:15 / 13
Вопросов / ответов:1 / 1

Консультация # 188410: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, с решением. Если в прямоугольной матрице А размера m*n меньше половины столбцов содержит отрицательные элементы, то все элементы с нечетными номерами столбцов умножить на 10. В противном случае все отрицательные элементы матрицы возвести в квадрат. ...


Консультация # 188410:

Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, с решением. Если в прямоугольной матрице А размера m*n меньше половины столбцов содержит отрицательные элементы, то все элементы с нечетными номерами столбцов умножить на 10. В противном случае все отрицательные элементы матрицы возвести в квадрат.

Дата отправки: 12.12.2015, 22:09
Вопрос задал: fridge (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, fridge!
Держите. Подсчитывается количество столбцов, у которых есть хотя бы один отрицательный элемент.
Если надо подсчитывать столбцы, у которых все элементы отрицательные, то думаю, Вы сами подправите
Т.к. количество строк и столбцов вводятся с консоли, то матрицу строим динамически, как массив указателей строк
на указатели элементов столбцов.
Еще момент: для получения отрицательных чисел надо отнимать половину диапозона.
Будут вопросы - спрашивайте в мини-форуме.

Код :
/*	Если в прямоугольной матрице А размера m*n меньше 
	половины столбцов содержит отрицательные элементы, 
	то все элементы с нечетными номерами столбцов умножить на 10. 
	В противном случае все отрицательные элементы матрицы возвести в квадрат.
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>		//для выделения памяти в куче
#include <windows.h>

int main()
{ 
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	int i,j,count,m,n;

	printf("Введите количество строк в матрице m:");
	scanf("%d",&m);
	printf("Введите количество столбцов в матрице n:");
	scanf("%d",&n);

	int **A;			//Т.к. m и n заранее неизвестны, будем строить массив динамически
						//A - указатель на массив указателей, 
						//сначала построим массив указателей, 
						// в которых будем хранить указатели на столбцы
	A = (int**)malloc(m*sizeof(int*));	
	for(i=0;i<m;i++)	//выделим память под столбцы для каждой строки
	{
		A[i] = (int*)malloc(n*sizeof(int));
	}
	
						//заполним матрицу случайными числами
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			A[i][j]=(rand()%56)-28;	//отнимаем 28, чтобы получить и отрицательные,
									//и положительные числа в диапазоне [-28,+27]
			printf("A[%d][%d]=%d ",i,j,A[i][j]);	//выведем элементы одной строки в одной строке
		}
		printf("\n");				//для следующей строки
	}
	
	count=0;						//подсчитываем количество столбцов, 
									//к которых есть хотя бы один отрицательный элемент
	for(j=0;j<n;j++)				//по столбцам
	{
		for(i=0;i<m;i++)			//по строкам
		{
			if (A[i][j] < 0)
			{
				count++;			//нашли
				break;				//одного в столбце достаточно - выходим из анализа столбца
			}
		}
	}

	if (count < n/2)				//проверяем условие
	{
		for(j=0;j<n;j+=2)			//все элементы в нечетных столбцах умножаем на 10
		{							//у нас индекс начинается с 0, но реально получается первый столбец!
			for(i=0;i<m;i++)		//шаг по столбцам = 2, чтобы перейти на следующий нечетный
			{
				A[i][j] *= 10;
			}
		}
	}
	else							//иначе все отрицательные элементы возводим в квадрат
	{
		for (i=0;i<m;i++)
		{
			for (j=0;j<n;j++)
			{
				if (A[i][j]<0)
					A[i][j]=A[i][j]*A[i][j];
			}
		}
	}

	printf("\nРезультат:\n");		//выводим, что у нас получилось
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("A[%d][%d]=%d ",i,j,A[i][j]);
		}
		printf("\n");
	}

	system("pause");

	for(i=0;i<m;i++)				//освободим память, запрошенную под матрицу
		free (A[i]);				//сначала столбцы
	free (A);						//затем и массив строк
	return 0;
}

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 13.12.2015, 17:02

5
нет комментария
-----
Дата оценки: 15.12.2015, 15:10

Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

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

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное