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

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

Войти
Регистрация
Восстановить пароль
 
baygav
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 8
#1

Динамический Массив - C++

09.06.2010, 18:20. Просмотров 652. Ответов 5
Метки нет (Все метки)

Попалось вот такое задание на подготовке к экзамену,к сожалению не смог понять как работать с динамическим массивом.
Добавить в массив строку,удалить столбец,распечатать,но все это надо сделать через динамический массив.
Прошу помощи,заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2010, 18:20     Динамический Массив
Посмотрите здесь:

C++ статический массив ----> динамический массив
C++ Динамический массив
C++ Динамический массив
C++ динамический массив
C++ Динамический массив.
динамический массив (Целое число разложить на массив простых множителей) C++
Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) C++
Динамический массив C++
C++ Переделать динамический массив на статический массив
C++ Массив и память. Как создать динамический массив?
Массив фиксированного размера может быть динамическим? Что такое "динамический массив"? C++
C++ Статический массив в динамический массив

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gleban_38
 Аватар для Gleban_38
7 / 6 / 1
Регистрация: 03.06.2010
Сообщений: 13
09.06.2010, 18:47     Динамический Массив #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
#include "stdafx.h"
#include "math.h"
#include "conio.h"
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{   
    int N=0,M=0;
    setlocale(LC_ALL,"Russian");
    cout<<"Введите размер массива:\nСтоки N=";
    cin>>N;
    cout<<"\nСтолбцы M=";
    cin>>M;
    // Делаем динамический массив под первую матрицу.
    int **Matrica= new int*[N+1];
    for(int i=0;i<N+1;i++)
        Matrica[i]= new int [M-1];
    // Набираем значения.
    for(int i=0; i<N+1; i++) 
        for(int j=0; j<M-1; j++)
            Matrica[i][j]=rand()%10;
    for(int i=0; i<N+1; i++) 
    {
        for(int j=0;j<M-1;j++)
            cout<<setw(4)<<Matrica[i][j];
        cout<<endl;
    }
    getch();
}
В принципе, пишете необходимое количество строчек и столбцов, потом заполняете и выводите на экран.
baygav
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 8
09.06.2010, 20:01  [ТС]     Динамический Массив #3
большое спасибо,теперь вопрос добавление строки и удаление столбца динамически отличается от обычного способа ?
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
09.06.2010, 20:12     Динамический Массив #4
Mr.Sandman, delete к конце бы)
baygav
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 8
09.06.2010, 22:16  [ТС]     Динамический Массив #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
141
142
143
144
145
146
#include <iostream>
#include <stdlib.h>
using namespace std;
const int max_razmer=255;
 
 
int **sozd_dmass(int n,int k)
{
    
    int **dmass=new int *[n];
    for (int i=0;i<n;i++)
        dmass[i]= new int [k];
    
    for (int i=0;i<n;i++)
     for (int j=0;j<k;j++)
        dmass[i][j]=rand()%10-5;
    
    return dmass;
}
int *sozd_stroki(int k)
{
    int *strk=new int [k];
    for (int i=0;i<k;i++)
        strk[i]=rand()%10-5;
    return strk ;
}
int **new_mass(int n, int k, int h, int *strk,int **matr)
{
    int i,j;
    int **new_mass=new int *[n];
    for (int i=0;i<n;i++){new_mass[i]= new int [n+1];}
    for (i=0;i<n;i++)
    {
        for (j=0;j<h;j++)new_mass[i][j]=matr[i][j];
        for (j=h-1;j<h;j++)new_mass[i][j]=strk[i];
        for (j=h;j<k+1;j++)new_mass[i][j]=matr[i][j-1];
    }
    return new_mass;
}
int ** stiranie(int **MATR,int n)
{
for(int i=0;i<n;i++)
delete MATR[i];
delete [] MATR;
return MATR;
}
int main()
{
    setlocale(LC_ALL,"russian");    
    int i=0,n,k,h;
    int **mass=0;
    int **MATR=0;
    int strk1[max_razmer];
    do
    {
        cout<<"\n1. Создание динамического массива"<<endl;
        cout<<"2. Печать массива."<<endl;
        cout<<"3. Создание строки"<<endl;
        cout<<"4. Вставка строки в динамический массив"<<endl;
        cout<<"5. Вывод нового динамического массива"<<endl;
        cout<<"6. Стирание массива"<<endl;
        cout<<"0. Выход"<<endl;
        cout<<"-> ";cin>>i;
        switch(i)
        {       case 1:
            {
                cout<<"\nВведите количество строк двумерного массива:";
                cin>>n;
                cout<<"\nВведите количество столбцов двумерного массива:";
                cin>>k;
                sozd_dmass(n,k);
                cout<<"\nМассив успешно создан"<<endl;
                
                break;
            }
       
        case 2:
            {
                cout<<"\nДвумерный массив:"<<endl;
                cout<<"\n";
                mass=sozd_dmass(n,k);
                for(int i=0;i<n;i++)
                {
                    for(int j=0;j<k;j++)
                    {
                        
                        cout<<mass[i][j]<<"\t";
                    }
                    cout<<"\n"<<endl;
                };
                break;          
            }
        
        case 3:
            {
                sozd_stroki(k);
                cout<<"\nСтрока успешно создана"<<endl;
                for(int i=0;i<k;i++)
                {
                    strk1[i]=*sozd_stroki(k);
                    cout<<"\n"<<strk1[i]<<endl<<"\n";
                };
                break;
            }
 
 
 
        case 4:
            {
                cout<<"\nВведите номер строки (от 1 до "<<n<<") куда добавить элементы:"<<endl;
                cin>>h;
                if (h<0&&h>n) {cout<<"Error. Не правильно выбран диапазон.";exit;}
                if (h>0&&h<n+1)
                {
                    new_mass(n,k,h,strk1,mass);
                }
                break;
            }
        case 5:
            {
                cout<<"\nДвумерный массив:"<<endl;
                cout<<"\n";
                MATR=new_mass(n,k,h,strk1,mass);
                for(int i=0;i<k;i++)
                {
                    for(int j=0;j<n+1;j++)
                    {
                        
                        cout<<MATR[i][j]<<"\t";
                    }
                    cout<<"\n"<<endl;
                };
                break;          
            }
        case 6:
            {
                stiranie(MATR,n);
                cout<<"\nСтирание прошло успешно"<<endl;
                break;
            }
 
        }
    }
    while(i!=0);    
    return 0;
}
Вопросег состоит в том,что у меня вместо строки создается столбец,помогите найти ошибку)
neske
1455 / 822 / 68
Регистрация: 26.03.2010
Сообщений: 2,810
09.06.2010, 23:42     Динамический Массив #6
В функции вы передаете матрицу через указатели.
Дак зачем же вы ее возвращаете?
Yandex
Объявления
09.06.2010, 23:42     Динамический Массив
Ответ Создать тему
Опции темы

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