Изменить порядок следования элементов массива на обратный - C (СИ)
Формулировка задачи:
Массив заданного размера N (от 3 до 10) ввести произвольные числа (вещественные по значению). Изменить порядок следования элементов массива на обратный, отдельно до и после R-го элемента (R вводится, по значению, больше 0). Напечатать модифицированный массив. При вводе данных осуществить проверку.
Решение задачи: «Изменить порядок следования элементов массива на обратный»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> //----------------------------------------------------------------------------- size_t AskSizeOfArray() { size_t nArray = 0; while ((nArray < 3) || (10 < nArray)) { printf("count elements [3..10]: "); scanf("%d", &nArray); } return nArray; } //----------------------------------------------------------------------------- float* AskElementsOfArray(float array[], size_t nArray) { float* head = array; printf("%d elements: ", nArray); while (nArray--) { scanf("%f", array++); } return head; } //----------------------------------------------------------------------------- void PrintArray(float array[], size_t nArray) { while (nArray--) { printf("%.3f", *array++); if (nArray) { printf(", "); } } printf("\n"); } //----------------------------------------------------------------------------- float* FindElement(float array[], size_t nArray, float value) { for (; nArray && (*array != value); --nArray, ++array) { ; } return (*array == value) ? array : NULL; } //----------------------------------------------------------------------------- void Swap(float* a, float* b) { float tmp = *a; *a = *b; *b = tmp; } //----------------------------------------------------------------------------- void Reverse(float begin[], float end[]) { for (; begin < end; ++begin, --end) { Swap(begin, end); } } //----------------------------------------------------------------------------- int main() { float array[10]; size_t nArray = AskSizeOfArray(); AskElementsOfArray(array, nArray); printf("source: "); PrintArray(array, nArray); printf("separator: "); float separator; scanf("%f", &separator); float* finded = FindElement(array, nArray, separator); if (finded) { Reverse(array, finded - 1); Reverse(finded + 1, array + nArray - 1); printf("result = "); PrintArray(array, nArray); } else { printf("value %f not found ...\n", separator); } system("pause"); return 0; }
Объяснение кода листинга программы
- Функция AskSizeOfArray() запрашивает у пользователя размер массива в элементах, используя цикл while, который выполняется до тех пор, пока пользователь не введет значение в диапазоне от 3 до 10.
- Функция AskElementsOfArray() запрашивает у пользователя значения элементов массива, используя цикл while, который выполняется столько раз, сколько указано в переменной nArray.
- Функция PrintArray() выводит значения элементов массива на экран, используя цикл while, который выполняется столько раз, сколько указано в переменной nArray.
- Функция FindElement() ищет в массиве элемент, равный переданному значению, используя цикл for и оператор сравнения.
- Функция Swap() меняет местами два указателя на float.
- Функция Reverse() меняет порядок следования элементов массива, используя два вложенных цикла for и функцию Swap().
- В функции main() создается массив array[10], и его размер определяется с помощью функции AskSizeOfArray().
- Вводится значение элемента массива, которое будет использоваться в качестве разделителя.
- Используя функцию FindElement(), в массиве array[] находится элемент, равный переданному значению.
- Если такой элемент найден, с помощью функции Reverse() изменяется порядок следования элементов массива до и после найденного элемента.
- Результат выводится на экран с помощью функции PrintArray().
- Если элемент не найден, выводится сообщение об ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д