Parte 1: Fazer uma função que recebe um vetor V de elementos reais, sua dimensão N e retorne o mesmo vetor V ordenado.
Parte 2: Fazer uma função que recebe um determinado valor inteiro N e retorne um valor inteiro igual a 1 se N for par e será igual a zero se N for impar.
Parte 3: Fazer uma função que recebe um vetor V de elementos reais, sua dimensão N e retorne a média aritmética dos elementos do vetor.
Parte 4: Escrever um programa que leia um vetor de elementos reais de dimensão
, utilizando os subprogramas acima, gere e exiba a mediana dos elementos do vetor. A mediana é definida da seguinte maneira:
- para N impar, a mediana é definida como o valor central do vetor ordenado
- para N par, a mediana é definida como a média aritmética dos dois elementos centrais do vetor ordenado
Parte 3: Fazer uma função que recebe um vetor V de elementos reais, sua dimensão N e retorne a média aritmética dos elementos do vetor.
Passo 1
Vamos implementar o exercício em quatro subprogramas e depois montar o programa principal para calcular a mediana de um vetor.
Passo 2
Primeiro, criamos a função de teste de paridade. Ela recebe um inteiro N e retorna 1 se N for par e 0 caso contrário. Em C isso fica simples usando o operador módulo.
Passo 3
Em seguida, fazemos a função de média aritmética. Ela recebe um vetor V de reais e sua dimensão N, soma todos os elementos e divide o total por N, retornando um double.
Passo 4
Depois, implementamos a função de ordenação. Podemos usar um algoritmo simples, como o bubble sort, já que N ≤ 50. Essa função recebe o vetor V e sua dimensão N e rearranja os elementos em ordem crescente.
Passo 5
Por fim, no programa principal, lemos N e o vetor V, chamamos a ordenação, verificamos se N é par ou ímpar com is_even, e então calculamos a mediana: se N for ímpar pegamos o elemento central, se for par fazemos a média dos dois do meio usando a função average. Por fim, exibimos o resultado.
Resposta
#include <stdio.h>
// Parte 2: retorna 1 se N for par, 0 se N for ímpar
int is_even(int N) {
return (N % 2 == 0) ? 1 : 0;
}
int is_even(int N) {
return (N % 2 == 0) ? 1 : 0;
}
// Parte 3: calcula a média aritmética de um vetor de N elementos
double average(double V[], int N) {
double sum = 0.0;
for (int i = 0; i < N; i++) {
sum += V[i];
}
return sum / N;
}
double average(double V[], int N) {
double sum = 0.0;
for (int i = 0; i < N; i++) {
sum += V[i];
}
return sum / N;
}
// Parte 1: ordena o vetor V de dimensão N (bubble sort)
void sort_array(double V[], int N) {
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1 - i; j++) {
if (V[j] > V[j + 1]) {
double temp = V[j];
V[j] = V[j + 1];
V[j + 1] = temp;
}
}
}
}
void sort_array(double V[], int N) {
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1 - i; j++) {
if (V[j] > V[j + 1]) {
double temp = V[j];
V[j] = V[j + 1];
V[j + 1] = temp;
}
}
}
}
int main() {
int N;
double V[50];
int N;
double V[50];
// Leitura de N
printf("Digite o número de elementos N (<=50): ");
scanf("%d", &N);
// Leitura do vetor
printf("Digite os %d elementos do vetor:\n", N);
for (int i = 0; i < N; i++) {
scanf("%lf", &V[i]);
}
// Ordena o vetor
sort_array(V, N);
// Calcula a mediana
double median;
if (is_even(N)) {
// N par: média dos dois valores centrais
double middle_vals[2] = { V[N/2 - 1], V[N/2] };
median = average(middle_vals, 2);
} else {
// N ímpar: valor central
median = V[N/2];
}
// Exibe a mediana
printf("Mediana = %.4f\n", median);
return 0;
}