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

Генератор случайных чисел. Массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.92
Shax_04
 Аватар для Shax_04
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 20
02.11.2012, 00:41     Генератор случайных чисел. Массив #1
Суть вот в чём:
Создать двумерный массив размерностью 3х3 дабы он заполнялся случайными числами. После это выполнить определённые операции по сложению, либо вычитанию диагоналей или индексов.
Подключил библиотеки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#define n 3 // матрица 3х3
 
setlocale(LC_ALL, "Russian");
 
//Использую переменные:
int A [n][n];
int i, j;
srand (time(NULL));
Загвоздка в том, что я не могу придумать как сказать на С++, чтобы массив заполнялся случайными числами.
Мои догадки присвоить i и j = rand () % 1000 + 1; , а потом что?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2012, 00:41     Генератор случайных чисел. Массив
Посмотрите здесь:

C++ Генератор случайных чисел
C++ Генератор случайных чисел
Генератор случайных чисел C++
Генератор случайных чисел C++
C++ массив и генератор случайных чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
02.11.2012, 01:22     Генератор случайных чисел. Массив #2
надо писать так
C++
1
A[i][j]=rand()%1000 + 1
и всё это в цикле, тогда массив будет заполнтся псевдослучайными числами от 1 до 1000.
И ещё, вместо #define лучше юзать const
Shax_04
 Аватар для Shax_04
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 20
02.11.2012, 01:39  [ТС]     Генератор случайных чисел. Массив #3
ZaMaZaN4iK, нужно записывать так?
C++
1
2
3
4
for (i=0; i<n; i++)
    {printf("\n Генерация трех случайных чисел массива %d строки:\n", i+1);
for (j=0; j<n; j++)
A[i][j]=rand()%1000 + 1 // насколько я понимаю рэнд нужно записывать сюда? Но с каким выражением?
Не могли бы Вы подсказать мне) мне завтра зачёт получать, а ночь ой какая длинная
kuli4ok
31 / 31 / 3
Регистрация: 10.10.2012
Сообщений: 88
02.11.2012, 01:45     Генератор случайных чисел. Массив #4
двумерный массив вроде так правильней
C++
1
2
3
4
5
6
7
8
9
//...
for(int i=0; i<n; i++) // n - кол-во строк в двумерном массиве
{
   for(int j=0; j<k; j++) // k - кол-во элементов в строке двумерного массива
   {
      a[i][j]=rand()%l; //a[i][j]-двумерный массив, l - диапазон случайных чисел, от 0 до l-1
   }
}
//...
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
02.11.2012, 01:48     Генератор случайных чисел. Массив #5
да, именно так.Только советую вместо printf юзать cout

Добавлено через 3 минуты
kuli4ok, что за К переменная? Массив квадратный!
Shax_04
 Аватар для Shax_04
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 20
02.11.2012, 02:16  [ТС]     Генератор случайных чисел. Массив #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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <time.h>
#define n 3 // матрица 3х3
 
int main (void) 
{
    setlocale(LC_ALL, "Russian");
    int A [n][n];
    int i, j;
    srand ((unsigned) time(NULL));
 
//Ввод элементов матрицы !n=3-квадратная!
for(int i=0; i<n; i++)
        {printf("\n Сгенерированная матрица:\n");
for(int j=0; j<n; j++)
    {A[i][j] = rand () %100+1;}} // получение чисел массивом
 
// Распечатка массива
    printf("\n Исходная матрица (%dx%d):\n", n, n);
    for(int i=0; i<n; i++)
    { 
        printf("\n");
        for(int j=0; j<n; j++)
            printf ("%12d", A [n][n]);
    }
        _getch();
    return 0;
}
Несколько вопросов:
1. Как сделать чтобы текст "Сгенерированная матрица" не повторялся 3 раза?
2. В матрице все элементы матрицы 3х3 имеют одно и тоже значение. Как сделать все разные?
3. Почему сгенеренные значения матрице в независимо от изменения {A[i][j] = rand () %100+1;}} получаются большие? (по 8 знаков)

Добавлено через 8 минут
1. Как сделать чтобы текст "Сгенерированная матрица" не повторялся 3 раза? - вопрос решён
kuli4ok
31 / 31 / 3
Регистрация: 10.10.2012
Сообщений: 88
02.11.2012, 02:22     Генератор случайных чисел. Массив #7
2. используй где нибудь в начале программы srand(time(0))
3. если между rand и () стоит пробел, то убери его.

Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
kuli4ok, что за К переменная? Массив квадратный!
Я человеку на будущее объясняю, вдруг ему придется работать массивом имеющим разное кол-во столбцов и строк.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
02.11.2012, 02:23     Генератор случайных чисел. Массив #8
3.попробуйте написать 1 + rand()%100
2.перед применением rand() заюзайте 1 раз srand(time(0))
Shax_04
 Аватар для Shax_04
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 20
02.11.2012, 02:30  [ТС]     Генератор случайных чисел. Массив #9
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
3.попробуйте написать 1 + rand()%100
не работает.
Цитата Сообщение от kuli4ok Посмотреть сообщение
3. если между rand и () стоит пробел, то убери его.
По-моему количество пробелов в C++ никак не влияло на работу программы?
kuli4ok
31 / 31 / 3
Регистрация: 10.10.2012
Сообщений: 88
02.11.2012, 02:36     Генератор случайных чисел. Массив #10
Цитата Сообщение от Shax_04 Посмотреть сообщение
не работает.

По-моему количество пробелов в C++ никак не влияло на работу программы?
Да, ты прав, извиняюсь. Просто больше ничего на ум не приходит, пробовал скомпилировать у себя работает правильно.

может в самой распечатке проблема? попробуй вот так
C++
1
2
3
4
5
6
7
8
// Распечатка массива
    printf("\n Исходная матрица (%dx%d):\n", n, n);
    for(int i=0; i<n; i++)
    { 
        printf("\n");
        for(int j=0; j<n; j++)
            printf ("%d\t", A[i][j]);
    }
Shax_04
 Аватар для Shax_04
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 20
02.11.2012, 02:36  [ТС]     Генератор случайных чисел. Массив #11
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
перед применением rand() заюзайте 1 раз srand(time(0))
Тыканье srand(time(0)) в разные части тела программы ничего не изменило)
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
02.11.2012, 02:48     Генератор случайных чисел. Массив #12
Shax_04, относитесь внимательней к выоду массива.вы его неправильно выводите.Я только что прогнал в компиляторе - вывод массива неправильный, а отлдачиком проврил содержимое массива - всё зер гут.исправьте вывод массива
kuli4ok
31 / 31 / 3
Регистрация: 10.10.2012
Сообщений: 88
02.11.2012, 02:50     Генератор случайных чисел. Массив #13
Shax_04, в предыдущем моем посте посмотри как сделать вывод массива, ZaMaZaN4iK прав.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
02.11.2012, 02:56     Генератор случайных чисел. Массив #14
вот работающий код:
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
#include <clocale>
#include <ctime>
#include <iostream>
 
int main () 
{
    setlocale(LC_ALL, "Russian");
    const short int n=3;
    int A [n][n],i, j;
    std::srand(time(0));
    std::cout<<"Генерируем массив..."<<std::endl;
    for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
                {
                    A[i][j] = rand()%100+1;
                }
        } 
    std::cout<<"Полученный массив";
    for(int i=0; i<n; i++)
    { 
        std::cout<<std::endl;
        for(int j=0; j<n; j++)
            std::cout<<A[i][j]<<' ';
    }
    std::cout<<std::endl;
    system("pause"); 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2012, 06:46     Генератор случайных чисел. Массив
Еще ссылки по теме:

C++ Генератор случайных чисел
C++ Генератор случайных чисел
Генератор случайных чисел C++

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

Или воспользуйтесь поиском по форуму:
Shax_04
 Аватар для Shax_04
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 20
02.11.2012, 06:46  [ТС]     Генератор случайных чисел. Массив #15
Благодаря Вам Уважаемые! Только Вам - ZaMaZaN4iK и kuli4ok!
Мы добились вот такого вот результата:
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
#include <conio.h> //Где больше кратных 3 элементов: на главной или побочной диагонали?
#include <clocale>
#include <ctime>
#include <iostream>
 
int main () {
 
    setlocale(LC_ALL, "Russian");
    const short int n=3;
    int A [n][n],i, j;
    int kg, kd;
    srand(time(0));
 
    printf("\n\n\t Генерируем массив...\n");
    for(i=0; i<n; i++)
    {for(j=0; j<n; j++)
 
            {A[i][j] = rand()%100+1;}}
 
    printf("\n Полученный массив:\n");
        for(i=0; i<n; i++)
 
    {printf("\n");
        for(j=0; j<n; j++)
                printf(" %d ", A[i][j]);}
    
    for(i=0; i<1; i++)
    for(j=0; j<1; j++)
    printf("\n\n\n Размерность массива <%dx%d>\n", n, n);
    
//Количество элементов главной диагонали кратных 3
kg=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
    if(A[i][j]%3==0 && i==j) {kg++;}
printf("\n\n\t Количество элементов главной диагонали кратных 3: %d\n", kg);
 
//Количество элементов побочной диагонали кратных 3
kd=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
    if (A [i][j]%3==0 && j==n-1-i) {kd++;}
printf("\n\t Количество элементов побочной диагонали кратных 3: %d\n", kd);
 
//Завершение\Ответ
 if(kg>kd) 
     printf("\n\n\t Количество элементов ГЛАВНОЙ диагонали - больше!");
 else
     if(kg<kd)
         printf("\n\n\t Количество элементов ПОБОЧНОЙ диагонали - больше!");
     else
         if (kg=kd)
         printf("\n\n\t Количество элементов побочной и главной диагоналей РАВНЫ!");
         else
             if (kg==0 && kd==0)
                 printf("\n\n\t На диагоналях, элементов кратных 3 НЕТ!");
 
     printf("\n\n\n Нажмите любую клавишу для выхода!\n");
    _getch ();
    return 0;
}
Я переделал под свой манер, чтобы преподаватель не подумал что помогли
(Мы ещё не дошли до: cout, <<, >>, std:: и тд.тп)
Огромное спасибо!
Yandex
Объявления
02.11.2012, 06:46     Генератор случайных чисел. Массив
Ответ Создать тему
Опции темы

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