Тема: Масив із випадкових чисел

Допоможіть розібратись із завданням.
Завдання: Сформувати масив із N випадкових чисел, що потрапляють у заданий
проміжок А. .В. Надрукувати сформований масив. Потім вилучити з нього
всі непарні елементи. Надрукувати масив після скорочення і вказати, скільки
елементів вилучено. Підказка: для вилучення зсувати всі наступні елементи
масиву ліворуч.

1. Наприклад, для того, щоб користувач ввів проміжок використаємо такий код:

    
    int min, max;
    printf("\n Виберіть проміжок чисел N які будуть входити в масив( A - B ):\n ");
    scanf_s("%i  %i", &min, &max);

2. Для генерації випадкових чисел потрібно використати srand(time()) i rand(), але як їх використати так, щоб згенеровані ними числа входили у введений проміжок?

3. Вилучити непарні елементи створеного масиву можна так:

 printf("\n Новий масив:");
    for (i = 0; i < n; i++) {
        if (a[i] % 2 != 0) {
            a[i] = a[i] << 1;
            printf("%d\t", a[i]);
        }

Але як нам ще вказати к-сть елементів, яка була вилучена?

Буду дуже вдячна, якщо допоможете розібратись із цим). Шукала інформацію по цьому, але толком нічого не знайшла(

2

Re: Масив із випадкових чисел

2. Для генерації випадкових чисел потрібно використати srand(time()) i rand(), але як їх використати так, щоб згенеровані ними числа входили у введений проміжок?

У вас прогалина в освіті, десь 7 клас(в кращому випадку) математики ви вже не подолали. Чи варто далі намагатися зрозуміти програмування без розуміння математики - питання відкрите. Втім, на відміну від інших студентів, ви намагаєтеся самостійно працювати, що рідкість.
Дивіться, якщо нам потрібні випадкові числа від 0 до 3, то ми пишемо код rand() % 4, якщо нам потрібні випадкові числа від 2 до 6, то ми пишемо (rand() % 5) + 2

3. Вилучити непарні елементи створеного масиву можна так:

            a[i] = a[i] << 1;

Ви самі бачите, що пишете дурню?

Але як нам ще вказати к-сть елементів, яка була вилучена?

Створити змінну, яка буде слугувати лічильником, та збільшувати її на одиницю, коли доводиться вилучати елемент.

Подякували: koala, leofun012

3

Re: Масив із випадкових чисел

Я не так давно вчу програмування і тому запитала, щоб краще зрозуміти,я звісно дякую, але ви трохи грубо відповіли. Не можна визначити знання людини тільки за запитанням заданим нею, а про лічильник не знала(ще не вивчали), дякую(

4

Re: Масив із випадкових чисел

Для того, щоб згенерувати число, скажімо в діапазоні від [0, 10) в С пишемо int r = rand() % 10;        // 0 .. 9
Важливо зрозуміти, що 10 тут не верхня межа діапазону, а кількість чисел діапазону, відлік яких розпочинається в даному випадку від 0. Тобто, щоб згенерувати числа в діапазоні від 0 до 10 включно, тоді нам потрібно писати кількість чисел 11 (10 + 1)
int r = rand() % (10 + 1);     // 0..10
Для того, щоб задати нижню межу діапазону, пишемо наступне:
int r = 1 + rand() % 10;    // 1 .. 9

Тоді по аналогії оголосимо змінні A та B (нижня та верхня межі діапазону)

int a = 5;
int b = 10;

int r = a + rand() % (b - a); // 5 .. 9
int r = a + rand() % (b - a + 1); // 5 .. 10

Ще раз a - це нижня межа діапазону
b - верхня межа діапазону і щоб програма генерувала числа до цієї межі, потрібно вказати їй скільки чисел розташовано в цьому діапазоні, тобто (b - a); // 5 .. 9 (4 числа) або (b - a + 1); // 5 .. 10 (відповідно п'ять)

Приклад коду в діапазоні від -5 до 10 (розмір діапазону займе п'ятнадцять чисел + 1) включно буде мати вигляд

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 10

int main()
{
  srand(time(0));

  int ra[SIZE], a, b;
  a = -5;
  b = 10;
  for (size_t i = 0; i < SIZE; i++)
    ra[i] = a + rand() % (b - a + 1);

  return 0;
}

5

Re: Масив із випадкових чисел

lucas-kane написав:

Для того, щоб згенерувати число, скажімо в діапазоні від [0, 10) в С пишемо int r = rand() % 10;        // 0 .. 9
Важливо зрозуміти, що 10 тут не верхня межа діапазону, а кількість чисел діапазону, відлік яких розпочинається в даному випадку від 0. Тобто, щоб згенерувати числа в діапазоні від 0 до 10 включно, тоді нам потрібно писати кількість чисел 11 (10 + 1)
int r = rand() % (10 + 1);     // 0..10
Для того, щоб задати нижню межу діапазону, пишемо наступне:
int r = 1 + rand() % 10;    // 1 .. 9

Тоді по аналогії оголосимо змінні A та B (нижня та верхня межі діапазону)

int a = 5;
int b = 10;

int r = a + rand() % (b - a); // 5 .. 9
int r = a + rand() % (b - a + 1); // 5 .. 10

Ще раз a - це нижня межа діапазону
b - верхня межа діапазону і щоб програма генерувала числа до цієї межі, потрібно вказати їй скільки чисел розташовано в цьому діапазоні, тобто (b - a); // 5 .. 9 (4 числа) або (b - a + 1); // 5 .. 10 (відповідно п'ять)

Приклад коду в діапазоні від -5 до 10 (розмір діапазону займе п'ятнадцять чисел + 1) включно буде мати вигляд

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 10

int main()
{
  srand(time(0));

  int ra[SIZE], a, b;
  a = -5;
  b = 10;
  for (size_t i = 0; i < SIZE; i++)
    ra[i] = a + rand() % (b - a + 1);

  return 0;
}

Дуже вам дякую, тепер набагато ясніше стало :) *ROSE*
А чи не підкажете як саме вилучити непарні елементи?

6

Re: Масив із випадкових чисел

lesivsolomiya написав:

Підказка: для вилучення зсувати всі наступні елементи
масиву ліворуч.

3. Вилучити непарні елементи створеного масиву можна так:

 printf("\n Новий масив:");
    for (i = 0; i < n; i++) {
        if (a[i] % 2 != 0) {
            a[i] = a[i] << 1;
            printf("%d\t", a[i]);
        }

Ви сприймаєте це буквально... ))) Така задача вже була на форумі і як зробити "зсув" пояснювали https://replace.org.ua/topic/13618/

7

Re: Масив із випадкових чисел

вибачте, я не бачила, дякую))