A maior rede de estudos do Brasil

Grátis
146 pág.
Programando com PASCAL - Jaime Evaristo

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},