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

Сгенерировать случайный двумерный массив с заданной размерностью - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
palach777
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 15:36     Сгенерировать случайный двумерный массив с заданной размерностью #1
Нужно сгенерировать двумерный массив с заданной размерностью и вывести его на экран, помогите это сделать пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2010, 15:36     Сгенерировать случайный двумерный массив с заданной размерностью
Посмотрите здесь:

C++ C++ Дан двумерный массив размерностью NxM
C++ дан двумерный массив размерностью Н, заполненный целыми числами, все его отрицательные элементы записать в одномерный массив, все его положительные за
C++ Двумерный массив размерностью nxm
C++ Двумерный массив. Найти: максимальное из чисел, встречающихся в заданной матрице более одного раза
Есть динамический массив с размерностью 5, необходимо его сделать с размерностью 6, заполнить цифрами и вывести на экран C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 15:51     Сгенерировать случайный двумерный массив с заданной размерностью #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <math.h>
 
int main()
{
  int n, m;
  int i, j;
  int *matrix;
  printf("Enter row and column matrix: ");
  scanf("%d %d", &n, &m);
  printf("\n");
  
  matrix = (int*)malloc(sizeof(int)*n*m);
  for(i=0;i<n;i++)
    for(j=0;j<m;j++)
       matrix[i*n+j] = rand();
 
  free(matrix);
  
   return 0;
}
palach777
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 16:14  [ТС]     Сгенерировать случайный двумерный массив с заданной размерностью #3
а почему у меня си пишет неопределены такие функции как malloc, rand, free?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.10.2010, 16:17     Сгенерировать случайный двумерный массив с заданной размерностью #4
Подключите stdlib.h
palach777
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 16:24  [ТС]     Сгенерировать случайный двумерный массив с заданной размерностью #5
извините за тупые вопросы, но так как я в си бот, как вывести это на экран?
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 19:31     Сгенерировать случайный двумерный массив с заданной размерностью #6
palach777, тебе дали очень плохой совет. Так пишут на чистом Си, а на плюсах так делать не принято. На Си++ твоя программа должна выглядеть примерно так:
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
#include <iostream>
#include <vector>
 
class int_matrix {
public:
    int_matrix (int height, int width) : m_matrix(height, array_type(width)) { random_fill(); }
    
    void show () const {
        for (matrix_type::const_iterator i = m_matrix.begin(); i != m_matrix.end(); ++i) {
            for (array_type::const_iterator j = i->begin(); j != i->end(); ++j) {
                std::cout << "\t" << *j;
            }
            std::cout << std::endl;
        }
    }
    
    void random_fill (int base = 10) {
        for (matrix_type::iterator i = m_matrix.begin(); i != m_matrix.end(); ++i) {
            for (array_type::iterator j = i->begin(); j != i->end(); ++j) {
                *j = random() % base;
            }
        }
    }
 
private:
    typedef std::vector<int> array_type;
    typedef std::vector<array_type> matrix_type;
    matrix_type m_matrix;
};
 
int main () {
    srandom(time(NULL));
 
    int width, height;
    
    std::cout << "Введите число строк и столбцов матрицы: ";
    std::cin >> height >> width;
    
    int_matrix matrix(height, width);
    
    matrix.show();
    
    return 0;
}
Сразу вряд ли поймёшь, поэтому читай документацию по классу std::vector. Зато такой способ верный не только с точки зрения логики программы, но и с точки зрения идеологии.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.10.2010, 20:22     Сгенерировать случайный двумерный массив с заданной размерностью #7
volovzi, Ну перебор для простых программ. Как-то даже слишком)

Достаточно и такого. Хотя в конкретно этой программе можно даже не бить на функции.

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

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
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
 
void rand_fill(int** Arr, int n, int m)
{
     for(int i=0; i<n; ++i)
     {
         for(int j=0; j<m; ++j)
         {
              Arr[i][j]=rand();
         }
      }
}
 
void print(int** Arr, int n, int m)
{
    for(int i=0; i<n; ++i)
    {
        for(int j=0; j<m; ++j)
        {
             std::cout<<std::setw(6)<<Arr[i][j]<<' ';
        }
        std::cout<<'\n';
     }
}
 
int main()
{
     srand(static_cast<unsigned>(time(0)));
     int** Arr;
     int n, m;
     std::cout<<"Enter n: ";
     std::cin>>n;
     std::cout<<"Enter m: ";
     std::cin>>m;
     Arr=new int*[n];
     for(int i=0; i<n; ++i)
        Arr[i]=new int[m];
     rand_fill(Arr, n, m);
     print(Arr, n, m);
     for(int i=0; i<n; ++i)
         delete[] Arr[i];
     delete[] Arr;
     return 0;
}
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 20:26     Сгенерировать случайный двумерный массив с заданной размерностью #8
Согласен полностью что до абсурда доводить каждую задачу не нужно.
Чем проще она решается тем меньше в ней ошибок.
Тут не требуется грандиозной гибкости.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 20:32     Сгенерировать случайный двумерный массив с заданной размерностью #9
Lavroff, не могу согласиться. Ничего сложного тут нет, всё дело в привычке к стандартной библиотеки шаблонов. Разобраться с вектором и итераторами, и дальше вообще станет легче жить .
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.10.2010, 20:33     Сгенерировать случайный двумерный массив с заданной размерностью #10
volovzi, Да понятное дело, что легко. И вектор и итератор все прекрасно. Но, класс тут лишний, если не задумываться о том, что это может развиться дальше.
Но во-первых метод show в классе не канает, во-вторых random_fill тоже не канает.
Разве класс матрица должен иметь методы с использованием консоли, да + с пользовательским интерфейсом? Разделять интерфейс от реализации тоже часть хорошего стиля и идеологии.

Да и кстати. Что за srandom?
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 20:36     Сгенерировать случайный двумерный массив с заданной размерностью #11
Цитата Сообщение от Sudoki Посмотреть сообщение
Согласен полностью что до абсурда доводить каждую задачу не нужно.
Чем проще она решается тем меньше в ней ошибок.
Тут не требуется грандиозной гибкости.
Человек просил Си++, а ты ему написал на Си. Немного разные вещи.
По-моему, гораздо больший абсурд — работать вручную с памятью.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.10.2010, 20:38     Сгенерировать случайный двумерный массив с заданной размерностью #12
volovzi, Видишь-ли в чем проблема... Обычно, народ, который спрашивает такую задачу ждет самого простого решения задачи. А векторы/итераторы им перед преподом объяснять как-то не вариант будет.

И все же... Очень интересует что за srandom (опечатка?) и макроса NULL в С++
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 20:48     Сгенерировать случайный двумерный массив с заданной размерностью #13
Цитата Сообщение от Lavroff Посмотреть сообщение
volovzi, Видишь-ли в чем проблема... Обычно, народ, который спрашивает такую задачу ждет самого простого решения задачи. А векторы/итераторы им перед преподом объяснять как-то не вариант будет.

И все же... Очень интересует что за srandom (опечатка?) и макроса NULL в С++
А почему ты думаешь, что векторы объяснять сложнее, чем работу функций malloc, realloc и иже с ними? Тем более, что в плюсах их, типа, нет.

Опечаток нет. Всю жизнь пользуюсь парой srandom/random. Это, вроде как, старшие братья srand/rand. А NULL обозначает нулевой указатель "(void *)0". Или сейчас как-то по-другому принято?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.10.2010, 20:53     Сгенерировать случайный двумерный массив с заданной размерностью #14
Цитата Сообщение от volovzi Посмотреть сообщение
Тем более, что в плюсах их, типа, нет.
Си является подмножеством языка С++,так что нельзя говорить что ети функции не входят в стандартную библиотеку С++.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.10.2010, 20:54     Сгенерировать случайный двумерный массив с заданной размерностью #15
volovzi,
Дык. Я же не говорил, что код на Си который написали правилен для С++. Но работу new и delete то в чем проблема в объяснении?

В плюсах не рекомендуется NULL использовать честно говоря. Страуструп по этому поводу пишет:
"Используйте 0 вместо NULL и у вас будет меньше проблем".
На тему random-a это не функция С++, ибо в стандарте это не предусмотренно насколько я понимаю. Функция борландовская.
random

Хотя впринципе я не исключаю, что это из Буста, но подключение буста я не заметил у вас.
А так же не исключаю, что это нечто из нового стандарта... Но по-моему это еще не реализовано. Вообщем лень копаться лезть по манам. Что за функция то такая?
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 21:02     Сгенерировать случайный двумерный массив с заданной размерностью #16
Цитата Сообщение от Asics^ Посмотреть сообщение
Си является подмножеством языка С++,так что нельзя говорить что ети функции не входят в стандартную библиотеку С++.
Строго говоря, не является. Но эти функции поддерживаются, хотя их использование не очень приветствуется.

Цитата Сообщение от Lavroff Посмотреть сообщение
volovzi,
Дык. Я же не говорил, что код на Си который написали правилен для С++. Но работу new и delete то в чем проблема в объяснении?

В плюсах не рекомендуется NULL использовать честно говоря. Страуструп по этому поводу пишет:
new/delete — это да. Тут проблем нет. Для институтской лабы сойдёт .

По поводу рандома — у меня он в стандартной библиотеке о_О. К борланду моя среда разработки отношения не имеет. В документации написано "These functions appeared in 4.2BSD".

По поводу нуля спасибо. Оказывается, у меня тоже ещё остались сишные привычки.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
28.10.2010, 21:09     Сгенерировать случайный двумерный массив с заданной размерностью #17
Цитата Сообщение от volovzi Посмотреть сообщение
Строго говоря, не является.
Кем "говоря"?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.10.2010, 21:09     Сгенерировать случайный двумерный массив с заданной размерностью #18
volovzi, Даа... Странная функция... В MSVS такой не имеется...

Добавлено через 17 секунд
Asics^, Всеми говоря. Это разные языки. Кроме основ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2010, 21:57     Сгенерировать случайный двумерный массив с заданной размерностью
Еще ссылки по теме:

C++ Дан двумерный массив с размерностью n, вывести все отрицательные значения
Задан двумерный массив вещественных чисел размерностью (M+1)x(N+1). В строку m+1 записать суммы элементов по с C++

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

Или воспользуйтесь поиском по форуму:
palach777
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 21:57  [ТС]     Сгенерировать случайный двумерный массив с заданной размерностью #19
спасибо большое за помощь,я наконец разобрался
Yandex
Объявления
28.10.2010, 21:57     Сгенерировать случайный двумерный массив с заданной размерностью
Ответ Создать тему
Опции темы

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