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.