Programação de Computadores
Instituto Politécnico de Viseu
Escola Superior de Tecnologia
Engenharia Electrotécnica
1º Ano - 1º Semestre
Ficha de Trabalho N.º6
Soluções Propostas
1 - Escreva o algoritmo de um procedimento que permita limpar o ecrã. Implemente o procedimento em linguagem Pascal
e teste-o num pequeno programa para o efeito.
program limpar(input,output);
procedure limpa;
var i:integer;
begin
for i:=1 to 50 do
writeln;
end;
begin
writeln('Prima uma tecla para limpar o ecrã!');
readln;
limpa;
writeln('Esta Frase foi escrita num ecrã limpo!');
end.
2 - Elabore o algoritmo de um procedimento que determine e apresente no monitor os n primeiros múltiplos de um número
inteiro m (n e m devem ser parâmetros de entrada do procedimento).
program p_multiplos(input,output);
procedure multiplos(mult,n_mult:integer);
var i:integer;
begin
for i:=1 to n_mult do
writeln('O ',i,'º múltiplo é ',i*mult);
end;
var n,m: integer;
begin
write(' Introduza o valor de m: ');
readln(m);
write(' Quantos múltiplos quer calcular? ');
readln(n);
multiplos(m,n);
end.
3 - Faça o algoritmo de um procedimento que, sendo dado como parâmetro de entrada um número inteiro, calcule e
apresente no monitor todos os seus múltiplos inferiores a 100. Implemente o algoritmo em linguagem Pascal.
program multiplos_inferiores(input,output);
procedure multiplos100(num:integer);
var mult:integer;
begin
writeln('Os múltiplos de ',num,' inferiores a 100 são:');
mult:=num;
while (mult<100) do
begin
writeln(mult);
mult:=mult+num;
end;
end;
var n: integer;
begin
write(' Introduza o valor de n: ');
readln(n);
multiplos100(n);
end.
4 - Elabore um procedimento que apresente no monitor todos os números pares entre dois números inteiros n e m (n<m).
Os valores de n e m devem ser passados como parâmetros para o procedimento e no caso de (m<n) deve ser apresentada
a mensagem “Valores Inválidos!”.
program pares_entre_dois_numeros(input,output);
procedure pares(n,m:integer);
var par:integer;
begin
if (n>=m) then
writeln('Valores Inválidos!')
else
begin
if (n mod 2 = 0) then
par:=n
else
par:=n+1;
writeln('Os múmeros pares entre n e m são:');
while (par<m) do
begin
writeln('
',par);
par:=par+2;
end;
end;
end;
var n,m: integer;
begin
write(' Introduza o valor de n: ');
readln(n);
write(' Introduza o valor de m (m>',n,'): ');
readln(m);
pares(n,m);
end.
5 - Analise o seguinte programa e verifique a diferença existente entre a passagem de parâmetros por valor e por referência.
program exemplo(input,output);
procedure proc1(x,y:integer);
begin
writeln(' x = ',x,'
x:=100;
y:=200;
end;
y = ',y);
procedure proc2(var x,y:integer);
begin
writeln(' x = ',x,' y = ',y);
x:=100;
y:=200;
end;
var a,b: integer;
begin
a:=1;
b:=2;
proc1(a,b);
writeln(' a = ',a,' b = ',b);
proc2(a,b);
writeln(' a = ',a,' b = ',b);
end.
2/8
6 - Implemente um procedimento que permita trocar o valor de duas variáveis. Teste-o num pequeno programa para o
efeito.
program trocar_vars(input,output);
procedure troca(var x,y:integer);
var aux:integer;
begin
aux:=x;
x:=y;
y:=aux;
end;
var a,b: integer;
begin
write(' Qual o valor de a? ');
readln(a);
write(' Qual o valor de b? ');
readln(b);
writeln('Os valores introduzidos for am a = ',a,' b = ',b);
troca(a,b);
writeln('Os valores após a troca são
a = ',a,' b = ',b);
end.
7 - Escreva um procedimento que, sendo dados como parâmetros as medidas dos dois catetos de um triângulo rectângulo,
calcule e mostre no monitor a medida da hipotenusa.
program catetos_hipotenusa(input,output);
procedure hipotenusa(c1,c2:real);
var hip:real;
begin
hip:=sqrt(sqr(c1)+sqr(c2));
writeln(' A hipotenusa mede ',hip:6:3);
end;
var a,b: real;
begin
write(' Qual a medida do primeiro cateto?');
readln (a);
write(' Qual a medida do segundo cateto?');
readln (b);
hipotenusa(a,b);
end.
8 - Escreva uma nova versão do procedimento anterior que calcule a medida da hipotenusa mas não a mostre no monitor.
Em vez disso a medida da hipotenusa deve ser enviada para o exterior por forma a ser utilizada no exterior do
procedimento.
program procedimento_hipotenusa(input,output);
procedure hipotenusa(c1,c2:real;var hip:real);
begin
hip:=sqrt(sqr(c1)+sqr(c2));
end;
var a,b,c: real;
begin
write(' Qual a medida do primeiro cateto?');
readln (a);
write(' Qual a medida do segundo cateto?');
readln (b);
hipotenusa(a,b,c);
writeln(' A hipotenusa mede ',c:6:3);
end.
3/8
9 - Use uma função para fazer o cálculo do exercício anterior. Compare as duas soluções para o problema.
program funcao_hipotenusa(input,output);
function hipotenusa(c1,c2:real):real;
var hip:real;
begin
hip:=sqrt(sqr(c1)+sqr(c2));
hipotenusa:=hip;
end;
var a,b: real;
begin
write(' Qual a medida do primeiro cateto?');
readln (a);
write(' Qual a medida do segundo cateto?');
readln (b);
writeln(' A hipotenusa mede ',hipotenusa(a,b):6:3);
end.
10 - Elabore um programa em Pascal que determine o quadrado de um número inteiro n. O número n deve ser pedido ao
utilizador através de uma função e o seu quadrado deve ser calculado através de outra função.
program quadrado_inteiro(input,output);
function leitura:integer;
var x:integer;
begin
write('Introduza um numero: ');
readln(x);
leitura:=x;
end;
function quadrado(x:integer):integer;
begin
quadrado:=x*x;
end;
var a,qa: integer;
begin
a:=leitura();
qa:=quadrado(a);
writeln(' O quadrado de ',a,' é ',qa);
end.
11 - Escreva um programa em Pascal que permita a conversão de temperaturas em graus Centígrados para graus
Fahrenheit e vice versa. Para tal deverá escrever dois procedimentos, um para realizar a conversão para Celsius e outro
para realizar a conversão para Fahreneit. Cada um destes procedimentos deverá receber como parâmetro o valor da
temperatura a converter e mostrar no monitor a temperatura convertida (C = 5(F – 32)/9; F = (9C/5)+32).
program converter_escalas(input,output);
procedure Conv_CF(tC:real);
var tF:real;
begin
tF:=9*tC/5+32;
writeln(tC:2:1,'ºC correspondem a ',tF:2:1,'ºF');
end;
procedure Conv_FC(tF:real);
var tC:real;
begin
tC:=5*(tF-32)/9;
writeln(tF:2:1,'ºF correspondem a ',tC:2:1,'ºC');
end;
var conv: integer;
t1:real;
begin
writeln(' Conversões de temperaturas:');
writeln('
Celius -> Fahreneit
---> 1');
writeln('
Fahreneit -> Celius
---> 2');
4/8
write(' Qual a conversão que pretende?
');
readln(conv);
write(' Qual o valor da temperatura a converter? ');
readln(t1);
if (conv=1) then
Conv_CF(t1)
else
Conv_FC(t1);
end.
12 - Use funções para efectuar as conversões de temperaturas do exercício anterior.
program funcoes_converter(input,output);
function Conv_CF(tC:real):real;
begin
Conv_CF:=9*tC/5+32;
end;
function Conv_FC(tF:real):real;
begin
Conv_FC:=5*(tF-32)/9;
end;
var conv: integer;
t1,t2:real;
begin
writeln(' Conversões de temperaturas:');
writeln('
Celius -> Fahreneit
---> 1');
writeln('
Fahreneit -> Celius
---> 2');
write(' Qual a conversão que pretende?
');
readln(conv);
write(' Qual o valor da temperatura a converter? ');
readln(t1);
if (conv=1) then
begin
t2:=Conv_CF(t1);
writeln(t1:2:1,'ºC correspondem a ',t2:2:1,'ºF');
end
else
begin
t2:=Conv_FC(t1);
writeln(t1:2:1,'ºC correspondem a ',t2:2:1,'ºF');
end
end.
13 - Escreva um programa em Pascal que utilize uma função chamada multiplo que receba dois valores inteiros e
devolva true se um dos valores é múltiplo do outro. Por exemplo:
multiplo(2, 4) = true
multiplo(4, 2) = true
multiplo(3, 2) = false
program funcao_multiplo(input,output);
function multiplo(a,b:integer):boolean;
begin
if ((a mod b = 0) OR (b mod a = 0)) then
multiplo:=TRUE
else
multiplo:=FALSE;
end;
var mult: boolean;
x,y:integer;
5/8
begin
x:=2; y:=4;
if (multiplo(x,y)) then
writeln(x,' e ',y,' são
else
writeln(x,' e ',y,' não
x:=4; y:=2;
if (multiplo(x,y)) then
writeln(x,' e ',y,' são
else
writeln(x,' e ',y,' não
x:=3; y:=2;
if (multiplo(x,y)) then
writeln(x,' e ',y,' são
else
writeln(x,' e ',y,' não
end.
multiplos')
são multiplos');
multiplos')
são multiplos');
multiplos')
são multiplos');
14 -
Implemente uma função chamada factorial que calcule n! (factorial de n em que n é um inteiro
positivo). O valor de n deve ser um parâmetro da função e o valor calculado deve ser enviado para o exterior.
15 - Escreva um programa em Pascal que inclua uma função chamada potencia que permita calcular xn (x real, n
inteiro positivo).
16 - Considere a função f(x). Escreva um programa que utilize funções Pascal para calcular o valor de f(x) para um x e n
dados pelo utilizador. Sugestão: utilize as funções factorial e potencia dos exercícios14 e 15).
n
xi
xi
f ( x) = ∑
f ( x) = ∑
i =1 i!
i =1 2i
n
17 - Faça o cálculo da função anterior usando uma única função por forma a que o resultado seja obtido mais
eficientemente.
18 - Elabore um subprograma que, considerando um vector com N inteiros, determine a soma dos elementos de ordem
par P (N deve ser parâmetro do subprograma e o inteiro P deve ser enviado para o exterior do subprograma).
program somaValoresArray;
{Determina a soma dos elementos de ordem par de um vector com 12 elementos}
uses crt;
const maximo=50;
type vector=array [1..maximo] of integer;
function somapares(vec:vector;num:integer):integer;
var i,soma:integer;
begin
soma := 0;
for i := 1 to num do
if (i mod 2 = 0) then
soma := soma + vec[i];
somapares:=soma;
end;
var i, N,P: integer;
t: vector;
begin
clrscr;
write('Quantos elementos tem o array? ');
readln(N);
for i := 1 to N do
begin
write(' Introduza o ',i,'º elemento do vector: ');
readln(t[i])
end;
P:=somapares(t,N);
writeln(' A soma dos elementos de ordem par é ',P);
writeln;
6/8
end.
19 - Implemente um subprograma em Pascal que, dado um array contendo N valores reais desordenados, determine o
valor máximo, o valor mínimo e as respectivas posições. Estes 4 valores devem ser devolvidos ao programa principal
que os mostrará no monitor. Faça um programa para testar o subprograma.
program MAX_MIN; {Determina o valor máximo, o valor mínimo e as
respectivas posições num vector com n elementos reais}
uses crt;
const tamanho=50;
type vector=array [1..tamanho] of real;
procedure
MaxMin(vec:vector;num:integer;
pmax,pmin:integer);
var i:integer;
begin
max:=vec[1];
min:=vec[1];
pmax:=1;
pmin:=1;
for i := 1 to num do
if (vec[i]>max) then
begin
max:=vec[i];
pmax:=i;
end
else if (vec[i]<min) then
begin
min:=vec[i];
pmin:=i;
end
end;
var i,N,posmax,posmin: integer;
maximo,minimo:real;
t: vector;
begin
clrscr;
write('Quantos elementos tem o array? ');
readln(N);
for
var
max,min:real;
var
i := 1 to N do
begin
write(' Introduza o ',i,'º elemento do vector: ');
readln(t[i])
end;
MaxMin(t,N,maximo,minimo,posmax,posmin);
writeln(' O máximo do vector é o elemento ',maximo:2:2,' e ocorre na
posição ',posmax);
writeln(' O mínimo do vector é o elemento ',minimo:2:2,' e ocorre na
posição ',posmin);
writeln;
end.
20 - Considere o exercício anterior mas faça a leitura dos elementos do vector através de um subprograma. Os valores
máximo e mínimo e as respectivas posições deverão ser determinados pelo subprograma devolvido no exercício
anterior.
program MAX_MIN; { Determina o valor máximo, o valor mínimo e as
respectivas posições num vector com n elementos reais}
uses crt;
const tamanho=50;
type vector=array [1..tamanho] of real;
7/8
procedure leVec(var vec:vector;num:integer);
var i:integer;
begin
for i := 1 to num do
begin
write(' Introduza o ',i,'º elemento do vector: ');
readln(vec[i])
end;
end;
procedure
MaxMin(vec:vector;num:integer;
pmax,pmin:integer);
var i:integer;
begin
max:=vec[1];
min:=vec[1];
pmax:=1;
pmin:=1;
for i := 1 to num do
if (vec[i]>max) then
begin
max:=vec[i];
pmax:=i;
end
else if (vec[i]<min) then
begin
min:=vec[i];
pmin:=i;
end
end;
var N,posmax,posmin: integer;
maximo,minimo:real;
t: vector;
begin
clrscr;
write('Quantos elementos tem o array? ');
readln(N);
var
max,min:real;
var
leVec(t,N);
MaxMin(t,N,maximo,minimo,posmax,posmin);
write(' O máximo do vector é o elemento ',maximo:2:2);
writeln(' e ocorre na posição ',posmax);
write(' O mínimo do vector é o elemento ',minimo:2:2);
writeln(' e ocorre na posição ',posmin);
writeln;
end.
21 -
Aumente a funcionalidade do programa anterior implementando funções adicionais que permitam
executar as seguintes tarefas:
- Determine a média dos elementos do vector.
- Determine quantos elementos do vector são superiores à média e quantos são inferiores.
- Duplique para outra variável os valores lidos.
22 -
Implemente um programa em Pascal que faça a leitura das notas de uma turma de IP e, com base nelas,
calcule:
- A média
- As notas mínima e máxima
- O número de positivas e negativas
Use subprogramas para tornar o seu código mais estruturado.
8/8
Download

Resolução - Escola Superior de Tecnologia