Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
#1

Ошибка при вводе разного кол-ва строк и столбцов в матрицы. Динамич. матрицы/массивы - C++

13.05.2012, 10:32. Просмотров 433. Ответов 4
Метки нет (Все метки)

Дана матрица, размерность вводит пользователь, данные тоже. Осуществить сортировку вставками, массива, который будет получен из суммы модулей элементов строк.

код написал, но когда ввожу размер матрицы 2*3 или 3*4, т.е. не одинаковое кол-вао строк и столбцов, то вылетает ошибка в этом месте программы:

C++
1
(matrix[j][i] > 0)?Summa[j] += matrix[j][i]: Summa[j] += (-1)*matrix[j][i];    // молдули элементов строк, если число отрицательное
Не пойму почему. Можете объяснить, или подсказать как исправить?

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
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
 
//_____________________________Соритровка Вставками___________________________//
void insert_sort(int *a, int N) 
{
    for(int *q=a+1; q<a+N; q++) 
    {
        int x = *q;       // инициализируем временную переменную текущим значением элемента массива
        int *p = q-1;     //запоминаем индекс предыдущего элемента массива
        while(p>=a && *p>x)     // пока индекс не равен 0 и предыдущий элемент массива больше текущего
        
            *(p+1) = *p--;   // перестановка элементов массива
            *(++p) = x;
        
    }
}
//_____________________________Основная программа________________________________//
void main()
{
    setlocale(LC_ALL, "Russian");
 
//_____________Дана динамическая целочисленная матрица(выделяем память)________________________//
 
    unsigned int n, m;
    n = m = 0;
    printf("Введите n(ширину матрицы): ");
    scanf("%ud", &n);
    printf("Введите m(высоту матрицы): ");
    scanf("%ud", &m);
 
    int** matrix = new int* [n];
    int j;
    for (j = 0; j != n; ++j)
    {
        matrix[j] = new int [m];             
    }
 
//______________Задаём значения матрицы_____________________//
    unsigned int i_n, j_m;
    for (i_n = 0 ; i_n < n; i_n++)
    {
        for (j_m = 0; j_m < m; j_m++)
        {
            printf("Элемент matrix[%u][%u] = ", i_n, j_m);
            while (scanf_s("%d", &matrix[i_n][j_m])!=1)
                {
                    printf("Ошибка ввода, введите заново \n");
                    fflush(stdin);
                }
            
        }
    }    
    
//___________Вывод матрицы на экран____________________________//
    printf("Выводим матрицу на экран\n");
    for (i_n = 0 ; i_n < n; i_n++)
    {
        for (j_m = 0; j_m < m; j_m++)
        {
            printf(" %d ", *&matrix[i_n][j_m]);
        }
        printf("\n");
    }
    getch();
     
//_________Построение одномерного динамического массива, каждый эллемент\
    которого равен сумме элементов одной строки исходной матрицы.___________________//
    
    int *Summa = new int [m];
 
    unsigned int i;
    for (j = 0; j < m; ++j)                                     
    {
        Summa[j] = 0;
        for (i = 0; i < n; ++i)           
        {
            (matrix[j][i] > 0)?Summa[j] += matrix[j][i]: Summa[j] += (-1)*matrix[j][i];    // молдули элементов строк, если число отрицательное
        }
    }
 
    printf("Вывод массива с суммой элементов строк матрицы\n");
    for (j = 0; j < m; ++j)
    {
        printf(" %d ", *&Summa[j]);
    }
    getch();
 
// Вызов процедуры соритровки
//________________Освободить память от матрицы._______________________//
 insert_sort(Summa, n);
 
//_____________Вывод на экран отсортированного массива________________//
 printf("\nВывод массива с суммой элементов строк матрицы(После соритровки)\n");
    for (j = 0; j != m; ++j)
    {
        printf(" %d ", *&Summa[j]);
    }
    getch();
 
//___________Освобождаем память_______________//
    for (j = 0; j != n; ++j)
    {
        delete[] matrix[j];
    }
    delete[] matrix; 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 10:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при вводе разного кол-ва строк и столбцов в матрицы. Динамич. матрицы/массивы (C++):

Ошибка при вводе кол-ва строк меньше ожидаемого - C++
ожидаем введение 5 строчек символов но ввели 4 как понять что ввели 4 и вывести ошибку? считывание строчек в массив осуществляется по...

Обработка отдельных строк (столбцов) матрицы и работа с диагоналями. Двумерные массивы - C++
Ввести целочисленный двумерный массив ANxM, вывести его. Найти сумму положительных угловых элементов. Найденной суммой заменить строку...

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

Подскажите где ошибка (номер строк и столбцов всех седловых точек матрицы) - C++
Номер строк и столбцов всех седловых точек матрицы. #include &lt;iostream.h&gt; void main(void) { int const n = 3, m = 3; int...

матрицы, упорядочить ее строки согласно кол-ву строк с нулями - C++
Даны три матрицы M * N, упорядочить по росту сумм элементов строк строки той матрицы у которой больше ненулевых элементов. И...

Народ, как справиться с такой задачей: определить кол-во столбцов матрицы B, содержащих все положительные элементы - C++
определить кол-во столбцов матрицы B, содержащих все положительные элементы. Bkm=E в степени xk + E в степени ym / 2 где xk={2,7; 1; 4,1}...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
13.05.2012, 10:56 #2
Цитата Сообщение от Yentroistok Посмотреть сообщение
Построение одномерного динамического массива, каждый эллемент\
которого равен сумме элементов одной строки исходной матрицы.
int *Summa = new int [m];
unsigned int i;
for (j = 0; j < m; ++j) {
Summa[j] = 0;
for (i = 0; i < n; ++i) {
(matrix[j][i] > 0)?Summa[j] += matrix[j][i]: Summa[j] += (-1)*matrix[j][i]; //} }
если исходить из правильности комментария, то количество элементов в массиве Summa должна соответствовать количеству строк массива matrix, вы же выделяете по количеству столбцов.

также ошибка в условии этих циклов, надо поменять местами m и n.

И еще, для получения модуля есть стандартная функция abs или fabs из заголовка math.h (или <cmath>).
1
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
13.05.2012, 10:58  [ТС] #3
antoha398, Спасибо)
0
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
13.05.2012, 10:59 #4
Цитата Сообщение от Yentroistok Посмотреть сообщение
*&Summa[j] или такой *&matrix[i_n][j_m]
что вы хотите получить от такой конструкции? пишите просто Summa[j].
и в конце вы забыли освободить память от массива Summa.
1
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
13.05.2012, 18:58  [ТС] #5
А еще появился такой вопрос: Как вывести на экран строки матрицы в порядке убывания суммы модулей элементов строк.

Тут я поменял. Сделал по убыванию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
void insert_sort(int *a, int N) 
{
    for(int *q=a+1; q<a+N; q++) 
    {
        int x = *q;       // инициализируем временную переменную текущим значением элемента массива
        int *p = q-1;     //запоминаем индекс предыдущего элемента массива
        while(p>=a && *p<x)     // пока индекс не равен 0 и предыдущий элемент массива МЕНЬШЕ(*p<x) текущего
        
            *(p+1) = *p--;   // перестановка элементов массива
            *(++p) = x;
    }
}
Пробовал выводить по сумме элементов строки матрицы в соответствии с элементами массива Summa, но ничего не вышло.

P/S/
antoha398, память освободил.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2012, 18:58
Привет! Вот еще темы с ответами:

Сумма строк и столбцов матрицы - C++
Всем привет, посоветуйте пожалуйста что не так делаю, есть двумерный динамический массив-матрица, нужно записать в диагональ матрицы суму...

Перестановка местами строк и столбцов матрицы - C++
Помогите решить задачу: Дана матрица А(nxm).Получить матрицу, получающуюся из данной : перестановкой строк- первой с последней, второй с...

Как посчитать количество строк и столбцов матрицы? - C++
Доброго времени суток! Посоветуйте способ, которым можно посчитать количество строк и столбцов матрицы, которая записана в текстовом...

Написать алгоритм сортировки строк и столбцов матрицы - C++
Дано квадратную матрица размером 5х5, заполненную случайными числами. Используя один из алгоритмов сортировки, отсортировать: а) строки...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.05.2012, 18:58
Ответ Создать тему
Опции темы

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