Функция, проверяющая, является ли заданная последовательность чисел симметричной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Составить функцию, которая для одномерного массива целых чисел проверяет, является ли заданная последовательность чисел симметричной. В случае симметричности функция должна возвращать значение истина, в противном случае - ложь. С помощью составленной функции определить в матрице Х(k,m), k<= 12, m<=14 все строки, являющиеся симметричными, и переписать их без пропусков в новую матрицу. Прогу через функции надо.

Решение задачи: «Функция, проверяющая, является ли заданная последовательность чисел симметричной»

textual
Листинг программы
#include <stdio.h>
#define K 12
#define M 14
 
int control(int arr[], int size)
{
    int n1, n2;
    n1 = 0;
    n2 = size - 1;
    while (n1 < n2) {
        if (arr[n1] != arr[n2])
            return 0;
        ++n1;
        --n2;
    }
    return 1;
}
 
int main(void)
{
    int arr[K][M] = { {1,2,3,4,5,6,7,7,6,5,4,3,2,1},
                      {0,9,8,7,6,5,4,3,2,2,2,1,1,1},
                      {7,6,5,4,3,2,1,1,2,3,4,5,6,7},
                      {1,2,3,4,5,6,7,8,9,0,1,2,3,4},
                      {1,1,1,1,2,2,2,2,2,2,2,1,1,1},
                      {1,2,3,4,5,6,7,1,2,3,4,5,6,7},
                      {1,3,2,4,5,7,6,6,7,5,4,2,3,1},
                      {3,3,3,2,2,1,1,3,3,3,2,2,1,1},
                      {5,5,5,5,5,5,5,5,3,5,5,5,5,5},
                      {1,2,3,4,5,6,7,6,6,5,4,3,2,1},
                      {7,1,6,2,5,3,4,4,3,5,2,6,1,7},
                      {0,0,0,0,0,0,1,2,0,0,0,0,0,0} };
    
    int i = 0;
    int n = 0;
    while (i < K)
        if (control(arr[i++], M))
            ++n;
 
    int arr2[n][M];
    int j = 0;
    int k;
    i = 0;
    while (i < K) {
        if (control(arr[i], M)) {
            k = 0;
            while (k < M) 
                arr2[j][k] = arr[i][k++];
            ++j;
        }
        ++i;
    }
    
    puts("------------------------------");
    i = 0;
    while (i < n) {
        j = 0;
        while(j < M)
            printf("%i ", arr2[i][j++]);
        putchar('\n');
        ++i;
    }
    
    return 0;
}

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

В этом коде реализована функция, которая проверяет, является ли заданная последовательность чисел симметричной. Для этого используется алгоритм, который сравнивает элементы последовательности с их зеркальными отражениями. Если последовательность симметрична, то все пары элементов равны. Код начинается с объявления двух массивов: массива K размера M и массива M размера N. Затем в цикле заполняется второй массив, путем копирования элементов из первого массива, если они присутствуют в обоих массивах. Далее идет проверка на симметрию. Если элементы не равны, то возвращается 0, иначе функция продолжает работу. Затем идет вывод на экран полученного результата.

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


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

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

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