Exercício 15: Escrever um programa no qual o usuário fornece valores a e b e depois uma função geraV preenche um vetor V de dimensão 10 com valores aleatórios contidos no intervalo [a, b]. Uma função mostraV dever mostra os valores contidos em V. Depois uma função minV fornece o menor valor contido em V, outra função maxV fornece o maior valor contido em V e meanV fornece a média aritmética dos elementos contidos em V. Finalmente uma função histV fornece um histograma com 10 categorias (a primeira categoria contabiliza todos os valores no intervalo [a, (a+(b+a)/10)], por exemplo).
Passo 1
Resumo do enunciado e conteúdo: o programa deve ler dois valores reais a e b, preencher um vetor V de tamanho 10 com valores aleatórios em [a,b], depois mostrar o vetor, calcular mínimo, máximo, média e gerar um histograma de 10 categorias. Vamos usar vetores, loops, geração de números aleatórios e funções em C.
Passo 2
Geração de valores aleatórios em [a,b]: usar rand() que produz inteiro de 0 até RAND_MAX. A fórmula para converter em double em [a,b] é
Isso distribui uniformemente no intervalo.
Passo 3
Implementar geraV: recebe V[], tamanho n, limites a e b; inicializa srand( ) no main e em geraV faz loop de 0 a n-1 atribuindo cada V[i] pela fórmula acima.
Passo 4
Implementar mostraV: recebe V[] e n; faz loop de 0 a n-1 e dá printf de cada elemento, por exemplo com “%.2f” para duas casas.
Passo 5
Implementar minV e maxV: ambas recebem V[] e n; inicializam uma variável com V[0] e, em loop de 1 a n-1, atualizam se encontrarem valor menor ou maior, retornando ao final.
Passo 6
Implementar meanV: recebe V[] e n; soma todos os elementos em double soma e retorna soma / n.
Passo 7
Implementar histV: recebe V[], n, a e b; calcula largura de cada classe d = (b - a) / 10; cria array cont[10] zerado; para cada V[i] computa índice k = (int) ((V[i] - a) / d). Se k==10, faz k=9; incrementa cont[k]. Por fim, imprime cada categoria i de 0 a 9 mostrando intervalo e contagem.
Passo 8
Implementar main: lê a e b, declara V de tamanho 10, chama geraV, mostraV, imprime minV, maxV e meanV, depois histV.
Resposta
#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n\n#define N 10\n\nvoid geraV(double V[], int n, double a, double b) {\n for (int i = 0; i < n; i++) {\n V[i] = a + (b - a) * ((double) rand() / RAND_MAX);\n }\n}\n\nvoid mostraV(double V[], int n) {\n printf(“Vetor V:\n”);\n for (int i = 0; i < n; i++) {\n printf("%.2f “, V[i]);\n }\n printf(”\n");\n}\n\ndouble minV(double V[], int n) {\n double m = V[0];\n for (int i = 1; i < n; i++) {\n if (V[i] < m) m = V[i];\n }\n return m;\n}\n\ndouble maxV(double V[], int n) {\n double m = V[0];\n for (int i = 1; i < n; i++) {\n if (V[i] > m) m = V[i];\n }\n return m;\n}\n\ndouble meanV(double V[], int n) {\n double soma = 0.0;\n for (int i = 0; i < n; i++) soma += V[i];\n return soma / n;\n}\n\nvoid histV(double V[], int n, double a, double b) {\n int cont[10] = {0};\n double d = (b - a) / 10.0;\n for (int i = 0; i < n; i++) {\n int k = (int)((V[i] - a) / d);\n if (k < 0) k = 0;\n if (k > 9) k = 9;\n cont[k];\n }\n printf(“Histograma:\n”);\n for (int i = 0; i < 10; i) {\n double lim_inf = a + i * d;\n double lim_sup = lim_inf + d;\n printf("[% .2f, % .2f): %d\n", lim_inf, lim_sup, cont[i]);\n }\n}\n\nint main() {\n double a, b;\n double V[N];\n printf(“Digite o valor de a e b (a < b): “);\n if (scanf(”%lf %lf”, &a, &b) != 2 || a >= b) {\n printf(“Entrada invalida.\n”);\n return 1;\n }\n srand((unsigned) time(NULL));\n geraV(V, N, a, b);\n mostraV(V, N);\n printf(“Menor valor: %.2f\n”, minV(V, N));\n printf(“Maior valor: %.2f\n”, maxV(V, N));\n printf(“Media : %.2f\n”, meanV(V, N));\n histV(V, N, a, b);\n return 0;\n}