Содать рандомный вектор и найти в нем число приближенное к числу введенному с консоли - C (СИ)
Формулировка задачи:
Добра всем, желательно через функцию
Решение задачи: «Содать рандомный вектор и найти в нем число приближенное к числу введенному с консоли»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
unsigned int N = 0;
int* a = NULL;
unsigned int i = 0;
int M = 0;
unsigned int closestI = 0;
srand(time(NULL));
printf("Enter number of elements in array (N):");
scanf("%u", &N);
a = malloc(N * sizeof(*a));
for(i = 0; i < N; i++)
{
a[i] = (rand() % 20) - 10;
printf("a[%u] = %d\n", i, a[i]);
}
printf("Enter number to search:");
scanf("%d", &M);
closestI = 0;
for(i = 1; i < N; i++)
{
if ((abs(M - a[i])) < (abs(M - a[closestI])))
{
closestI = i;
}
}
printf("Closest value found: a[%u] = %d", closestI, a[closestI]);
free(a);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем функцию main()
- Инициализируем переменные: N (количество элементов в массиве), a (указатель на массив), i (счетчик для цикла), M (число, которое нужно найти в массиве), closestI (индекс ближайшего числа)
- Задаем начальное значение для генератора случайных чисел
- Выводим сообщение и считываем количество элементов в массиве
- Выделяем память под массив
- Заполняем массив случайными числами от -10 до 10 с шагом 2
- Выводим заполненный массив
- Выводим сообщение и считываем число, которое нужно найти в массиве
- Инициализируем переменную closestI значением 0
- Проходим циклом по массиву, начиная с 1 элемента, т.к. closestI в начале равен 0
- Сравниваем разницу между искомым числом и текущим элементом массива и предыдущим closestI. Если текущая разница меньше, то обновляем значение closestI
- После прохода по всем элементам массива выводим индекс ближайшего числа и само число
- Освобождаем память, выделенную под массив
- Возвращаем 0, заканчивая работу функции main()