Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
40 / 40 / 15
Регистрация: 29.12.2016
Сообщений: 291
1

Генератор случайных чисел в заданном диапазоне

10.09.2017, 19:43. Просмотров 2544. Ответов 6
Метки нет (Все метки)

Дали новое задание доработать свою программу, что-бы массив заполнялся случайными числами от 5 до 11, а потом это все дело передавалось в сортировку, глобальный массив использовать нельзя, вместо него в функции создается его локальная копия и с ней работаю. Задаю нужный диапазон генерации чисел, он почему-то генерирует от 5 до 16, все остальное пока закоментил, надо с генерацией разобраться сначала.

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/*
 * Сортировка
 */
 
/* прототип функции */
void inputArray(int *s, int size);
//void sortIndex(int arr[], int size);
//void sortNumber(int *x, int *y);
//void printArray(int print[], int size);
 
 /* Главная функция */
int main(void)
{
    int array[10];
    inputArray(array, 10); // Запускам функцию заполнения массива числами
   // printArray(array, 10); // Выводим отсортированный массив на экран
 
    return 0;
}
 
 
/* Заполняем массив числами */
void inputArray(int *s, int size)
{
    int i;
    srand(time(NULL));
 
    printf("Массив: ");
    for(i = 0; i < size; i++)
    {
        s[i] = 5 + rand() % 12;
        printf("%i ", s[i]);
    }
    printf("\n");
   // sortIndex(s, 10);
 
    return;
}
 
 
///* Двумя циклами навстречу друг другу идем по массиву и отправляем числа на сортировку */
//void sortIndex(int arr[], int size)
//{
//    int i, j;
//
//    for(i = 0, j = size - 1; i < size && j > i; i++, j--) { sortNumber(&arr[i], &arr[j]); }
//
//    return;
//}
//
//
///* Сортируем числа в оперативной памяти */
//void sortNumber(int *x, int *y)
//{
//    int temp;
//
//                temp = *x;
//                *x = *y;
//                *y = temp;
//
//    return;
//}
//
///* Выводим отсортированный массив на экран */
//void printArray(int print[], int size)
//{
//    int i;
//
//    printf("Отсортированный массив: ");
//    for(i = 0; i < size; i++) { printf("%i ", print[i]); }
//    printf("\n");
//
//    return;
//}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2017, 19:43
Ответы с готовыми решениями:

Генератор случайных чисел в диапазоне от 0 до 1 (не целых)
Здравствуйте! Помогите пожалуйста. Вроде весь форум просмотрела,но ответа не нашла. Мне нужно...

Генерация случайных чисел в заданном диапазоне
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; int main() { clrscr();...

Сформировать массив из заданного количества случайных целых чисел в заданном диапазоне
Доброго времени суток ув. форумчане. Не могу въехать как написать эту задачу: Задана...

Генератор случайных чисел на С++ (Dev C++)
Подскажите пожалуйста, Мне нужно написать генератор случайных чисел, однако всегда генерируется...

6
1462 / 1170 / 551
Регистрация: 08.01.2012
Сообщений: 4,509
10.09.2017, 20:14 2
s[i] = 5 + rand() % 7;
1
40 / 40 / 15
Регистрация: 29.12.2016
Сообщений: 291
10.09.2017, 21:23  [ТС] 3
Цитата Сообщение от MansMI Посмотреть сообщение
s[i] = 5 + rand() % 7;
А почему так? Раньше вроде генерировал числа, были такие задания, задавал первое число на одно меньше, а второе на одно больше, чтобы захватить весь диапазон

Добавлено через 1 час 2 минуты
Что-то я совсем запутался с этими локальными массивами, печатает просто массив, наоборот, не сортируя, где-то ошибка, не могу понять где. Раньше с глобальным массивом все отлично работало.
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/*
 * Сортировка
 */
 
/* прототип функции */
void inputArray(int *s, int size);
void sortIndex(int *k, int size);
void sortNumber(int *x, int *y);
void printArray(int print[], int size);
 
 /* Главная функция */
int main(void)
{
    int array[10];
    inputArray(array, 10); // Запускам функцию заполнения массива числами
    printArray(array, 10); // Выводим отсортированный массив на экран
 
 
    return 0;
}
 
 
/* Заполняем массив числами */
void inputArray(int *s, int size)
{
    int i;
    srand(time(NULL));
 
    printf("Массив: ");
    for(i = 0; i < size; i++)
    {
        s[i] = 5 + rand() % 7;
        printf("%i ", s[i]);
    }
    printf("\n");
    sortIndex(s, size);
 
 
 
    return;
}
 
 
/* Двумя циклами навстречу друг другу идем по массиву и отправляем числа на сортировку */
void sortIndex(int *k, int size)
{
    int i, j;
 
    for(i = 0, j = size - 1; i < size && j > i; i++, j--) { sortNumber(&k[i], &k[j]); }
 
 
  return;
}
 
 
/* Сортируем числа в оперативной памяти */
void sortNumber(int *x, int *y)
{
    int temp;
 
                temp = *x;
                *x = *y;
                *y = temp;
 
    return;
}
 
/* Выводим отсортированный массив на экран */
void printArray(int print[], int size)
{
    int i;
 
    printf("Отсортированный массив: ");
    for(i = 0; i < size; i++) { printf("%i ", print[i]); }
    printf("\n");
 
    return;
}
0
Велосипедист...
349 / 216 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.09.2017, 22:02 4
Цитата Сообщение от LightProger Посмотреть сообщение
не сортируя
Так у тебя ничего и не сортируется У тебя функция sortNumber только меняет местами значения двух переменных. Соответственно, функция sortIndex просто берет и переставляет k[ i ] и k[ j ] местами, вне зависимости от их значения.

Что тебе нужно сделать, чтобы заработало:
Замени определение своей функции sortIndex ( 49 строка ) на это:
C
1
2
3
4
5
6
7
8
9
10
11
12
void sortIndex( int* arr, int size )
{
    int i;
    
    while ( --size )
 
        for ( i = 0; i < size; ++i )
 
            if ( arr[ i ] > arr[ i + 1 ] )
 
                sortNumber( &arr[ i ], &arr[ i + 1 ] );
}
Обрати внимание на то, как я использовал функцию sortNumber.

Добавлено через 2 минуты
P.S.: Я использовал метод пузырьковой сортировки для сортировки массива.
0
40 / 40 / 15
Регистрация: 29.12.2016
Сообщений: 291
10.09.2017, 22:30  [ТС] 5
Ураа! Заработала сортировка!
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/*
 * Сортировка
 */
 
/* прототип функции */
void inputArray(int *s, int size);
void sortIndex(int *k, int size);
void sortNumber(int *x, int *y);
void printArray(int print[], int size);
 
 /* Главная функция */
int main(void)
{
    int array[10];
    inputArray(array, 10); // Запускам функцию заполнения массива числами
    printArray(array, 10); // Выводим отсортированный массив на экран
 
 
    return 0;
}
 
 
/* Заполняем массив числами */
void inputArray(int *s, int size)
{
    int i;
    srand(time(NULL));
 
    printf("Массив: ");
    for(i = 0; i < size; i++)
    {
        s[i] = 5 + rand() % 7;
        printf("%i ", s[i]);
    }
    printf("\n");
    sortIndex(s, size);
 
 
 
    return;
}
 
 
/* Двумя циклами навстречу друг другу идем по массиву и отправляем числа на сортировку */
void sortIndex(int *k, int size)
{
    int i, j;
 
 
  for (i = 0; i < size; i++)
    {
 
      for (j = size - 1; j > i; j--)
        {
          if(k[i] < k[j])
            {
              sortNumber (&k[i], &k[j]);
            }
        }
    }
 
 
  return;
}
 
 
/* Сортируем числа в оперативной памяти */
void sortNumber(int *x, int *y)
{
    int temp;
 
                temp = *y;
                *y = *x;
                *x = temp;
 
    return;
}
 
/* Выводим отсортированный массив на экран */
void printArray(int print[], int size)
{
    int i;
 
    printf("Отсортированный массив: ");
    for(i = 0; i < size; i++) { printf("%i ", print[i]); }
    printf("\n");
 
    return;
}
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5376 / 3220 / 2365
Регистрация: 22.11.2013
Сообщений: 9,082
11.09.2017, 14:01 6
Лучший ответ Сообщение было отмечено LightProger как решение

Решение

Цитата Сообщение от LightProger Посмотреть сообщение
Ураа!
А теперь небольшая переработка: назовем вещи своими именами, заставим функции заниматься своим узким делом:
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
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define AS(x) (sizeof(x)/sizeof(*x))
 
void aGen(int *ar, size_t size, int a, int b);
void aPrint(int* ar, size_t size, char *prompt);
void aSort(int* ar, size_t size);
 
int main(void)
{
    int ar[10];
    srand(time(NULL));
    aGen(ar, AS(ar), 5, 11);
    aPrint(ar, AS(ar), "Исходный массив");
    aSort(ar, AS(ar));
    aPrint(ar, AS(ar), "Отсортированный массив");
    return 0;
}
 
void aGen(int *d, size_t size, int a, int b)
{
    b -= a-1;
    for (int i = size; i --> 0;)
        d[i] = a + rand() % b;
}
 
void aSort(int *d, size_t size)
{
    for (int i = size; i --> 1;)
        for (int j = i; j --> 0;)
            if (d[i] < d[j]) { int t=d[i]; d[i]=d[j]; d[j]=t; }
}
 
void aPrint(int *d, size_t size, char *p)
{
    if (p) printf("%s:\n",p);
    for (int i = 0; i < size; ++i) { printf(" %d", d[i]); }
    printf("\n");
}
0
40 / 40 / 15
Регистрация: 29.12.2016
Сообщений: 291
11.09.2017, 14:18  [ТС] 7
Цитата Сообщение от bormant Посмотреть сообщение
А теперь небольшая переработка
Круто!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2017, 14:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не работает генератор случайных чисел
Здравствуйте, не работает рандомщик. Скажите, пожалуйста, как подправить код. #include &lt;iostream&gt;...

Вывести 50 случайных чисел в диапазоне от 0 до 99
Написать программу: чтобы она выводила 50 случайных чисел в диапозпоне от 0 до 99

Генератор случайных чисел методом Фибоначчи
Всем доброе время суток...) Я понимаю етот вопрос был выведен на показ уж много раз в подобныж...

Генератор случайных чисел выдаёт некорректный результат
Необходимо, заполнить массив случайными числами из предела , но вместо этого результат выполнения...


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

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

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