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

Заполнить массив нечётными числами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
SlashX6
15 / 15 / 1
Регистрация: 16.03.2012
Сообщений: 420
18.04.2013, 14:25     Заполнить массив нечётными числами #1
Добрый день!

Как заполнить массив нечётными числами?

Если самому вводить, то результат правильный:
C++
1
2
3
4
5
6
7
8
9
10
       for ( i = 0; i < n; i++ )
       {
           if ( ( i + 1 ) % 2 == 1 )
           {
                Masiv = (float*) realloc ( Masiv, sizeof( float ) * ( j + 1 ) );
                Masiv [ j ] = masiv [ i ] ;
                j++;
            printf ("\n%d", Masiv[i]);
           }
       }
А вот не работающий вариант для заполнения массива слёчайными числами:
C++
1
2
3
4
5
6
7
            for (i = 0; i < n; i++)
            {
                if ( ( i + 1 ) % 2 == 1 )
                {
                    masiv [ i ] = random ( 1000 ) + 1;
                }
            }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ArmanPrestige
 Аватар для ArmanPrestige
219 / 210 / 50
Регистрация: 15.01.2013
Сообщений: 787
18.04.2013, 14:52     Заполнить массив нечётными числами #2
C++
1
2
3
4
5
6
7
8
for(/* ... */)
{
    int tmp;
    do{
        tmp = rand()%1000;
    }while(!tmp%2);
    arr[index] = tmp;
}
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 15:06     Заполнить массив нечётными числами #3
C++
1
2
3
4
    int tmp;
    do{
        tmp = rand()%1000;
    }while(!tmp%2);
Как-то это сурово. Лучше все же так:
C++
1
2
3
4
    int tmp;
    tmp = rand()%1000;
    if (tmp % 2 == 0)
       ++tmp;
igormalanyk
1 / 1 / 0
Регистрация: 10.04.2013
Сообщений: 33
18.04.2013, 16:09     Заполнить массив нечётными числами #4
По моему так будет лучше
C++
1
2
3
4
do{int a;
a=rand()%1000;
if(a%2==0)
matrix[index]=a;}while(index!=N)
N - размер матрицы
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 16:17     Заполнить массив нечётными числами #5
Цитата Сообщение от igormalanyk Посмотреть сообщение
do{int a;
a=rand()%1000;
if(a%2==0)
matrix[index]=a;}while(index!=N)
Этот код вообще зациклится, т.к. index не увеличивается.
igormalanyk
1 / 1 / 0
Регистрация: 10.04.2013
Сообщений: 33
18.04.2013, 16:21     Заполнить массив нечётными числами #6
Цитата Сообщение от igormalanyk Посмотреть сообщение
По моему так будет лучше
C++
1
2
3
4
do{int a;
a=rand()%1000;
if(a%2==0)
matrix[index++]=a;}while(index!=(N-1))
N - размер матрицы
исправил....
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 16:25     Заполнить массив нечётными числами #7
Цитата Сообщение от igormalanyk Посмотреть сообщение
исправил....
Замечательно, но это решение, однако, не лучше. Нет никакого смысла крутиться к цикле до тех пор, пока рандом не выдаст вам нечетное число. Достаточно увеличить число на единицу, если оно оказалось четным.
ArmanPrestige
 Аватар для ArmanPrestige
219 / 210 / 50
Регистрация: 15.01.2013
Сообщений: 787
18.04.2013, 16:31     Заполнить массив нечётными числами #8
Цитата Сообщение от shuffle Посмотреть сообщение
Замечательно, но это решение, однако, не лучше. Нет никакого смысла крутиться к цикле до тех пор, пока рандом не выдаст вам нечетное число. Достаточно увеличить число на единицу, если оно оказалось четным.
Скажем, я хочу числа от 0 до 1000 включительно. Если выпадет 1000, то твой алгоритм увеличит на 1 и в итоге получится 1001, что является за пределами нашего диапазона значений. Другое дело, что твой подход менее затратный - так как при большом массиве твой вариант будет оптимальнее, но тогда надо предусмотреть то, что я описал выше. Но, если массив не большой - мой способ предпочтительнее, так как мы не проиграем по скорости.
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 16:35     Заполнить массив нечётными числами #9
Цитата Сообщение от ArmanPrestige Посмотреть сообщение
Скажем, я хочу числа от 0 до 1000 включительно. Если выпадет 1000, то твой алгоритм увеличит на 1 и в итоге получится 1001, что является за пределами нашего диапазона значений. Другое дело, что твой подход менее затратный - так как при большом массиве твой вариант будет оптимальнее, но тогда надо предусмотреть то, что я описал выше. Но, если массив не большой - мой способ предпочтительнее, так как мы не проиграем по скорости.
В этом нет никакой проблемы. Число просто каждый раз берется по модулю 1000, что, в случае выпадения 1000, после взятия модуля и прибавлени 1, даст 1.

Ждать, пока рандом выдаст нужные значения — непредсказуемо. А что может быть хуже непредсказуемой программы?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 22:29     Заполнить массив нечётными числами
Еще ссылки по теме:

C++ Заполнить массив n*m простыми числами
C++ Заполнить двумерный массив неповторяющимися числами
Заполнить массив числами от 35 до 100 C++

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

Или воспользуйтесь поиском по форуму:
SlashX6
15 / 15 / 1
Регистрация: 16.03.2012
Сообщений: 420
18.04.2013, 22:29  [ТС]     Заполнить массив нечётными числами #10
Спасибо за приведённые примеры! Подчеркнул новые моменты для себя.

Правда теперь программа просто вылетает ( прекращает работу ) при выборе random заполнения.
Где может быть ошибка то?

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
    int exit_comand = 2 ;           // переменная для выхода
    char choise_letter = 'a' ;      // выход или повтор
    float masivs [ 100 ];                   // статический массив заполняемый числами
    float * Masivs = NULL;          // динамический массив заполняемый нечётными числами
    int n = 1;                  // размер массива
    int i , j;                  // i - индекс цикла  j - счётчик нечётных чисел
    int ch = 0;                 // выбор типа заполнения
 
        switch ( ch )
        {
        case 1: // random
            {
 
            // заполнение случайными нечётными числами
                
                                do
                {
                    int a;
                    a = rand() % 1000;
                    if( a % 2 == 0 )
                    masiv[ i++ ] = a;
                } while( i!= ( n - 1 ));
 
            break;
            }
        case 2: // С клавиатуры
            {
            printf ("\n\nFill the array with numbers\n\n");
 
            for ( i = 0; i < n; i++ ) {                 // заполняем статический массив
                printf ( "\nEnter %d - number\t" , i + 1 );
                scanf  ( "%d", &masiv [ i ]);
            }
            break;
            }
        }
 
       // Нахождение результата
 
       Masiv = (float*) calloc ( 1 , sizeof( float ) );
       j = 0;   // обнуляем счётчик нечётных чисел
 
       // находим нечётные числа
       for ( i = 0; i < n; i++ )
       {
           if ( ( i + 1 ) % 2 == 1 )
           {
                Masiv = (float*) realloc ( Masiv, sizeof( float ) * ( j + 1 ) );
                Masiv [ j ] = masiv [ i ] ;
                j++;
            printf ("\n%d", Masiv[i]);
           }
       }
/* Дальше вывод результата */
Yandex
Объявления
18.04.2013, 22:29     Заполнить массив нечётными числами
Ответ Создать тему
Опции темы

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