Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
toni_bel
4 / 4 / 3
Регистрация: 26.07.2016
Сообщений: 96
1

Изменение знака элементов матрицы на противоположный

18.08.2016, 13:39. Просмотров 1069. Ответов 6
Метки нет (Все метки)

Доброго дня!
По условию задачи необходимо в каждом столбце двумерного массива целых чисел сменить знак любого максимального по модулю элемента на противоположный.
Задачу вроде как сделал.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
system ("chcp 1251");
 system ("cls");
 int a[10][10],n,m,i,j,x,y;                
 printf("введите количество строк от 1 до 10\n");
 scanf("%d",&n);
 while(n<1||n>10)
 {printf("введено неверное значение, пробуй еще\n");         
  scanf("%d",&n);
 }
 printf("введите количество элементов строки (столбцов) от 1 до 10\n");
 scanf("%d",&m);
 while(m<1||m>10)
 {printf("введено неверное значение, пробуй еще\n");
  scanf("%d",&m);
 }
srand(time(0));
 for(i=0;i<n;i++)
 {   for(j=0;j<m;j++)
     {
        a[i][j]=rand()%21-10;
      } 
 }
 for(i=0;i<n;i++)
 {  for(j=0;j<m;j++)
    {printf("%4d",a[i][j]);
    }
  printf("\n"); 
}
printf("смена знака любого максимального по модулю элемента столбца на противоположный\n"); 
int max,i_max,j_max;
for(j=0;j<m;j++)
{max=a[0][j];
i_max=0;
j_max=j;
   for(i=0;i<n;i++)
    {if (abs(a[i][j])>abs(max))
      {max=a[i][j];
      i_max=i;
      j_max=j;
      }
    }
y=-a[i_max][j_max];
x=a[i_max][j_max];
a[i_max][j_max]=y;
y=x;
}
 
printf("\преобразованная матрица\n");
for(i=0;i<n;i++)
 {  for(j=0;j<m;j++)
    {printf("%4d",a[i][j]);
    }
  printf("\n"); 
}
return 0;
}
Но не дает покоя такой вопрос: как проделать данную процедуру со всеми максимальными элементами столбца, если их долее одного?
Потому что в данном виде программы меняется знак только у одного элемента столбца
Помогите разобраться.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2016, 13:39
Ответы с готовыми решениями:

Заменить порядок битов в целом числе без знака на противоположный
Напишите программу, которая меняет порядок битов в целом числе без знака на противоположный....

Заменить в каждом нечетном столбце матрицы порядок размещения элементов на противоположный
Задан массив m на n. Заменить в каждом нечетном столбце порядок размещения элементов на...

Изменение порядка битов в символе на противоположный
Пожалуйста помогите написать код на СИ! Задание звучит так : Напишите программу, которая меняет...

Написать подпрограмму для замены знака на противоположный у всех элементов 5-го столбца матрицы
Написать подпрограмму для замены знака на противоположный у всех элементов 5-го столбца матрицы...

Изменение знака на противоположный, в матрице
Нужно в каждом столбце заменить максимальный элемент на противоположный (если -1 максимальный, то...

6
IVAN1234
45 / 45 / 40
Регистрация: 31.08.2015
Сообщений: 147
18.08.2016, 14:30 2
>= Думаю, если вы об этом
0
toni_bel
4 / 4 / 3
Регистрация: 26.07.2016
Сообщений: 96
18.08.2016, 14:43  [ТС] 3
тогда программа будет менять знак у последнего из максимальных чисел, но не у всех.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10295 / 6178 / 1554
Регистрация: 25.07.2009
Сообщений: 11,761
18.08.2016, 23:55 4
toni_bel, по каждому столбцу нужно два прохода. На первом определяешь максимальное по модулю значение, на втором меняешь у всех элементов с таким значением знак на противоположный.
0
toni_bel
4 / 4 / 3
Регистрация: 26.07.2016
Сообщений: 96
19.08.2016, 08:36  [ТС] 5
Что-то не получается...
Пробовал после цикла по поиску максимального значения в столбце сделать еще цикл, который менять знаки будет-безуспешно, какая-то фигня выходит...
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10295 / 6178 / 1554
Регистрация: 25.07.2009
Сообщений: 11,761
19.08.2016, 09:55 6
Лучший ответ Сообщение было отмечено toni_bel как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdlib.h>
 
#define ROWS 4
#define COLUMNS 5
 
int main(void) {
    int i, j, matrix[ROWS][COLUMNS] = {
        { 3, -4, 8, -1, 5 },
        { -2, -5, 4, 3, -5 },
        { -3, 2, -8, -3, 4 },
        { 2, 5, -4, 2, 5 },
    };
    
    printf("Before:\n");
    for ( i = 0; i < ROWS; ++i ) {
        for ( j = 0; j < COLUMNS; ++j )
            printf("%2d ", matrix[i][j]);
        printf("\n");
    }
    
    for ( j = 0; j < COLUMNS; ++j ) {
        int absmax = abs(matrix[0][j]);
        
        for ( i = 1; i < ROWS; ++i ) {
            int current = abs(matrix[i][j]);
            
            if ( current > absmax )
                absmax = current;
        }
        
        for ( i = 0; i < ROWS; ++i )
            if ( abs(matrix[i][j]) == absmax )
                matrix[i][j] *= -1;
    }
    
    printf("After:\n");
    for ( i = 0; i < ROWS; ++i ) {
        for ( j = 0; j < COLUMNS; ++j )
            printf("%2d ", matrix[i][j]);
        printf("\n");
    }
    
    return 0;
}
Изменение знака элементов матрицы на противоположный
1
toni_bel
4 / 4 / 3
Регистрация: 26.07.2016
Сообщений: 96
19.08.2016, 10:15  [ТС] 7
Спасибо. Нашел ошибку- надо было выражение замены из первоначального варианта решения убирать.
0
19.08.2016, 10:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2016, 10:15

Смена знака минимального элемента каждого столбца матрицы на противоположный
Необходима помощь в решении задачи, никак не могу понять как доделать. В массиве С(4*4) из...

Если сумма всех элементов матрицы больше 0, то у первого элемента этой матрицы заменит знак на противоположный...
Помогите пожалуйста! -Даны три матрицы А(3,5), В(6,4), С(7,2). Если сумма всех элементов...

Найти сумму положительных элементов в каждом столбце матрицы, поменяв знак четных элементов на противоположный
Вводится квадратная матрица порядка n. Найти сумму положительных элементов в каждом столбце,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru