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.
Download

Exercícios de programação