A maior rede de estudos do Brasil

Grátis
146 pág.
livro programando com pascal - jaime evaristo

Pré-visualização | Página 17 de 50

escrito 
agora de forma completa e correta seria o seguinte.
{Programa para calcular a area de um triangulo}
program AreaTriangulo;
var x, y, z, Area, SemiPer : real;
begin
writeln('Digite os comprimentos dos lados do triangulo');
readln(x, y, z);
if (x < y + z) and (y < x + z) and (z < x + y)
then
begin
SemiPer := (x + y + z)/2;
Area := SqrT(SemiPer*(SemiPer - x)*(SemiPer - y)*(SemiPer - z));
writeln('Area do triangulo de lados ',x, ', ', y,' e ', z,': ', Area:0:2);
end
else
writeln(x,', ', y,' e ', z,' não podem ser comprimentos dos lados de um triangulo ');
end.
2. Se queremos um programa que verifique a paridade de um número n dado, podemos determinar o 
valor de Odd(n). Se este valor for true, o número é ímpar; caso contrário, o número dado é par.
{Programa para verificar a paridade de um número}
program VerificaParidade;
var n : integer;
begin
writeln('Digite um numero inteiro');
readln(n);
if Odd(n) = true
then writeln(n,' e impar')
 else writeln(n,' e par');
end.
Vale observar que o valor de Odd(n) é um valor do tipo boolean: true ou false. Assim, como a seqüência 
vinculada à opção then será executada se a expressão Odd(n) = true for true e isto, evidentemente, só é 
verdade se este for o valor de Odd(n), o comando if acima poderia ser escrito simplesmente:
if Odd(n)
then . . .
3. Foi alertado que o programa que "implementa" a função UpCase, apresentado no exemplo 3 da seção 
2.11, fornecia resultados incorretos se o dado de entrada não fosse uma letra minúscula. Esta questão poderia 
se resolvida colocando-se uma estrutura de decisão que verificasse se o caractere digitado era realmente uma 
letra minúscula. Isto seria verdadeiro se Ord(Minuscula) ≥ 97 e Ord(Minuscula) ≤ 122, pois Ord('a') = 97 e 
Ord('z') = 122. 
program UpCase;
var Maiuscula, Minuscula : char;
begin 
 writeln('Digite uma tecla');
readln(Minuscula);
if (Ord(Minuscula) >= 97) and (Ord(Minuscula) <= 122)
 then
 Maiuscula := Chr(Ord(Minuscula) - 32)
else
 Maiuscula := Minuscula;
writeln(Maiuscula);
end.
Observe que o caractere é recebido no comando de entrada e o programa verifica se se trata de uma letra 
minúscula. Em caso afirmativo, a variável Maiuscula recebe a maiúscula correspondente e, em caso 
negativo, Maiuscula recebe o próprio caractere de entrada, já que nada precisa ser feito.
4. O programa Arredonda, apresentado no exemplo 2 da seção 2.11, utilizava idéias, talvez mágicas, para 
se arredondar um número real dado utilizando a função predefinida Trunc. Utilizando o comando if e a 
função predefinida Frac, o programa abaixo, embora mais extenso, é mais natural para obter o mesmo efeito. 
program Arredonda;
var x : real;
Roundx : integer;
begin 
writeln('Digite um número real');
 readln(x);
 if Frac(x) < 0.5
 then 
Roundx := Trunc(x) 
 else 
Roundx := Trunc(x) + 1;
 writeln('Round(' , x , ') = ', Roundx:4:2);
end.
5. Programas que manipulam datas (por exemplo, um programa que determine o número de dias entre 
duas datas dadas) contêm trechos que verificam se um ano dado é bissexto. Levando em conta o fato exposto 
no exemplo 3 da seção 3.3 de que um ano é bissexto quando ele é múltiplo de quatro, exceto aqueles que são 
múltiplos de 100, mas não são múltiplos de 400, o programa abaixo verifica se um ano dado é bissexto. 
program Bissexto;
var Ano : integer;
begin
writeln('Digite o ano ');
readln(Ano);
if (Ano mod 400 = 0) or ((Ano mod 4 = 0) and (Ano mod 100) <> 0)
then
write(Ano, ' é bissexto')
else
write(Ano, ' não é bissexto'); 
end.
Observe a expressão lógica escolhida para controlar o comando if: Todo ano múltiplo de quatrocentos 
(Ano mod 400 = 0) é bissexto; além destes (daí o operador lógico or), os anos múltiplos de 4 que não são 
múltiplos de 100. 
6. O programa para ordenar os conteúdos de duas variáveis, visto na seção 3.3, é um caso muito 
particular da questão mais geral da ordenação de uma relação de números ou de nomes, problema que tem 
vasta aplicação na vida prática (principalmente na ordenação de uma lista de nomes); este problema também 
é conhecido como classificação. Para a solução geral existem diversos algoritmos com este objetivo e no 
capítulo 10 teremos oportunidade de discutir programas baseados em alguns destes algoritmos. Por 
enquanto, vejamos um programa que ordene três números dados. Além de exemplificar o comando if then 
else, o programa abaixo mostra como se pode (e se deve) utilizar raciocínios anteriores para se escrever 
programas. 
Seja então um programa que receba três números inteiros, armazene-os nas variáveis x, y e z e que, ao 
final da sua execução, deixe os conteúdos de x, de y e de z na ordem crescente. Uma idéia bem interessante é 
armazenar na variável x o menor dos números e em seguida ordenar os conteúdos de y e de z, que é 
exatamente o problema de ordenar os conteúdos de duas variáveis, que foi referido acima. Obviamente, para 
se executar a primeira ação pretendida (armazenar na variável x o menor dos números), só é necessário se 
fazer alguma coisa se o valor de x já não for o menor dos números dados, ou seja, se x > y ou x > z. Nesta 
hipótese, o menor deles é y ou z e este menor deve ser permutado com x. Temos então o seguinte programa.
{Programa para ordenar três números dados}
program Ordena3;
var x, y, z, Aux: integer;
begin
writeln('Digite os tres números: ');
readln(x, y, z);
writeln('Números digitados: x = ', x, ' y = ', y, ' z = ', z);
if (x > y) or (x > z) {Se isto for verdade, x não é o menor}
then
if (z > y) {Se isto for verdade, y é o menor}
then
begin {Permuta os conteúdos de x e de y}
Aux := x;
x := y;
y := Aux;
end
else {Neste caso, z é o menor}
begin {Permuta os conteúdos de x e de z}
Aux := x;
x := z;
z := Aux;
end;
if (y > z) {Permuta os conteúdos de y e de z}
then
begin
Aux := y;
y := z;
z := Aux;
end;
writeln('Números ordenados: x = ', x, ' y = ', y,' z = ', z);
end.
Observe que se a expressão lógica do primeiro comando if then else for verdadeira, o sistema executará 
outro comando if then else. Neste caso, dizemos que os comandos estão aninhados. 
Observe também que escrevemos no programa algumas frases explicativas das ações pretendidas. Esta 
frases são chamadas comentários e devem ser escritas entre pares de caracteres {e}. Quando o compilador 
encontra o caractere { (abre chaves), procura um caractere } (fecha chaves) e desconsidera tudo o que vem 
entre os dois caracteres. Isto permite que o programador deixe registrado no próprio programa os 
comentários que ele achar conveniente. A prática de se colocar comentários nos programas é muito 
importante e facilita a sua compreensão. Como os programas discutidos neste livro serão precedidos de 
explicações prévias, a utilização de comentários aqui vai se restringir à indicação do objetivo do programa 
(como já vínhamos fazendo).
Cabe observar que a ação de armazenar o menor dos números na variável x pode ser feita de uma forma 
de compreensão mais simples (após dez anos de apresentação deste algoritmo para minhas turmas, um aluno 
me apresentou esta idéia). Basta colocar em x o menor dos conteúdos de x e de y e repetir este raciocínio 
com os conteúdos de x (talvez o novo conteúdo) e de z:
if (x > y) 
then
begin
Aux := x;
x := y;
y := Aux;
end;
if (x > z)
then
begin
Aux := x;
x := z;
z := Aux;
end; 
7. Um outro exemplo que ilustra muito bem a utilização do comando if then else é um programa para 
determinar as raízes de uma equação do segundo grau. Sabemos da matemática que uma equação 
ax2 + bx + c = 0 só tem raízes reais se b2 - 4ac ≥ 0. Além disto, para que ela seja do segundo grau, deve-se ter