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

Обсуждение

давно
Посетитель
7438
7205
12.12.2015, 22:41
общий
Адресаты:
Ну и в чем сложность-то?
Вы хоть как-то пробовали программу написать?
Хочется Вас чему-то научить, а не сделать за Вас всю работу...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399277
11
13.12.2015, 08:59
общий
#include <stdio.h>
#include <stdlib.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];
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
A[i][j]=rand()%56;
printf("%3d ", A[i][j]);
}
printf("\n");
}
count=0;
if (A[i][j]<0)
count++;
if (count> n/2)
for (i=0;i<=m;i++){
for (j=0;j<=n;j++){
if (A[i][j]<0)
A[i][j]=A[i][j]*10;
else
for (i=0;i<=m;i++){
for (j=0;j<=n;j++){
if (A[i][j]<0)
A[m][n]=A[i][j]*A[i][j];
printf("%3d \n",A[m][n]);

}
}
}
}

system("pause");
return 0;
}



Помогите, пожалуйста, исправить ошибку в данной программе.
давно
Посетитель
7438
7205
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]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа