UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
CENTRO DE CIÊNCIAS AGRÁRIAS
DEPARTAMENTO DE ENGENHARIA RURAL
ENG06842 – PROGRAMAÇÃO I
LISTA DE EXERCÍCIOS
1. Escreva um procedimento que limpe a tela do micro e exiba o seu nome.
2. Escreva um procedimento que receba uma string S e um inteiro positivo N e exiba a string S por N vezes
seguidas na tela.
3. Escreva uma função chamada CUBO que receba um valor do tipo real e retorne a potência elevado a 3
do mesmo.
4. Escreva um procedimento chamado TROCA que receba duas variáveis inteiras (X e Y) e troque o
conteúdo entre elas.
5. Escreva uma função que receba uma string S e retorne o número de espaços existentes na mesma.
6. Escreva uma função que receba uma string S e um valor inteiro N e retorne os N primeiros caracteres da
string S.
7. Escreva um procedimento chamado SINAL que receba como parâmetro um valor N inteiro e escreva a
palavra POSITIVO se N for um número maior que zero, NEGATIVO se N for menor que zero, ou ZERO se
N for igual a zero.
8. Escreva um programa que leia um número inteiro e, usando o procedimento SINAL (criado na questão
anterior), mostre se ele é maior, menor ou igual a zero.
9. Escreva um procedimento chamado METADE que divida um valor do tipo real (passado como
parâmetro) pela metade.
10. Escreva um programa que leia um vetor A de 30 elementos reais e, usando o procedimento METADE
(criado na questão anterior), divida todos seus elementos pela metade.
11. Escreva uma função chamada MEDIA que retorne a média aritmética de três valores reais (X, Y e Z)
passados como parâmetros.
12. Escreva um programa que, para um número indeterminado de alunos, faça para cada uma deles:

ler o nome e as três notas do aluno (a leitura do nome FIM indica o fim dos dados - flag);

calcular a média do aluno (usando a função MEDIA criada na questão anterior);

exibir o nome e a média do aluno.
13. Quantos números o programa abaixo imprimirá na tela?
program pares;
var
contador: integer;
function NumeroPar(numero: integer): Boolean;
begin
NumeroPar := (numero mod 2) = 0;
end;
begin
for contador := 1 to 100 do
if (NumeroPar(contador)) then
writeLn(contador);
end.
14. O que o programa abaixo imprimirá na tela?
program Linhas;
var
contador: Integer;
procedure ImprimeLinha(linha: integer);
var
contador: integer;
begin
for contador := 1 to linha do
write(contador);
writeLn;
end;
begin
for contador := 1 to 10 do
ImprimeLinha(contador);
end.
15. Descreva uma função POTENCIA que realize a operação de potenciação e que contenha os seguintes
parâmetros formais:
VALOR: número inteiro que se deseja elevar à potência.
POT: potência elevada
Ex: Na chamada da função POTENCIA(5,3), o resultado seria 125. Na chamada da função
POTENCIA(2,0), o resultado seria 1.
16. Escreva uma função chamada SEG para receber uma medida de tempo expressa em Horas, Minutos e
Segundos e retornar esta medida convertida apenas para segundos.
17. Escreva um procedimento chamado HMS para receber uma medida de tempo expressa apenas em
segundos em retornar esta medida convertida para horas, minutos e segundos.
18. Faça um programa que leia duas medidas de tempo (expressas em horas, minutos e segundos) e,
usando a função SEG e o procedimento HMS, calcule e exiba a diferença (também em horas, minutos e
segundos) entre elas.
19. Escrever um procedimento para leitura de um valor inteiro entre 1 e 100. Se o usuário fornecer um valor
fora desta faixa, deve-se repetir o processo até que seja fornecido um valor válido.
20. Fazer um programa para ler duas matrizes e apresentar a soma. Utilize subprogramas (procedimentos
e/ou funções) para ler, somar e escrever as matrizes.
21. O que o programa abaixo faz? Quantas vezes o procedimento AcertaPosicao será executado? Quantas
vezes o procedimento Troca será executado?
program Numeros;
const
LIMITE = 5;
var
contador: integer;
numeros: array[1..LIMITE] of integer;
procedure Troca(x, y: integer);
var
temporario: integer;
begin
temporario := numeros[x];
numeros[x] := numeros[y];
numeros[y] := temporario;
end;
procedure AcertaPosicao(posicao: integer);
var
indice: integer;
begin
for indice := posicao + 1 to LIMITE do
if (numeros[indice] < numeros[posicao]) then
Troca(posicaoindice);
end;
procedure LeNumeros;
var
indice: integer;
begin
writeln('Digite ', LIMITE, ' numeros: ');
for indice := 1 to LIMITE do
readln(numeros[indice]);
end;
procedure MostraNumeros;
var
indice: integer;
begin
write('O resultado e: ');
for indice := 1 to LIMITE do
write(numeros[indice]:6);
writeln;
end;
begin
LeNumeros;
for contador := 1 to 4 do
AcertaPosicao(contador);
MostraNumeros;
end.
22. Leia 50 valores do tipo (nome, P1, P2, Nota_trabalhos, Percentual_de_presença), e determine quantos
alunos foram aprovados e quantos foram reprovados. Para aprovação é preciso ter média maior ou igual
a 6 e 75% de presença. A média é calculada pela expressão: Media = (P1 + P2) * 70% +
Nota_trabalhos * 30%. Use uma função para calcular a média. Utilize ao máximo procedimentos ou
funções.
23. Fazer uma função para multiplicar 2 matrizes A (MxN) e B (NxK) e retornar a matriz resultado (MxK).
24. Escreva uma função recursiva FIB(n) que receba o inteiro n e devolva o n-ésimo terma da sequência de
Fibonacci, definida recursivamente por:
FIB(n - 1)  FIB(n - 2)
FIB(n)  
1 se 0  n  3
se n  3
Obs.: Em todas as questões dessa lista, nenhuma variável global poderá ser utilizada dentro dos
procedimentos e funções, e a passagem de parâmetros por referência só poderá ser utilizada quando for
realmente necessária.
Download

PRO_Lista03 - Prof. Antonio Jr.