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

Динамическое создания массива со случайной длинной - C++

Восстановить пароль Регистрация
 
Uste
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 5
19.01.2014, 00:35     Динамическое создания массива со случайной длинной #1
Всем привет!
Может кто-нибудь пожалуйста подсказать что не так в этом коде?
C++
1
2
int** jaggedArray = new int *[5];
for (int i = 0; i < 5; i++) jaggedArray[i] = new int [gen_random(1,100)];
Код функции gen_random:
C++
1
int gen_random( int range_min, int range_max ) {return range_min+rand()%(range_max-range_min+1);}
По задаче нужно создать массив из 5 массивов со случайной длинной, но почему-то создаются массивы с длинной 1-5, не могу почему...
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2014, 00:35     Динамическое создания массива со случайной длинной
Посмотрите здесь:

Динамическое очищение массива C++
Функции создания массива и удаления эл-та из массива C++
Написать функцию для нахождения самой длинной последовательности подряд идущих элементов массива,равных какому-либо заданному C++
Найти наибольший элемент в наиболее длинной непрерывной последовательности положительных элементов массива C++
Динамическое создание массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
19.01.2014, 00:37     Динамическое создания массива со случайной длинной #2
Цитата Сообщение от Uste Посмотреть сообщение
5 массивов со случайной длинной, но почему-то создаются массивы с длинной 1-5, не могу почему...

создаются 5 массивов со случайной длиной от 1 до 100. Что не так?
Uste
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 5
19.01.2014, 00:37  [ТС]     Динамическое создания массива со случайной длинной #3
Цитата Сообщение от MrGluck Посмотреть сообщение

создаются 5 массивов со случайной длиной от 1 до 5. Что не так?
Нужно 5 массивов со случайной длинной от 1 до 100... И длинна получается не случайная, а фиксированная...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
19.01.2014, 00:39     Динамическое создания массива со случайной длинной #4
На всякий случай:
Написать программу для объединения массивов

Добавлено через 26 секунд
В вашем коде все это (генерация 5 массивов, каждый из которых имеет длину от 1 до 100) итак есть.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
19.01.2014, 00:43     Динамическое создания массива со случайной длинной #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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main()
{
    std::srand((size_t)(std::time)(nullptr));
 
    const size_t arraysCount(5);
    int **matrix = new int *[arraysCount];
    for (size_t i = 0; i < arraysCount; i++) {
        size_t randomNumber(std::rand() % 100 + 1);
        matrix[i] = new int [randomNumber];
        for (size_t j = 0; j < randomNumber; j++) {
            std::cout << (matrix[i][j] = std::rand() % 100 + 1) << ' ';
        }
        std::cout << std::endl;
    }
    
    for (size_t i = 0; i < arraysCount; i++) {
        delete [] matrix[i];
    }
    delete [] matrix;
 
    std::system("pause");
    return 0;
}
Uste
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 5
19.01.2014, 00:58  [ТС]     Динамическое создания массива со случайной длинной #6
При конпилле программа каждый раз выдает матрицу массивов 5 на 5, хотя должна выдавать 5 на случайное(1-100) . Извиняюсь если несколько не корректно высказываюсь.
Чтобы было попроще меня понять вот полный код функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void jagged_array(){
    system("cls");
    int** jaggedArray = new int *[5];
    for (int i = 0; i < 5; i++) jaggedArray[i] = new int [gen_random(1,100)];
    for (int i = 0; i < 5; i++){
                for (int g = 0; g < sizeof ( jaggedArray[i] ) + 1; g++){
                                        jaggedArray[i][g]=gen_random(0,1000);
                                        std::cout << "Номер первого массива: " << i+1 << " Номер второго массива: " << g+1 << " Число: " << jaggedArray[i][g] << std::endl;
                                                    }
                            }
    for (int i = 0; i < 5; i++) delete[] jaggedArray[i];
    delete [] jaggedArray;
}
Добавлено через 10 минут
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main()
{
    std::srand((size_t)(std::time)(nullptr));
 
    const size_t arraysCount(5);
    int **matrix = new int *[arraysCount];
    for (size_t i = 0; i < arraysCount; i++) {
        size_t randomNumber(std::rand() % 100 + 1);
        matrix[i] = new int [randomNumber];
        for (size_t j = 0; j < randomNumber; j++) {
            std::cout << (matrix[i][j] = std::rand() % 100 + 1) << ' ';
        }
        std::cout << std::endl;
    }
    
    for (size_t i = 0; i < arraysCount; i++) {
        delete [] matrix[i];
    }
    delete [] matrix;
 
    std::system("pause");
    return 0;
}
Спасибо помогло! Но все же можно узнать почему не работает мой код, если вас не осложнит?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
19.01.2014, 01:02     Динамическое создания массива со случайной длинной #7
как говорится, найди отличия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void jagged_array() 
{
    system("cls");
    int **jaggedArray = new int *[5];
    for (int i = 0; i < 5; i++) {
        size_t randomNumber(gen_random(1, 100));
        jaggedArray[i] = new int [randomNumber];
        for (int j = 0; j < randomNumber; j++) {
            std::cout << (jagged_array[i][j] = gen_random(0, 1000)) << ' ';
        }
        std::cout << std::endl;
    }
 
    for (int i = 0; i < 5; i++) 
        delete[] jaggedArray[i];
    delete[] jaggedArray;
}
Uste
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 5
19.01.2014, 01:11  [ТС]     Динамическое создания массива со случайной длинной #8
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
как говорится, найди отличия:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void jagged_array() 
{
    system("cls");
    int **jaggedArray = new int *[5];
    for (int i = 0; i < 5; i++) {
        size_t randomNumber(gen_random(1, 100));
        jaggedArray[i] = new int [randomNumber];
        for (int j = 0; j < randomNumber; j++) {
            std::cout << (jagged_array[i][j] = gen_random(0, 1000)) << ' ';
        }
        std::cout << std::endl;
    }
 
    for (int i = 0; i < 5; i++) 
        delete[] jaggedArray[i];
    delete[] jaggedArray;
}
Хмм, то есть получается что
C++
1
jaggedArray[i] = new int [gen_random(1,100)];
и
C++
1
g < sizeof ( jaggedArray[i] ) + 1;
нужно выражать через переменную типа size_t ? Или я все не так понял?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
19.01.2014, 01:15     Динамическое создания массива со случайной длинной #9
вы длину каждого массива генерируете в одном цикле, а потом уже во втором пытаетесь сгенерировать сам массив, пытаясь узнать его размер через
Цитата Сообщение от Uste Посмотреть сообщение
C++
1
sizeof ( jaggedArray[i] ) + 1
но это невозможно
поэтому генерировать массив нужно сразу, как только мы узнали его длину
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
C++
1
2
3
4
5
6
    
    size_t randomNumber(gen_random(1, 100));
    jaggedArray[i] = new int [randomNumber];
    for (int j = 0; j < randomNumber; j++) {
        std::cout << (jagged_array[i][j] = gen_random(0, 1000)) << ' ';
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 01:17     Динамическое создания массива со случайной длинной
Еще ссылки по теме:

C++ Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее
Функция поиска самой длинной цепочки элементов массива C++
Найти длину самой длинной последовательности подряд идущих нулевых элементов массива C++

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

Или воспользуйтесь поиском по форуму:
Uste
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 5
19.01.2014, 01:17  [ТС]     Динамическое создания массива со случайной длинной #10
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
поэтому генерировать массив нужно сразу, как только мы узнали его длину
Аа, понял, спасибо большое!
Yandex
Объявления
19.01.2014, 01:17     Динамическое создания массива со случайной длинной
Ответ Создать тему
Опции темы

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