13.12.2015, 17:02
общий
это ответ
Здравствуйте, fridge!
Держите. Подсчитывается количество столбцов, у которых есть хотя бы один отрицательный элемент.
Если надо подсчитывать столбцы, у которых все элементы отрицательные, то думаю, Вы сами подправите
Т.к. количество строк и столбцов вводятся с консоли, то матрицу строим динамически, как массив указателей строк
на указатели элементов столбцов.
Еще момент: для получения отрицательных чисел надо отнимать половину диапозона.
Будут вопросы - спрашивайте в мини-форуме.
[code h=200]
/* Если в прямоугольной матрице А размера 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;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен