Разбить отрезок на 5 диапазонов значений по росту и подсчитать частоту попаданий элементов массива в каждой из этих диапазонов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание:1. Дано натуральное число N и одномерный массив A1, A2, ..., AN целых чисел. Определить наибольшее и наименьшее значения, полученные значения рассматривать как концы отрезка. Разбить отрезок на 5 диапазонов значений по росту и подсчитать частоту попаданий элементов массива в каждой из этих диапазонов

Минимум и максимум посчитал только еще надо 5 диапазонов и частоту попаданий в эти 5 диапазонов.Я так понял нужно поделить участок от минимума до максимума на 5 одинаковых диапазонов и в каждом диапазоне посчитать сколько цифр попало в тот или иной диапазон.Надеюсь это можно реализовать?
#include <stdio.h>
#include <stdlib.h>
int N,i,j=0;
 
int main()
{
    system("chcp 1251");
    printf("Введите число N:  ");
    scanf("%d",&N);
    int mas[N+1];
    for (i=1;i<=N;i++)
    {
        printf("Введите элемент массива A%d: ",i);
        scanf("%d",&mas[i]);
    }
    int min,max;
    if(mas[1]<mas[2])
    {
        min=mas[1];
    }
    if(mas[1]>mas[2])
    {
        min=mas[2];
    }
    for (i=3;i<=N;i++)
    {
        if(mas[i]>mas[i+1])
        {
            if(mas[i+1]<min)
            {
                min=mas[i+1];
            }
        }
        if (mas[i]<mas[i+1])
        {
            if (mas[i]<min)
            {
                min=mas[i];
            }
        }
    }
    max=mas[1];
    for(i=N;i>0;i--)
    {
         if (max>mas[i])
         {
             continue;
         }
         if(mas[i]>mas[i-1])
         {
             max=mas[i];
         }
    }
    printf("Минимальное значение: %d\nМаксимальное значение: %d",min,max);
    return 0;
}

Решение задачи: «Разбить отрезок на 5 диапазонов значений по росту и подсчитать частоту попаданий элементов массива в каждой из этих диапазонов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
#define steps 5
 
int *CreateArray (int N)
{   int *res = (int*) malloc (N * sizeof(int));
    for (int i = 0; i<N; i++)
        res[i] = rand() % 100 - 50;
 
    return res;
}
 
void DestroyArray (int *arr)
{   free (arr);
}
 
void PrintArray (int *arr, int N)
{   for (int i = 0; i<N; i++)
        printf("%5d", arr[i]);
    printf("\n\n");
}
 
void SortArray (int *arr, int N)
{   int i,j,temp;
    for (i = 0; i<N ; i++)
        for (j = 0; j<N; j++)
            if (arr[j]>arr[i])
            {   temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
}
 
void IntervalDistribution (int *arr, int N)
{   int h, x0, x1, ni, i, interval = 1;
    h = ceil (1.*(arr[N-1]-arr[0] + 1) / steps);
 
    printf("i\t[Xi-1; Xi)\tNi\n");
    printf("==============================\n");
 
    x0 = arr[0];
    i = -1;
    while (x0 <= arr[N-1])
    {   x1 = x0 + h;
        ni = 0;
        while (arr[++i] < x1 && i<N)
            ni++;
        printf ("%3d\t[%5d; %5d)\t %5d\n",interval++, x0, x1, ni);
        x0 = x1;
        --i;
    }
}
 
int main()
{   int N, *arr;
    srand((unsigned int) time (NULL));
    
    printf("N = ");
    scanf("%d", &N);
    fflush(stdin);
 
    arr = CreateArray (N);
    printf("Array created:\n");
    PrintArray (arr, N);
    
    SortArray (arr, N);
    printf("Array sorted:\n");
    PrintArray (arr, N);
 
    printf("Interval distribution:\n");
    IntervalDistribution (arr, N);
 
    DestroyArray (arr);
    getchar();
    return 0;
}

Объяснение кода листинга программы

  1. Создание массива случайных целых чисел от -50 до 50 с помощью функции CreateArray.
  2. Вывод массива на экран с помощью функции PrintArray.
  3. Сортировка массива по возрастанию с помощью функции SortArray.
  4. Вывод отсортированного массива на экран с помощью функции PrintArray.
  5. Разбиение массива на интервалы с помощью функции IntervalDistribution.
  6. Вывод интервалов и количества попаданий в каждый из них на экран.
  7. Освобождение памяти, выделенной под массив, с помощью функции DestroyArray.
  8. Ввод N числа (количество элементов в массиве).
  9. Использование стандартной библиотеки для генерации случайных чисел (time.h), математических функций (math.h) и работы со строками (stdio.h).
  10. Объявление константы steps, которая определяет количество интервалов для разбивки массива.
  11. Использование функции ceil для округления вверх значения (1.*(arr[N-1]-arr[0] + 1) / steps) и получения h.
  12. Использование цикла while для прохода по всем интервалам от x0 до x1.
  13. Внутри цикла использование вложенного цикла while для подсчета количества элементов в каждом интервале.
  14. Вывод на экран интервала, его границ и количества элементов в нем.
  15. Переход к следующему интервалу путем изменения значений x0 и i.
  16. В конце программы используется функция getchar для исключения возможных символов в буфере ввода и возврата управления с помощью оператора return.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы