Escrever uma função void inverter(int w[], int n), que recebe como parâmetros um vetor ordenado em ordem crescente (w) e seu tamanho (n) e retorna o vetor w ordenado em ordem decrescente. Escrever um programa que: lê o valor de n, gera um vetor v aleatoriamente, usa a função ordenar do exercício 2 para obter o vetor w, usa a função inverter e mostra o vetor w finalmente obtido.

Passo 1

O enunciado pede para criar uma função void inverter(int w[], int n) que, dado um vetor w já ordenado em ordem crescente, inverta essa ordem para decrescente. Depois, escrever um programa em C que leia o tamanho n, gere um vetor v com valores aleatórios, use uma função ordenar (do exercício 2) para obter o vetor w em ordem crescente, chame inverter para virar w de cabeça para baixo e mostre o resultado.

Passo 2

Antes de qualquer coisa, vamos implementar inverter. A ideia é simples: para cada i de 0 até n/2–1, trocamos w[i] com w[n–1–i]. Assim acabamos espelhando o vetor.

Passo 3

Precisamos também da função ordenar do exercício 2. Como o enunciado não detalha, vamos usar uma versão típica de bubble sort: percorremos o vetor diversas vezes, trocando pares fora de ordem até tudo ficar crescente.

Passo 4

No main, primeiro lemos n do usuário e alocamos dinamicamente v. Usamos srand(time(NULL)) e rand() para preencher v com valores aleatórios. Depois copiamos v em w, chamamos ordenar(w,n) e em seguida inverter(w,n). Por fim imprimimos w já em ordem decrescente e liberamos a memória.

Resposta

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void ordenar(int w[], int n) {
int i, j, temp;
// Bubble sort simples para deixar em ordem crescente
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (w[j] > w[j+1]) {
temp = w[j];
w[j] = w[j+1];
w[j+1] = temp;
}
}
}
}
void inverter(int w[], int n) {
int i, temp;
// Troca simétrica: ponta a ponta
for (i = 0; i < n/2; i++) {
temp = w[i];
w[i] = w[n-1-i];
w[n-1-i] = temp;
}
}
int main() {
int n, i;
printf(“Digite o tamanho do vetor: “);
if (scanf(”%d”, &n) != 1 || n <= 0) {
printf(“Tamanho inválido.\n”);
return 1;
}
int *v = malloc(n * sizeof(int));
if (!v) return 1;

srand((unsigned) time(NULL));
for (i = 0; i < n; i++) {
    v[i] = rand() % 100;  // valores entre 0 e 99
}

int *w = malloc(n * sizeof(int));
if (!w) {
    free(v);
    return 1;
}
for (i = 0; i < n; i++) {
    w[i] = v[i];
}

ordenar(w, n);
inverter(w, n);

printf("Vetor final em ordem decrescente:\n");
for (i = 0; i < n; i++) {
    printf("%d ", w[i]);
}
printf("\n");

free(v);
free(w);
return 0;
}

Exercícios relacionados