A maior rede de estudos do Brasil

Grátis
146 pág.
Programando com PASCAL - Jaime Evaristo

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

amortização e a taxa de 
juros.
Observação
Para receber as respostas dos exercícios propostos, encaminhe mensagem para jaime@ccen.ufal.br, 
assunto RESPOSTAS EXERCÍCIOS PASCAL, contendo NOME, INSTITUIÇÃO (se for o caso), 
CIDADE/ESTADO e CATEGORIA (docente, estudante ou auto-didata).
Capítulo 3 Estruturas de Seleção
3.1 O que é uma estrutura de seleção
O último exemplo do capítulo anterior apresentava um programa para calcular a área de um triângulo, 
dados os comprimentos dos seus lados. Foi visto que o comando que calculava a área solicitada só deveria 
ser executado com a certeza anterior de que os valores dados como entrada poderiam ser comprimentos dos 
lados de um triângulo. Em outras palavras, o tal comando só deveria ser executado se
x < y + z e y < x + z e z < x + y, condição que garante que os valores armazenados nas variáveis x, y e z são 
comprimentos dos lados de um triângulo. Assim, e reforçando o que foi dito na seção 1.6, existem situações 
em que alguns comandos só devem ser executados se alguma condição for verificada. 
A verificação de que um condição é satisfeita e, a partir daí, a decisão em relação à execução ou não de 
uma determinada seqüência de comandos é chamada de estrutura de seleção, estrutura de decisão ou 
comando de seleção.
3.2 O comando if then
O comando if then é uma estrutura de decisão que define se uma seqüência de comandos será ou não 
executada. Sua sintaxe é 
if Expressão lógica 
 then
begin
 seqüência de comandos
end;
sendo os delimitadores opcionais se a seqüência de comandos contém um único comando.
A semântica deste comando é muito simples: se o valor da Expressão lógica for true, o sistema executará 
a seqüência de comandos; caso contrário, o sistema não executará a seqüência de comandos e a instrução 
após o comando if then passa a ser executada.
3.3 Exemplos Parte III
1. Se queremos um programa que determine o maior de dois números dados, podemos supor que o 
primeiro deles é o maior, armazenando-o numa variável Maior e depois, através de um comando if then, 
verificar se o maior procurado é o segundo dos números dados; neste caso o conteúdo da variável Maior 
deve ser alterado.
{Programa para determinar o maior de dois números dados}
program MaiorDe2;
var a, b, Maior : real;
begin
writeln('Digite dois números');
readln(a, b);
Maior := a;
if (b > a)
then
Maior = b;
writeln('O maior dos números ', a, ' e ', b, ' é ', Maior);
end.
2. Um outro exemplo de utilização do comando if then aparece num programa que pretenda ordenar os 
conteúdos de variáveis x e y. Para isto só há de necessidade de se realizar alguma ação se o conteúdo de y for 
maior do que o conteúdo de x. Neste caso, o que deve ser feito é a permuta dos conteúdos de x e de y. Temos 
então o seguinte programa:
{Programa para ordenar os conteúdos de duas variáveis}
program Ordena2;
var x, y, Aux : real;
begin
writeln('Digite os dois números ');
readln(x, y);
writeln('Números digitados: 'x = ', x:4:2, ' y = ', y:4:2);
if x > y
then
begin
Aux := x; 
x := y; 
y := Aux;
end;
 writeln('Números ordenados: x = ', x:4:2, ' y = ', y:4:2); 
end. 
Observe que a seqüência de comandos 
Aux :=x; 
x := y; 
y := Aux; 
realiza a permuta dos conteúdos das variáveis x e y como discutido no exemplo 5 da seção 2.9.
Outra observação importante é que, como os delimitadores begin e end são opcionais quando a seqüência 
de comandos vinculada ao comando if then possui um único comando, a não colocação deles faz com que o 
sistema só vincule ao comando de decisão o primeiro comando da seqüência. O esquecimento de 
delimitadores necessários, fatalmente, trará problemas de lógica para o programa. Por exemplo, se 
executarmos o programa Ordena2 acima para x = 8 e y = 5, teríamos:
x y Aux exibe na tela
8 5
Números digitados: x = 8 y = 5
8
5
8
Números ordenados: x = 5 y = 8
Se os delimitadores, porém, forem esquecidos e escrevermos o programa acima da forma abaixo
program Ordena2;
var x, y, Aux : real;
begin
writeln('Digite os dois números ');
readln(x, y);
writeln('Números digitados: 'x = ', x, ' y = ', y);
if x > y
then
Aux := x; 
x := y; 
y := Aux;
 writeln('Números ordenados: x = ', x:4:2, ', y = ', y:4:2); 
end. 
e o executarmos para x = 5 e y = 8, a expressão lógica que controla o if é falsa e então o comando 
Aux := x, não seria executado, mas os comandos x := y e y := Aux seriam e assim o conteúdo de x passaria a 
ser 8 e o conteúdo de y armazenaria o "conteúdo" de Aux, sobre os quais não se tem controle (alguns 
compiladores Pascal armazenam o valor 0 (zero) quando a variável é declarada. Este armazenamento inicial 
é chamado inicialização da variável).
É interessante notar que, mesmo com o erro de lógica, esta nova versão do programa funciona 
corretamente para entradas em que x > y.
O fato de termos escrito os comandos vinculados ao comando de seleção com uma tabulação "maior" 
será comentado na seção 3.6.
3. Considere agora a questão de se determinar o número de anos bissextos entre dois anos dados. Sabe-se 
que um ano é bissexto se ele é múltiplo de quatro, exceto aqueles que são múltiplos de 100, mas não são 
múltiplos de 400 (por exemplo, 2012, múltiplo de 4, será bissexto; 1900, múltiplo de 100, mas não de 400, 
não foi bissexto; 2000, múltiplo de 100 e de 400, foi bissexto). Assim a determinação do número de anos 
bissextos entre dois anos dados consiste em se determinar o número de múltiplos de 4, Multiplos4, o número 
de múltiplos de 100, Multiplos100, e o número de múltiplos de 400, Multiplos400, todos compreendidos 
entre os anos dados, e se calcular a expressão Multiplos4 – Multiplos100 + Multiplos400.
Para se determinar o número de múltiplos de 4 (e mutatis mutandis os números dos múltiplos de 100 e de 
400) situados entre dois anos Ano1 e Ano2, basta calcular a expressão (Ano1 div 4) - (Ano2 div 4), diminuída 
de uma unidade quando Ano2 for múltiplo de 4. Temos então o seguinte programa, no qual só há diminuição 
referida quando é necessário:
{Programa para determinar o numero de anos bissextos entre dois anos}
program NumeroAnosBissextos;
var Ano1, Ano2, AnBiss, Multiplos4, Multiplos100, Multiplos400 : integer;
begin
writeln('Digite os dois anos');
readln(Ano1, Ano2);
Multiplos4 := Ano2 div 4 - Ano1 div 4;
if Ano2 mod 4 = 0
then 
Multiplos4 := Multiplos4 - 1;
Multiplos100 := Ano2 div 100 - Ano1 div 100;
if Ano2 mod 100 = 0
then Multiplos100 := Multiplos100 - 1;
Multiplos400 := Ano2 div 400 - Ano1 div 400;
if Ano2 mod 400 = 0
then Multiplos400 := Multiplos400 - 1;
AnBiss := Multiplos4 - Multiplos100 + Multiplos400;
writeln('Numero de anos bissextos entre os anos ', Ano1, ' e ', Ano2, ': ', AnBiss);
end. 
3.4 O comando if then else
O comando if then else é uma estrutura de decisão que decide entre duas seqüências de comandos qual 
vai ser executada, sendo definido através da seguinte sintaxe:
if Expressão lógica 
 then
begin
 seqüência de comandos 1;
end
 else
begin
 seqüência de comandos 2;
end;
A semântica deste comando é a seguinte: se o valor de Expressão lógica for true, o sistema executará a 
seqüência de comandos 1; caso contrário, o sistema executará a seqüência de comandos 2.
3.5 Exemplos Parte IV
1. No último exemplo do capítulo 2, apresentamos um programa que calculava a área de um triângulo, 
dados os comprimentos dos seus lados. No final dele, mostramos que o mesmo não fornecia respostas 
satisfatórias para todas as entradas e comentamos que o cálculo da área deveria ser precedido da verificação 
de que os dados de entrada são de fato comprimentos dos lados de um triângulo. O programa referido