0 / 0 / 1
Регистрация: 18.08.2015
Сообщений: 6
1

Выделение памяти под массив, который заполняется из другого массива

08.04.2018, 18:27. Показов 930. Ответов 7
Метки нет (Все метки)

Подскажите, как избавиться от нулей, которые образуются в конце одномерного массива после вычета "неугодных" чисел из двумерного?
Вот код:
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
{
        int n, m, k, c, l = 0, number=0;
        cout << "Введите кол-во столбцов: \n";
        cin >> m;
        cout << "Введите кол-во строк: \n";
        cin >> n;
        int** a = new int*[n];
        for (int i = 0; i < n; i++) a[i] = new int[m];
        for (int j = 0; j < n; j++) {
          for (int i = 0; i < m; i++) {
            cout << "Введите элемент а[" << j << "][" << i << "] ";
            cin >> a[j][i];
          }
        }
        for (int j = 0; j < n; j++) {
          for (int i = 0; i < m; i++) {
            cout << a[j][i] << ' ';
          }
          cout << endl;
        }
        cout << "Введите значение: \n";
        cin >> c;
        int* b = new int [l];
        for (int j = 0; j < n; j++) {
          for (int i = 0; i < m; i++) {
            if (a[j][i] != c) {
              b[l] = a[j][i];
              l++;
              number++;
            }
          }
        }
        for (int l = 0; l < n * m; l++) {
          cout << b[l] << ' ';
        }
        for (int i = 0; i < n; i++) delete[] a[i];
        delete[] a;
        break;
      }
Я так понимаю, надо выделить определенное кол-во памяти под массив b, но как это сделать, если я не знаю сразу, сколько ему потребуется ее. Я запуталась совсем.
Вот скрин:
Изображения
 
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2018, 18:27
Ответы с готовыми решениями:

Выделение памяти под массив
в массиве данных хранять в последовательных ячейках памяти В программе, выделенна память под...

Выделение памяти под массив
Требуется выделить память под матрицу. Будет ли следующий код работать корректно? ...

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

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

7
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.04.2018, 18:38 2
Значение l должно быть установлено до выделения памяти. Это же очевидно.
Делай подсчёт предварительно.
0
0 / 0 / 1
Регистрация: 18.08.2015
Сообщений: 6
08.04.2018, 19:04  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
Значение l должно быть установлено до выделения памяти. Это же очевидно.
Делай подсчёт предварительно.
Я делаю, но так программа совсем ломается и выдает сплошные нули.
И, как я поняла, он не может посчитать size_b почему-то. Не могли бы Вы, пожалуйста, ткнуть, где у меня ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 size_a=sizeof(a);
        cout << "Введите значение: \n";
        cin >> c;
        for (int j = 0; j < n; j++) {
          for (int i = 0; i < m; i++) {
            if (a[j][i] == c) number++;
          }
        }
        cout << "number=" << number<<endl;
        size_a-=number;
        size_b=size_a;
        cout << "size_b=" << size_b<<endl;
        int* b = new int [size_b];
переменные size_a, size_b иnumber=0 в начале указала, если что
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
08.04.2018, 19:14 4
leralins, сбросьте условие задачи
0
0 / 0 / 1
Регистрация: 18.08.2015
Сообщений: 6
08.04.2018, 19:26  [ТС] 5
Четвёртая задача. Суть: нужно из матрицы прямоугольной, введённой пользователем, вытащить определенное число (тоже пользователя) и перенести оставшийся массив в одномерный массив В
Миниатюры
Выделение памяти под массив, который заполняется из другого массива  
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.04.2018, 19:42 6
Обход дважды не можешь сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        cout << "Введите значение: \n";
        cin >> c;
 
        for (int j = 0; j < n; j++) {
          for (int i = 0; i < m; i++) {
            if (a[j][i] != c) {
              number++;
            }
          }
        }
 
        int* b = new int [number];
 
        for (int j = 0; j < n; j++)
          for (int i = 0; i < m; i++)
            if (a[j][i] != c)
              b[l++] = a[j][i];
0
7416 / 5011 / 2890
Регистрация: 18.12.2017
Сообщений: 15,694
08.04.2018, 20:04 7
Лучший ответ Сообщение было отмечено MrGluck как решение

Решение

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
#include <iostream>
using namespace std;
 
int main()
{
    int n, m, c, k=0, r=0;
    
    cout <<"Enter n: "; cin >>n;
    cout <<"Enter m: "; cin >>m;
    
      int **A = new int*[n]; 
    for (int i = 0; i < n; i++)
        A[i] = new int[m];
    
    cout <<"Enter matrix elements:\n";
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      cin >> A[i][j];
 
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    cout << A[i][j] << " ";
    cout << endl;
    }
    cout << endl;
    
    cout <<"Enter c: "; cin >>c;
    
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
    if (A[i][j]!=c) k++;
    
    int*B = new int[k];
    
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
    if (A[i][j]!=c) B[r++]=A[i][j];
    
    cout <<"Matrix B:\n";
    for (int i = 0; i < k; i++)
    cout << B[i]<< " ";
    cout << endl;   
    
    for (int i = 0; i < n; i++)
    delete [] A[i];
    delete [] A;
    delete [] B;
system("pause");
return 0;
}
0
0 / 0 / 1
Регистрация: 18.08.2015
Сообщений: 6
08.04.2018, 20:17  [ТС] 8
Боже, как все просто оказалось. Всем спасибо. И извините за глупые вопросы, я учусь)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2018, 20:17
Помогаю со студенческими работами здесь

Выделение памяти под массив структур
Добрый день. Подскажите в чём ошибка. #pragma hdrstop #pragma argsused #include &lt;stdio.h&gt;...

Выделение памяти под массив объектов
У меня есть класс Shape. Требуется выделить память под массив этих объектов. К примеру: *Shape...

Выделение памяти под двумерный массив
Доброе время ! Проблема такая : препод задал задачу сортировки массива произвольного типа(char*...

Выделение памяти под шаблонный массив
template &lt;class T&gt; T* arrray &lt;T&gt;::create (unsigned size) { //..... T* templateBuf = new T...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru