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

Random-массив с разными числами в заданном диапозоне

29.08.2014, 20:37. Показов 3999. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Возникла небольшая проблема! Задача заключается в том, чтобы заполнить массив разными числами от 1-25. И не могу понять, почему у меня вроде бы все работает, но, последние 2 числа quard[23] и quard[24] постоянно одинаковые! Может кто подскажет в чем проблема?
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 <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
class fivequard
{
public:
    int quard[24];          //массив для заполнения.
    int temp;               //временная переменная.
    bool can;               //проверка: можно ли добавлять в массив число или нет.
    //---------------------------------------------------
    void init()             //заполнение массива отрицательным числом
    {
        for (int a = 0; a <= 24; a++)
        {
            quard[a] = -1;
        }
    }
    //---------------------------------------------------
    void show()             //вывести все элементы массива на экран
    {
        for(int a = 0; a <= 24; a++)
        {
            cout << "d[" << a << "] = " << quard[a] << endl;
        }
    }
    //---------------------------------------------------
    void randomize()        //заполнение массива разными числами
    {       
        srand(time(0));
        for (int j= 0; j != 24; j++)
        {           
            temp = rand() % 24;
            for (int i = 0; i <= j; i++)
            {
                if (temp == quard[i]) { can = false; break;}
                else can = true;
            }
            if (can) { quard[j] = temp; }
            else --j;
        }
    }
    //---------------------------------------------------
};
 
int main()
{
    setlocale(0, "");       //руссификация консоли
    //---------------------------------------------------
    fivequard s;    //инициализация класса
    s.init();       //инициализация массива
    s.show();       //вывести все элементы массива на экран
    s.randomize();  //заполнение массива разными числами
    s.show();       //еще раз вывести все элементы массива на экран
    //---------------------------------------------------
    cout << "\nНажмите любую клавишу для продолжения...";
    _getch();
    return 0;
}
Также пробовал циклом while, но результат один и тот же!
P.S. Знаю, что на данном форуме куча материала по этой теме, но хотелось бы разобрать конкретный пример.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2014, 20:37
Ответы с готовыми решениями:

Заполнить двухмерный массив n*m элементов целыми числами , лежащим в диапозоне от a до b
Заполнить двухмерный массив n*m элементов целыми числами , лежащим в диапозоне от a до b. Найти и вывести сумму каждого нечетного столбца....

Программа, которая заполняет динамический массив случ. числами в диапозоне от 0 до 100
Надо реализовать windowsform программу, которая заполняет динамический массив случ. числами в диапозоне от 0 до 100. Знаю как реализовать...

Двумерные массивы и Random в диапозоне
1. Определите функцию создания случайной матрицы заданных размеров с заданными пределами для значений элементов: int **...

10
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.08.2014, 20:44
А почему вы, собственно, пытаетесь достать элемент по индексу 24, когда у вас сам массив вмещает только 24 элемента?
0
0 / 0 / 1
Регистрация: 28.09.2013
Сообщений: 61
29.08.2014, 20:51  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
А почему вы, собственно, пытаетесь достать элемент по индексу 24, когда у вас сам массив вмещает только 24 элемента?
Я, признаюсь, вопроса не понял!
Но, как я понимаю, данный массив вмещает 25 элементов, т. к. 0 тоже является элементом массива.
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
29.08.2014, 20:55
Искандер_61, Но 24 не является. Индексация, в данном случае, идет от 0 до 23. Всего 24 элемента, как и указано при определении массива.
0
0 / 0 / 1
Регистрация: 28.09.2013
Сообщений: 61
29.08.2014, 21:07  [ТС]
Цитата Сообщение от Toshkarik Посмотреть сообщение
Искандер_61, Но 24 не является. Индексация, в данном случае, идет от 0 до 23. Всего 24 элемента, как и указано при определении массива.
История называется: ткните меня пальцем - где мой косяк!
Я, прошу прощения, за свою невнимательность (возможно и "глупость"), но почему тогда функция:
C++
1
2
3
4
5
6
7
void show()             //вывести все элементы массива на экран
    {
        for(int a = 0; a <= 24; a++)
        {
            cout << "d[" << a << "] = " << quard[a] << endl;
        }
    }
выводит мне все 25 элементов! А функция:
C++
1
2
3
4
5
6
7
void init()             //заполнение массива отрицательным числом
    {
        for (int a = 0; a <= 24; a++)
        {
            quard[a] = -1;
        }
    }
заполняет все 25 элементов массива?
0
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
29.08.2014, 21:08
Лучший ответ Сообщение было отмечено Искандер_61 как решение

Решение

Цитата Сообщение от Искандер_61 Посмотреть сообщение
Но, как я понимаю, данный массив вмещает 25 элементов, т. к. 0 тоже является элементом массива.
24 это не последний индекс массива, а его размер. То есть начиная с 0 у нас 24 элемента, в итоге последний индекс равен 23.

По поводу вопроса, вы используете ячейку памяти не относящуюся к массиву, что довольно опасно.
1
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
29.08.2014, 21:09
Просто повезло. В данном случае может случится все, что угодно. В стандарте это называется undefined behavior, то есть поведение не определено. Вам просто повезло, и ничего серьезного не случилось.
1
0 / 0 / 1
Регистрация: 28.09.2013
Сообщений: 61
29.08.2014, 21:43  [ТС]
avg93 и Toshkarik спасибо вам огромное за разъяснение!!! Все отлично работает! Только еще один вопрос остался, как сейчас понял, по зацикливанию "энтой" же программы:
Получается, что функция rand() никогда не выдаст значение 24?:
C++
1
temp = rand() % 24;
0
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
29.08.2014, 21:49
Цитата Сообщение от Искандер_61 Посмотреть сообщение
Получается, что функция rand() никогда не выдаст значение 24?:
Да. rand() % число - выдает значения от нуля до число - 1.
0
40 / 40 / 17
Регистрация: 04.02.2014
Сообщений: 144
29.08.2014, 22:06
Цитата Сообщение от Искандер_61 Посмотреть сообщение
temp = rand() % 25;
вот так выдаст
0
0 / 0 / 1
Регистрация: 28.09.2013
Сообщений: 61
29.08.2014, 22:07  [ТС]
Цитата Сообщение от Donnerwetter Посмотреть сообщение
вот так выдаст
Я уже понял, проверил, и скомпилировал! Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2014, 22:07
Помогаю со студенческими работами здесь

Массив размерностью 30 заполнить случайными числами, лежащими в диапозоне от -100 до 100
Массив размерностью 30 заполнить случайными числами, лежащими в диапозоне от -100 до 100. Заменить все элементы с отрицательными значениями...

Random заполняет массив одинаковыми числами
Здрасте. Подскажите, почему при вводе размера массива, он выдает одинаковые числа. n = 5 6 6 6 6 6 Положительных чисел - 5 ...

Вывести с помощью функции Random дробные числа в диапозоне от 0 до 1
Помогите пожалуйста вывести с помощью функции Random дробные числа в диапозоне от 0 до 1 (0.1, 0.2, 0.3, ...) !

Вывод строк с разными значениями в ограниченном диапозоне
Добрый день Эксперты! Я новичок, не могу разобраться с командами, помогите пожалуйста. У меня есть база данных в которой собирается...

Заполнить массив разными простыми числами
Заполнить массив разными простыми числами


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru