Консультация # 188410: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, с решением. Если в прямоугольной матрице А размера m*n меньше половины столбцов содержит отрицательные элементы, то все элементы с нечетными номерами столбцов умножить на 10. В противном случае все отрицательные элементы матрицы возвести в квадрат. ...
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, с решением. Если в прямоугольной матрице А размера m*n меньше половины столбцов содержит отрицательные элементы, то все элементы с нечетными номерами столбцов умножить на 10. В противном случае все отрицательные элементы матрицы возвести в квадрат.
Здравствуйте, 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
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!