Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 18.11.2017
Сообщений: 102
1

Перестановка строк массива по росту характеристики

31.10.2019, 23:15. Показов 1269. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик.

Есть этот код. Ошибок при компиляции нет. Переделывал пример, где нет указателей, соответственно не знаю, как представить a[i+1][j]. *a(i+1+j)?
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
#include "pch.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main()
{
    int *a, i, j, n, m,sum1, sum2,l,t;
    system("chcp 1251");
    system("cls");
    printf("Введите количество строк N: ");
    scanf_s("%d", &n);
    printf("Введите количество столбцов M: ");
    scanf_s("%d", &m);
    a = (int*)malloc(n * m * sizeof(int));
    for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
        {
            printf("a[%d][%d] = ", i, j);
            scanf_s("%d", a+i+j);
        }
    printf("\n");
    l = 0;
                for (i = 0; i < m - 1; i++)
                {
                    sum1 = sum2 = 0;
                    for (int j = 0; j < n; j++)
                    {
                        if (*(a+i+j) > 0 && *(a+i+j) % 2 == 0)
                        {
                            l++;
                        sum1 += *(a+i+j);
                        sum2 += *(a+i+1+j);
                    }
                        }
                    if (sum1 > sum2)
                    {
                        for (j = 0; j < n; j++)
                        {
                            t = *(a+i+j);
                            *(a + i + j) = *(a + i+1 + j);
                            *(a + i + 1 + j) = t;
                        }
                    }
                }
    if (l != 0)
    {
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
                printf("%5d ", *(a + i + j));
            printf("\n");
        }
    }
    else    printf("Сортировка невозможна:в матрице нет положительных чётных элементов");
        return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2019, 23:15
Ответы с готовыми решениями:

Перестановка строк двумерного массива
Переставить строки двумерного массива по убыванию значений максимальных елементов строк.

Упорядочить по росту сумм элементов строк строки той матрицы, у которой больше нулевых строк
Сидел думал над задачей почти всю ночь условия такие Даны три матрицы размером M x N. Упорядочить...

Перестановка местами столбцов и строк двумерного массива
Задача такая - путем перестановки столбцов и строк в двумерном массиве надо сделать так, чтобы...

Перестановка строк матрицы по возрастанию среднего значения строк
Разработать программу для перестановки строк матрицы таким образом, чтобы средние значения по...

1
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
31.10.2019, 23:47 2
Лучший ответ Сообщение было отмечено Everman3228 как решение

Решение

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>
#include <stdint.h>
#include <ctype.h>
#include <string.h>
 
void
mx_dump (int mx[3][3]) {
  int i, j;
 
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      fprintf(stdout, "%d  ", mx[i][j]);
    }
    putchar('\n');
  }
  putchar('\n');
}
 
int
cmp (const void * p1, const void * p2) {
  int sum1 = 0, sum2 = 0;
  int i = 0;
 
  while (i < 3) {
    sum1 += ((int *) p1)[i];
    sum2 += ((int *) p2)[i++];
  }
  return sum2 < sum1;
}
 
int
main(int argc, char ** argv)
{
  int mx[3][3] = {
    {1,2,3},
    {3,4,5},
    {2,3,4}
  };
 
  mx_dump(mx);
  qsort(mx, 3, sizeof(int) * 3, cmp);
  mx_dump(mx);
  return 0;
}
Добавлено через 48 секунд
Bash
1
2
3
4
5
6
7
8
9
10
11
bash-4.6-$ gcc tmp.c
bash-4.6-$ ./a.out 
1  2  3  
3  4  5  
2  3  4  
 
1  2  3  
2  3  4  
3  4  5  
 
bash-4.6-$
0
31.10.2019, 23:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2019, 23:47
Помогаю со студенческими работами здесь

Сортировка строк матрицы C++ (перестановка строк)
Помогите пожалуйста, в матрице из целых чисел поменять местами первую строку и строку, содержащую...

Сформировать массив B (m), записав в него по росту порядковые номера всех нулевых элементов массива А
Заданный массив A (n). Сформировать массив B (m), записав в него по росту порядковые номера всех...

Организуйте массив, состоящий из 10 различных символов. Первую половину массива отсортировать по росту, а вторую по
Организуйте массив, состоящий из 10 различных символов. Первую половину массива отсортировать по...

Перестановка строк
Помогите пожалуйста!!! Нужно в матрице переставить первую строку с последней, вторую с...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru