Каждый i-ый элемент массива заменить минимальным среди первых i элементов - C (СИ)

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

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

Каждый из элементов ti массива T(m) заменить минимальным среди первых i элементов этого массива. Для m>=4 предусмотреть заполнение массива случайными числами из диапазона –10 до 10.

Решение задачи: «Каждый i-ый элемент массива заменить минимальным среди первых i элементов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
int int_cmp(const void* a, const void* b)
{
  return ((*(int*)a) < (*(int*)b));
}
 
void* min_element(const void* first, const void* last, const size_t element_size,
  int (*compare)(const void*, const void*))
{
  void* min = (void*)first;
  
  while (first != last)
  {
    if (compare(first, min)) min = (void*)first;
    first = (unsigned char*)first + element_size;
  }
  
  return min;
}
 
void fill(void* first, const void* last, const size_t element_size, const void* const value)
{
  while (first != last)
  {
    memcpy(first, value, element_size);
    first = (unsigned char*)first + element_size;
  }
}
 
int main(void)
{
  int m;
  scanf("%d", &m);
  
  int a[m];
  if (m >= 4)
  {
    srand(time(NULL));
    for (int i = 0; i < m; i++) a[i] = rand() % 21 - 10;
  }
  else
  {
    for (int i = 0; i < m; i++) scanf("%d", &a[i]);
  }
  
  printf("Array:\n");
  for (int i = 0; i < m; i++) printf("%3d ", a[i]);
  printf("\n");
  
  int first_i;
  scanf("%d", &first_i);
  
  fill(&a[0], &a[m], sizeof(int), min_element(&a[0], &a[first_i], sizeof(int), int_cmp));
  
  printf("Array:\n");
  for (int i = 0; i < m; i++) printf("%3d ", a[i]);
  printf("\n");
  
  return 0;
}

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

В этом коде выполняется следующая последовательность действий:

  1. Ввод начального значения массива: Изначально в основной функции main программа запрашивает у пользователя размер массива m. Затем, в зависимости от размера массива, программа либо генерирует случайные значения для элементов массива, либо просит пользователя ввести значения вручную. После этого выводится начальный массив.
  2. Поиск минимального элемента: Программа запрашивает у пользователя номер первого элемента, который будет использоваться для поиска минимального элемента. Функция min_element ищет минимальный элемент в заданном диапазоне массива, используя функцию сравнения int_cmp.
  3. Замена элементов массива: С помощью функции fill найденное минимальное значение заменяется на все элементы массива, начиная с указанного пользователем первого элемента.
  4. Вывод измененного массива: После замены элементов программа выводит измененный массив. Примечание: В данном коде не учитывается случай, когда первый элемент, который необходимо заменить, является минимальным элементом всего массива.

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

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