Каждый 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;
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Ввод начального значения массива:
Изначально в основной функции
mainпрограмма запрашивает у пользователя размер массиваm. Затем, в зависимости от размера массива, программа либо генерирует случайные значения для элементов массива, либо просит пользователя ввести значения вручную. После этого выводится начальный массив. - Поиск минимального элемента:
Программа запрашивает у пользователя номер первого элемента, который будет использоваться для поиска минимального элемента. Функция
min_elementищет минимальный элемент в заданном диапазоне массива, используя функцию сравненияint_cmp. - Замена элементов массива:
С помощью функции
fillнайденное минимальное значение заменяется на все элементы массива, начиная с указанного пользователем первого элемента. - Вывод измененного массива: После замены элементов программа выводит измененный массив. Примечание: В данном коде не учитывается случай, когда первый элемент, который необходимо заменить, является минимальным элементом всего массива.