Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
solu�_es/3a Leva/Ex_07.pdf
Exercício 07
passo i i i < 2 passo j j j > 10 i * j
1 5 F 1 1 F 5
2 2 F 10
3 3 F 15
4 4 F 20
5 5 F 25
6 6 F 30
7 7 F 35
8 8 F 40
9 9 F 45
10 10 F 50
11 11 V
2 4 F 1 1 F 4
2 2 F 8
3 3 F 12
4 4 F 16
5 5 F 20
6 6 F 24
7 7 F 28
8 8 F 32
9 9 F 36
10 10 F 40
11 11 V
4 * 7 = 28
4 *8 = 32
4 * 9 = 36
4 * 10 = 40
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
5 * 10 = 50
Saída
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
passo i i i < 2 passo j j j > 10 i * j Saída
3 3 F 1 1 F 3
2 2 F 6
3 3 F 9
4 4 F 12
5 5 F 15
6 6 F 18
7 7 F 21
8 8 F 24
9 9 F 27
10 10 F 30
11 11 V
4 2 F 1 1 F 2
2 2 F 4
3 3 F 6
4 4 F 8
5 5 F 10
6 6 F 12
7 7 F 14
8 8 F 16
9 9 F 18
10 10 F 20
11 11 V
5 1 V
2 * 9 = 18
2 * 10 = 20
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 *8 = 16
3 *8 = 24
3 * 9 = 27
3 * 10 = 30
2 * 1 = 2
2 * 2 = 4
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 1 = 3
solu�_es/3a Leva/Ex_05_e_06.pdf
Exercício 05
passo i j m i > j i - j m + 1
1 25 7 0 V 18 1
2 18 7 1 V 11 2
3 11 7 2 V 4 3
4 4 7 3 F
Exercício 06
passo m m*m*m m-1 m = 0
1 5 125 4 F
2 4 64 3 F
3 3 27 2 F
4 2 8 1 F
5 1 1 0 V1 elevado ao cubo = 1
Saída
5 elevado ao cubo = 125
4 elevado ao cubo = 64
3 elevado ao cubo = 27
2 elevado ao cubo = 8
solu�_es/3a Leva/Ex_08.pdf
Exercício 08
passo i i i < 2 passo j j j > i passo k k k < 1 i * j * k
1 5 F 1 2 F 1 2 F 20
2 1 F 10
3 0 V
2 3 F 1 3 F 45
2 2 F 30
3 1 F 15
4 0 V
3 4 F 1 4 F 80
2 3 F 60
3 2 F 40
4 1 F 20
5 0 V
4 5 F 1 5 F 125
2 4 F 100
3 3 F 75
4 2 F 50
5 1 F 25
6 0 V
5 6 V
5 * 5 * 4 = 100
5 * 5 * 3 = 75
5 * 5 * 2 = 50
5 * 5 * 1 = 25
5 * 4 * 4 = 80
5 * 4 * 3 = 60
5 * 4 * 2 = 40
5 * 4 * 1 = 20
5 * 5 * 5 = 125
5 * 2 * 1 = 10
5 * 3 * 3 = 45
5 * 3 * 2 = 30
5 * 3 * 1 = 15
Saída
5 * 2 * 2 = 20
passo i i i < 2 passo j j j > i passo k k k < 1 i * j * k Saída
2 4 F 1 2 F 1 2 F 16
2 1 F 8
3 0 V
2 3 F 1 3 F 36
2 2 F 24
3 1 F 12
4 0 V
3 4 F 1 4 F 64
2 3 F 48
3 2 F 32
4 1 F 16
5 0 V
4 5 V
4 * 4 * 4 = 64
4 * 4 * 3 = 48
4 * 4 * 2 = 32
4 * 4 * 1 = 16
4 * 2 * 2 = 16
4 * 2 * 1 = 8
4 * 3 * 3 = 36
4 * 3 * 2 = 24
4 * 3 * 1 = 12
passo i i i < 2 passo j j j > i passo k k k < 1 i * j * k Saída
3 3 F 1 2 F 1 2 F 12
2 1 F 6
3 0 V
2 3 F 1 3 F 27
2 2 F 18
3 1 F 9
4 0 V
2 4 V
4 2 F 1 2 F 1 2 F 8
2 1 F 4
3 0 V
2 3 V
5 1 V
3 * 3 * 1 = 9
2 * 2 * 2 = 8
2 * 2 * 1 = 4
3 * 2 * 2 = 12
3 * 2 * 1 = 6
3 * 3 * 3 = 27
3 * 3 * 2 = 18
solu�_es/1a Leva/Ex_01.lpr
{
------------------------------------------------------------------
Este programa lê um número inteiro de quatro dígitos e o escreve
em ordem invertida. Por exemplo, se o número lido for 2583, o
programa o escreve como 3852.
------------------------------------------------------------------
}
program Ex_01;
{
------------------------------------------------------------------
O programa precisa isolar cada dígito do número informado, a fim
de inverter sua posição relativa aos demais.
Para isso, o programa utiliza o seguinte algoritmo:
<> para pegar o dígito do milhar(m), ele executa uma divisão inteira
do número informado por 1000 e registra seu quociente.
Suponha que o número informado seja 3864.
Ao dividir este valor por 1000, o quociente será 3.
<> para pegar o dígito da centena(c), ele multiplica o valor de m por
1000 e subtrai o resultado do número informado, a fim de obter o
valor de suas centenas. Em seguida, ele executa uam divisão inteira
deste valor por 100 e registra seu quociente.
Continuando com o exemplo acima, ele multiplica o valor do dígito
obtido na operação anterior (=3) por 1000 e subtrai o resultado
(3000) do valor informado (=3864). O resultado (=864) é então
dividido por 100. O quociente desta divisão inteira (=8) é
registrado como sendo o dígito da centena.
<> para pegar o dígito da dezena(d), ele multiplica o valor de c por
100 e subtrai o resultado da expressão (m * 1000 + c * 100), a fim
de obter o valor de suas dezenas.Em seguida, ele executa uam divisão
inteira deste valor por 10 e registra seu quociente.
Continuando com o exemplo acima, ele multiplica o valor do dígito
da milhar (=3) por 1000 e do dígito da centena (=8) por 100; soma
os dois valores e subtrai o resultado (3800) do valor informado (=3864).
O resultado (=64) é então dividido por 10 e o quociente (=6) é
registrado como sendo o dígito da dezena.
<> para pegar o dígito da unidade(u), ele subtrai o resultado da expressão
(m * 1000 + c * 100 + d * 10) do número informado, a fim de obter o valor
de suas unidades.
Continuando com o exemplo acima, ele multiplica o valor do dígito
da milhar (=3) por 1000; do dígito da centena (=8) por 100 e do dígito
da dezena (=6) por 10; soma esses três valores e subtrai o resultado
(3860) do valor informado (=3864). O resultado (=4) é então
registrado como sendo o dígito da unidade.
<> Finalmente, o programa calcula a seginte expressão:
(u * 100 + d * 100 + c * 10 + m) para produzir o resultado final.
------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var m, // dígito da milhar
c, // dígito da centena
d, // dígito da dezena
u, // dígito da unidade
n, // número informado pelo usuário
ni: integer; // número invertido
begin
//
// Solicita a entrada do número e assegura que ele tenha 4 dígitos
//
repeat
write('Escreva um numero de 4 digitos: ');
readln(n)
until (n>=1000) and (n<=9999);
// pega o dígito da milhar
m := (n div 1000);
// pega o dígito da centena
c := (n-m*1000)div 100;
// pega o dígito da dezena
d := (n - (m * 1000 + c * 100)) div 10;
// pega o dígito da unidade
u := n-(m*1000 + c * 100 + d * 10);
// inverte o número informado
ni := u*1000 + d*100 + c * 10 + m;
{--------------------------------------------------------------------
Alternativamente, vocês poderiam pegar esses dígitos através das
seguintes expressões;
m := (n div 1000);
c := (n mod 1000) div 100;
d := (n mod 100) div 10;
u := (n mod 10);
---------------------------------------------------------------------}
// escreve o número invertido
writeln;
writeln;
writeln('O numero ',n,' invertido e igual a: ',ni);
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_12.lpi
solu�_es/1a Leva/Ex_20.lpr
{
--------------------------------------------------
Exemplo de uso do comando FOR e do comando IF
---------------------------------------------------
}
program Ex_20;
{
---------------------------------------------------------
Este programa lê 20 números reais e, ao final, informa
quantos deles estão no intervalo [60; 180].
---------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
i, contador: integer;
x: real;
begin
contador := 0;
for i:=1 to 20 do
begin
write ('Entre com um numero: ');
readln(x);
if (x >= 60) and (x <= 180) then
contador := contador + 1;
end;
writeln;
writeln('Dos 20 valores lidos, ', contador, ' pertencem ao intervalo [60,180].');
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_03.lpr
{
----------------------------------------------------------------------
Este programa determina o consumo médio de uma frota de 5 veículos,
com base na distância percorrida por cada um deles e no total de
combustível gasto durante esse percurso. Para isso, o programa
lê o código de identificação de cada veículo; a distância por ele
percorrida; bem como a quantidade de combustível que ele consumiu.
Na saída, o programa produz uma linha para cada veículo, contendo
as informações fornecidas pelo usuário e o valor correspondente a
seu consumo médio de combustível. No final, ele produz uma linha
resumo informando o consumo médio da frota como um todo.
Notas:
(1) O código de identificação de veículo é um número inteiro.
(2) O código de identificação de veículo não pode ter duplicatas.
(3) As distâncias deverão ser informadas em Quilômetros (Km).
(4) O consumo de combustível deverá ser informado em litros (l).
(5) Os dados de distância e consumo admitem valores fracionários.
------------------------------------------------------------------
}
program Ex_03;
{
------------------------------------------------------------------------
O programa deve ler um conjunto de três valores para cada um dos
veículos pertencentes à frota, quais sejam:
<> código de identificação do veículo (inteiro).
<> distância percorrida em quilômetros (real).
<> consumo de combustível em litros (real).
Como são 5 veículos, o programa utiliza a estrutura de repetição
FOR, pois o número de repetições é conhecido a priori.
Este exemplo também ilustra o uso de arrays e uma técnica de produção
de relatórios em Pascal.
------------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
Crt,
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
// definição da estrutura de dados para armazenar os ids dos 5 veículos
id: array[1..5] of integer;
// definição da estrutura de dados para armazenar as distâncias percorridas
// por cada um dos 5 veículos.
distancia: array[1..5] of real;
// definição da estrutura de dados para armazenar o consumo de combustível
// de cada um dos 5 veículos.
consumo: array[1..5] of real;
// definição da variável que armazena a distância total percorrida
// pelos 5 veículos.
distanciaTotal: real;
// definição da variável que armazena o consumo total dos 5 veículos.
consumoTotal: real;
// definição das variáveis de controle das estruturas de repetição "for"
i, j: integer;
// definição da variável de sinalização de id duplicata.
flag: boolean;
begin
{
----------------------------------------------------------------------------
Inicialmente, o programa zera as variáveis que acumulam a distâcia total
percorrida pelos 5 veículos e o consumo total de combustíveis.
Esta operação também poderia ser realizada no momento da definição das
respectivas variáveis, de acordo com a seguinte declaração:
distanciaTotal: real = 0;
consumoTotal: real = 0;
----------------------------------------------------------------------------
}
distanciaTotal := 0;
consumoTotal := 0;
{
----------------------------------------------------------------------------
Em seguida, o programa solicita ao usuário que entre com os 5 conjuntos
de dados relativos a cada veículo. A cada iteração, o programa armazena
os valores lidos nas devidas posições dos arrays correspondentes às três
diferentes categorias de dados.
----------------------------------------------------------------------------
}
writeln ('Informe, para cada veiculo:');
writeln;
writeln ('<> seu codigo de identificacao,');
writeln;
writeln ('<> a distancia por ele percorrida (em Km) e,');
writeln;
writeln ('<> o seu consumo de combustivel (em litros).');
writeln;
writeln ('Entre com esse valores em 5 passos distintos,');
writeln;
writeln ('uma vez para cada um dos 5 veiculos da frota.');
writeln;
for i := 1 to 5 do
begin
//------------------------------------------------------------------------
// A cada passo desta estrutura de repetição, o programa primeiro solicita
// ao usuário o valor da identificação do veículo.
//
// Após a leitura desse código, o programa verifica se o valor digitado
// já foi informado anteriormente, uma vez que não pode haver ids
// duplicatas.
//
// Vale lembrar que o valor da variável i indica a que carro da frota
// correspondem os dados que estão sendo fornecidos pelo usuário, i.e.:
// i=1 -> primeiro carrro
// i=2 -> segundo carrro
// e assim por diante.
//
// Assim sendo, o programa compara o valor de id[i] com todos os
// valores que já foram lidos até então, i.e.: desde id[1] até id[i-1].
//
// Para isso, é preciso utilizar uma outra estrutura de repetição
// FOR, cuja variável de controle (j) varia desde 1 até (i-1).
//
// Caso o valor de id[i] venha a ser igual a um dos valores informados
// anteriormente, o programa seta uma variável booleana de sinalização
// (flag) com o valor True.
//
// Evidentemente, antes dessa estrutura FOR, a variável flag deve ser
// inicializada com o valor False, uma vez que ainda não se sabe se o
// último valor informado é ou não duplicata.
//
// Ao encontrar um valor duplicata, além de setar a variável flag com
// o valor True, o programa interrompe a repetição da estrutura FOR
// interna, por meio do comando break.
//
// Essa operação é, então, repetida até que a variável flag possua
// o valor False.
//
// Isso significa, que a nova estrutura FOR deve estar
// embutida numa outra estrutura de repeitção (repeat...until) que
// assegura que a estrutura FOR interna seja executada até que o
// usuário informe um valor válido (não duplicata).
//
// Em seguida, o programa solicita ao usuário que entre com os
// valores correspondentes à distância percorrida pelo veículo
// e ao seu consumo de combustível.
//------------------------------------------------------------------------
repeat
writeln;
write ('Entre com a identificacao do veiculo ', i, ': ');
readln (id [i]);
flag := False;
for j:= 1 to (i-1) do
if id[i] = id[j] then
begin
flag := True;
break;
end;
until (flag = False);
writeln;
writeln ('Entre com os valores correspondentes aa distancia percorrida pelo veiculo ');
writeln;
writeln (i, ' (em Km) e ao seu consumo de combustivel (em litros), separando esses ');
writeln;
writeln ('valores com um ou mais espacos.');
writeln;
readln (distancia
[i], consumo [i]);
// Finalmente, o programa acumula a distancia percorrida e o consumo
// de combustível associados ao veículo corrente, em suas respectivas
// variáveis de totalização.
distanciaTotal := distanciaTotal + distancia [i];
consumoTotal := consumoTotal + consumo [i];
end;
{
-----------------------------------------------------------------------
Neste momento, o programa começa a gerar o relatório de saída,
escrevendo seu cabeçalho.
-----------------------------------------------------------------------
}
clrscr;
writeln; // gera uma linha em branco antes do cabeçalho
writeln ('--------------------------------------------------------');
writeln ('VEICULO DISTANCIA CONSUMO REAL CONSUMO MEDIO');
writeln ('--------------------------------------------------------');
{
-----------------------------------------------------------------------
A seguir, o programa emite uma linha de saída para cada um dos 5
veículos.
-----------------------------------------------------------------------
}
for i := 1 to 5 do
begin
writeln (id[i]:7, distancia[i]:11:1, ' Km', consumo[i]:15:1,
' l', distancia[i]/consumo[i]:13:1, ' Km/l');
end;
{
-----------------------------------------------------------------------
Após essas linhas, o programa emite uma linha de separação antes de
emitir a linha de resumo.
-----------------------------------------------------------------------
}
writeln ('--------------------------------------------------------');
{
-----------------------------------------------------------------------
Fianlmente, o programa emite a linha de resumo, informando o consumo
médio de cobustível de toda frota.
-----------------------------------------------------------------------
}
writeln ('TOTAL',
distanciaTotal:13:1, ' Km',
consumoTotal:15:1, ' l',
distanciaTotal/consumoTotal:13:1, ' Km/l');
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_10.lpi
solu�_es/1a Leva/Ex_11.lpi
solu�_es/1a Leva/Ex_02.lpr
{
------------------------------------------------------------------
Este programa converte temperaturas em graus Celsius para graus
Fahrenheit, utilizando a seguinte fórmula da Física:
(F-32)/9 = C/5 isto é,
F = (9*C)/5 + 32
A fim de aumentar sua utilidade ficará convertendo temperaturas
para o usuário até que ele entre com o valor 9999.
------------------------------------------------------------------
}
program Ex_02;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var t_c, // temperatura em Celsius
t_f: real; // temperatura em Fahrenheit
begin
//
// Solicita a entrada da primeira temperatura a ser convertida
//
write('Temperatura em graus Celsius : ');
readln(t_c);
while (t_c <> 9999) do
begin
t_f := 9 * t_c / 5 + 32;
writeln('Temperatura em graus Fahrenheit: ', t_f:0:1);
writeln;
write('Temperatura em graus Celsius : '); // solicita mais uma temperatura
readln(t_c);
end;
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_01.lpi
solu�_es/1a Leva/Ex_12.lpr
{
-----------------------------------------------------------------------------
Este programa determina a soma dos 50 primeiros termos da
série de Fibonacci.
Esta série é definida da seguinte forma:
F1 = 0 ............ primeiro termo (por definição)
F2 = 1 ............ segundo termo (por definição)
A partir do terceiro, cada termo é igual à soma
dos termos que o antecedem, ou seja:
F3 = F1 + F2 ......... F3 = 0 + 1 = 1
F4 = F2 + F3 ......... F4 = 1 + 1 = 2
F5 = F3 + F4 ......... F5 = 1 + 2 = 3
e assim por diante.
Assim sendo, precisamos de uma variável para armazenar o valor do termo
anterior (f1) e outra para armazenar o novo termo (f2).
Como, por definição, o primeiro termo da série é igual a zero e o segundo
igual a um, devemos, inicialmente, inicializar as variáveis f1 e f2, i.e.:
f1 := 0; // termo anterior
f2 := 1; // termo novo
-----------------------------------------------------------------------------
}
program Ex_12;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var i:integer; // variável de controle da estrutura "for".
f1, f2: real; // variáveis que armazenam os dois últimos termos da série
soma: real; // variável que armazena a soma dos termos da série
begin
// inicializa os dois primeiros termos da série e acumula seus valores
f1 := 0;
f2 := 1;
soma := f1 + f2;
// escreve os dois primeiros termos
writeln('f 1 = ', f1:10:0);
writeln;
writeln('f 2 = ', f2:10:0);
// determina os termos restantes, a partir do terceiro
for i:= 3 to 50 do
begin
writeln;
f2 := f2 + f1; // Ao fazer isso, eu perco o valor antigo de f2
f1 := f2 - f1; // Ao fazer isso, eu recupero o valor antigo de f2
soma := soma + f2;
writeln('f',i:2, ' = ', f2:10:0);
end;
writeln;
writeln;
writeln('A soma dos 50 primeiros termos de Fibonacci e: ', soma:12:0);
writeln;
writeln;
writeln;
writeln('Pressione
<Enter> para Encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_03.lpi
solu�_es/1a Leva/Ex_10.lpr
{
----------------------------------------------------------------------
Este programa lê dois números inteiros entre 2 e 100 (x e y)
e calcula o valor da operção que eleva o primeiro número
à potência equivalente ao valor do segundo número, isto é:.
x elevado a y (x ^ y).
O intervalo [2, 100] foi estabelecido para evitar que o valor
da operação ultrapasse a capacidade de armazenamento da memória
do computador.
A estratégia de solução é a seguinte:
x ^ 1 = 1 * x = (x ^ 0) * x
x ^ 2 = (x ^ 1) * x
x ^ 3 = (x ^ 2) * x
............................
x ^ y = (x ^ (y-1)) * x
----------------------------------------------------------------------
}
program Ex_10;
{
------------------------------------------------------------------------
O programa faz uso da técnica de depuração dos dados fornecidos pelo
usuário e também dos comandos REPEAT..UNTIL e FOR
------------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var x, y: real; // variáveis que armazenam os números lidos
xx, yy: integer; // variáveis que armazenam os números truncados
i: integer; // variável de controle da estrutura "for".
m: integer; // variável que armazena o valor da potenciação
begin
repeat
write('Entre com dois numeros inteiros entre 2 e 100: ');
readln(x, y);
until ((x>=2) and (x<=100)) and ((y>=2) and (y<=100));
{------------------------------------------------------------------
caso o usuário tenha entrado com números reais em vez de inteiros,
é preciso truncar suas casas decimais por meio da função TRUNC:
------------------------------------------------------------------}
xx := trunc(x);
yy := trunc(y);
m := 1 ; // equivale à (x ^ 0)
for i:= 1 to yy do
m := m * xx;
writeln;
writeln('O valor de ', xx, ' elevado a ', yy, ' = ', m);
writeln;
writeln('Pressione <Enter> para Encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_20.lpi
solu�_es/1a Leva/Ex_11.lpr
{
--------------------------------------------------------------
Este programa calcula e escreva a soma de todos os números
ímpares positivos menores do que 100.
--------------------------------------------------------------
}
program Ex_11;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var i, // variável de controle da estrutura "for".
soma: integer; // variável que armazena o valor da soma
begin
soma := 0;
for i:= 1 to 99 do
if (i mod 2) <> 0 then // testa se i é ímpar (resto da div por 2 <> 0)
soma := soma + i;
writeln('A soma dos numeros impares menores do que 100 e: ', soma);
writeln;
writeln('Pressione <Enter> para Encerrar.');
readln;
end.
solu�_es/1a Leva/Ex_02.lpi
solu�_es/2a leva/lib/i386-win32/Ex_24.res
solu�_es/2a leva/lib/i386-win32/Ex_24.or
solu�_es/2a leva/lib/i386-win32/Ex_24.o
solu�_es/2a leva/lib/i386-win32/Ex_24.compiled
solu�_es/4a leva/lib/i386-win32/Ex_18.res
solu�_es/4a leva/lib/i386-win32/Ex_14.o
solu�_es/4a leva/lib/i386-win32/Ex_18.o
solu�_es/4a leva/lib/i386-win32/Ex_18.or
solu�_es/4a leva/lib/i386-win32/Ex_14.or
solu�_es/4a leva/lib/i386-win32/Ex_18.compiled
solu�_es/4a leva/lib/i386-win32/Ex_14.compiled
solu�_es/4a leva/lib/i386-win32/Ex_14.res
solu�_es/4a Leva/Ex_18.lpr
program Ex_18;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
num: real;
resp: string;
erro: integer;
begin
repeat
writeln;
write('Entre um numero qualquer: ');
readln(resp);
val(resp, num, erro);
until erro = 0;
writeln;
if num < 0 then
writeln('O numero ', num:0:2, ' e'' negativo.')
else if num <= 25 then
writeln('O numero ', num:0:2, ' pertence ao intervalo [0; 25].')
else if num <= 40 then
writeln('O numero ', num:0:2, ' pertence ao intervalo (25; 40].')
else if num <= 90 then
writeln('O numero ', num:0:2, ' pertence ao intervalo (40; 90].')
else
writeln('O numero ', num:0:2, ' e'' maior do que 90.');
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/4a Leva/Ex_04.lpr
program Ex_04;
{
------------------------------------------------------------------------------
Este programa lê o custo de fabricação de um veículo e calcula o seu preço
final, através da seguinte fórmula:
preco_base := 1.28 * custo_fabr
preco_final := 1.45 * preco_base
------------------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
custo_fabr,
preco_base,
preco_final: real;
resp: string;
erro: integer;
begin
// leitura do custo de fabricacao
repeat
write ('Entre com o custo de fabricacao do veiculo: ');
readln(resp);
val(resp, custo_fabr, erro);
until erro = 0;
// cálculo do preço base
preco_base := 1.28 * custo_fabr;
// cálculo do preço final
preco_final := 1.45 * preco_base;
writeln;
writeln('O preco final do veiculo = ', preco_final:0:2);
writeln;
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/4a Leva/Ex_16.lpi
solu�_es/4a Leva/Ex_19.lpr
program Ex_19;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
sal_minimo: real;
sal_atual: real;
sal_novo: real;
percentual: real;
reajuste: real;
total: real = 0;
resp: string;
nome: string;
erro: integer;
i: integer;
begin
repeat
writeln;
write('Entre o valor do salario minimo: ');
readln(resp);
val(resp, sal_minimo, erro);
until erro = 0;
writeln;
for i:= 1 to 2 do
begin
write('Entre o nome do funcionario: ');
readln(nome);
repeat
writeln;
write('Entre o salario do funcionario: ');
readln(resp);
val(resp, sal_atual, erro);
until erro = 0;
if sal_atual < (3*sal_minimo) then
percentual := 0.50
else if sal_atual <= (10*sal_minimo) then
percentual := 0.20
else if sal_atual <= (20*sal_minimo) then
percentual := 0.15
else
percentual := 0.10;
writeln;
reajuste := percentual * sal_atual;
sal_novo := sal_atual + reajuste;
writeln('------------------------------------------------------------');
writeln('Nome: ':15, nome);
writeln('Salario Atual: ', sal_atual:0:2);
writeln('Reajuste: ':15, reajuste:0:2);
writeln('Salario Novo: ':15, sal_novo:0:2);
writeln('------------------------------------------------------------');
total := total + reajuste;
writeln;
writeln;
end;
writeln;
writeln('Total de reajustes: ', total:0:2);
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/4a Leva/Ex_14.lpi
solu�_es/4a Leva/Ex_15.lpi
solu�_es/4a Leva/Ex_09.lpi
solu�_es/4a Leva/Ex_04.lpi
solu�_es/4a Leva/Ex_18.lpi
solu�_es/4a Leva/Ex_19.lpi
solu�_es/4a Leva/Ex_16.lpr
program Ex_16;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
num: integer;
resp: string;
erro: integer;
begin
repeat
repeat
writeln;
write('Entre um numero inteiro de 1 a 10: ');
readln(resp);
val(resp, num, erro);
until erro = 0;
writeln;
case num of
1: writeln('Nominal: 1 Cardinal:
Um Ordinal: Primeiro');
2: writeln('Nominal: 2 Cardinal: Dois Ordinal: Segundo');
3: writeln('Nominal: 3 Cardinal: Tres Ordinal: Terceiro');
4: writeln('Nominal: 4 Cardinal: Quatro Ordinal: Quarto');
5: writeln('Nominal: 5 Cardinal: Cinco Ordinal: Quinto');
6: writeln('Nominal: 6 Cardinal: Seis Ordinal: Sexto');
7: writeln('Nominal: 7 Cardinal: Sete Ordinal: Setimo');
8: writeln('Nominal: 8 Cardinal: Oito Ordinal: Oitavo');
9: writeln('Nominal: 9 Cardinal: Nove Ordinal: Nono');
10: writeln('Nominal: 10 Cardinal: Dez Ordinal: Decimo');
else
begin
writeln('Valor invalido. Tente novamente.');
erro := 99;
end;
end;
until erro = 0;
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/4a Leva/Ex_14.lpr
program Ex_14;
{
------------------------------------------------------------------------------
Este programa lê dois números reais e determina se eles são iguais ou
diferentes. Neste caso, o programa indica qual o maior e o menor.
------------------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
x, y: real;
resp: string;
erro: integer;
begin
// leitura do número x
repeat
write ('Entre um numero qualquer: ');
readln(resp);
val(resp, x, erro);
until erro = 0;
// leitura do número y
repeat
write ('Entre outro numero: ');
readln(resp);
val(resp, y, erro);
until erro = 0;
writeln;
writeln;
// teste de igualdade
if (x = y) then
writeln('Os numeros lidos sao iguais (',x:0:1,'). ')
else if (x < y) then
writeln('Dentre os numeros informados, o menor eh ', x:0:1, ' e o maior eh ', y:0:1)
else
writeln('Dentre os numeros informados, o menor eh ', y:0:1, ' e o maior eh ', x:0:1);
writeln;
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/4a Leva/Ex_09.lpr
program Ex_09;
{
------------------------------------------------------------------------------
Este programa lê dois números inteiros e calcula o produto entre eles sem
utilizar a operação de multiplicação, apenas adições.
Assim, x * Y pode ser calculado somando-se x, y vezes, ou somando-se y,
x vezes.
------------------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
x, y: integer;
resp: string;
erro: integer;
i: integer;
prod: integer;
begin
// leitura do número x
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, x, erro);
until erro = 0;
// leitura do número y
repeat
write ('Entre com outro numero inteiro: ');
readln(resp);
val(resp, y, erro);
until erro = 0;
// inicializar a variável que armazerá o produto x*y
prod := 0;
// calcula do produto
for i:=1 to y do
prod := prod + x;
// escreve o resultado
writeln;
writeln(x, ' * ', y, ' = ', prod);
writeln;
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/4a Leva/Ex_15.lpr
program Ex_15;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
idade: integer;
resp: string;
erro: integer;
begin
repeat
write('Entre a idade do nadador (entre 99 para encerrar): ');
readln(resp);
val(resp, idade, erro);
until erro = 0;
while (idade <> 99) do
begin
writeln;
writeln;
case idade of
5.. 7: writeln('O nadador pertence aa categoria "Infantil A"');
8..10: writeln('O nadador pertence aa categoria "Infantil B"');
11..13: writeln('O nadador pertence aa categoria "Juvenil A"');
14..17: writeln('O nadador pertence aa categoria "Juvenil B"');
18..25: writeln('O nadador pertence aa categoria "Senior"');
else
writeln('Idade fora da faixa etaria.');
end;
writeln;
writeln;
repeat
write('Entre a idade do nadador (entre 99 para encerrar): ');
readln(resp);
val(resp, idade, erro);
until erro = 0;
end;
end.
solu�_es/4a leva/backup/Ex_18.lpi.bak
solu�_es/4a leva/backup/Ex_18.lpr.bak
program Ex_18;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
num: integer;
resp: string;
erro: integer;
begin
repeat
writeln;
write('Entre um numero qualquer: ');
readln(resp);
val(resp, num, erro);
until erro = 0;
writeln;
if num < 0 then
writeln('O numero ', num, ' e'' negativo.')
else if num <= 25 then
writeln('O numero ', num, ' pertence ao intervalo [0; 25].')
else if num <= 40 then
writeln('O numero ', num, ' pertence ao intervalo (25; 40].')
else if num <= 90 then
writeln('O numero ', num, ' pertence ao intervalo (40; 90].')
else
writeln('O numero ', num, ' e'' maior do que 90.');
writeln;
writeln;
writeln('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/4a leva/backup/Ex_14.lpi.bak
solu�_es/4a leva/backup/Ex_14.lpr.bak
program Ex_14;
{
------------------------------------------------------------------------------
Este programa lê dois números reais e determina se eles são iguais ou
diferentes. Neste caso, o programa indica qual o maior e o menor.
------------------------------------------------------------------------------
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
x, y: real;
resp: string;
erro: integer;
begin
// leitura do número x
repeat
write ('Entre um numero qualquer: ');
readln(resp);
val(resp, x, erro);
until erro = 0;
// leitura do número y
repeat
write ('Entre outro numero: ');
readln(resp);
val(resp, y, erro);
until erro = 0;
// teste de igualdade
if (x = y) then
writeln('Os numeros lidos sao iguais (',x:0:2,'). ')
else if (x < y) then
writeln('Dentre os numeros informados, o menor eh ', x:0:2, ' e o maior eh ', y:0:2)
else
writeln('Dentre os numeros informados, o menor eh ', y:0:2, ' e o maior eh ', x:0:2);
writeln;
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/2a Leva/Ex_17.lpr
{
------------------------------------------------------------------------------
Este programa lê quatro inteiros e os coloca em ordem decrescente sem
utilizar arrays. Ele utiliza o seguinte algoritmo:
(1) comparamos os dois primeiros números lidos e armazenamos o valor do
maior deles na variável maior1 e o menor na variável menor1.
(2) fazemos o mesmo com os dois outros números lidos, mas armazenado o
maior deles na variável maior2 e o menor na variável menor2.
(3) em seguida, comparamos os valores de maior1 e de maior2, trocando seus
valores, caso maior1 < maior2 (lembrem-se que a ordem pedida é a
decrescente).
(4) finalmente, comparamos os valores de menor1 e de maior2, trocando seus
valores, caso menor1 > maior2.
Depois disso, as variável maior1, maior2, menor1 e menor2 conterão os valores
lidos em ordem decrescente. Basta então escrevê-los na tela.
Este programa também utiliza a técnica de validação de dados de leitura.
------------------------------------------------------------------------------
}
program Ex_17;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
maior1, menor1: integer;
maior2, menor2: integer;
x1, x2, x3, x4, temp: integer;
resp: string;
erro: integer;
begin
// leitura do primeiro número
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, x1, erro);
until erro = 0;
// leitura do segundo número
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, x2, erro);
until erro = 0;
// leitura do primeiro número
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, x3, erro);
until erro = 0;
// leitura do segundo número
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, x4, erro);
until erro = 0;
if x1 > x2 then // comparação entre os 2 primeiros números lidos
begin
maior1 := x1;
menor1 := x2;
end
else begin
maior1 := x2;
menor1 := x1;
end ;
if x3 > x4 then // comparação entre o terceiro e o quarto números lidos
begin
maior2 := x3;
menor2 := x4;
end
else begin
maior2 := x4;
menor2 := x3;
end ;
// descoberta do maior de todos os números
if maior1 < maior2
then begin
temp := maior1;
maior1 := maior2;
maior2 := temp;
end;
// descoberta do segundo maior número
if menor1 > maior2
then begin
temp := menor1;
menor1 := maior2;
maior2 := temp;
end;
writeln;
writeln('Os numeros lidos, em ordem decrescente, sao: ', maior1, ', ', maior2, ', ', menor1, ', ', menor2);
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/2a Leva/Ex_21.lpr
program Ex_21;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
combustivel: array[1..3] of string = ('Alcool', 'Gasolina', 'Flex');
desconto: array[1..3] of integer = (25, 20, 15);
precoOriginal, precoFinal, valorDesconto, descontoTotal: real;
resp: string;
i, erro: integer;
begin
// leitura do primeiro número
repeat
write ('Entre com o preco do veiculo: ');
readln(resp);
val(resp, precoOriginal, erro);
until erro = 0;
descontoTotal := 0;
while (precoOriginal <> 0) do
begin
repeat
write ('Entre com o tipo de combustivel: ');
readln(resp);
until (resp = 'Alcool') or (resp = 'alcool') or
(resp = 'Gasolina') or (resp = 'gasolina') or
(resp = 'Flex') or (resp = 'flex');
Case resp of
'Alcool', 'alcool' : i := 1;
'Gasolina', 'gasolina': i := 2;
'Flex', 'flex' : i := 3;
end;
valorDesconto := (precoOriginal * desconto[i])/100;
precoFinal := precoOriginal - valorDesconto;
descontoTotal := descontoTotal + valorDesconto;
writeln('Preco: ', precoOriginal:1:2,
' Combustivel: ', resp, ' Preco Final: ', precoFinal:1:2);
writeln;
repeat
write ('Entre com o preco do veiculo: ');
readln(resp);
val(resp, precoOriginal, erro);
until erro = 0;
end;
writeln;
writeln('O valor total de descontos concedidos eh: ', descontoTotal:1:2);
writeln;
write('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/2a Leva/Ex_23.lpr
program Ex_23;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
aliquota: array[1..5] of real = (0.0, 7.5, 15.0, 22.5, 27.5);
deducao: array[1..5] of real = (0.0, 112.43, 280.94, 505.62, 692.78);
renda, imposto: real;
resp: string;
i, erro: integer;
begin
repeat
write ('Entre com sua renda mensal: ');
readln(resp);
val(resp, renda, erro);
until erro = 0;
if (renda <= 1500) then i := 1
else if (renda <= 2250) then i := 2
else if (renda <= 3000) then i := 3
else if (renda <= 3800) then i := 4
else i := 5;
imposto := ( renda * aliquota[i] ) / 100 - deducao[i];
writeln('Voce devera recolher o valor de ', imposto:1:2,
' como imposto de renda.');
writeln;
write('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/2a Leva/Ex_13.lpi
solu�_es/2a Leva/Ex_24.lpi
solu�_es/2a Leva/Ex_21.lpi
solu�_es/2a Leva/Ex_17.lpi
solu�_es/2a Leva/Ex_13.lpr
program Ex_13;
{
Este programa calcula x^y (i.e. x elevado a y) sem usar a operação
de multiplicação.
Primeiramente, precisamos reconhecer que:
(1) para calcularmos (x^2) precisamos somar x, x vezes, isto é:
x^2 = x + x + x + x + ........ + x ou seja, x vezes x
(2) para calcularmos (x^3) precisamos somar (x^2), x vezes, isto é:
x^3 = (x^2) + (x^2) + (x^2) +.... + (x^2) ou seja, (x^2) vezes x)
(3) para calcularmos (x^4) precisamos somar (x^3), x vezes, isto é:
x^4 = (x^3) + (x^3) + (x^3) +.... + (x^3) ou seja, (x^3) vezes x)
e assim por diante.
Em suma:
x^2 = (x) * x
x^3 = (x^2) * x
x^4 = (x^3) * x
---------------
x^y = [x^(y-1)]*x
Reparem que, a cada vez, estamos somando x vezes uma parcela diferente.
Na primeira vez, a parcela é (x). Na segunda, é (x^2). Na terceira, é (x^3)
e por aí vai até a última vez, quando estaremos somando x^(y-1) x vezes.
Assim, precisamos de uma estrutura de repetição para produzir a somatória
calculada a cada vez e de outra estrutura para repetir o processo para cada
uma das diferentes parcelas:
Para saber o número de parcelas, basta reparar que para obter (x^2), só
precisamos de uma parcela (x). Para obter (x^3), nós precisamos de (x^2) que,
por sua vez, precisa de (x), isto é, (x^3) requer duas parcelas. Ou seja, o
número de parcelas corresponde ao expoente menos 1, isto é, precisamos de
(y-1) parcelas para gerar (x^y).
A cada vez temos de produzir uma somatória e, portanto, a variável que vai
acumular a soma deverá ser zerada antes de se começar a soma a parcela
da vez, x vezes.
Precisamos também de uma variável para armazenar o valor da parcela da hora.
}
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
x, y: integer;
i, j: integer;
soma, parcela: integer;
resp: string;
erro: integer;
begin
// leitura de x
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, x, erro);
until erro = 0;
// leitura de y
repeat
write ('Entre com um numero inteiro: ');
readln(resp);
val(resp, y, erro);
until erro = 0;
parcela := x; // parcela inicial
for i:=1 to (y-1) do // controla o número de parcelas
begin
soma := 0; // zera a variável antes de começar a somatória da vez
for j:=1 to x do // soma a parcela da vez, x vezes.
soma := soma + parcela;
parcela := soma; // Assim que a somatória da vez é produzida,
// ela passa a ser a parcela a ser somada na
// vez seguinte.
end;
writeln;
writeln(x,'^', y, ' = ', soma);
writeln;
writeln;
writeln('Pressione <enter> para encerrar.');
readln;
end.
solu�_es/2a Leva/Ex_23.lpi
solu�_es/2a Leva/Ex_24.lpr
program Ex_24;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
aliquota: array[1..5] of real = (0.0, 7.5, 15.0, 22.5, 27.5);
deducao: array[1..5] of real = (0.0, 112.43, 280.94, 505.62, 692.78);
renda: integer;
imposto: real;
resp: string;
i, erro: integer;
begin
// leitura do primeiro número
repeat
write ('Entre com sua renda mensal: ');
readln(resp);
val(resp, renda, erro);
until erro = 0;
case renda of
0..1500: i := 1;
1501..2250: i := 2;
2251..3000: i := 3;
3001..3800: i := 4;
else
i := 5;
end;
imposto := ( renda * aliquota[i] ) / 100 - deducao[i];
writeln('Voce devera recolher o valor de ', imposto:1:2,
' como imposto de renda.');
writeln;
write('Pressione <Enter> para encerrar.');
readln;
end.
solu�_es/2a leva/backup/Ex_24.lpi.bak
solu�_es/2a leva/backup/Ex_24.lpr.bak
program Ex_24;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes
{ you can add units after this };
{$R *.res}
var
aliquota: array[1..5] of real = (0.0, 7.5, 15.0, 22.5, 27.5);
deducao: array[1..5] of real = (0.0, 112.43, 280.94, 505.62, 692.78);
renda, imposto: real;
resp: string;
i, erro: integer;
begin
// leitura do primeiro número
repeat
write ('Entre com sua renda mensal: ');
readln(resp);
val(resp, renda, erro);
until erro = 0;
case renda of
0..1500: i := 1;
1501..2250: i := 2;
2251..3000: i := 3;
3001..3800: i := 4;
else
i := 5;
end;
imposto := ( renda * aliquota[i] ) / 100 - deducao[i];
writeln('Voce devera recolher o valor de ', imposto:1:2,
' como imposto de renda.');
writeln;
write('Pressione <Enter> para encerrar.');
readln;
end.