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

Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик

23.12.2014, 17:09. Показов 1178. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот задание....Характеристикой столбца целочисленной матрицы назовем сумму модулей его
отрицательных нечетных элементов.
1) Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом
характеристик.
2) Найти сумму элементов в тех столбцах, которые содержат хотя бы один
отрицательный элемент.
характеристику сделал и 2 е задание тоже но почему то оно выдает адрес а не сумму..
а вот 1е задание никак не могу вот мой код проверьте что не так
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <windows.h>
#include <malloc.h>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int **a;
    int *b;
    int *c;
    int n;
    int i;
    int m;
    int j;
    int k;
    int tmp;
    int item;
 
 
    bool f = true;
 
    printf("....:Вас приветствует 4 лабораторная 8 вариант:....\n");
    printf("Введите число элементов массива\n");
    scanf("%d%d", &n,&m);
    a = (int**)calloc(n, sizeof(int*));   // 1
    a[0] = (int*)calloc(n*m, sizeof(int));  // 2
 
    b = (int*)calloc(m, sizeof(int)); // характеристики
 
    c = (int*)calloc(m, sizeof(int)); // суммы
    while(f){
        printf("\nВыберите режим работы\n");
        printf("0 - Выход из программы\n");
        printf("1 - Ввод элементов массива с клавиатуры\n");
        printf("2 - Вывести матрицу на экран\n");
        printf("3 - Вывести характеристику столбцов\n");
        printf("4 - Задание 2\n");
 
 
        scanf("%d", &item);
 
        switch(item){
//      Выход из программы
        case 0:
            f = false;
        break;
 
//      Считывание элементов массива с клавиатуры
        case 1:
 
 
    for ( i = 1; i < n; ++i)        // 3
        a[i] = a[0] + i*m;
 
            if(!a){
                printf("Недостаточно памяти!\n");
                getchar();
                return 1;
            }
            for(i=0; i < n; i++)
                for(j=0; j < m; j++)
                {
                    printf("a[%d][%d] = ", i, j);
                    scanf("%d", &a[i][j]);
                }
 
                for(i=0; i < m; i++)
                  for(j=0; j < n; j++)
                  {
                    if(a[j][i] < 0)
                    {
                        tmp = abs(a[j][i]);
                        if(tmp % 2 != 0)
                            b[i] += tmp;
                    }
                  }
 
                break;
 
        case 2:
            for(i=0; i < n; i++)
            {
 
                for(j=0; j < m; j++)
                    printf( "%-7d ", a[i][j]);
                printf("\n");
            }
           break;
        case 3:
            printf("характеристика столбцов");
            printf("\n");
            for(i=0; i < m; i++)
                printf("%-7d \n", b[i]);
            break;
        case 4:
             printf("Задание 2\n");
 
                  for(i=0; i < m; i++)
                  {
                    if(b[i] != 0)
                    {
                        for(j = 0; j < m; ++j)
                            for(k = 0; k < n; ++k)
                            c[i] += a[k][j]; // суммируем столбец
 
                    }
                  }
                  printf("%d\n",c[i]);
 
                break;
 
                default:
            printf("Неверный пункт меню!!!\n");
        }
    }
 
    printf("Работа программы завершена\n");
    free(a);
    getchar();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2014, 17:09
Ответы с готовыми решениями:

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

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdbool.h&gt; #include &lt;math.h&gt; #include...

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

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик
извините, если повторюсь с задачей, не посылайте меня в поиск((( Дана целочисленная матрица M *...

17
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
23.12.2014, 17:38 2
Цитата Сообщение от mital25 Посмотреть сообщение
a = (int**)calloc(n, sizeof(int*)); // 1
a[0] = (int*)calloc(n*m, sizeof(int)); // 2
C
1
2
3
a = (int**)calloc(n, sizeof(int*)); // 1 
for(i=0;i<n;i++)
     a[i] = (int*)calloc(m, sizeof(int)); // 2
Добавлено через 1 минуту
Цитата Сообщение от mital25 Посмотреть сообщение
free(a);
C
1
2
3
for(i=0;i<n;i++)
    free(a[i]);
free(a);
Добавлено через 1 минуту
А это надо уничтожить:
Цитата Сообщение от mital25 Посмотреть сообщение
for ( i = 1; i < n; ++i) // 3
a[i] = a[0] + i*m;
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 17:44  [ТС] 3
спасибо что так быстро откликнулись

Добавлено через 4 минуты
как я понимаю надо было исправить вот так?
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <windows.h>
#include <malloc.h>
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int **a;
    int *b;
    int *c;
    int n;
    int i;
    int m;
    int j;
    int k;
    int tmp;
    int item;
 
 
    bool f = true;
 
    printf("....:Вас приветствует 4 лабораторная 8 вариант:....\n");
    printf("Введите число элементов массива\n");
    scanf("%d%d", &n,&m);
    a = (int**)calloc(n, sizeof(int*)); // 1
      for(i=0;i<n;i++)
     a[i] = (int*)calloc(m, sizeof(int)); // 2
 
    b = (int*)calloc(m, sizeof(int)); // характеристики
 
    c = (int*)calloc(m, sizeof(int)); // суммы
    while(f){
        printf("\nВыберите режим работы\n");
        printf("0 - Выход из программы\n");
        printf("1 - Ввод элементов массива с клавиатуры\n");
        printf("2 - Вывести матрицу на экран\n");
        printf("3 - Вывести характеристику столбцов\n");
        printf("4 - Задание 1\n");
        printf("5 - Задание 2\n");
 
 
        scanf("%d", &item);
 
        switch(item){
//      Выход из программы
        case 0:
            f = false;
        break;
 
//      Считывание элементов массива с клавиатуры
        case 1:
 
 
 
            if(!a){
                printf("Недостаточно памяти!\n");
                getchar();
                return 1;
            }
            for(i=0; i < n; i++)
                for(j=0; j < m; j++)
                {
                    printf("a[%d][%d] = ", i, j);
                    scanf("%d", &a[i][j]);
                }
 
                for(i=0; i < m; i++)
                  for(j=0; j < n; j++)
                  {
                    if(a[j][i] < 0)
                    {
                        tmp = abs(a[j][i]);
                        if(tmp % 2 != 0)
                            b[i] += tmp;
                    }
                  }
 
                break;
 
        case 2:
            for(i=0; i < n; i++)
            {
 
                for(j=0; j < m; j++)
                    printf( "%-7d ", a[i][j]);
                printf("\n");
            }
           break;
        case 3:
            printf("характеристика столбцов");
            printf("\n");
            for(i=0; i < m; i++)
                printf("%-7d \n", b[i]);
            break;
        case 4:
             printf("Задание 1\n");
 
 
                break;
 
                 case 5:
             printf("Задание 2\n");
 
                  for(i=0; i < m; i++)
                  {
                    if(b[i] != 0)
                    {
                        for(j = 0; j < m; ++j)
                            for(k = 0; k < n; ++k)
                            c[i] += a[k][j]; // суммируем столбец
 
                    }
                  }
                  printf("%d\n",c[i]);
 
                break;
 
 
                default:
            printf("Неверный пункт меню!!!\n");
        }
    }
 
    printf("Работа программы завершена\n");
    for(i=0;i<n;i++)
    free(a[i]);
    free(a);
    getchar();
    return 0;
}
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
23.12.2014, 17:52 4
Что у Вас делают 57-58 строки?
C
1
2
    for ( i = 1; i < n; ++i)        // 3
        a[i] = a[0] + i*m;
+ дальнейший алгоритм непонятен. И от куда Вы взяли что Вам выдает адрес?
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 17:57  [ТС] 5
хотя нет с адресом что то я соврал....все таки это число -1751928926 показывает что цикл вышел за пределы)
что делать ума не приложу

Добавлено через 22 секунды
понять бы еще как задание первое сделать
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
23.12.2014, 18:03 6
mital25, У Вас в задании написано
Характеристикой столбца целочисленной матрицы назовем сумму модулей его
отрицательных нечетных элементов.
Рост соответственно обозначает возрастание. Первый столбец должен иметь сумму отрицательных нечетных элементов по модулю меньше всего.
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 18:06  [ТС] 7
Цитата Сообщение от Novi4ekC Посмотреть сообщение
Что у Вас делают 57-58 строки?
эти строки просто пустуют ждут пока я найду решение дя 1 го задания

Добавлено через 3 минуты
Цитата Сообщение от Novi4ekC Посмотреть сообщение
Рост соответственно обозначает возрастание. Первый столбец должен иметь сумму отрицательных элементов по модулю меньше всего.
это я понимаю)))но вот как это итерпретировать не пойму методом пузырька что ли но как это делать в многомерном массиве не знаю((
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
23.12.2014, 18:42 8
mital25, запишите в дополнительном массиве последовательно в соответствии со столбцами суммы отрицательных нечетных элементов, затем меняйте местами столбцы в двумерной матрице, это делать не сложно:
C
1
2
3
4
5
int n; // stroki
int m; // stolbci
for(int i=0; i<n; i++)
    for( int j=0; j<m; j++)
    a[j][i]^=a[j][x]^=a[j][i]^=a[j][x];
последнее длинное выражение с логическими элементами меняет местами эти элементы без использования дополнительной переменной, но это работает только с целочисленными типами, каким является тип (int).
х - это необходимый столбец, который нужно поставить первым.

Добавлено через 8 минут
Я немножко неправильно подписал переменные: m - строки, n - столбцы
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 18:44  [ТС] 9
так так так т.е я должен вставить этот код в свою программу и изменить х?
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
23.12.2014, 18:46 10
mital25, этот код показывает как поменять местами столбцы (i) с (x), сейчас вы дожны почитать про метод сортировки который вам больше понравится.
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 18:50  [ТС] 11
Цитата Сообщение от Novi4ekC Посмотреть сообщение
метод сортировки который вам больше понравится.
спасибо я вас понял не могли бы вы проверить почему мое второе задание выдает ересь?
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
23.12.2014, 18:59 12
mital25, Вам zss, показал как нужно правильно выделять память для двумерного массива.
0
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 19:38  [ТС] 13
Добавлено через 33 минуты
ни хрена ни чего не получается пытался сделать перестановку изговнял код так что он вообще не запускался хорошо была копия
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
23.12.2014, 19:43 14
Цитата Сообщение от mital25 Посмотреть сообщение
if(tmp % 2 != 0) b[i] += tmp;
А где b[i] прсвоены начальные значения?

Добавлено через 1 минуту
Аналогично, c[i] тоже начальные значения не присвоены:
Цитата Сообщение от mital25 Посмотреть сообщение
c[i] += a[k][j]; // суммируем столбец
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 19:53  [ТС] 15
Цитата Сообщение от zss Посмотреть сообщение
А где b[i] прсвоены начальные значения?
так это же временная переменная зачем что то ей присваивать)она создавалась для характеристики столбцов и вполне справилась со свои назначением)))а вот
Цитата Сообщение от zss Посмотреть сообщение
c[i]
нет((

Добавлено через 6 минут
Цитата Сообщение от mital25 Посмотреть сообщение
c[i]
почему эта шляпа выдает отрицательное число из 8 чисел
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
23.12.2014, 19:55 16
Вы пишете b[i] += tmp;
Это значит: взять старое b[i] прибавить tmp и записать в b[i].
Но старое-то значение содержит мусор!
То же самое и с c[i]
1
6 / 6 / 1
Регистрация: 11.10.2013
Сообщений: 86
23.12.2014, 20:04  [ТС] 17
Цитата Сообщение от zss Посмотреть сообщение
Вы пишете b[i] += tmp;
Это значит: взять старое b[i] прибавить tmp и записать в b[i].
Но старое-то значение содержит мусор!
То же самое и с c[i]
если правильно я вас понял мне нужно присвоить изначальные значения b и c нули?
если так то мне это нужно сделать в доп цикле

 Комментарий модератора 
Дублировать темы прекращаем
0
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 1
23.12.2014, 21:23 18
Ребят, помогите написать программу на С, позволяющую найти значения величин а) минимальный положительный элемент; b) сумму и количество неотрицательных элементов правее 2-го столбца; c) максимальный меньший значения 7 элемент главной диагонали; для матрицы, включающей m строк и n столбцов элементов, числовые значения которых заданы произвольным образом.
0
23.12.2014, 21:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 21:23
Помогаю со студенческими работами здесь

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

Переставляя строки матрицы , расположить их в соответствии с ростом характеристик
Дана вещественная прямоугольная матрица. Характеристикой строки матрицы назовем сумму ее...

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

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


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

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