Buscar

Programação em Pascal

Prévia do material em texto

1a Questão)(P2-2012-Até 1,5 ponto) Um estudante de engenharia, que gosta de resolver 
problemas de lógica, encontrou a seguinte questão: 
 
 
“Quantos pares de coelhos podem ser gerados de um casal de coelhos em um ano? 
Considere que, de modo natural, a cada mês ocorre a produção de um par. 
Considere, também, que um par de coelhos só começa a produzir coelhos quando 
completar dois meses de vida e que neste período nenhum coelho morrerá.” 
 
A fim de resolver o problema, o estudante elaborou um programa com o código-fonte em 
Pascal a seguir: 
 
program Coelhos; 
 
{$APPTYPE CONSOLE} 
 
Uses SysUtils; 
 
var 
 OsCoelhos: array [-2..12] of integer; 
 i: integer; 
 
begin 
 OsCoelhos[-2] := 0; 
 OsCoelhos[-1] := 1; 
 for i := 0 to 12 do 
 begin 
 OsCoelhos[i] := OsCoelhos[i - 2] + OsCoelhos[i - 1]; 
 WriteLn('Pares de coelhos no mês ', i, ': ', 
OsCoelhos[i]); 
 end; 
 ReadLn; 
end. 
 
Preencha a tabela a seguir com o conteúdo do vetor OsCoelhos, depois da execução do 
laço de repetição. 
 
i -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 
OsCoelhos 
 
 
 
 
 
 
 
 
 
 
2a Questão) A partir da análise do programa apresentado a seguir, responda: 
 
a.) (Até 1,0 ponto) Complete o código das linhas 4, 5, 8 e 28. 
 
1 Program Lista_Presenca; 
2 Var 
3 Nome: array [1..200] of string; 
4 Presenca: ________________ 
5 ConvidadosPresentes: ______ 
6 N: integer; 
7 i: integer; 
8 Op: _____ 
9 Begin 
10 Repeat 
11 Writeln(‘Digite o número de convidados’); 
12 Readln(N); 
13 For i := 1 to N do 
14 Begin 
15 Writeln(‘Nome do convidado ’,i); 
16 Readln(Nome[i]); 
17 Writeln(‘Presença’); 
18 Readln(Presenca[i]); 
19 End; 
20 ConvidadosPresentes:=0; 
21 For i := 1 to N do 
22 Begin 
23 If Presenca[i] then 
24 ConvidadosPresentes := ConvidadosPresentes + 1; 
25 End; 
26 Writeln(‘Compareceram ’,ConvidadosPresentes, ‘ pessoas’); 
27 
 Writeln(‘Deseja realizar continuar utilizando o programa: 
S/N?’); 
28 __________ 
29 Until (Op=‘S’) or (Op=‘s’); 
30 End. 
 
 
b.) (Até 1,0 ponto) Para as afirmações a seguir, assinale V para as consideradas verdadeiras e 
F para as falsas. Justificar apenas as afirmações consideradas falsas. 
 
 
b1.) ( ) A declaração de variáveis indexadas deve ser feita no campo Var na linguagem 
Pascal. 
Justificativa: 
 
 
 
b2.) ( ) A decisão da estrutura de repetição Repita-Até só deve ser realizada com valores 
ordinais (integer, char ou boolean). 
Justificativa: 
 
 
 
 
3a Questão) A partir da análise do programa apresentado a seguir, responda: 
 
a.) (Até 1,0 ponto) Complete os espaços sublinhados na estrutura Caso de maneira 
conveniente. 
 
1 Program Paga_Contas; 
2 Var 
3 N, i, Forma:integer; Soma, Conta, Pagamento:real; 
4 Begin 
5 Writeln(‘Informe a quantidade de contas a serem pagas’); 
6 Readln(N); 
7 Soma:=0; 
8 For i:=1 to N do 
9 Begin 
10 
Writeln(‘Escolha a forma de pagamento: 1 - à vista; 2 - 2x; 
3 - 4x’); 
11 Readln(Forma); 
12 Writeln(‘Digite o valor da conta’); 
13 Readln(Conta); 
14 Case ____ of 
15 ____: Begin 
16 Pagamento:=Conta*0.90; 
17 Writeln(‘1x = ’,Pagamento); 
18 Soma:=Soma+Pagamento; 
19 End; 
20 _____: Begin 
21 Pagamento:=1.05*Conta/2; 
22 Writeln(‘2x = ’,Pagamento); 
23 Soma:=Soma+2*Pagamento; 
24 End; 
25 _____: Begin 
26 Pagamento:=1.10*Conta/4; 
27 Writeln(‘4x = ’,Pagamento); 
28 Soma:=Soma+4*Pagamento; 
29 End; 
30 End; 
31 End; 
32 Writeln(‘Valor total de contas = ’,Soma); 
33 End. 
 
 
b.) (Até 1,0 ponto) Para as afirmações a seguir, assinale V para as consideradas verdadeiras e 
F para as falsas. Justificar apenas as afirmações consideradas falsas. 
 
b1.) ( ) Na linha 3, a variável de nome Forma foi declarada como integer, pois é 
utilizada como fator de decisão na estrutura Caso. 
Justificativa: 
 
 
b2.) ( ) O Begin da linha 9 e o End; da linha 31 são obrigatórios para o correto 
funcionamento do programa. 
Justificativa: 
 
 
 
 
 
 
 
 
 
 
 
4a Questão) (P2-2012)Em meio a comunidade científica, tornou-se necessário desenvolver 
indicadores de produção científica que permitam quantificar a performance de um 
determinado pesquisador ou revista periódica. Segundo Weinstock (1971), índices de 
citação resolvem problemas semânticos que ocorrem com índices por assunto, fazendo uso 
de uma simbologia de citação ao invés de palavras para descrever o conteúdo de um 
documento. 
Uma métrica utilizada para determinar a relevância de um determinado pesquisador é o 
índice i10, apresentado à comunidade em julho de 2011 pelo Google como parte da 
ferramenta de busca Google Acadêmico. Esse índice pode ser calculado como o número 
de artigos com pelo menos 10 citações que os artigos de um pesquisador foram 
referenciados em outros relatos de pesquisa. 
 
Referência 
WEINSTOCK, M. Citation indexes. In: KENT, A. (ed.), Encyclopedia of Library and 
Information Science. New York: Marcel Dekker. 1971, v.5, p.16-41. 
 
Com base no que foi apresentado responda aos seguintes itens: 
 
a.) (Até 1,0 ponto) Para armazenar as citações é necessário criar uma estrutura de dados que 
permita armazenar o número de citações de até 500 artigos. Escreva a definição do tipo 
TCitacoes que possua essas características. 
 
type 
 
 
b.) (Até 2,0 pontos) Elabore o fluxograma de uma função que retorna o índice i10 sabendo 
que o número de Citacoes (do tipo TCitacoes) e o número de artigos (do tipo 
inteiro) são passados por parâmetro. A função deve calcular e retornar o número de 
artigos que possuem pelo menos 10 citações. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3a Questão) (Até 2,5 pontos) Para resolver certo sistema de equações um engenheiro 
encomendou a um programador algumas sub-rotinas para executar operações com frações, 
visando evitar erros de truncamento. Para testes, criou o programa a seguir que utiliza sub-
rotinas declaradas na biblioteca Ufracoes. 
 
program ProFracoes; 
{$APPTYPE CONSOLE} 
uses 
 SysUtils, Ufracoes; 
 
var f1, f2, R: TFracao; 
 i: integer; 
 OK: Array[1..4] of Boolean; 
begin 
 DigitaFracao(f1, OK[1]); 
 DigitaFracao(f2, OK[2]); 
 Operacoes(f1, f2, '+', R, OK[3]); 
 R:= Simplifica (R); 
 if OK[3] 
 then writeLn('Resultado = ', Resultado(R)) 
 else writeLn('Operação inválida!!!'); 
 Operacoes(f1, f2, '/', R, OK[4]); 
 if OK[4] then 
 begin 
 R:= Simplifica (R); 
 writeLn('Resultado = ', Resultado(R)); 
 end 
 else writeLn('Operação inválida!!!'); 
 ReadLn; 
end. 
 
 
Como o programador não informou os detalhes das sub-rotinas fornecidas, coube a você 
escrever a declaração do protótipo (cabeçalho completo) das sub-rotinas Operacoes e 
Simplifica. 
 
Sub-rotina Operacoes: 
 
Sub-rotina Simplifica: 
 
 
 
 
 
 
 
 
 
 
4a Questão) Você foi contratado por uma lanchonete para concluir o desenvolvimento de 
um aplicativo que gerencie os itens à disposição dos clientes. Nesse aplicativo, os itens são 
armazenados em uma variável indexada unidimensional que comporta até 30 itens do tipo 
string, conforme o exemplo a seguir: 
 
Índice Dados 
1 ‘3#xyzBurger#12,50’ 
2 ‘157#Filé com fritas#25,14’ 
3 ‘28#Milk Shake com Halls#9,90’ 
. . . . . . 
 
No exemplo, pode-se verificar que cada dado armazena o código, descrição e preço de um 
item, separados pelo caractere ‘#’: 
 
Código # Descrição # Preço 
 
O desenvolvedor que iniciou o aplicativo deixou prontos os fluxogramas do programa 
principal e de algumas sub-rotinas, apresentados a seguir. 
 
 
Programa Principal: 
 
EntraDados (Dados, n)
VerificaPreco (Dados, i, op, info, achou, preco)
‘Deseja procurar por código 
ou descrição (C/D)?’
op
‘Forneça a informação 
que deve ser procurada:`
info
Inicio
fim
Para iß1 
até n faça
Fim para
achou
false true
preco
 
ProcedimentoQuebraDados: 
 
QuebraDados (texto; var cod, descr, pr)
início
tam ß length(texto)
sp ß Pos(‘#’,texto)
codß copy(texto,1,sp-1)
textoß copy(texto,sp+1,tam)
spß pos('#',texto)
descrß copy(texto,1,sp-1)
prß copy(texto,sp+1,tam)
Fim
 
 
a.) (Até 2,0 pontos) Transcreva fielmente o fluxograma do programa principal para a 
linguagem Pascal. 
 
program Project1; 
type 
 TDados = array [1 .. 30] of string; 
// códigos-fonte das sub-rotinas não foram exibidos 
var 
 
 
 
 
 
begin 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
end. 
b.) (Até 0,5 ponto) Escreva o conteúdo de cada um dos símbolos hachurados da sub-rotina 
EntraDados, a seguir. 
 
Sub-rotina EntraDados: 
 
início
n ß 0
Repita
Até 
Continue <> ‘S’
Cod, descr, preco
Dados[n] ← Cod+’#’+descr+’#’+preco
n ← n + 1
‘Deseja continuar (S/N)?’
Fim
1
2
 
Símbolo 1: 
 
 
Símbolo 2: 
 
 
c.) (Até 1,0 ponto) Escreva o fluxograma do procedimento VerificaPreco que compara 
se o item da posição i do vetor Dados corresponde à informação (código ou 
descrição, conforme a escolha) de acordo com a opção preenchida com o caractere 
‘C’ ou ‘D’. Esse procedimento deverá retornar se houve correspondência e o preço 
do item. Sabe-se que esse procedimento possui quatro parâmetros passados por valor: 
 o vetor com os Dados, previamente preenchido; 
 a posição i onde se deseja verificar o preço de um determinado item; 
 a opção (‘C’ para código ou ‘D’ para descrição) e 
 a informação a ser localizada 
 
e outros dois parâmetros passados por referência: 
 o valor lógico achou que indica se a informação foi localizada ou não na 
posição indicada pelo índice e 
 o preço (armazenado sob a forma de texto) do produto, caso esteja na posição 
i. Caso contrário, o preço deve retornar o texto ‘0’. 
 
Para o correto funcionamento dessa sub-rotina é necessário fazer a chamada ao 
procedimento QuebraDados, previamente desenvolvido. 
 
 
VerificaPreco (Dados, i, op, info; var achou, preco)
início

Continue navegando