Can someone help me? I need to write a "reverse" function that reads the inverse of the vector using pointers. Example: typed 123, printed 321

Asked

Viewed 35 times

0

#include <stdio.h>
#include <stdlib.h>

void inverte (int *original, unsigned int qtd, int *invertido){
    
}

int main()
{
    int qtd;
    int v[100];
    int *n;
    qtd = 0;
    for (int i = 0; i < 100; i++)
    {
        printf("Digite um valor (-1 para parar): ");
        scanf("%d", &v[i]);
        if (v[i] == -1)
            break;
        qtd++;
    }

    inverte (v, qtd, &n);

    printf("Valores na ordem inversa\n");
    for (int i = 0; i < qtd; i++)
        printf("%d ", n[i]);

    return 0;
}

1 answer

0

With this implementation, the function returns the inverted vector:

#include <stdio.h>
#include <stdlib.h>

int *inverter(const int *vetor, size_t tamanho);

int main() {
    const int maximo = 10;
    int tamanho = 10;
    int vetor[maximo];
    int *inverso;

    // Inicializa o vetor: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for (int i = 0; i < maximo; ++i) {
        vetor[i] = i + 1;
    }

    inverso = inverter(vetor, tamanho);

    printf("[");

    for (int i = 0; i < tamanho; ++i) {
        printf("%d", inverso[i]);

        if (i + 1 < tamanho) {
            printf(", ");
        }
    }

    printf("] \n");
    return EXIT_SUCCESS;
}

int *inverter(const int *vetor, size_t tamanho) {
    int *resultado = (int *) malloc(tamanho * sizeof(int));

    for (int i = 0, j = (int) tamanho - 1; i < tamanho; ++i, --j) {
        resultado[i] = vetor[j];
    }

    return resultado;
}

If you don’t need to return an inverted vector, just rotate a loop backwards (starting with the size and decreasing to zero) in the original vector.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.