Найти 2 первых элемента в массиве, значения которых не попадают в заданный с клавиатуры диапазон - C (СИ)
Формулировка задачи:
Доброй ночи.
Помогите с программой на работу с массивом.
Найти 2 первых элемента в массиве С (17), значения которых не попадают в заданный с клавиатуры диапазон [A, B]. Поменять их местами.
Решение задачи: «Найти 2 первых элемента в массиве, значения которых не попадают в заданный с клавиатуры диапазон»
textual
Листинг программы
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int first_not_in_range(const int* p, const size_t size, int min, int max)
{
size_t i = 0;
for (i = 0; i < size; i++)
if (!(min <= p[i] && p[i] <= max))
return i;
return -1;
}
void swap(int *p1, int* p2)
{
int buf = *p1;
*p1 = *p2;
*p2 = buf;
}
#define SIZE 17
void print(const int* p, size_t size)
{
while (size--)
printf("%d ", *p++);
putchar('\n');
}
int main(void)
{
int a = 0,
b = 0,
c[SIZE],
first = 0,
second = 0,
i = 0;
srand(time(0));
for (i = 0; i < SIZE; i++)
c[i] = rand() % 20;
print(c, SIZE);
printf(">");
if (scanf("%d %d", &a, &b) == 2)
{
first = first_not_in_range(c, SIZE, a, b);
if (first != -1)
{
second = first_not_in_range(c + a + 1, SIZE - a - 1, a, b);
if (second != -1)
{
swap(c + first, c + second + first + 1);
print(c, SIZE);
}
else
{
puts("Second element not in range not found");
}
}
else
{
puts("First element not in range not found");
}
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию
first_not_in_range, которая возвращает индекс первого элемента в массиве, значение которого не попадает в заданный диапазон - Определяем функцию
swap, которая меняет местами два элемента в массиве - Задаём размер массива
SIZEи инициализируем переменныеa,b,c,first,secondиi - Заполняем массив
cслучайными значениями от 0 до 19 - Выводим заполненный массив на экран
- Запрашиваем у пользователя два числа
aиbдля определения диапазона - Если пользователь ввёл корректные числа, то ищем первый элемент в массиве, значение которого не попадает в заданный диапазон и сохраняем его индекс в переменную
first - Если такой элемент найден, то ищем второй элемент в массиве, значение которого не попадает в заданный диапазон и сохраняем его индекс в переменную
second - Если такой элемент найден, то меняем местами элементы в массиве
cс помощью функцииswap - Выводим измененный массив на экран
- Если второй элемент не найден, то выводим сообщение об ошибке на экран
- Возвращаем код выполнения программы, равный 0