Buscar

Gab 3ºEE 2009.2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Observações gerais: 
1) Preencher os dados do cabeçalho do bloco de provas; 
2) Preencher o cabeçalho da folha de questões com o nome e a turma; 
3) Não utilizar a folha de questões como rascunho. O rascunho, se necessário, deverá ser feito nas folhas do caderno de 
prova; 
4) Ao final da prova entregar ao professor ou fiscal a folha de questões e o caderno de prova; 
5) Cada quesito vale 5 pontos. 
 
1º quesito: 
Tem-se N blocos paralelepípedos definidos por suas 3 arestas a, b e c e deseja-se determinar qual (quais) deste(s) 
bloco(s) tem (têm) face com maior área. Para isto pede-se fazer um programa em PASCAL que siga 
rigorosamente as instruções abaixo: 
a) Ler um inteiro N (5 ≤ N ≤ 80) correspondente ao número de blocos; 
b) Ler para os vetores BLA, BLB e BLC os valores das arestas a, b e c dos N blocos, utilizando um 
procedimento LERVET a ser incluído no programa; este procedimento deve ler um vetor cada vez que é 
chamado; 
c) Construir um vetor FC, contendo os valores da área da maior face de cada bloco, utilizando um procedimento 
CALCF. Este procedimento deve utilizar uma função MAIOR, que receba os valores das 3 arestas de um 
bloco e retorne com a área da maior face; 
I. Obs: Para construir o vetor FC usando o procedimento CALCF, deve-se fazer uso da função MAIOR; 
II. Obs: Passar o vetor FC como argumento em CALCF; passar as 3 arestas como argumento para MAIOR; 
d) Encontrar o valor da maior área entre todas as faces do vetor FC, utilizando uma função chamada 
MAIOR_FACE que recebe o vetor FC como argumento. (obs: caso tenha valores iguais como maior 
valor, retornar qualquer um dos valores). 
e) Imprimir, no programa principal, o valor da maior face encontrada em (d) e a relação dos blocos 
(número seqüencial que os define) que têm este valor como maior face. 
Obs.: O programa principal deve conter os procedimentos e funções descritas abaixo, onde não deve ser 
utilizado variáveis globais: 
I. Um procedimento LERMAT para ler um vetor de elementos reais; 
II. Um procedimento CALCF, para construir o vetor FC, que usará a função MAIOR (também incluída no 
programa) para verificar o valor da maior face; 
III. Uma função, MAIOR_FACE para encontrar a face de maior área entre todos os blocos paralelepípedo. 
_____________________________________________________________________________________ 
 
2º quesito. 
Em uma eleição disputada por 3 candidatos de números 1,2 e 3, os votos dos eleitores foram armazenados no 
arquivo VOTOS.ARQ, contendo a seguinte estrutura de registros: 
 
Título do Eleitor Número do Candidato 
String[15] Inteiro 
 
Obs.: os votos não válidos (nulos ou em branco) são armazenados com o número de candidato zero. 
 
Fazer um programa em PASCAL para: 
a) Abrir o arquivo VOTOS.ARQ; 
b) Ler o arquivo VOTOS.ARQ e calcular o número de votos e a percentagem de votos válidos de cada 
candidato; 
c) Gravar o arquivo RES.ARQ com a quantidade de votos e percentagem de votos de cada candidato, utilizando 
a seguinte estrutura: 
 
Número do Candidato Total de Votos Percentagem de Votos Válidos 
Inteiro Inteiro Real 
 
d) Após a gravação do arquivo, imprimir na tela o conteúdo do arquivo RES.ARQ. 
Obs.: a impressão deve ser feita a partir do arquivo RES.ARQ, utilizando os dados nele gravados e com os 
valores referentes a cada candidato impressos em linhas distintas. 
____________________________________________________________________________________________ 
Boa sorte! 
 
 UFPE – 2009.2 – Ex. esc. 3 de 3 – Prova 
 
ÁREA II – CCEN / UFPE 
 
Disciplina: IF 165 – Computação Eletrônica – 3º Exercício Escolar 2009.2 Data: 24 / 11 / 09 
 
 
Nome legível do aluno: ................................................................................................ Turma ............ 
 
GABARITO 
 
1) 
 
program blocos; 
 
procedure LERVET(var v:array of real; tam:integer); 
 var i: integer; 
 begin 
 i := 0; 
 while (i < tam) do 
 begin 
 write('Entre elemento ',i,': '); 
 readln(v[i]); 
 i := i + 1; 
 end; 
 end; 
function MAIOR(a,b,c: real):real; 
 begin 
 if ((a*b) >= (b*c)) and ((a*b) >= (a*c)) then 
 begin 
 MAIOR := (a*b); 
 end; 
 if ((b*c) >= (a*b)) and ((b*c) >= (a*c)) then 
 begin 
 MAIOR := (b*c); 
 end; 
 if ((a*c) >= (a*b)) and ((a*c) >= (b*c)) then 
 begin 
 MAIOR := (a*c); 
 end; 
 end; 
procedure CALCF(var res, a, b, c: array of real; tam:integer); 
 var i: integer; 
 begin 
 i := 0; 
 while (i < tam) do 
 begin 
 res[i] := MAIOR(a[i],b[i],c[i]); 
 i := i + 1; 
 end; 
 end; 
function MAIOR_FACE(v : array of real; tam: integer):real; 
 var i: integer; 
 maior: real; 
 begin 
 i := 0; 
 maior := v[0]; 
 while (i < tam) do 
 begin 
 if (v[i] > maior) then 
 begin 
 maior := v[i]; 
 end; 
 i := i + 1; 
 end; 
 MAIOR_FACE := maior; 
 end; 
 
var N, i: integer; 
 BLA, BLB, BLC, FC: array[0..79] of real; 
 maiorFace: real; 
begin 
 N := 0; 
 while (N < 5) or (N > 80) do 
 begin 
 write('Entre N (5 <= N <= 80): '); 
 readln(N); 
 end; 
 writeln('Entre o vetor BLA: '); 
 LERVET(BLA,N); 
 writeln('Entre o vetor BLB: '); 
 LERVET(BLB,N); 
 writeln('Entre o vetor BLC: '); 
 LERVET(BLC,N); 
 
 CALCF(FC,BLA,BLB,BLC,N); 
 
 maiorFace := MAIOR_FACE(FC,N); 
 writeln('Maior face: ',maiorFace:5:2); 
 i := 0; 
 while (i < N) do 
 begin 
 if (FC[i] = maiorFace) then 
 begin 
 writeln('Bloco ',i); 
 end; 
 i := i+1; 
 end; 
end. 
 
 
 
 
2) 
 
program eleicao; 
 
type VOTO = record titulo: String[15]; 
 candidato: integer; 
 end; 
type RES = record candidato: integer; 
 total: integer; 
 perc: real; 
 end; 
var arqVotos: file of VOTO; 
 v: VOTO; 
 arqRes: file of RES; 
 r: RES; 
 votos1, votos2, votos3: integer; 
begin 
 Assign(arqVotos,'VOTOS.ARQ'); 
 reset(arqVotos); 
 Assign(arqRes,'RES.ARQ'); 
 rewrite(arqRes); 
 
 votos1 := 0; 
 votos2 := 0; 
 votos3 := 0; 
 
 while (not(eof(arqVotos))) do 
 begin 
 read(arqVotos,v); 
 if (v.candidato = 1) then 
 begin 
 votos1 := votos1 + 1; 
 end; 
 if (v.candidato = 2) then 
 begin 
 votos2 := votos2 + 1; 
 end; 
 if (v.candidato = 1) then 
 begin 
 votos3 := votos3 + 1; 
 end; 
 end; 
 r.candidato := 1; 
 r.total := votos1; 
 r.perc := (votos1 * 100)/(votos1+votos2+votos3); 
 write(arqRes,r); 
 
 r.candidato := 2; 
 r.total := votos2; 
 r.perc := (votos2 * 100)/(votos1+votos2+votos3); 
 write(arqRes,r); 
 
 r.candidato := 3; 
 r.total := votos3; 
 r.perc := (votos3 * 100)/(votos1+votos2+votos3); 
 write(arqRes,r); 
 
 reset(arqRes); 
 while (not(eof(arqRes))) do 
 begin 
 read(arqRes,r); 
 writeln('Candidato: ',r.candidato,' Votos: ',r.total, 
 ' Perc: ',(r.perc):5:2); 
 end; 
 close(arqVotos); 
 close(arqRes); 
end.

Continue navegando