146 pág.

Pré-visualização | Página 33 de 50
o que foi citado na seção 5.1 a respeito da utilização de subprogramas: um subprograma é utilizado por outros subprogramas dentro de um mesmo programa. Cabe ressaltar também que existe uma outra medida de tendência central importante chamada mediana. Ela não foi incluída no exemplo pelo fato de que o seu cálculo fica facilitada se a tabela estiver ordenada e só discutiremos ordenação das componentes de um vetor num próximo capítulo. {Programa para determinar medidas estatisticas: media, amplitude, moda, desvio padrao} program MedidasEstatisticas; uses Crt; type TVetor = array [1 .. 500] of real; var Relacao : TVetor; Tam : integer; Opcao, OutraMedida, OutraRelacao : char; {Procedimento para geração de um menu de opcoes} procedure Menu; begin writeln(' 1-Media'); writeln(' 2-Amplitude'); writeln(' 3-Moda'); writeln(' 4-Desvio Padrao'); writeln(' Digite sua opcao: '); end; {Procedimento para armazenar uma relacao de números num vetor} procedure ArmazenaRelacao(var v : TVetor; var t : integer ); var i : integer; begin writeln('Digite os elementos da relacao (-1 para encerrar)'); t := 1; readln(v[t]); while (v[t] <> -1) do begin t := t + 1; readln(v[t]); end; t := t - 1; end; {Funcao para calcular a media de uma relacao de números armazenada num vetor} function Media(var v : TVetor; t : integer) : real; var i : integer; Soma : real; begin Soma := 0; for i := 1 to t do Soma := Soma + v[i]; Media := Soma/t; end; {Funcao que retorna o maior elemento de uma relacao armazenada num vetor e a sua posicao no vetor} function MaiorElemento(var v : TVetor; t: integer; var Pos: integer) : real; var i : integer; Maior : real; begin Maior := v[1]; Pos := 1; for i := 1 to t do if v[i] > Maior then begin Maior := v[i]; Pos := i end; MaiorElemento := Maior; end; {Funcao que retorna o menor elemento de uma relacao armazenada num vetor} function MenorElemento(var v : TVetor; t : integer) : real; var i : integer; Menor : real; begin Menor := v[1]; for i := 1 to t do if v[i] < Menor then Menor := v[i]; MenorElemento := Menor; end; {Funcao que determina a amplitude de uma relacao armazenada num vetor} function Amplitude(var v : TVetor; t : integer) : real; var p : integer; Maior, Menor : real; begin Maior := MaiorElemento(v, t, p); Menor := MenorElemento(v, t); Amplitude := Maior - Menor; end; {Funcao que retorna a moda de uma relacao armazenada num vetor} function Moda(var v : TVetor; t : integer) : real; var Frequencia : TVetor; i, j, p : integer; begin for i := 1 to t do begin Frequencia[i] := 0; for j := i to t do if v[j] = v[i] then Frequencia[i] := Frequencia[i] + 1; end; MaiorElemento(Frequencia, t, p); Moda := v[p]; end; {Funcao para o calculo do desvio padrao} function DesvioPadrao(var v : TVetor; t : integer): real; var d : TVetor; i : integer; m : real; begin m := Media(v, t); {Determinacao dos quadrados dos desvios} for i := 1 to t do d[i] := Sqr(v[i] - M); DesvioPadrao := SqrT(Media(d, t)); end; {Programa principal} begin repeat ArmazenaRelacao(Relacao, Tam); repeat Menu; readln(Opcao); Case Opcao of '1' : writeln('Media : ', Media(Relacao, Tam)); '2' : writeln('Amplitude : ', Amplitude(Relacao, Tam)); ´3' : writeln('Moda : ', Moda(Relacao, Tam)); '4' : writeln('Desvio Padrao : ', DesvioPadrao(Relacao, Tam)); end; Delay(1000); write('Outra medida (S/N)? '); readln(OutraMedida); until UpCase(OutraMedida) = 'N'; write('Analisa outra relacao (S/N)? '); readln(OutraRelacao); until UpCase(OutraRelacao) = 'N'; end. 6.9 Exercícios propostos 1. Escreva um procedimento que exiba as componentes de um vetor na ordem inversa daquela em que foram armazenadas. 2. Um vetor é palíndromo se ele não se altera quando as posições da componentes são invertidas. Por exemplo, o vetor v = {1, 3, 5, 2, 2, 5, 3, 1} é palíndromo. Escreva uma função que verifique se um vetor é palíndromo. 3. Escreva um procedimento que, recebendo dois vetores com a mesma quantidade de elementos, gere um outro vetor intercalando as componentes dos vetores dados. Por exemplo, se v1 = {4, 8, 1, 9} e v2 = {2, 5, 7, 3} o procedimento deve gerar o vetor v = {4, 2, 8, 5, 1, 7, 9, 3}. 4. Escreva um procedimento que decomponha um vetor de inteiros em dois outros vetores, um contendo as componentes de valor ímpar e o outro contendo as componentes de valor par. Por exemplo, se o vetor dado for v = {3, 5, 6, 8, 1, 4, 2, 3, 7} o procedimento deve gerar os vetores u = {3, 5, 1, 3, 7} e w = {6, 8, 4, 2}. 5. Um vetor do Rn é uma n-upla de números reais v = {x1, x2, ..., xn}, sendo cada xi chamado de componente. A norma de um vetor v = {x1, x2, ..., xn} é definida por x x xn1 2 2 2 2+ + +... . Escreva uma função que receba um vetor do Rn, n dado, e forneça sua norma. 6. O produto escalar de dois vetores do Rn é a soma dos produtos das componentes correspondentes, isto é, se u = {x1, x2, ..., xn} e v = {y1, y2, ..., yn}, o produto escalar é x1.y1 + x2.y2 ... + xn.yn. Escreva uma função que receba dois vetores do Rn, n dado, e forneça o produto escalar deles. 7. Escreva um procedimento que forneça as componentes distintas de um vetor dado. Por exemplo, se o vetor dado for v = {3, 2, 1, 3, 4, 1, 5, 5, 2}, o procedimento deve fornecer v = {3, 2, 1, 4, 5}. 8. O exemplo 2 da seção 2.9 pedia uma função para extrair o algarismo da casa das unidades de um inteiro dado. Aparentemente esta questão não tem interesse prático. Vejamos um problema cuja solução dependa desta questão. Algumas empresas que realizam sorteios de prêmios entre seus clientes o fazem através dos sorteios da loteria federal, sendo ganhador o número formado pelos algarismos das casas das unidades dos números sorteados no cinco prêmios da referida loteria. Por exemplo, se o sorteio da loteria federal deu como resultado os números 23451, 00234, 11236, 01235 e 23452, o prêmio da tal empresa seria dado ao cliente que possuísse o bilhete de número 14652. Escreva uma função que receba os números sorteados pela loteria federal e forneça o número que ganhará o prêmio de acordo com as regras acima. 9. Escreva um procedimento que insira um valor dado num vetor numa posição dada. Por exemplo, se o vetor for v = {3, 8, 5, 9, 12, 3}, o valor dado for 10 e a posição dada for 4, o procedimento deve gerar v = {3, 8, 5, 10, 9, 12, 3}. 10. Escreva um procedimento que insira um valor dado num vetor ordenado de modo que o vetor continue ordenado. Por exemplo, se o vetor dado for v = {2, 5, 7, 10, 12, 13} e o valor dado for 6, o procedimento deve fornecer o vetor v = {2, 5, 6, 7, 10, 12, 13}. 11. Escreva um procedimento que delete uma componente de ordem dada de um vetor dado. Por exemplo, se o vetor dado for v = {2, 5, 7, 10, 12, 13} e a componente a ser deletada for a de ordem 4, o procedimento deve fornecer o vetor v = {2, 5, 7, 12, 13}. 12. Escreva um procedimento que, dadas duas relações de números, cada uma delas com números distintos, forneça os números que aparecem nas duas listas. Por exemplo, se as relações forem u = {9, 32, 45, 21, 56, 67, 42, 55} e w = {24, 42, 32, 12, 45, 11, 67, 66, 78}, o procedimento deve fornecer o vetor v = {32, 45, 67, 42}. 13. Escreva um procedimento que, dado um vetor ordenado, forneça a maior diferença entre duas componentes consecutivas, fornecendo também as ordens das componentes que geraram esta maior diferença. Por exemplo, se o vetor dado for v = {3, 5, 9, 16, 17, 20, 26, 31}, o procedimento deve fornecer como maior diferença o valor 7 (16 - 9), e as ordens 4 e 3. 14. Uma avaliação escolar consiste de 50 questões objetivas, cada uma delas com 5 opções, v = {1, 2, 3, 4 e 5},