Programa C para invertir una matriz usando punteros

Programa C para invertir una matriz usando punteros

Escriba un programa en C para ingresar elementos en una matriz e invierta la matriz usando punteros. Cómo invertir una matriz usando punteros en programación C. Lógica para invertir una matriz usando punteros en C.

Ejemplo

Entrada

Input array elements: 10 20 30 40 50 60 70 80 90 100

Salida

Reversed array: 100 90 80 70 60 50 40 30 20 10

Conocimiento requerido

Programación básica en C, matrices, punteros, aritmética de punteros, punteros y matrices

Lógica para invertir la matriz usando punteros

En publicaciones anteriores aprendimos a invertir una matriz sin puntero. Aquí aprenderemos a invertir la matriz usando punteros.

A continuación se muestra la lógica descriptiva paso a paso para invertir la matriz usando punteros.

  1. Ingrese el tamaño y los elementos de la matriz, guárdelo en alguna variable, digamos size y arr .
  2. Inicialice un puntero al primer elemento de la matriz, digamos * left = arr .
  3. Inicialice otro puntero al último elemento de la matriz, digamos * right = (arr + size - 1) .
  4. Para invertir la matriz, estoy usando dos punteros, uno del lado izquierdo de la matriz y otro del lado derecho. Intercambiaremos cada elemento sucesivo de izquierda a derecha hasta el elemento central.

    He usado el operador XOR bit a bit para intercambiar dos elementos sucesivos de la matriz. Para intercambiar dos elementos, realice

    *left    ^= *right;
    *right   ^= *left;
    *left    ^= *right;
  5. Incrementar el puntero izquierdo y disminuir el puntero derecho en 1.
  6. Repita los pasos 4 y 5 hasta (left < right) .

Programa para invertir una matriz usando punteros

/**
 * C program to reverse an array using pointers
 */

#include <stdio.h>

#define MAX_SIZE 100

/* Function declaration */
void printArr(int *arr, int size);


int main()
{
    int arr[MAX_SIZE];
    int size;
    int *left = arr;  // Pointer to arr[0]
    int *right;


    // Input size of array
    printf("Enter size of array: ");
    scanf("%d", &size);

    right = &arr[size - 1];  // Pointer to arr[size - 1]

    /*
     * Input elements in array
     */
    printf("Enter elements in array: ");
    while(left <= right)
    {
        scanf("%d", left++);
    }


    printf("\nArray before reverse: ");
    printArr(arr, size);


    // Make sure that left points to arr[0]
    left = arr;


    // Loop to reverse array
    while(left < right) 
    {
        /*
         * Swap element from left of array to right of array.
         */
        *left    ^= *right;
        *right   ^= *left;
        *left    ^= *right;

        // Increment left array pointer and decrement right array pointer
        left++;
        right--;
    }


    printf("\nArray after reverse: ");
    printArr(arr, size);


    return 0;
}



/**
 * Function to print array using pointer.
 *
 * @arr     Pointer to array.
 * @size    Size of the array.
 */
void printArr(int * arr, int size)
{
    // Pointer to arr[size - 1]
    int * arrEnd = (arr + size - 1);

    /* Loop till last array element */
    while(arr <= arrEnd)
    {
        printf("%d, ", *arr);

        // Move pointer to next array element.
        arr++;
    }
}

Salida

Enter size of array: 10
Enter elements in array: 10 20 30 40 50 60 70 80 90 100

Array before reverse: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
Array after reverse: 100, 90, 80, 70, 60, 50, 40, 30, 20, 10,

Publicaciones recomendadas

  • Índice de ejercicios de programación de matrices y arreglos.
  • Programa en C para intercambiar dos números usando punteros.
  • Programa en C para ingresar y mostrar una matriz usando punteros.
  • Programa en C para copiar un arreglo a otro usando punteros.
  • Programa en C para intercambiar dos arreglos usando punteros.