Exame Especial

Propaganda
Universidade Federal de Minas Gerais - UFMG
Instituto de Ciências Exatas - ICEx
Disciplina: Programação de Computadores
Professor: David Menoti ([email protected])
Data: 26/11/2005
Aluno: ___________________________________________________________ No. ______
•
•
•
•
•
A prova é individual e sem consulta, exceto o contido em sua mente;
A interpretação das questões faz parte da avaliação;
Faça as observações que achar necessário, por escrito, na folha de reposta;
É obrigatório que as variáveis usadas dentro das funções e nos programas sejam
diferentes;
Em vez de apresentar o algoritmo em PORTUGOL, é permitido implementar as
funções e os algoritmos em PASCAL ou MATLAB. No entanto, somente uma
forma de expressão será aceita como resposta para cada questão.
Exame Especial – 100 pontos
1) (30 pontos – 52ª. Questão da Lista 03a (Repetição)) Construir um algoritmo em
PORTUGOL para calcular e imprimir o sen(X). O valor de X deverá ser digitado em
graus, no entanto, utilizado em rad’s na série. O valor do seno de X será calculado pela
soma dos 15 primeiros termos da série a seguir:
sen( X ) = x −
x 3 x 5 x 7 x 9 x 11
+
−
+
−
+ ...
3! 5! 7! 9! 11!
2) (40 pontos – 20ª. Questão da 4ª. Lista (Vetores) alterada – Resolvidas em Sala de
Aula) Construa um algoritmo para calcular a média dos valores, de 50 números que
serão digitados pelo usuário. Esses dados devem ser armazenados em um vetor. Ao
final o algoritmo deve mostrar a média. O algoritmo deve mostrar também o maior
número e o segundo maior número digitado. Além disso, devem ser impressos os
valores acima da média calculada. Os dados no vetor devem ser ordenados para a
impressão.
3) (30 pontos – 2ª. Questão do 3º. teste do 1º. semestre de 2005 – Resolvida em Sala
de Aula) Uma função do primeiro grau, em ℜ2, pode ser definida por dois pontos não
coincidentes. Escreva uma função em PORTUGOL que receba quatro parâmetros X1,
Y1, X2 e Y2 que correspondam à estes dois pontos e calcule:
- o coeficiente angular (m);
- o coeficiente linear (k), onde:
Y − Y2
m= 1
k = Y1 − mX 1 = Y2 − mX 2
X1 − X 2
os valores de m e k devem ser retornados por referencia. A função deve retornar 1,
caso seja possível definir tal função, e 0 em caso contrário. Escreva também um
algoritmo para testar a função criada.
UFMG – ICEx – DCC – Programação de Computadores – 2º. Sem 2005 – David Menoti 1
algoritmo EEQ1;
var
inteiro: I, J, FAT;
real:
X, SEN;
início
SEN ← 0;
leia(X);
para I de 1 até 15 faça
FAT ← 1;
para J de 2 até 2*I – 1 faça
FAT ← FAT * J;
fim-para
se ( I mod 2 = 0 ) então
SEN ← SEN – ( X ** ( 2 * I – 1 ) ) / FAT; { termo par }
senão
SEN ← SEN + ( X ** ( 2 * I – 1 ) ) / FAT; { termo ímpar }
fim-se
fim-para
imprima("SEN(",X,") = ",SEN);
fim
program EEQ1;
var
I, J: integer;
X, SN, FAT, XE: real;
begin
writeLn('Sen(x)');
write('Digite um valor para X: ');
read(X);
X := X * 0.01745329252; {converte de graus para radianos}
SN := 0;
XE := X;
for I := 1 to 15 do
begin
FAT := 1;
for J := 2 to 2 * I - 1 do
FAT := FAT * J;
if ( I mod 2 = 0 ) then
SN := SN - XE / FAT { termo par }
else
SN := SN + XE / FAT; { termo impar }
XE := XE * X * X;
end;
writeLn('Sen(',X:5:4,') = ',SN:9:8);
writeLn('Sin(',X:5:4,') = ',Sin(X):9:8);
end.
%I, J: integer;
%X, SN, FAT: real;
disp('Sen(x)');
X = input('Digite um valor para X: ');
X = X * pi/180;
SN = 0;
for I = 1 : 15
FAT = 1;
for J = 2 : 2 * I - 1
FAT = FAT * J;
end
if ( mod(I,2) == 0 )
SN = SN - X ^ ( 2 * I - 1 ) / FAT; % termo par
else
SN = SN + X ^ ( 2 * I - 1 ) / FAT; % termo impar
end
end
fprintf(1,'Sen(%d) = %f\n',X,SN);
fprintf(1,'Sin(%d) = %f\n',X,sin(X));
UFMG – ICEx – DCC – Programação de Computadores – 2º. Sem 2005 – David Menoti 2
algoritmo EE2;
constante
N = 5;
var
inteiro : C, D;
real : SOMA, MEDIA, M1, M2, AUX, VET[1..N];
início
SOMA <- 0;
para C de 1 até N faça
leia (VET[C]);
se ( ( VET[C] > M1 ) ou ( C = 1) ) então
M2 <-M1;
M1 <- VET[C];
senão-se ( ( VET[C] > M2 ) ou ( C = 2) ) então
M2 <- VET[C];
fim-se
SOMA <- SOMA + VET[C];
fim-para
imprima("1o. Maior: ",M1);
imprima("2o. Maior: ",M2);
MEDIA := SOMA / N;
imprima("A media dos valores digitados eh: ",MEDIA);
para C de 1 até N-1 faça
para D de 1 até N-C-1 faça
se ( VET[D] > VET[D+1] ) então
AUX <- VET[D];
VET[D] <- VET[D+1];
VET[D+1] <- AUX;
fim-se
fim-para
fim-para
imprima("Valores maiores que a media");
para C de 1 até N faça
se ( VET[C] > MEDIA ) então
imprima(VET[C]);
fim-se
fim-para
fim
UFMG – ICEx – DCC – Programação de Computadores – 2º. Sem 2005 – David Menoti 3
program EE2;
const
N = 50;
var
C, D : integer;
SOMA, MEDIA, M1, M2, AUX : real;
VET: array [1..N] of real;
begin
SOMA := 0;
for C := 1 to N do
begin
write('Digite um valor: ');
readLn(VET[C]);
if ( ( VET[C] > M1 ) or ( C = 1) ) then
begin
M2 := M1;
M1 := VET[C];
end
else if ( ( VET[C] > M2 ) or ( C = 2) ) then
begin
M2 := VET[C];
end;
SOMA := SOMA + VET[C];
end;
writeLn('1o. Maior: ',M1);
writeLn('2o. Maior: ',M2);
MEDIA := SOMA / N;
writeln('A media dos valores digitados eh: ',MEDIA);
for C := 1 to N-1 do
for D := 1 to N-C-1 do
if ( VET[D] > VET[D+1] ) then
begin
AUX := VET[D];
VET[D] := VET[D+1];
VET[D+1] := AUX;
end;
writeLn('Valores maiores que a media');
for C := 1 to N do
if ( VET[C] > MEDIA ) then
writeLn(VET[C],' ');
end.
N = 50;
SOMA = 0;
for C = 1 : N
VET(C) = input ('Digite um valor: ');
if ( ( VET(C) > M1 ) | ( C == 1) )
M2 := M1;
M1 := VET(C);
elseif ( ( VET(C) > M2 ) | ( C == 2) )
M2 := VET(C);
end
SOMA := SOMA + VET(C);
end;
fprintf(1,'1o. Maior: %f\n',M1);
fprintf(1,'2o. Maior: %f\n',M2);
MEDIA := SOMA / N;
fprintf(1,'A media dos valores digitados eh: %f\n',MEDIA);
for C = 1 : N-1
for D 1 : N-C-1
if ( VET(D) > VET(D+1) )
AUX = VET(D);
VET(D) = VET(D+1);
VET(D+1) = AUX;
end
end
end
fprintf(1,'Valores maiores que a media\n');
for C = 1 : N
if ( VET(C) > MEDIA )
fprinf(1,'%d ',VET(C));
end
end
fprintf(1,'\n');
end
UFMG – ICEx – DCC – Programação de Computadores – 2º. Sem 2005 – David Menoti 4
algoritmo EEQ3;
real : X1L, Y1L, X2L, Y2L, ML, KL;
função EQ1(real : X1, Y1, X2, Y2; var real : M, K ) : real;
início
se ( X1 - X2 = 0 ) então
EQ1 <- 0;
senão
EQ1 <- 1;
M <- ( Y1 - Y2 ) / ( X1 - X2);
K <- Y1 - M * X1;
fim-se
fim
início
leia(X1L,Y1L);
leia(X2L,Y2L);
se ( EQ1(X1L,Y1L,X2L,Y2L,ML,KL) = 0 ) então
imprima("Impossivel calcular M e K");
senão
imprima("M = ",ML,", K = ",KL);
fim-se
fim
program EEQ3;
var
X1L, Y1L, X2L, Y2L, ML, KL : real;
function EQ1(X1, Y1, X2, Y2 : real; var M, K : real) : real;
begin
if ( X1 - X2 = 0 ) then
EQ1 := 0
else
begin
EQ1 := 1;
M := ( Y1 - Y2 ) / ( X1 - X2);
K := Y1 - M * X1;
end;
end;
begin
write('Ponto 1 ( X1 , Y1 ): ');
readLn(X1L,Y1L);
write('Ponto 2 ( X2 , Y2 ): ');
readLn(X2L,Y2L);
if EQ1(X1L,Y1L,X2L,Y2L,ML,KL) = 0 then
writeLn('Impossivel calcular M e K')
else
writeLn('M = ',ML:4:4,', K = ',KL:4:4);
end.
function EEQ3;
X1L = input('Ponto 1 - X : ');
Y1L = input('Ponto 1 - Y’: ');
X2L = input('Ponto 2 - X : ');
Y2L = input('Ponto 2 - Y’: ');
[RET, ML,KL] = EQ1(X1L,Y1L,X2L,Y2L,ML,KL)
if ( RET = 0 )
fprintf(1,'Impossivel calcular M e K');
else
fprintf(1,'M = %f, K = %f\n',ML,KL);
end
function [R,M,K] = EQ1(X1, Y1, X2, Y2)
if ( X1 - X2 = 0 )
R = 0;
else
R = 1;
M = ( Y1 - Y2 ) / ( X1 - X2);
K = Y1 - M * X1;
end
UFMG – ICEx – DCC – Programação de Computadores – 2º. Sem 2005 – David Menoti 5
Download