Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
SlashX6
16 / 16 / 1
Регистрация: 16.03.2012
Сообщений: 430
#1

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

18.04.2013, 14:25. Просмотров 1535. Ответов 9
Метки нет (Все метки)

Добрый день!

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

Если самому вводить, то результат правильный:
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;
                }
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 14:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Заполнить массив нечётными числами (C++):

Заполнить массив нечётными числами в диапазоне от -10 до 30 по возрастанию - C++
Заполнить массив нечётными числами в диапазоне от -10 до 30 по возрастанию. код С++ : #include &lt;iostream&gt; #include &lt;ctime&gt; ...

Заполнить массив заданного размера нечётными числами в указанном диапазоне - C++
Заполнить массив из 50-ти элементов нечётными числами от 1 до 99. нужно использовать остаток от деления, что бы проверить число на четность.

Заполнить массив первыми ста простыми числами, и вывести массив на экран - C++
Объявите одномерный целочисленный массив в котором не более 100 элементов выполните генерацию массива первыми 100 простыми числами....

Заполнить массив только числами от 0 до 99 - C++
Как создать массив, в котором сам забиваешь числа, но эти числа могут быть только от 0, до 99 #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Заполнить массив случайными числами от -50 до 50 - C++
Нужно заполнить массив числами от -50 до 50 .Написал такой код #include &quot;stdafx.h&quot; #include&lt;iostream&gt; int...

Заполнить массив случайными числами - C++
Задайте с помощью генератора случайных чисел массив в диапазоне от 1 до 100. Целое число

9
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 855
Завершенные тесты: 1
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;
}
1
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;
2
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 - размер матрицы
0
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 не увеличивается.
0
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 - размер матрицы
исправил....
0
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 16:25 #7
Цитата Сообщение от igormalanyk Посмотреть сообщение
исправил....
Замечательно, но это решение, однако, не лучше. Нет никакого смысла крутиться к цикле до тех пор, пока рандом не выдаст вам нечетное число. Достаточно увеличить число на единицу, если оно оказалось четным.
1
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 855
Завершенные тесты: 1
18.04.2013, 16:31 #8
Цитата Сообщение от shuffle Посмотреть сообщение
Замечательно, но это решение, однако, не лучше. Нет никакого смысла крутиться к цикле до тех пор, пока рандом не выдаст вам нечетное число. Достаточно увеличить число на единицу, если оно оказалось четным.
Скажем, я хочу числа от 0 до 1000 включительно. Если выпадет 1000, то твой алгоритм увеличит на 1 и в итоге получится 1001, что является за пределами нашего диапазона значений. Другое дело, что твой подход менее затратный - так как при большом массиве твой вариант будет оптимальнее, но тогда надо предусмотреть то, что я описал выше. Но, если массив не большой - мой способ предпочтительнее, так как мы не проиграем по скорости.
0
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 16:35 #9
Цитата Сообщение от ArmanPrestige Посмотреть сообщение
Скажем, я хочу числа от 0 до 1000 включительно. Если выпадет 1000, то твой алгоритм увеличит на 1 и в итоге получится 1001, что является за пределами нашего диапазона значений. Другое дело, что твой подход менее затратный - так как при большом массиве твой вариант будет оптимальнее, но тогда надо предусмотреть то, что я описал выше. Но, если массив не большой - мой способ предпочтительнее, так как мы не проиграем по скорости.
В этом нет никакой проблемы. Число просто каждый раз берется по модулю 1000, что, в случае выпадения 1000, после взятия модуля и прибавлени 1, даст 1.

Ждать, пока рандом выдаст нужные значения — непредсказуемо. А что может быть хуже непредсказуемой программы?
0
SlashX6
16 / 16 / 1
Регистрация: 16.03.2012
Сообщений: 430
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]);
           }
       }
/* Дальше вывод результата */
0
18.04.2013, 22:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2013, 22:29
Привет! Вот еще темы с ответами:

Заполнить массив случайными числами - C++
Помогите, пожалуйста, как заполнить массив случайными числами в диапазоне от -20 до 20.

Заполнить массив числами от 35 до 100 - C++
Как заполнить двумерный массив случайными числами от 35 до 100?

Заполнить массив n*m простыми числами - C++
Здрасьте! Помогите, пожалуйста, с решением задачи :impossible: &quot;Двумерный массив размерности m*n заполнен простыми числами. Найти номера...

Заполнить массив размером 10 случайными числами от 0 до 10 - C++
#include &lt;vector&gt; #include &lt;algorithm&gt; #include &lt;iostream&gt; using namespace std; int main() { int n = 10; vector&lt;int&gt;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.