Universidade Federal de Minas Gerais - UFMG Data: 26/11/2005 Instituto de Ciências Eatas - ICE Disciplina: Programação de Computadores Professor: David Menoti (menoti@dcc.ufmg.br) Aluno: No. A prova é individual e sem consulta, eceto 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 iá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 epressão será aceita como resposta para cada questão. Eame 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: 3 sen( X ) = 3! + 5 5! 7 7! 9 + 9! 11 +... 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 R 2, pode ser definida por dois pontos não coincidentes. Escreva uma função em PORTUGOL que receba quatro parâmetros X 1, Y 1, X 2 e Y 2 que correspondam à estes dois pontos e calcule: - o coeficiente angular (m); - o coeficiente linear (k), onde: Y1 Y2 m = k = Y1 mx1 = Y2 mx 2 X 1 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 ICE DCC Programação de Computadores 2º. Sem 2005 David Menoti 1
algoritmo EEQ1; inteiro: I, J, FAT; real: X, SEN; 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; se ( I mod 2 = 0 ) então SEN SEN ( X ** ( 2 * I 1 ) ) / FAT; { termo par } SEN SEN + ( X ** ( 2 * I 1 ) ) / FAT; { termo ímpar } imprima("sen(",x,") = ",SEN); program EEQ1; I, J: integer; X, SN, FAT, XE: real; writeln('sen()'); 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 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 } SN := SN + XE / FAT; { termo impar } XE := XE * X * X; ; writeln('sen(',x:5:4,') = ',SN:9:8); writeln('sin(',x:5:4,') = ',Sin(X):9:8);. %I, J: integer; %X, SN, FAT: real; disp('sen()'); 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; if ( mod(i,2) == 0 ) SN = SN - X ^ ( 2 * I - 1 ) / FAT; % termo par SN = SN + X ^ ( 2 * I - 1 ) / FAT; % termo impar fprintf(1,'sen(%d) = %f\n',x,sn); fprintf(1,'sin(%d) = %f\n',x,sin(x)); UFMG ICE DCC Programação de Computadores 2º. Sem 2005 David Menoti 2
algoritmo EE2; constante N = 5; inteiro : C, D; real : SOMA, MEDIA, M1, M2, AUX, VET[1..N]; 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]; -se ( ( VET[C] > M2 ) ou ( C = 2) ) então M2 <- VET[C]; SOMA <- SOMA + VET[C]; imprima("1o. Maior: ",M1); imprima("2o. Maior: ",M2); 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; imprima("valores maiores que a media"); para C de 1 até N faça se ( VET[C] > MEDIA ) então imprima(vet[c]); UFMG ICE DCC Programação de Computadores 2º. Sem 2005 David Menoti 3
program EE2; const N = 50; C, D : integer; SOMA, MEDIA, M1, M2, AUX : real; VET: array [1..N] of real; SOMA := 0; for C := 1 to N do write('digite um valor: '); readln(vet[c]); if ( ( VET[C] > M1 ) or ( C = 1) ) then M2 := M1; M1 := VET[C]; if ( ( VET[C] > M2 ) or ( C = 2) ) then M2 := VET[C]; ; SOMA := SOMA + VET[C]; ; writeln('1o. Maior: ',M1); writeln('2o. Maior: ',M2); 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 AUX := VET[D]; VET[D] := VET[D+1]; VET[D+1] := AUX; ; writeln('valores maiores que a media'); for C := 1 to N do if ( VET[C] > MEDIA ) then writeln(vet[c],' ');. 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); if ( ( VET(C) > M2 ) ( C == 2) ) M2 := VET(C); SOMA := SOMA + VET(C); ; fprintf(1,'1o. Maior: %f\n',m1); fprintf(1,'2o. Maior: %f\n',m2); 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; fprintf(1,'valores maiores que a media\n'); for C = 1 : N if ( VET(C) > MEDIA ) fprinf(1,'%d ',VET(C)); fprintf(1,'\n'); UFMG ICE 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; real : M, K ) : real; se ( X1 - X2 = 0 ) então EQ1 <- 0; EQ1 <- 1; M <- ( Y1 - Y2 ) / ( X1 - X2); K <- Y1 - M * X1; leia(x1l,y1l); leia(x2l,y2l); se ( EQ1(X1L,Y1L,X2L,Y2L,ML,KL) = 0 ) então imprima("impossivel calcular M e K"); imprima("m = ",ML,", K = ",KL); program EEQ3; X1L, Y1L, X2L, Y2L, ML, KL : real; function EQ1(X1, Y1, X2, Y2 : real; M, K : real) : real; if ( X1 - X2 = 0 ) then EQ1 := 0 EQ1 := 1; M := ( Y1 - Y2 ) / ( X1 - X2); K := Y1 - M * X1; ; ; 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') writeln('m = ',ML:4:4,', K = ',KL:4:4);. 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'); fprintf(1,'m = %f, K = %f\n',ml,kl); function [R,M,K] = EQ1(X1, Y1, X2, Y2) if ( X1 - X2 = 0 ) R = 0; R = 1; M = ( Y1 - Y2 ) / ( X1 - X2); K = Y1 - M * X1; UFMG ICE DCC Programação de Computadores 2º. Sem 2005 David Menoti 5