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

Колонки в динамических масивах - C++

Восстановить пароль Регистрация
 
zabakot
2 / 2 / 0
Регистрация: 15.04.2013
Сообщений: 31
16.04.2013, 23:55     Колонки в динамических масивах #1
Помогите пожалуйста, задача заключается в том, чтобы добавить в массив после парных колонок ещё по одной колонке. Вот код, но программа выводит полученный массив в разброс и числа выходят за пределы допустимых...
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
#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;
void main()
{
    cout<<"Enter size of array: "<<endl;
    int n;
    cout<<"N = ";
    cin>>n;
    cout<<endl;
    int m;
    cout<<"M = ";
    cin>>m;
    cout<<endl<<endl;
    int **a = new int*[n];
    for (int i=0; i<n; i++)
        a[i] = new int[m];
    for (int i=0; i<n; i++)
        for (int j=0; j< m; j++)
            a[i][j] = rand() % 100 - 45;
    cout<<endl;
    cout<<"Input Array: "<<endl;
    for (int i=0; i<n; i++)
    {
        cout<<endl<<endl;
        for (int j=0; j<m; j++)
            cout<<"  "<<a[i][j];
    }
    int M;
    if (m % 2 == 0)
        M = m + m / 2;
    else
        M = m + 1 + (m - 1) / 2;
 
    int **b = new int*[n];
    for (int i=0; i<n; i++)
        b[i] = new int [M];
 
    int k;
    k=0;
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
        {
            if ((j+1) % 3 == 0)
                k++;
            b[i][j+k] = a[i][j];
        }   
    for (int i=0; i<n; i++)
        for (int j=0; j<M; j++)
            if ((j+1) % 3 == 0)
            b[i][j] = rand() % 100 - 73;
 
    for (int i=0; i<n; i++)
    {
        cout<<endl<<endl;
        for (int j=0; j<(M-1); j++)
            cout<<"  "<<b[i][j];
    }
    delete[] a;
    delete[] b;
 
    getch();
}
вот...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.04.2013, 01:04     Колонки в динамических масивах #2
Вот похожий пример с удалением колонки: http://www.cyberforum.ru/cpp-beginne...ead840025.html
zabakot
2 / 2 / 0
Регистрация: 15.04.2013
Сообщений: 31
17.04.2013, 01:17  [ТС]     Колонки в динамических масивах #3
Это конечно хорошо... Блин... но вот код было бы лучше.., а то сам, думаю, не разберусь((
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
17.04.2013, 02:00     Колонки в динамических масивах #4
Через каждых два - новый, верно?
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
int** genArr(int h, int l)
{
    int** b = new int*[h];
    for (int i = 0; i < h; ++i)
    {
        b[i] = new int[l];
        for (int j = 0; j < l; ++j)
        {
            b[i][j] = rand() % 100;
        }
    }
    return b;
}
 
int addArr(int** b, int h, int l)
{
    int new_size = l + l/3 + 2;
    for (int i = 0; i < h; ++i)
    {
        int* tmp = new int[new_size];
        for (int j = 0, k = 0, f = 0; j < new_size; ++j)
        {
            if (j%3 == 2)
            {
                tmp[k++] = 0;
                continue;
            }
            tmp[k++] = b[i][f++];
        }
        delete [] b[i];
        b[i] = tmp;
    }
    return new_size;
}
 
void freeArr(int** b, int h)
{
    for (int i = 0; i < h; ++i)
    {
        delete [] b[i];
    }
    delete [] b;
}
 
void showArr(int** b, int h, int l)
{
    for (int i = 0; i < h; ++i)
    {
        for (int j = 0; j < l; ++j)
        {
            std::cout.width(3);
            std::cout << b[i][j] << ' ';
        }
        std::cout << '\n';
    }
}
 
 
int main()
{
    int HEIGHT = 10;
    int LENGTH = 8;
 
    srand(time(0));
    int** array = genArr(HEIGHT, LENGTH);
    showArr(array, HEIGHT, LENGTH);
    std::cout << '\n';
 
    LENGTH = addArr(array, HEIGHT, LENGTH);
    showArr(array, HEIGHT, LENGTH);
    std::cout << '\n';
 
    freeArr(array, HEIGHT);
 
    return 0;
}
zabakot
2 / 2 / 0
Регистрация: 15.04.2013
Сообщений: 31
17.04.2013, 02:38  [ТС]     Колонки в динамических масивах #5
Я уже дальше сам подкорректирую, спасибо большое)
zabakot
2 / 2 / 0
Регистрация: 15.04.2013
Сообщений: 31
20.04.2013, 01:36  [ТС]     Колонки в динамических масивах #6
Блин... не получилось немного... Ещё помощь нужна... Дело в том, что данная выше программа работает только частично, если изменить её под ручной ввод размера массива, то можно заметить, что при непарной длине массива, программа добавляет лишнюю колонку с о значениями, далеко вышедшими за пределы данных... вот собственно код измененный
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std; 
 
int** genArr(int h, int l)
{
    int** b = new int*[h];
    for (int i = 0; i < h; ++i)
    {
        b[i] = new int[l];
        for (int j = 0; j < l; ++j)
        {
            b[i][j] = rand() % 100;
        }
    }
    return b;
}
 
int addArr(int** b, int h, int l)
{
    int new_size = l + l/3 + 2;
    for (int i = 0; i < h; ++i)
    {
        int* tmp = new int[new_size];
        for (int j = 0, k = 0, f = 0; j < new_size; ++j)
        {
            if (j%3 == 2)
            {
                tmp[k++] = rand()%100 - 50;
                continue;
            }
            tmp[k++] = b[i][f++];
        }
        delete [] b[i];
        b[i] = tmp;
    }
    return new_size;
}
 
void freeArr(int** b, int h)
{
    for (int i = 0; i < h; ++i)
    {
        delete [] b[i];
    }
    delete [] b;
}
 
void showArr(int** b, int h, int l)
{
    for (int i = 0; i < h; ++i)
    {
        for (int j = 0; j < l; ++j)
        {
            cout.width(3);
            cout << b[i][j] << ' ';
        }
        cout << '\n';
    }
}
 
 
int main()
{
    int HEIGHT;
    int LENGTH;
    cout << "Razmer masiva:";
    cin >> LENGTH;
    cin >> HEIGHT;
    
    srand(time(0));
    int** array = genArr(HEIGHT, LENGTH);
    showArr(array, HEIGHT, LENGTH);
    cout << '\n';
 
    LENGTH = addArr(array, HEIGHT, LENGTH);
    showArr(array, HEIGHT, LENGTH);
    cout << '\n';
 
    freeArr(array, HEIGHT);
    system("pause >> void");
    return 0;
    
}
вот... помогите пожалуйста)

Добавлено через 8 часов 53 минуты
Ааа.. ктонибудь... помогите...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 13:03     Колонки в динамических масивах
Еще ссылки по теме:

C++ Мусор в масивах char

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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.04.2013, 13:03     Колонки в динамических масивах #7
Цитата Сообщение от zabakot Посмотреть сообщение
Блин... не получилось немного... Ещё помощь нужна... Дело в том, что данная выше программа работает только частично
Частично работает, т.е. не работает правильно это ваш код. Вы допустили ошибку во время редактирования. Вот с ручным вводом размера:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
int** genArr(int h, int l)
{
    int** b = new int*[h];
    for (int i = 0; i < h; ++i)
    {
        b[i] = new int[l];
        for (int j = 0; j < l; ++j)
        {
            b[i][j] = rand() % 100;
        }
    }
    return b;
}
 
int addArr(int** b, int h, int l)
{
    int new_size = l + l/3 + 2;
    for (int i = 0; i < h; ++i)
    {
        int* tmp = new int[new_size];
        for (int j = 0, k = 0, f = 0; j < new_size; ++j)
        {
            if (j%3 == 2)
            {
                tmp[k++] = 0;
                continue;
            }
            tmp[k++] = b[i][f++];
        }
        delete [] b[i];
        b[i] = tmp;
    }
    return new_size;
}
 
void freeArr(int** b, int h)
{
    for (int i = 0; i < h; ++i)
    {
        delete [] b[i];
    }
    delete [] b;
}
 
void showArr(int** b, int h, int l)
{
    for (int i = 0; i < h; ++i)
    {
        for (int j = 0; j < l; ++j)
        {
            std::cout.width(3);
            std::cout << b[i][j] << ' ';
        }
        std::cout << '\n';
    }
}
 
 
int main()
{
    int HEIGHT;
    int LENGTH;
    std::cout << "Length: ";
    std::cin >> LENGTH;
    std::cout << "Height: ";
    std::cin >> HEIGHT;
 
    srand(time(0));
    int** array = genArr(HEIGHT, LENGTH);
    showArr(array, HEIGHT, LENGTH);
    std::cout << '\n';
 
    LENGTH = addArr(array, HEIGHT, LENGTH);
    showArr(array, HEIGHT, LENGTH);
    std::cout << '\n';
 
    freeArr(array, HEIGHT);
 
    return 0;
}
Добавлено через 3 минуты
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Length: 12
Height: 8
 63  30  95  57  33   4  64  67  31  95  48  18 
 42  80  22  97  13   8  99  82  44   0  83  43 
 80  64  88  53  66  42  96  29  24  43  38   9 
 48   3  76  31  50  24  50  92  57  24  41  22 
 33  41  56  29  41  39  73  21   3  61  27  69 
  3  75  98  28  18  89  37  66  44  66  98  94 
 90   0  39  99  76  80  21  61  73  78  91  15 
 17  16  88  73  29  15  42  85  90  93  65  61 
 
 63  30   0  95  57   0  33   4   0  64  67   0  31  95   0  48  18   0 
 42  80   0  22  97   0  13   8   0  99  82   0  44   0   0  83  43   0 
 80  64   0  88  53   0  66  42   0  96  29   0  24  43   0  38   9   0 
 48   3   0  76  31   0  50  24   0  50  92   0  57  24   0  41  22   0 
 33  41   0  56  29   0  41  39   0  73  21   0   3  61   0  27  69   0 
  3  75   0  98  28   0  18  89   0  37  66   0  44  66   0  98  94   0 
 90   0   0  39  99   0  76  80   0  21  61   0  73  78   0  91  15   0 
 17  16   0  88  73   0  29  15   0  42  85   0  90  93   0  65  61   0
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Length: 11
Height: 8
 12   8  32   9  75   0   9  99  96  49  19 
 67  66  56  54  79  22  32  57  48  39  96 
 97  38  45  10  90  73  27  15  94  39  23 
 27   1  50  27  62  50  75  12  21  42  30 
 30  49   9  52  81  66  52  72  62   1  10 
 60  12  52  85  91  67  80  30  42  59  31 
 93  38  46  95  13  58  16   7  88  98  56 
 49   2  89  16  55  61  30  56  23  90  20 
 
 12   8   0  32   9   0  75   0   0   9  99   0  96  49   0  19 
 67  66   0  56  54   0  79  22   0  32  57   0  48  39   0  96 
 97  38   0  45  10   0  90  73   0  27  15   0  94  39   0  23 
 27   1   0  50  27   0  62  50   0  75  12   0  21  42   0  30 
 30  49   0   9  52   0  81  66   0  52  72   0  62   1   0  10 
 60  12   0  52  85   0  91  67   0  80  30   0  42  59   0  31 
 93  38   0  46  95   0  13  58   0  16   7   0  88  98   0  56 
 49   2   0  89  16   0  55  61   0  30  56   0  23  90   0  20
Yandex
Объявления
20.04.2013, 13:03     Колонки в динамических масивах
Ответ Создать тему
Опции темы

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