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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.74
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
#1

Динамическое выделение памяти под двумерный массив - C++

15.04.2011, 07:55. Просмотров 6509. Ответов 6
Метки нет (Все метки)

1) Ввести построчно элементы двумерного массива чисел. Количество столбцов задается. Количество строк (не менее 1) равно максимальному по модулю числу из введенной нулевой строки.
2) Из строк исходного массива, в которых не содержатся одинаковые числа сформировать столбцы с элементами в порядке обратном их расположению строках. Вывести построчно сформированный массив.

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

Вот что получилось, программа запускается но в процессе выдает ошибку так как память не выделяется под массив...

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
#include<iostream>
#include<conio.h>
#include<cmath>
 
int main()
{
 setlocale(LC_ALL,"Russian");
 int i,k,n,stlb,str=1;
 int &max=str;
 std::cout<<"Ââåäèòå ÷èñëî ñòîëáöîâ: ";
 std::cin>>stlb;
 int **M = new int*[str];
 for(i=0; i<str; i++)
     M[i] = new int[stlb];
 std::cout<<"Ââåäèòå Г¬Г*Г±Г±ГЁГў: "<<std::endl;
 for(i=0;i<str;i++)
    {
        for(k=0;k<stlb;k++)
            std::cin>>M[i][k];
        if(i==0) 
            {
                max=int(std::fabs(M[0][0]));
                for(n=1;n<stlb;n++)
                        if(max < int(std::fabs(M[i][n])))
                            max=int(std::fabs(M[i][n]));
            }
    }
 std::cout<<std::endl;
 for(i=0;i<str;i++)
    {
        for(k=0;k<stlb;k++)
            std::cout<<M[i][k]<<" ";
        std::cout<<std::endl;
    }
 for(i=0; i<str; i++)
    {
     delete M[i];
    }
 delete []M; 
 getch();   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 07:55     Динамическое выделение памяти под двумерный массив
Посмотрите здесь:

Динамическое выделение памяти под двумерный массив - C++
Здравствуйте. Как мне правильно и грамотно (!) выделять память под двумерные массивы? Откуда возникла необходимость — хотел сделать...

Динамическое выделение памяти под двумерный массив - C++
Нужно написать программу, динамически выделяем память под двумерный массив, функции ввода-вывода, функцию, которая будет складывать 2...

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

Динамическое выделение памяти под массив - C++
Доброго времени суток. Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в...

Динамическое выделение памяти под массив - C++
Я хочу функцию использовать пару раз, количество команд будет уменьшаться, и &quot;n&quot; надо менять. Как написать не знаю. 12 или 13 строка. ...

Динамическое выделение памяти под массив int - C++
плиз хелп Написать функцию getPrimes, которая принимает массив типа int и его размер. Функция должна вернуть указатель на новый...

Динамическое выделение памяти под массив структур (new/delete) - C++
Люди добрые, подскажите пожалуйста, где в моем коде закралась ошибка? Интернет перечитал, во всех примерах код, подобный моему работает, а...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.04.2011, 09:40     Динамическое выделение памяти под двумерный массив #2
У тебя здесь
C++
1
2
3
4
                max=int(std::fabs(M[0][0]));
                for(n=1;n<stlb;n++)
                        if(max < int(std::fabs(M[i][n])))
                            max=int(std::fabs(M[i][n]));
Неправильно что-то.
ПОсле этого кода проверь значение str, оно окажется больше 1 (каким оно и должно быть)
Это потому, что max всегда указывает на одну и ту же область памяти и изменяя max
ты изменяешь (увеличиваешь) srr
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
15.04.2011, 12:12  [ТС]     Динамическое выделение памяти под двумерный массив #3
Переделал немного по другому программу, все отлично работает
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
#include<iostream>
#include<conio.h>
#include<cmath>
 
bool proverka(int **M, int i,int stlb)
{
        for(int n=stlb-1;n>=1;--n)
            for(int j=0;j<n;j++)
                if(M[i][n]==M[i][j]) return false;   
        return true;
}
 
int main()
{
 setlocale(LC_ALL,"Russian");
 int **M, *masmax, **mas;
 int i,k,n,j,stlb,str,temp;
 std::cout<<"Ââåäèòå ÷èñëî ñòîëáöîâ: ";
 std::cin>>stlb;
 std::cout<<"Ââåäèòå Г¬Г*Г±Г±ГЁГў: "<<std::endl;
 masmax = new int [stlb];
 for(k=0;k<stlb;k++)
    std::cin>>masmax[k];
 str=int(std::fabs(masmax[0]));
 for(n=1;n<stlb;n++)
     if(str < int(std::fabs(masmax[n]))) str=int(std::fabs(masmax[n]));
 M = new int*[str];
 for(i=0; i<str; i++)
     M[i] = new int[stlb];
 for(i=0;i<str;i++)
    {
        for(k=0;k<stlb;k++)
            {
                if(i==0) M[i][k]=masmax[k];
                else std::cin>>M[i][k];
            }
    }
 std::cout<<std::endl;
 for(i=0;i<str;i++)
    {
        for(k=0;k<stlb;k++)
            std::cout<<M[i][k]<<" ";
        std::cout<<std::endl;
    }
 std::cout<<std::endl;
 mas = new int*[str];
 for(i=0;i<str;i++)
    mas[i]=new int[stlb];
 int h=0;
 for(i=0;i<str;i++)
    {
      if(proverka(M,i,stlb)==true)
        {
          for(j=0;j<stlb;j++) mas[h][j]=M[i][j];
          h++;
          std::cout<<"Г‚ "<<i+1<<" ñòðîêå Г*ГҐГІГі îäèГ*Г*êîâûõ Г·ГЁГ±ГҐГ«"<<std::endl;
        }
      else  std::cout<<"Г‚ "<<i+1<<" ñòðîêå ГҐГ±ГІГј îäèГ*Г*êîâûå Г·ГЁГ±Г«Г*"<<std::endl;  
    }
std::cout<<std::endl;   
for(i=0;i<h;i++)
    {
        for(k=0;k<stlb;k++)
            std::cout<<mas[i][k]<<" ";
        std::cout<<std::endl;
    }
std::cout<<std::endl; 
 
 for(i=0; i<str; i++) delete M[i];
 delete []M; 
 delete []masmax;
 for(i=0; i<str; i++) delete mas[i];
 delete []mas;
 getch();   
}
только теперь новая проблема, не могу сообразить как сделать второй пункт задания а именно сформировать столбцы с элементами в порядке обратном их расположению в строках ( у меня это надо сделать с конечным массивом mas[][])

вот например из этого:
4 5 6
8 9 2

надо получить:
6 2
5 9
4 8

не могу сообразить, подскажите кто пойдет
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.04.2011, 13:30     Динамическое выделение памяти под двумерный массив #4
А чё тут сложного? Есть исходный массив. В нём X строк, вот пробегайся ПО КАЖДОЙ строке на предмет наличия в ней двух одинаковых элементов

Если таких элементов нет, то
1) запоминай номер строки как-нибудь. Например заноси его во ВНОВЬ СОЗДАННЫЙ массив номеров ПОДХОДЯЩИХ строк
2) Количество строк, котороые ты ищешь, это количество столбцов будущего массива, так ведь?
Вот это количество (опять-таки НОВАЯ переменная) при каждом нахождении подходящей строки пусть увеличивается на 1

Вот когда так по всем этим строчкам пробежишься, у тебя будет количество нужных строк и их номера.
Вот и кропай из них новый массив.
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
15.04.2011, 13:42  [ТС]     Динамическое выделение памяти под двумерный массив #5
А можно на примере пожалуйста.
На словах ничего непонятно что вы имеете ввиду.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.04.2011, 14:06     Динамическое выделение памяти под двумерный массив #6
Да без базара
Вот у тебя, допустим, массив A.
Вот пусть в нём N столбцов и M строчек, как ты видишь, N== 4, M== 5

1 2 3 4 5
2 3 4 4 6
1 2 4 5 7
6 7 8 9 4

Так, теперь создай массивчик, который будет содержать номера НУЖНЫХ строчек
C++
1
int nuzn_str [M];
Количество элементов должно быть обязательно M, ну то есть 5, не меньше!

Да, поскольку ты кропаешь новый массив, тебе необходимо в нём количество столбцов
C++
1
int kol_vo_stolbtsov= 0;
Всё, погнали наши городских. Пробегаешься по массиву, по каждой строчке (в цикле, естессно). И если она тебе подходит, заносишь её номер в nuzn_str; "подходит" в даннном случае значит, что в ней нет двух одинаковых элементов. Так, сморим, нулевая подходит? Да, заносим её номер в масив.
nuzn_str[0]= 0;
И помня, что каждая нужная строчка превратися в столбец, ага, увеличиваем количество столбцов на 1
C++
1
kol_vo_stolbtsov++;

Вторая НЕ подходит, там две четвёрки, третья и четвёртая подходит, то есть пишем
C++
1
2
nuzn_str[1]= 3;kol_vo_stolbtsov++;
nuzn_str[2]= 4;kol_vo_stolbtsov++;
Вот и всё, в результате получаем три строчки (kol_vo_stolbtsov== 3)
И их номера, ну то есть схематично так: (решётка это ненужная строка)

1 2 3 4 5
# # # # #
1 2 4 5 7
6 7 8 9 4

Вот и всё. Ну вот когда сделаешь так, тогда можно будет и массив формировать.

Добавлено через 2 минуты
В самам начале я перепутал, так должно быть:

"Вот пусть в нём N столбцов и M строчек, как ты видишь, N== 5, M== 4"

Добавлено через 1 минуту
И здесь:
"Количество элементов должно быть обязательно M, ну то есть 4, не меньше!"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 15:02     Динамическое выделение памяти под двумерный массив
Еще ссылки по теме:

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

Выделение памяти под двумерный массив С++ - C++
Гуру С++, подскажите новичку, как обратиться к элементу при следующем выделении памяти? 1)double **matr = new double * 2)double *matr...

Выделение памяти под двумерный массив - C++
Нужна прога на с++,в которой бы выделялась память для двумерного массива N строк такого вида,как на рисунке&gt;&gt;&gt; За ранее спасибо:)

Выделение памяти под динамический двумерный массив в структуре - C++
Доброво времени суток, дорогие товарищи-кодеры! Работав проектом, столкнулся с тем что удобно было бы запилить двумерный динамик в...

Динамическое выделение памяти под структуру - C++
#include &lt;iostream&gt; using namespace std; struct person { char*name; char *adres; int age; }; void allocation (person *mas,...


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

Или воспользуйтесь поиском по форуму:
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
15.04.2011, 15:02  [ТС]     Динамическое выделение памяти под двумерный массив #7
kravam, спасибо за помощь!!!
Yandex
Объявления
15.04.2011, 15:02     Динамическое выделение памяти под двумерный массив
Ответ Создать тему
Опции темы

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