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

Как освободить память в двумерном массиве в столбцах - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не осуществляется поиск по массиву http://www.cyberforum.ru/cpp-beginners/thread1085145.html
Программа не выводит на экран имена и фамилии людей, а просто выдает конечный результат "Lyudi s takiv imenem ne naydeni". Это значит что k всегда равно 0, что делать помогите! #include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #define n 10 // количество элементов в массие using namespace std; struct fio{ // наша структура char fam; // фамилия
C++ Дан массив целых чисел. Верно ли, что все элементы в нем упорядочены пл убыванию Плиз напишите программу !!!! Дан массив целых чисел. Верно ли, что все элементы в нем упорядочены по убыванию http://www.cyberforum.ru/cpp-beginners/thread1085138.html
C++ В массив A[N] занесены натуральные числа.Найти сумму тех элементов, которые кратны данному K.
Помогите пожалуйста решить, и если не трудно распишите каждую строчку что тут сделано и за что отвечает эта команда В массив A занесены натуральные числа.Найти сумму тех элементов, которые кратны данному K.
C++ Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива.
Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива. eN"]Текст задания переведен на русский язык. Впредь делайте это самостоятельно!
C++ Алгоритм обхода диагонали параллельной главной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread1085121.html
Как обработать каждый элемент матрицы, находящийся на диагонали параллельной главной диагонали? Понимаю, что надо ввести какую-то зависимость от номера диагонали, но как это алгоритмизировать и написать в коде не понимаю! Добавлено через 17 минут Никто не знает?!
C++ Чем написать программу, которая выполняет определенные действия в браузерных играх Всем доброго времени суток! Простите если не по теме! Не знал куда отписать и где спросить! Интересует такой вопрос? Чем можно написать программу?? Программа должна будет зайти допустим на Одноклассники после в игру, далее в игре выполнить некоторые функций??? В программирование понимаю мало так что не судити строго! Жду ваших подсказок и направлений моих дальнейших действий!??:read: подробнее

Показать сообщение отдельно
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
30.01.2014, 15:16  [ТС]     Как освободить память в двумерном массиве в столбцах

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
Дело Ваше, конечно, в данном случае это оправдано. В противном случае придется везде в функции вместо одного объекта передавать три - массив и две размерности. Не говоря уже о том, что программа будет разделена на логические части.
ну да, просто я тут 1 помогаю, и его преподаватель не поверит в объекты)



Добавлено через 14 минут
решил задачу банальным копированием

Добавлено через 2 часа 51 минуту
вообщем вотсама задача, и в ней у меня компилятор периодически ругается на delete в самом конце main - 118,119строки, если закомментировать то всё ок, почему - не понимаю, что не так? (вводитьбольше 8 т.е. 0строки и стобцы тупо организованы вручную и проиходит выход за массив в 58-67

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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
void print(int** b, int x, int y);
 
bool findY(int** b,int x, int y)
{
int counter=0;
    for (int i=0;i<x;i++)
        {
        //cout<<setw(3)<<b[y][i];
        if (b[y][i]==0)
        counter++;
        }
if (counter==x)
    return true;
else
    return false;
}
 
bool findX(int** b,int x, int y)
{
int counter=0;
    for (int i=0;i<x;i++)
        {
        if (b[i][y]==0)
        counter++;
        }
if (counter==x)
    return true;
else
    return false;
}
 
int main()
{
    int x,y;
    srand(time(0));                // засеиваем rand()
    cout<<"enter array size x:";        // вводим размерность массива
    cin>>x;                             //
    cout<<"enter array size y:";        //
    cin>>y;                             //
 
int **b=new int*[x];        // выделяем память под массив указателей
 
for (int i=0;i<x;i++)       // в этом цикле мы заполняем массив b указателями на массивы а
{                           // , а массивы а мы постоянно соззаем и заполняем рандомом в цикле
int *a=new int[y];
    for (int j=0;j<y;j++)
    a[j]=rand()%20;
b[i]=a;         // сохраняем указатель на а в b
}
print(b,x,y);   // функция для вывода двумерного массива, она в конце проги
cout<<endl<<endl;
//////////////////////////////////////////////// здесь можно ввести 0 столбец или строку
for (int i=0;i<x;i++)
    b[i][4]=0;
 
for (int i=0;i<x;i++)
    b[2][i]=0;
 
for (int i=0;i<x;i++)
    b[6][i]=0;
////////////////////////////////////////////////
print(b,x,y);   // проверяем что у нас есть 0 столбцы и 0 строки
cout<<endl<<endl;
/*
далее я написал 2 функции, в которые мы передаем указатель на наш массив
b,длину строки(столбца) и номер столбца(строки) которую мы проверяем на 0
и ищем в нем 0 строки и 0 столбцы, если строка или столбце полностью состоят из 0,
то функции возвращают лог 1, если же нет - то лог 0
 findY(b,y,j) - строки!
 findX(b,x,j) - столбцы!
*/
int size_x=x,size_y=y;      // это переменные для подсчета кол-ва строк и столбцов в новом массиве
for (int j=0;j<x;j++)       // вызываем цикл с нашей функцией и считаем кол-во строк(столбцов)
    if (findY(b,y,j))       //
        size_x--;           //
for (int j=0;j<y;j++)       //
    if (findX(b,x,j))       //
        size_y--;           //
 
cout<<"size_x = "<<size_x<<endl;    // выводим размеры нов матрицы на экран (для првоерки)
cout<<"size_y = "<<size_y<<endl;    //
 
 
int **c=new int*[size_x];   // выделяем память под новую матрицу
for (int j=0;j<size_x;j++)
    //for (int i=0;i<size_y;i++)
    c[j]=new int[size_y];   // выделяем память под указатили в ячейках
 
for (int j=0,l=0;j<x;l++,j++)   // здесь мы уже начинаем саму запись в новый массив без 0 строк и столбцов
{
        if(findY(b,y,j))    // если лог 1, то итерируем строку l и пропускаем записьв из b в с
        {
        l--;
        continue;
        }
        else        //  если лог 0, то вызываем новый цикл, в котором повторяем тоже самое,но уже для столбцов
        {
            for (int i=0,k=0;k<size_y;i++,k++)
            {
                if (findX(b,x,i))
                {
                k--;
                continue;
                }
                else
                c[l][k]=b[j][i];    // здесь мы уже записываем в с из b ,точно зная что это не 0 строка и не 0 солбцец
            }
        }
}
print(c,size_x,size_y);     // выводим с чтобы убедиться что в с нету 90 строк и солбцов
 
for (int i=0;i<y;i++)       // полностью очищаем b т.к. он нам бльше не нужен
    delete [] b[i];         // при желании можно затем создать новый b , копировать туда с и удалить с
    delete [] b;            // но роли это осбо никакой не играет кроме названия указателей
 
    return 0;
}
 
void print(int** b, int x, int y)   // функция для вывода массива на экран - аргументы, указатель на 2ый массив и его размерность
{
int v;
bool flag=false;
    for (int i=0;i<x;i++)
    {
        for (int j=0;j<y;j++)
        {
        cout<<setw(3)<<b[i][j];
            if (b[i][j]>0&&!flag)
            {
            v=i+1;
            flag=true;
            }
        }
    cout<<endl;
    }
    if(flag)                // поиск положительного элемента в массиве
    cout<<"String number "<<v<<" have element thar >0"<<endl;
    else
    cout<<"Matrix hasen't elements >0"<<endl;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru