Parte 1: Elabore uma função que recebe um vetor
de elementos inteiros de
dimensão
e altere esse vetor da seguinte maneira:
- os elementos iguais a zero são eliminados
- os elementos negativos são substituídos pelo seu correspondente positivo.
Parte 2: Escreva um programa que, utilizando a função anterior, lê diversos vetores fornecidos pelo usuário e retorna os vetores modificados. Criar um critério de parada, para quando o usuário não quiser continuar.
dimensão
Parte 2: Escreva um programa que, utilizando a função anterior, lê diversos vetores fornecidos pelo usuário e retorna os vetores modificados. Criar um critério de parada, para quando o usuário não quiser continuar.
Passo 1
Primeiro, vamos resumir o que o exercício pede, indicar o conteúdo envolvido e o que precisamos para resolver.
Passo 2
Precisamos criar uma função que processe um vetor de inteiros de tamanho N (N ≤ 50) de modo que todos os zeros sejam eliminados e todos os negativos virem positivos. Para isso, usaremos operações de iteração e manipulação de arrays em C.
Passo 3
Na implementação da função processVector, vamos varrer o vetor original, copiar apenas os valores não nulos para o início de um mesmo array e, quando encontrarmos negativos, usar a função abs() para torná-los positivos. Manteremos um índice de gravação que também definirá o novo tamanho do vetor.
Passo 4
No programa principal (main), montaremos um laço que leia o tamanho e os elementos do vetor, chame processVector, mostre o vetor resultante e, em seguida, pergunte ao usuário se ele deseja continuar ou parar. O critério de parada será a resposta do usuário (por exemplo, ‘N’ ou ‘n’).
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#define MAX_N 50
// Função que elimina zeros e transforma negativos em positivos
void processVector(int V[], int *N) {
int i, j = 0;
for (i = 0; i < *N; i++) {
if (V[i] != 0) {
V[j++] = abs(V[i]);
}
}
*N = j; // Atualiza o tamanho para o número de elementos válidos
}
void processVector(int V[], int *N) {
int i, j = 0;
for (i = 0; i < *N; i++) {
if (V[i] != 0) {
V[j++] = abs(V[i]);
}
}
*N = j; // Atualiza o tamanho para o número de elementos válidos
}
int main() {
int V[MAX_N];
int N;
char opc;
int V[MAX_N];
int N;
char opc;
do {
// Leitura do tamanho do vetor
printf("Digite o numero de elementos do vetor (max %d): ", MAX_N);
scanf("%d", &N);
if (N < 0 || N > MAX_N) {
printf("Tamanho invalido. Tente novamente.\n");
continue;
}
// Leitura dos elementos
printf("Digite %d elementos (podem ser negativos, zeros ou positivos):\n", N);
for (int i = 0; i < N; i++) {
scanf("%d", &V[i]);
}
// Chama a função que processa o vetor
processVector(V, &N);
// Exibe o vetor modificado
printf("Vetor modificado (sem zeros, negativos viraram positivos):\n");
for (int i = 0; i < N; i++) {
printf("%d ", V[i]);
}
printf("\n");
// Pergunta se o usuário quer continuar
printf("Deseja processar outro vetor? (S/N): ");
scanf(" %c", &opc);
} while (opc == 'S' || opc == 's');
printf("Programa encerrado.\n");
return 0;
}