Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/43: Рейтинг темы: голосов - 43, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
1

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

28.10.2010, 15:36. Показов 7849. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно сгенерировать двумерный массив с заданной размерностью и вывести его на экран, помогите это сделать пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2010, 15:36
Ответы с готовыми решениями:

Дан двумерный массив размерностью 4*5. Сформировать одномерный массив
Дан двумерный массив размерностью 4*5, заполненный целыми числами с клавиатуры. Сформировать...

Двумерный массив размерностью nxm
Написать программу в С++ задание: Дан двумерный массив размерностью nxm (n и m задаются с...

Дан двумерный массив размерностью Н. сформировать одномерный массив из элементов заданного массива расположенных над главной диагональю.
помогите решить=)Дан двумерный массив размерностью Н. сформировать одномерный массив из элементов...

C++ Дан двумерный массив размерностью NxM
Дан двумерный массив размерностью NxM(N и M вводятся с клавиатуры). Найти максимальный и...

18
125 / 65 / 9
Регистрация: 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;
}
0
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 16:14  [ТС] 3
а почему у меня си пишет неопределены такие функции как malloc, rand, free?
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.10.2010, 16:17 4
Подключите stdlib.h
0
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 16:24  [ТС] 5
извините за тупые вопросы, но так как я в си бот, как вывести это на экран?
0
274 / 175 / 12
Регистрация: 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. Зато такой способ верный не только с точки зрения логики программы, но и с точки зрения идеологии.
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
2
125 / 65 / 9
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 20:26 8
Согласен полностью что до абсурда доводить каждую задачу не нужно.
Чем проще она решается тем меньше в ней ошибок.
Тут не требуется грандиозной гибкости.
1
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 20:32 9
Lavroff, не могу согласиться. Ничего сложного тут нет, всё дело в привычке к стандартной библиотеки шаблонов. Разобраться с вектором и итераторами, и дальше вообще станет легче жить .
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.10.2010, 20:33 10
volovzi, Да понятное дело, что легко. И вектор и итератор все прекрасно. Но, класс тут лишний, если не задумываться о том, что это может развиться дальше.
Но во-первых метод show в классе не канает, во-вторых random_fill тоже не канает.
Разве класс матрица должен иметь методы с использованием консоли, да + с пользовательским интерфейсом? Разделять интерфейс от реализации тоже часть хорошего стиля и идеологии.

Да и кстати. Что за srandom?
0
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
28.10.2010, 20:36 11
Цитата Сообщение от Sudoki Посмотреть сообщение
Согласен полностью что до абсурда доводить каждую задачу не нужно.
Чем проще она решается тем меньше в ней ошибок.
Тут не требуется грандиозной гибкости.
Человек просил Си++, а ты ему написал на Си. Немного разные вещи.
По-моему, гораздо больший абсурд — работать вручную с памятью.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.10.2010, 20:38 12
volovzi, Видишь-ли в чем проблема... Обычно, народ, который спрашивает такую задачу ждет самого простого решения задачи. А векторы/итераторы им перед преподом объяснять как-то не вариант будет.

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

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

Опечаток нет. Всю жизнь пользуюсь парой srandom/random. Это, вроде как, старшие братья srand/rand. А NULL обозначает нулевой указатель "(void *)0". Или сейчас как-то по-другому принято?
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
28.10.2010, 20:53 14
Цитата Сообщение от volovzi Посмотреть сообщение
Тем более, что в плюсах их, типа, нет.
Си является подмножеством языка С++,так что нельзя говорить что ети функции не входят в стандартную библиотеку С++.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.10.2010, 20:54 15
volovzi,
Дык. Я же не говорил, что код на Си который написали правилен для С++. Но работу new и delete то в чем проблема в объяснении?

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

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

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

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

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

По поводу нуля спасибо. Оказывается, у меня тоже ещё остались сишные привычки.
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
28.10.2010, 21:09 17
Цитата Сообщение от volovzi Посмотреть сообщение
Строго говоря, не является.
Кем "говоря"?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.10.2010, 21:09 18
volovzi, Даа... Странная функция... В MSVS такой не имеется...

Добавлено через 17 секунд
Asics^, Всеми говоря. Это разные языки. Кроме основ.
0
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 15
28.10.2010, 21:57  [ТС] 19
спасибо большое за помощь,я наконец разобрался
0
28.10.2010, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2010, 21:57
Помогаю со студенческими работами здесь

Дан двумерный массив с размерностью n, вывести все отрицательные значения
Дан двумерный массив с размерностью n, вывести все отрицательные значения.

Создать и вывести на экран двумерный массив целых чисел размерностью 3х3
1. создать и вывести на экран двумерный массив целых чисел размерностью 3х3 2. создать и вывести...

Ввести двумерный массив целых чисел размерностью 2 на 4. Заменить все четные элементы на 0
Ввести двумерный массив целых чисел размерностью 2 на 4. Заменить все четные элементы числом 0....

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru