As estruturas de controle determinam o curso de ações de um algoritmo. Nesta parte, serão analisadas as estruturas seletiva e repetitiva, ou seja, o desvio do fluxo de execução e o fluxo repetitivo de execução de instruções do programa.
Seleção ou decisão
Seleção ou decisão é a habilidade que o sistema possui para escolher uma ação de um conjunto de alternativas específicas. Os comandos de seleção do fortran são: if...then e if...then...else. O primeiro chamado de seleção simples e o segundo de seleção composta.
Seleção simples
Testa uma expressão lógica. Caso seja verdadeira, o conjunto de instruções que segue a expressão é executado. Estrutura do comando:
Exemplo:
Ler dois valores numéricos, efetuar a soma e apresentar a mensagem "soma maior que dez" caso o resultado da adição seja maior que 10.
A sintaxe de linha única dispensa o uso dos termos then e endif. A condição acima escrita nas linhas 6 a 8 poderia ser codificada, ocupando uma só linha, como segue:
if (soma.gt.10) write(*,*) 'soma maior que dez'
Uma outra forma de desvio é usando uma expressão numérica em lugar de uma variável através do chamado if aritmético ou if com deslocamento.
Exemplo:
Se a condição (k-3), na linha 4, resultar em um valor menor que zero, será executado o comando de label 10 da linha 5; se (k-3) resultar em zero, o sistema executará o comando de label 20 da linha 7; se o resultado da condição (k-3) for maior que zero, a instrução de label 30 será executada. Em cada caso, a instrução seguinte a ser executada é a de label 50 continue da linha 10 e, em seguida, o sistema finaliza executando os comandos das linha 11 e 12.
No exemplo acima, à variavel k fora atribuído o número 3, k=3, na linha 3. A avaliação efetuada na linha seguinte: if (k-3) resulta em 0, desviando o fluxo de execução para linha 7 de label 20. O sistema imprime o literal k = 0 como resultado e a instrução goto 50, da linha 8, encaminha a execução para o encerramento do programa.
Seleção composta
Avalia uma expressão lógica e caso ela seja verdadeira, o conjunto de instruções após a palavra then é executado. Caso a expressão seja falsa, o código ou os códigos que seguem a palavra else serão executados. Estrutura do comando:
Exemplo:
Efetuar o cálculo da média aritmética das notas de três provas e avaliar a situação quanto à aprovação. Se a média for maior ou igual a 6.0, escrever a expressão (Aprovado), caso contrário, (Reprovado).
Na linha 6, o sistema testa o conteúdo da variável media apurada na linha 5 e se for maior ou igual a 6.0, será mostrada como saída a palavra (Aprovado), caso contrário, será exibida a palavra (Reprovado).
Expressões lógicas combinadas
As expressões lógicas que redundam apenas no valor .true. ou .false. podem ser combinadas, utilizando-se operadores relacionais e lógicos.
Exemplo:
Escrever uma programa que receba um número inteiro entre 0 e 5 e determinar se esse valor é par ou impar. Caso o usuário digite um número fora dos limites citados, informar essa condição de erro.
A instrução da linha 6 testa se o número informado n é maior que 0 (zero) e menor que 5, efetuando uma crítica de validade do dado de entrada. Se esta avaliação lógica resultar em falso ocorrerá uma condição de erro e o comando da linha 13 será executado, apresentando como informação de saída a palavra Errado e encerrando o processo, em seguida.
Se o teste lógico da linha 6 resultar em verdadeiro, ou seja, o valor de n está entre 0 e 5, a instrução seguinte, também de teste lógico, será executada para verificar se o número é par, ou seja, se é igual a 2 ou igual a 4. Em caso positivo (verdade) o sistema mostra na saída o termo Par constante na linha 8, caso contrário, o termo Impar da linha 10 e finaliza o processo em ambos os casos.
Repetição
A repetição é uma poderosa habilidade, ao lado da decisão, que o sistema tem para repetir um conjunto de ações específicas. Estrutura do comando:
Repete a execução de comandos enquanto uma dada condição for verdadeira ou , em outras palavras, enquanto a expressão lógica for verdadeira os comandos internos ao do while serão repetidos.
Exemplo:
Multiplicar dois números inteiros fornecidos pelo usuário e apresentar o resultado, repetindo esse processamento por tantas vezes quantas forem a necessidade do usuário.
Enquanto a variável resp for igua a "s" os comandos inseridos entre do while e end do serão executados sucessivamente até que o usuário entre com um caractere diferente de "s".
Repetição com variável de controle
Estrutura do comando:
Repete a execução de comandos enquanto uma condição for verdadeira. A variável de controle "var" recebe um valor inicial e a cada iteração do comando ela é atualizada de acordo com o conteúdo de "incremento ou decremento" até alcançar o "limite" estabelecido. Ao atingir o "limite", o fluxo de execução é desviado para a instrução continue do label informado. Se o "incremnento/decremento" não for especificado pelo programador, o sistema incrementa, automaticamente, uma unidade em "var" a cada iteração efetivada.
Exemplo:
Efetuar a somatória de dez números inteiros quaisquer informados pelo usuário e escrever o resultado.
À variável de controle i é atribuido o valor inicial 1 e depois ela vai sendo incrementada de uma unidade, por padrão, a cada iteração. Ao atingir o valor 10 o sistema desvia o fluxo para o comando continue do label 100, executa os dois comandos seguintes e encerra o programa.
Informando os números 0 a 9 como entrada para o programa obtem-se o resultado mostrado na janela a seguir:
Pontos a considerar no comando do label:
deve ser determinada uma variável de controle e os valores inicial e final;
o sistema incrementa a variável de controle de 1 em 1 por padrão, no entanto, pode-se definir outro valor inteiro para o incremento ou decremento;
tipicamente, este comando é usado quando se sabe o número de iterações a serem executadas.
Exercícios
Fazer um programa para receber dois números distintos como entrada e escrever o maior deles.
Fazer um programa que receba o ano de nascimento de uma pessoa e o ano atual. Calcular a idade dessa pessoa e exibi-la juntamente com a mensagem relativa à capacidade jurídica que trata o código civil:
idade menor ou igual a 16 - Absolutamente incapaz
idade maior que 16 e menor ou igual a 18 - Relativamente incapaz
idade maior que 18 - Capaz
Uma determinada empresa decide reajustar os vencimentos de seus funcionários, proporcionando um aumento de 10% aos que percebem até R$ 600,00 e 4,5% aos que ganham acima desse valor. Construir um programa para obter o salário de um funcionário e escrever o valor do salário reajustado.
Fazer um programa para escrever a tabuada de 1 a 10 do número fornecido pelo usuário, utilizando as duas estruturas de repetição estudadas.
Elaborar um programa para gerar e escrever certa quantidade de termos da série de Fibonacci. (A quantidade de termos será fornecida pelo usuário). A série de Fibonacci é formada pela seguinte seqüência: 1, 1, 2, 3, 5, 8, 13, 21 ..., de modo que o próximo termo é obtido pela soma dos dois imediatamente anteriores.
Em uma pesquisa realizada junto aos habitantes de uma região foram coletados os seguintes dados: idade, sexo (m/f) e salário.
Fazer um programa para calcular e informar:
maior e menor idade do grupo;
média de salário do grupo;
percentual de homens.
Encerrar a entrada de dados ao ser digitado zero na idade.