Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Igrokprool
0 / 0 / 3
Регистрация: 11.12.2014
Сообщений: 15
#1

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями - C++

29.01.2015, 17:45. Просмотров 1131. Ответов 9
Метки нет (Все метки)

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
#include "stdafx.h"
 
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <memory.h>
#include <stdlib.h>
#include <Windows.h>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    int **a = NULL;
    int temp = 0;
    int height = 0; //высота
    int width = 0; //ширина
    int menu = 0;
    a = new int*[height];
 
    printf("Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти сумму модулей элементов, расположенных выше главной диагонали. \n\n");
 
    do
    {
        printf("\n");
        printf("1. Ввод элементов массива. \n");
        printf("2. Обработка массива. \n");
        printf("3. Вывод массива на экран. \n");
        printf("---------------------------\n");
        printf("0. Выход \n");
 
        scanf_s("%d", &menu);
 
        switch (menu)
        {
        case 1:
 
            do while ((width > 20) || (height > 20) || (width < 1) || (height < 1))
            {
 
                printf("Введите размерность массива (ширина): ");
                scanf_s("%d", &width);
                printf("Введите размерность массива (высота): ");
                scanf_s("%d", &height);
 
                if ((width > 20) || (height > 20) || (width < 1) || (height < 1))
                {
                    printf("Ошибка!!! Массив не может быть больше 20х20 или отрицательным\n");
                }
 
            }while ((width > 20) || (height > 20) || (width < 1) || (height < 1));
 
            for (int i = 0; i < height; i++)
            {
                a[i] = new int[width];
            }
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf("Введите элемент [%d] [%d]: ", i + 1, j+1);
                    scanf_s("%d", &a[i][j]);
                }
            }
 
            break;
 
        case 2:
 
 
            break;
 
        case 3:
 
            printf("\n");
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf(" %d  ", a[i][j]);
                }
                printf("\n");
            }
 
            break;
 
        case 0:
            break;
        default:
            printf("Неверный пункт меню. \n");
        }
    } while (menu != 0);
    return 0;
}
Цель работы:Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти сумму модулей элементов, расположенных выше главной диагонали.

Матрицу то я нашел и вывод нормальный сделал, но как во 2ом кейсе обработать массив чтобы уплотнить матрицу и найти сумму элементов.
Можете ответить на простом русском, на си я сам перепишу, просто не могу логически сообразить как это сделать)
http://www.cyberforum.ru/cpp-beginners/thread2152057.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2015, 17:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями (C++):

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Помогите написать часть программы: &quot;Уплотнить заданную матрицу, удаляя из нее...

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями....

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями....

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Помогите студенту пожалуйста. А то что-то не могу разобраться. Уплотнить...

9
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
29.01.2015, 17:50 #2
Цитата Сообщение от Igrokprool Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            do while ((width > 20) || (height > 20) || (width < 1) || (height < 1))
            {
 
                printf("Введите размерность массива (ширина): ");
                scanf_s("%d", &width);
                printf("Введите размерность массива (высота): ");
                scanf_s("%d", &height);
 
                if ((width > 20) || (height > 20) || (width < 1) || (height < 1))
                {
                    printf("Ошибка!!! Массив не может быть больше 20х20 или отрицательным\n");
                }
 
            }while ((width > 20) || (height > 20) || (width < 1) || (height < 1));
Серьезно? Может у меня в глазах двоится?
0
Igrokprool
0 / 0 / 3
Регистрация: 11.12.2014
Сообщений: 15
29.01.2015, 17:53  [ТС] #3
Это не влечет ни какой смысловой нагрузки на программу(сделано что бы доказать преподу, что я умею ограничивать вводимые значения)
Или вас что-то смущает?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
29.01.2015, 17:55 #4
Цитата Сообщение от Igrokprool Посмотреть сообщение
C++
1
2
3
4
int height = 0; //высота
int width = 0; //ширина
int menu = 0;
a = new int*[height];
Создаете массив нулевого размера, а затем вводите этот размер и еще и заполнить этот массив пытаетесь
Цитата Сообщение от Igrokprool Посмотреть сообщение
C++
1
2
3
4
for (int i = 0; i < height; i++)
{
    a[i] = new int[width];
}
Добавлено через 1 минуту
Цитата Сообщение от Igrokprool Посмотреть сообщение
Или вас что-то смущает?
Меня дико смущает количество while в конструкции do{...}while(...);
0
Igrokprool
0 / 0 / 3
Регистрация: 11.12.2014
Сообщений: 15
29.01.2015, 18:02  [ТС] #5
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
#include "stdafx.h"
 
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <memory.h>
#include <stdlib.h>
#include <Windows.h>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    int **a = NULL;
    int temp = 0;
    int height = 0; //высота
    int width = 0; //ширина
    int menu = 0;
    a = new int*[height];
 
    printf("Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти сумму модулей элементов, расположенных выше главной диагонали. \n\n");
 
    do
    {
        printf("\n");
        printf("1. Ввод элементов массива. \n");
        printf("2. Обработка массива. \n");
        printf("3. Вывод массива на экран. \n");
        printf("---------------------------\n");
        printf("0. Выход \n");
 
        scanf_s("%d", &menu);
 
        switch (menu)
        {
        case 1:
 
                printf("Введите размерность массива (ширина): ");
                scanf_s("%d", &width);
                printf("Введите размерность массива (высота): ");
                scanf_s("%d", &height);
 
            for (int i = 0; i < height; i++)
            {
                a[i] = new int[width];
            }
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf("Введите элемент [%d] [%d]: ", i + 1, j+1);
                    scanf_s("%d", &a[i][j]);
                }
            }
 
            break;
 
        case 2:
 
 
            break;
 
        case 3:
 
            printf("\n");
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf(" %d  ", a[i][j]);
                }
                printf("\n");
            }
 
            break;
 
        case 0:
            break;
        default:
            printf("Неверный пункт меню. \n");
        }
    } while (menu != 0);
    return 0;
}
Пожалуйста, вот вам программа без ограничений на вводимость данных. Это не решает мою проблему со 2ым кейсом.
0
Igrokprool
0 / 0 / 3
Регистрация: 11.12.2014
Сообщений: 15
29.01.2015, 18:52  [ТС] #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
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
136
137
138
139
#include "stdafx.h"
 
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <memory.h>
#include <stdlib.h>
#include <Windows.h>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    int **a = NULL;
    int t = 0;
    int height = 0; //высота
    int width = 0; //ширина
    int menu = 0;
    a = new int*[height];
 
    printf("Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти сумму модулей элементов, расположенных выше главной диагонали. \n\n");
 
    do
    {
        printf("\n");
        printf("1. Ввод элементов массива. \n");
        printf("2. Обработка массива. \n");
        printf("3. Вывод массива на экран. \n");
        printf("---------------------------\n");
        printf("0. Выход \n");
 
        scanf_s("%d", &menu);
 
        switch (menu)
        {
        case 1:
 
                printf("Введите размерность массива (ширина): ");
                scanf_s("%d", &width);
                printf("Введите размерность массива (высота): ");
                scanf_s("%d", &height);
 
            for (int i = 0; i < height; i++)
            {
                a[i] = new int[width];
            }
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf("Введите элемент [%d] [%d]: ", i + 1, j+1);
                    scanf_s("%d", &a[i][j]);
                }
            }
 
            break;
 
        case 2:
 
            for (int i = 0; i < height; i++)
            {
                t = 0;
                for (int j = 0; j < width; j++)
                {
                    if (a[i][j] != 0)
                    {
                        t = 1;
                    }
                    if (t == 0)
                    {
                        for (int y = i; y < height - 1; y++)
                        {
                            for (int j = 0; j < width; j++)
                            {
                                a[i][j] = a[y + 1][j];
                            }
                        height--;
                        i = 0;
                        }
                    }
                }
            }
 
            for (int i = 0; i < width; i++)
            {
                t = 0;
                for (int j = 0; j < height; j++)
                {
                    if (a[i][j] != 0)
                    {
                        t = 1;
                    }
                    if (t == 0)
                    {
                        for (int y = i; y < width - 1; y++)
                        {
                            for (int j = 0; j < height; j++)
                            {
                                a[i][j] = a[j][y + 1];
                            }
                        width--;
                        i = 0;
                        }
                    }
                }
            }
 
 
 
            break;
 
        case 3:
 
            printf("\n");
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf(" %d  ", a[i][j]);
                }
                printf("\n");
            }
 
            break;
 
        case 0:
            break;
        default:
            printf("Неверный пункт меню. \n");
        }
    } while (menu != 0);
    return 0;
}
Помогите разобраться со 2ым кейсом (Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.)
При вводе матрицы
0 0 0 0
0 0 0 0
1 2 3 0
0 0 0 0
программа должна оставить только
1 2 3
а выводит
1 2 3
3 0 0
что делать? где ошибка?
0
1XPLoade1
30 / 30 / 38
Регистрация: 23.01.2015
Сообщений: 174
29.01.2015, 19:40 #7
уже смотрю.

Добавлено через 5 минут
Вот примерно так:
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
136
137
138
139
140
#include "stdafx.h"
 
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <memory.h>
#include <stdlib.h>
#include <Windows.h>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    int **a = NULL;
    int t = 0;
    int height = 0; //высота
    int width = 0; //ширина
    int menu = 0;
    a = new int*[height];
 
    printf("Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти сумму модулей элементов, расположенных выше главной диагонали. \n\n");
 
    do
    {
        printf("\n");
        printf("1. Ввод элементов массива. \n");
        printf("2. Обработка массива. \n");
        printf("3. Вывод массива на экран. \n");
        printf("---------------------------\n");
        printf("0. Выход \n");
 
        scanf_s("%d", &menu);
 
        switch (menu)
        {
        case 1:
 
            printf("Введите размерность массива (ширина): ");
            scanf_s("%d", &width);
            printf("Введите размерность массива (высота): ");
            scanf_s("%d", &height);
 
            for (int i = 0; i < height; i++)
            {
                a[i] = new int[width];
            }
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf("Введите элемент [%d] [%d]: ", i + 1, j + 1);
                    scanf_s("%d", &a[i][j]);
                }
            }
 
            break;
 
        case 2:
 
            for (int i = 0; i < height; i++)
            {
                t = 0;
                for (int j = 0; j < width; j++)
                {
                    if (a[i][j] != 0)
                    {
                        t = 1;
                    }
                    if (t == 0)
                    {
                        for (int j = 0; j < width; j++)
                        {
                            for (int y = i; y < height; y++)
                            {
                                a[y][j] = a[y + 1][j];
                            }
                        }
 
                        height--;
                        i = 0;
                    }
                }
            }
 
            for (int i = 0; i < width; i++)
            {
                t = 0;
                for (int j = 0; j < height; j++)
                {
                    if (a[i][j] != 0)
                    {
                        t = 1;
                    }
                    if (t == 0)
                    {
                        for (int i = 0; i < height; i++)
                        {
                            for (int y = j; y < width; y++)
                            {
                                a[i][y] = a[i][y + 1];
                            }
                        }
                        width--;
                        i = 0;
                    }
                }
            }
 
 
 
            break;
 
        case 3:
 
            printf("\n");
 
            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    printf(" %d  ", a[i][j]);
                }
                printf("\n");
            }
 
            break;
 
        case 0:
            break;
        default:
            printf("Неверный пункт меню. \n");
        }
    } while (menu != 0);
    return 0;
}
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
29.01.2015, 19:59 #8
Лучший ответ Сообщение было отмечено Igrokprool как решение

Решение

Igrokprool, пробуй
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
136
137
138
139
140
141
142
143
144
145
146
#include "stdafx.h"
 
#include <cstdio>
#include <clocale>
#include <cstdlib>
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale(LC_ALL, "Russian");
 
    int **a = NULL, **b = NULL;
    int temp = 0;
    int height = 0; //высота
    int width = 0; //ширина
    int menu = 0;
    bool array_is_filled = false;
    int i, j, k, count_i, count_j;
 
    printf("Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями. Найти сумму модулей элементов, расположенных выше главной диагонали. \n\n");
 
    do
    {
        printf("\n");
        printf("1. Ввод элементов массива. \n");
        printf("2. Обработка массива. \n");
        printf("3. Вывод массива на экран. \n");
        printf("---------------------------\n");
        printf("0. Выход \n");
 
        scanf_s("%d", &menu);
 
        switch (menu)
        {
        case 1:
                do // здесь не должно быть while
                {
                    printf("Введите размерность массива (ширина): ");
                    scanf_s("%d", &width);
                    printf("Введите размерность массива (высота): ");
                    scanf_s("%d", &height);
                    
                    if ((width > 20) || (height > 20) || (width < 1) || (height < 1))
                    {
                        printf("Ошибка!!! Массив не может быть больше 20х20 или отрицательным\n");
                    }
                    
                } while ((width > 20) || (height > 20) || (width < 1) || (height < 1));
                
                a = new int*[height];
                for (i = 0; i < height; i++)
                {
                    a[i] = new int[width];
                }
 
                for (i = 0; i < height; i++)
                {
                    for (j = 0; j < width; j++)
                    {
                        printf("Введите элемент [%d] [%d]: ", i + 1, j+1);
                        scanf_s("%d", &a[i][j]);
                    }
                }
                array_is_filled = true;
                break;
 
        case 2:
                if (!array_is_filled)
                {
                    printf("Массив не заполнен!\n");
                    break;
                }
                for (i = 0; i < height; ++i)
                {
                    count_j = 0;
                    for (j = 0; j < width; ++j)
                    {
                        if (a[i][j] == 0) ++count_j;
                    }
                    if (count_j == width)
                    {
                        for (k = i; k < height-1; ++k)
                            for (j = 0; j < width; ++j)
                                a[k][j] = a[k+1][j];
                        --height;
                    }
                    
                }
                for (j = 0; j < width; ++j)
                {
                    count_i = 0;
                    for (i = 0; i < height; ++i)
                    {
                        if (a[i][j] == 0) ++count_i;
                    }
                    if (count_i == height)
                    {
                        for (k = j; k < width-1; ++k)
                            for (i = 0; i < height; ++i)
                                a[i][k] = a[i][k+1];
                        --width;
                    }
                }
                b = new int*[height];
                for (i = 0; i < height; ++i)
                {
                    b[i] = new int[width];
                    for (j = 0; j < width; ++j)
                        b[i][j] = a[i][j];
                    delete[] a[i];
                }
                delete[] a;
                a = b;
                    
                break;
 
        case 3:
                if (!array_is_filled)
                {
                    printf("Массив не заполнен!\n");
                    break;
                }
                printf("\n");
     
                for (i = 0; i < height; i++)
                {
                    for (j = 0; j < width; j++)
                    {
                        printf(" %d  ", a[i][j]);
                    }
                    printf("\n");
                }
     
                break;
 
        case 0:
            break;
        default:
            printf("Неверный пункт меню. \n");
        }
    } while (menu != 0);
    
    return 0;
}
Добавлено через 9 минут
Igrokprool, перед
C++
1
2
return 0;
}
после
C++
1
} while (menu != 0);
допиши
C++
1
2
3
for (i = 0; i < height; ++i)
    delete[] a[i];
delete[] a;
Добавлено через 57 минут
Igrokprool, посмотрел Вашу вторую тему по этому же вопросу и решил немного изменить: это
C++
1
bool array_is_filled = false;
замените на
C++
1
bool array_is_filled = false, is_zero = true;
а это
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
case 2:
        if (!array_is_filled)
        {
           printf("Массив не заполнен!\n");
           break;
        }
        for (i = 0; i < height; ++i)
        {
            count_j = 0;
            for (j = 0; j < width; ++j)
            {
                if (a[i][j] == 0) ++count_j;
            }
            if (count_j == width)
            {
                for (k = i; k < height-1; ++k)
                    for (j = 0; j < width; ++j)
                        a[k][j] = a[k+1][j];
                --height;
            }
                    
        }
        for (j = 0; j < width; ++j)
                {
                    count_i = 0;
                    for (i = 0; i < height; ++i)
                    {
                        if (a[i][j] == 0) ++count_i;
                    }
                    if (count_i == height)
                    {
                        for (k = j; k < width-1; ++k)
                            for (i = 0; i < height; ++i)
                                a[i][k] = a[i][k+1];
                        --width;
                    }
                }
                b = new int*[height];
                for (i = 0; i < height; ++i)
                {
                    b[i] = new int[width];
                    for (j = 0; j < width; ++j)
                        b[i][j] = a[i][j];
                    delete[] a[i];
                }
                delete[] a;
                a = b;
                    
                break;
на это
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
            case 2:
                if (!array_is_filled)
                {
                    printf("Массив не заполнен!\n");
                    break;
                }
                for (i = 0; i < height; ++i)
                {
                    is_zero = true;
                    for (j = 0; j < width; ++j)
                    {
                        if (a[i][j] != 0)
                        {
                            is_zero = false;
                            break;
                        }
                    }
                    if (is_zero)
                    {
                        for (k = i; k < height-1; ++k)
                            for (j = 0; j < width; ++j)
                                a[k][j] = a[k+1][j];
                        --height;
                    }
                    
                }
                for (j = 0; j < width; ++j)
                {
                    is_zero = true;
                    for (i = 0; i < height; ++i)
                    {
                        if (a[i][j] != 0)
                        {
                            is_zero = false;
                            break;
                        }
                    }
                    if (is_zero)
                    {
                        for (k = j; k < width-1; ++k)
                            for (i = 0; i < height; ++i)
                                a[i][k] = a[i][k+1];
                        --width;
                    }
                }
                b = new int*[height];
                for (i = 0; i < height; ++i)
                {
                    b[i] = new int[width];
                    for (j = 0; j < width; ++j)
                        b[i][j] = a[i][j];
                    delete[] a[i];
                }
                delete[] a;
                a = b;
                    
                break;        case 2:
                if (!array_is_filled)
                {
                    printf("Массив не заполнен!\n");
                    break;
                }
                for (i = 0; i < height; ++i)
                {
                    is_zero = true;
                    for (j = 0; j < width; ++j)
                    {
                        if (a[i][j] != 0)
                        {
                            is_zero = false;
                            break;
                        }
                    }
                    if (is_zero)
                    {
                        for (k = i; k < height-1; ++k)
                            for (j = 0; j < width; ++j)
                                a[k][j] = a[k+1][j];
                        --height;
                    }
                    
                }
                for (j = 0; j < width; ++j)
                {
                    is_zero = true;
                    for (i = 0; i < height; ++i)
                    {
                        if (a[i][j] != 0)
                        {
                            is_zero = false;
                            break;
                        }
                    }
                    if (is_zero)
                    {
                        for (k = j; k < width-1; ++k)
                            for (i = 0; i < height; ++i)
                                a[i][k] = a[i][k+1];
                        --width;
                    }
                }
                b = new int*[height];
                for (i = 0; i < height; ++i)
                {
                    b[i] = new int[width];
                    for (j = 0; j < width; ++j)
                        b[i][j] = a[i][j];
                    delete[] a[i];
                }
                delete[] a;
                a = b;
                    
                break;
1
Igrokprool
0 / 0 / 3
Регистрация: 11.12.2014
Сообщений: 15
29.01.2015, 20:29  [ТС] #9
Можете объяснить последний фрагмент
C++
1
2
3
4
5
6
7
8
9
10
 b = new int*[height];
                for (i = 0; i < height; ++i)
                {
                    b[i] = new int[width];
                    for (j = 0; j < width; ++j)
                        b[i][j] = a[i][j];
                    delete[] a[i];
                }
                delete[] a;
                a = b;
Как я понимаю мы создаем новый массив Б и даем ему значения массива А, затем чистим массив А и снова даем ему значения переменных Б. Смысл?
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
29.01.2015, 21:24 #10
Igrokprool, смысл в перераспределении памяти. Этого можно не делать в принципе.
0
29.01.2015, 21:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2015, 21:24
Привет! Вот еще темы с решениями:

Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
Помогите пожалуйста с этим заданием: уплотнить заданную матрицу, удаляя из...

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

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

Объсните эксперты как реализовать последнее условие, Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями
1. Дана целочисленная матрица. Определить: 1) среднее арифметическое элементов...


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

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

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