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

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

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

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

15.04.2011, 07:55. Просмотров 6535. Ответов 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();   
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 07:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическое выделение памяти под двумерный массив (C++):

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

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

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

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

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

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

6
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,483
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
0
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

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

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

Вот когда так по всем этим строчкам пробежишься, у тебя будет количество нужных строк и их номера.
Вот и кропай из них новый массив.
0
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
15.04.2011, 13:42  [ТС] #5
А можно на примере пожалуйста.
На словах ничего непонятно что вы имеете ввиду.
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,483
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, не меньше!"
2
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
15.04.2011, 15:02  [ТС] #7
kravam, спасибо за помощь!!!
0
15.04.2011, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 15:02
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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