CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA – CEFET-SP ÁREA ELETROMECÂNICA Introdução à Informática Iniciação à Linguagem de Programação Pascal - Exercícios Folha: Data: 1 de 6 Professor: 29/05/04 Caruso 1) Digitar o código-fonte no editor do compilador Turbo Pascal para windows, exatamente como apresentado a seguir: program eq2grau; uses WinCrt, Strings; var a, b, c, delta, x1, x2 : real; begin StrCopy( WindowTitle, '-- Solução de equações de 2º grau --' ); WriteLn( 'Cálculo das raízes da equação do 2º grau´ ) WriteLn( 'do tipo "ax^2+bx+c = 0"' ); WriteLn; Write( 'Entre com o valor do coeficiente "a": ' ); ReadLn( a ); Write( 'Entre com o valor do coeficiente "b": ' ); ReadLn( b ); Write( 'Entre com o valor do coeficiente "c": ' ); ReadLn( c ); delta:= b * b - 4 * a * c; x1:= ( -b + sqrt( delta ) ) / ( 2 * a ); x2:= ( -b - sqrt( delta ) ) / ( 2 * a ); WriteLn( 'As raízes da equação:'); WriteLn( a:5:0, 'x^2+', b:5:0, 'x', '+', c:5:0, '=0, são:' ); WriteLn( 'x1= ', x1 : 5 : 4, ' e' ); WriteLn( 'x2= ', x2 : 5 : 4 ); WriteLn; WriteLn; WriteLn( 'Pressione uma tecla para encerrar o programa' ); Repeat until keypressed; DoneWinCrt; end. a) Testar o programa com os seguintes dados: i) a = 3; b = -2; c = -3 Resposta: x1 = 1,3874 x2 = -0,7208 ii) a = 2; b = -9; c = 9 Resposta: x1 = 3,0000 x2 = 1,5000 b) Alterar o programa para: i) Evitar a entrada de dados errôneos ou equivocados, como por exemplo, atribuir o valor zero ao coeficiente “a”; ii) Se a variável “delta” for menor do que zero, o programa deverá manipular as variáveis de acordo e mostrar a resposta em termos de números imaginários. Neste caso, o usuário deverá ser informado de que o valor de delta é menor que zero e que as raízes da equação são imaginárias.. 2) Elaborar um programa para a adivinhação de um número pelo computador, em que o usuário informa se o valor mostrado é maior ou menor que o por ele pensado. Ao final, devem ser mostradas em quantas tentativas o computador conseguiu acertar. O maior número a ser "pensado" pelo usuário deverá ser informado pelo mesmo. 3) O código fonte mostrado a seguir tem a finalidade de encontrar as raízes das equações: CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA – CEFET-SP ÁREA ELETROMECÂNICA Iniciação à Linguagem de Programação Pascal - Exercícios Folha: Professor: 2 de 6 Caruso a1x + b1y = c1 a2x + b2y = c2, Dados os valores dos coeficientes, a1, b1, a2, b2, c1, e c2, os valores de x e y são determinados. program Equacoes_simultâneas_v1; uses WinCrt, Strings; var a1, b1, c1, a2, b2, c2, x, y : real; begin StrCopy( WindowTitle, '-- Cálculo das raízes de equações simultâneas --' ); Writeln( 'Cálculo das raízes de equações simultâneas do tipo: ' ); Writeln( 'a1x + b1y = c1' ); Writeln( 'a2x + b2y = c2' ); Writeln; Write( 'Entre com o coeficiente a1: ' ); Readln( a1 ); Write( 'Entre com o coeficiente b1: ' ); Readln( b1 ); Write( 'Entre com c1 : ' ); Readln( c1 ); Writeln; Write( 'Entre com o coeficiente a2: ' ); Readln( a2 ); Write( 'Entre com o coeficiente b2: ' ); Readln( b2 ); Write( 'Entre com c2 : ' ); Readln( c2 ); x:= ( b1 * c2 - b2 * c1 ) / ( a2 * b1 - a1 * b2 ); y:= ( a1 * c2 - a2 * c1 ) / ( a1 * b2 - a2 * b1 ); Writeln; Writeln( 'O valor das raízes das equações: ' ); Writeln( a1:0:4, 'x + ', b1:0:4, 'y = ', c1:0:4 ); Writeln( a2:0:4, 'x + ', b2:0:4, 'y = ', c2:0:4 ); Writeln( 'são: x = ', x:0:4 ); Writeln( ' y = ', y:0:4 ); Writeln; Write( 'Fim... Pressione uma tecla...' ); While not keypressed do; DoneWinCRT; end. a) Digitar o código fonte no compilador Pascal para windows e testar o programa com os seguintes dados: i) a1 = 1; b1 = –1; c1 = 2; a2 = –3; b2 = 4; c2 = 7, cujas raízes são: x = 15 e y = 13; b) Efetuar as alterações necessárias para as verificações de consistência na entrada de dados, evitando erros em tempo de execução devido à divisão por zero, por exemplo; c) Alterar a segunda versão do programa de modo que seja possível resolver mais de um problema ou resolver uma quantidade indefinida de problemas a cada execução do mesmo; d) Alterar a terceira versão do programa de forma a ser possível corrigir os dados de entrada após todos os dados terem sido digitados; 4) Elaborar função para o cálculo do fatorial de um número inteiro e positivo qualquer. 5) Utilizar a função do programa do exercício 4) para elaborar programa para o cálculo de permutação e combinação de dois números reais quaisquer m, n (m ≥ n). CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA – CEFET-SP ÁREA ELETROMECÂNICA Iniciação à Linguagem de Programação Pascal - Exercícios Folha: Professor: 3 de 6 Caruso 6) Faça um programa que leia o nome (nome1 e nome2) e a idade de duas pessoas (idade1 e idade2), informando quem é maior e quem é menor de idade, quem é a pessoa mais velha e quem é a mais nova, bem como a diferença de idade entre elas. 7) Faça um programa que simule a folha de pagamento de um funcionário. Inicialmente o programa deve ler o nome do funcionário, no de filhos, nº de salários mínimos e nº de horas extras. O programa deve calcular e mostrar o salário bruto, o salário família, o desconto do INSS, desconto de IRPF, valor das horas extras a receber, valor do abono e salário líquido conforme a tabela abaixo: Item Cálculo Salário bruto (SB) Quantidade de salários mínimos x R$ 200,00 Salário família Número de filhos x R$ 23,45 INSS Salário bruto >= R$ 360,00 (7,82% do salário) Salário bruto < R$ 360,00 (6,62% do salário) IRRF Salário bruto > R$ 280,00 (9% do salário) Salário bruto <= R$ 280,00 (7% do salário) Horas Extras Salário bruto >= R$ 750,00 (R$ 10,00 por hora extra) Salário bruto < R$ 750,00 (R$ 7,00 por hora extra) Abono 12% do salário bruto Salário Líquido Bruto + Família + Abono + Horas Extras – INSS - IRPF Program Exercício_6; uses WinCrt; var nome:string[30]; nfilhos,numhe:integer; nsal,salbruto,salfamilia,inss,irpf,salliq,he,abono:real; begin clrscr; write('Digite o nome do funcionário: '); read(nome); write('Digite o numero de filhos do funcionário: '); read(nfilhos); write('Digite o numero de horas extra do funcionário: '); read(numhe); write('Digite o numero de salarios minimos do funcionário: '); read(nsal); salbruto:=nsal*200; salfamilia:=nfilhos*23.45; abono:=salbruto*0.12; if (salbruto>=360) then inss:=salbruto*0.0782 else inss:=salbruto*0.0662; if (salbruto>280) then irpf:=salbruto*0.09 else irpf:=salbruto*0.07; if (salbruto>750) then he:=numhe*10 else he:=numhe*7; salliq:=salbruto+salfamilia+abono+he-inss-irpf; writeln; writeln('O salario bruto do funcionário é de: R$ ',salbruto:9:2); writeln('O salario familia do funcionário é de: R$ ',salfamilia:9:2); writeln('O valor do INSS do funcionário é de: R$ ',inss:9:2); CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA – CEFET-SP ÁREA ELETROMECÂNICA Iniciação à Linguagem de Programação Pascal - Exercícios Folha: Professor: 4 de 6 Caruso writeln('O valor do IRPF do funcionário é de: R$ ',irpf:9:2); writeln('O valor das horas extras do funcionário é de: R$ ',he:9:2); writeln('O valor do abonodo funcionário é de: R$ ',abono:9:2); writeln('O salario liquido do funcionário é de: R$ ',salliq:9:2); While not keypressed do ; DoneWinCrt; end. 8) Um bonde movido por cabo, faz o traslado de pessoas entre o centro de uma cidade turística e um restaurante no cume de um monte. Entre esses dois pontos há três torres, uma em cada extremo do percurso e a terceira no ponto central. A velocidade do veículo depende da posição em que ele se encontra no cabo de aço que o sustenta e desloca. Quando o bonde está a 30 m de uma das torres, sua velocidade é: v = 2,425 + 0,00175 d2 [m/s], onde "d" é a distância em metros entre o bonde e a torre mais próxima. Quando a distância citada é diferente, a velocidade do veículo é: v = 0,625 + 0,12 d – 0,00025 d2 [m/s] Pede-se elaborar um programa que imprima uma tabela que informe a velocidade do veículo a cada 5 m, iniciando na torre localizada no centro da cidade e terminando naquela próxima ao restaurante. Além disso, para cada incremento de 10 m, deve ser impressa a identificação de cada torre (torre 1 → no centro da cidade; torre 2 → no centro do percurso e torre 3 → próxima ao restaurante) e a distância em que se encontra o bonde em relação à primeira torre, como mostrado a seguir. Sabe-se que a distância entre os dois pontos extremos do percurso é de 1000 m. Distância [m] 0 10 20 . . . 990 1000 Relatório de distância e velocidade do bonde Torre mais próxima Velocidade [m/s] 1 v 1 v1 1 v2 . . . . . . 3 vn-1 3 vn 9) A função sin2(x) pode ser representada por: ∞ 3 4 5 6 n 2. n 1. 2. n 2 .x 2 .x ( 1 ) .2 x 2 2 sin( x ) x ... 4! 6! ( 2. n )! n= 1 Escrever um programa que avalie esta soma infinita para um determinado valor de x que é inserido a partir do teclado, imprimindo o resultado após 2, 4, 6, 8, .. , 24 termos e compare cada soma com a solução verdadeira dada pela função do pascal, conforme o exemplo a seguir: n Simul. direr. dif. % 2 x.xxxxxxxx x.xxxxxxxx x.xx 4 x.xxxxxxxx x.xxxxxxxx x.xx . . . . . . . . . . . . 24 x.xxxxxxxx x.xxxxxxxx x.xx CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA – CEFET-SP ÁREA ELETROMECÂNICA Iniciação à Linguagem de Programação Pascal - Exercícios Obs.: utilizar as rotinas estudadas no exercício 4). program SimulaSeno; {simulação da função seno} {$ifdef windows} uses wincrt; {$else} uses crt; {$endif} type float = double; var parar : boolean; cCar : char; nxLoc, nyLoc : integer; PROCEDURE ShowEvol; VAR Nx, Ny : integer; i : longInt; BEGIN Nx := WhereX; Ny := WhereY; CASE cCar OF '-' : cCar := '\'; '\' : cCar := '|'; '|' : cCar := '/'; '/' : cCar := '-'; ELSE BEGIN cCar := '-'; nxLoc := WhereX; nyLoc := WhereY; END; END; GotoXY( nxLoc, nyLoc ); Write( cCar ); GotoXY( Nx, Ny ); IF KeyPressed THEN parar:= true END; {Calcula o fatorial de um numero recursivamente} function fatorial ( n : float ) : float; begin if ( n = 0 ) or ( n = 1 ) then fatorial := 1 else fatorial := n * fatorial( n - 1 ) end; {calcula x^y} function power ( x, y : float ) : float; begin power:= exp( y * ln( x ) ) end; var i, sinal : integer; senoq, angulo : float; begin parar:= false; clrscr; Folha: Professor: 5 de 6 Caruso CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA – CEFET-SP ÁREA ELETROMECÂNICA Iniciação à Linguagem de Programação Pascal - Exercícios Folha: Professor: 6 de 6 Caruso Writeln( 'Insira o ângulo em graus' ); Read( angulo ); clrscr; writeln( 'Simulação da função sen(x)^2':30, ' para o ângulo de: ', angulo:8:4, ' graus' ); writeln; angulo:= pi * angulo / 180; senoq:= 0; sinal:= -1; writeln( 'n':5, 'simul.':12, 'seno^2':14, 'difer.':12, 'dif. %':12 ); for i:= 1 to 24 do begin senoq:= senoq + ( sinal * power( 2, ( 2 * i - 1 ) ) * power( angulo, ( 2 * i ) ) / fatorial( 2 * i ) ); if not odd( i ) then writeln( i:5, abs( senoq ):14:10, power( sin( angulo ), 2 ):14:10, power( sin( angulo ), 2) - abs( senoq ):10:5, ( power( sin( angulo ), 2 ) - abs( senoq ) ) / power( sin( angulo ), 2 ) * 100:10:2 ); sinal:= -1 * sinal; end; writeln; write( 'Pressione qualquer tecla para encerrar...' ); repeat ShowEvol until parar; {$ifdef windows} donewincrt; {$else} clrscr; {$endif} end.