Разбить отрезок на 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; }
Объяснение кода листинга программы
- Создание массива случайных целых чисел от -50 до 50 с помощью функции CreateArray.
- Вывод массива на экран с помощью функции PrintArray.
- Сортировка массива по возрастанию с помощью функции SortArray.
- Вывод отсортированного массива на экран с помощью функции PrintArray.
- Разбиение массива на интервалы с помощью функции IntervalDistribution.
- Вывод интервалов и количества попаданий в каждый из них на экран.
- Освобождение памяти, выделенной под массив, с помощью функции DestroyArray.
- Ввод N числа (количество элементов в массиве).
- Использование стандартной библиотеки для генерации случайных чисел (time.h), математических функций (math.h) и работы со строками (stdio.h).
- Объявление константы steps, которая определяет количество интервалов для разбивки массива.
- Использование функции ceil для округления вверх значения (1.*(arr[N-1]-arr[0] + 1) / steps) и получения h.
- Использование цикла while для прохода по всем интервалам от x0 до x1.
- Внутри цикла использование вложенного цикла while для подсчета количества элементов в каждом интервале.
- Вывод на экран интервала, его границ и количества элементов в нем.
- Переход к следующему интервалу путем изменения значений x0 и i.
- В конце программы используется функция getchar для исключения возможных символов в буфере ввода и возврата управления с помощью оператора return.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д