Изменить порядок следования элементов массива на обратный - 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;
}

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

  1. Функция AskSizeOfArray() запрашивает у пользователя размер массива в элементах, используя цикл while, который выполняется до тех пор, пока пользователь не введет значение в диапазоне от 3 до 10.
  2. Функция AskElementsOfArray() запрашивает у пользователя значения элементов массива, используя цикл while, который выполняется столько раз, сколько указано в переменной nArray.
  3. Функция PrintArray() выводит значения элементов массива на экран, используя цикл while, который выполняется столько раз, сколько указано в переменной nArray.
  4. Функция FindElement() ищет в массиве элемент, равный переданному значению, используя цикл for и оператор сравнения.
  5. Функция Swap() меняет местами два указателя на float.
  6. Функция Reverse() меняет порядок следования элементов массива, используя два вложенных цикла for и функцию Swap().
  7. В функции main() создается массив array[10], и его размер определяется с помощью функции AskSizeOfArray().
  8. Вводится значение элемента массива, которое будет использоваться в качестве разделителя.
  9. Используя функцию FindElement(), в массиве array[] находится элемент, равный переданному значению.
  10. Если такой элемент найден, с помощью функции Reverse() изменяется порядок следования элементов массива до и после найденного элемента.
  11. Результат выводится на экран с помощью функции PrintArray().
  12. Если элемент не найден, выводится сообщение об ошибке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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