Aula 8: Bifurcações I (if ... then ... else) |
Até já, todas as instruções do programa
foram sempre executadas. Além disso, foram executadas exactamente
na ordem como escrito. A primeira linha do código foi executada
ao primeiro, depois a segunda linha, etc. Isto não é sempre
assim. Com branching (branch é tronco em inglês;
parte de um árvore) podemos controlar a execução do
programa.
Imagine pretende execrever um programa para calcular o raiz de um número.
Tomar o raiz de um número negativo não faz sentido. Por isso,
queria gerar um erro se o utilizador deu um valor negativo. Queria que
aparece o texto
Negative numbers are not allowed! no ecrã. Obviamente, não quer que estetexto vai aparecer sempre, mas sim só quando o utilizador dá um número negativo. Se o utilizador dá um número positivo quer o raiz deste número no ecrã: O raiz de 5 is 2.23607 Queria haver uma maneira de verificar se um número é negativo e dependente de este verificação executar partes diferentes do programa. Exactamente isto é possível com branching. Vamos ver as isntruções "if-then", "if-then-else" e "case-of". |
A maneira mais simples de haver controlo sobre a execução
das instruções é com o statement if .. then.
O síntaxe completo é
Para condition podemos pôr
a nossa condição e para instruction
substituimos a instrução (ou instruções) a
ser executa se (e só se) a condição é verdade.
|
A execução normal do programa continua depois o bloco
de instruções. No exemplo a seguir, instruction3
e instruction4 serão executadas, apesar da condição
(a = b).
if (a = b) then
begin instruction1; instruction2; end; instruction3; instruction4; |
|
Nota que aqui acaba a semelhança com os troncos de um árvore.
Num árvore, os troncos nunca se juntaram; uma vez dividido nunca
mais será possível juntar com o tronco prinicpal.
Se nós também queremos executar coisas quando a condição
é falsa podemos fazer isto com a estrutura if ... then ... else.
A forma geral desta estrutura é
Nota a peculiaridade de PASCAL: a instrução a antes else não é finailzda pela ponto-e-vírgula ; exemplo:
|
PROGRAM SquareRoot;
Var x: real;
root:
real;
begin
writeln('De um numero');
readln(x);
if (x<0) then
writeln('Numeros negativos
nao sao permitidos!')
else
begin
root := Sqrt(x);
writeln('O
raiz de ', x:0:4, ' e ', root:0:4);
end;
writeln('Bom dia');
end.
Running the program; two examples:
De um numero
3.68 O raiz de 3.6800 e 1.9183 Bom dia |
De um numero
-3.68 Numeros negativos nao sao permitidos! Bom dia |