Curso de dBASE II
Estruturas de decisão e repetição


Você está em: MarMSX >> Cursos >> dBASE II - Programável

4. Estruturas de decisão e repetição

4.1. Estrutura de decisão IF

O comando IF permite realizar um teste lógico e executar uma subrotina em caso verdadeiro ou outra rotina caso falso. Sintaxe:

IF <condição>
    <comandos_caso_teste_verdadeiro>
[ELSE
    <comandos_caso_teste_falso>]
ENDIF

Exemplo:

input "Nota" to nota

if nota >= 7
  ? "Aprovado"
else
 ? "Reprovado"
endif

Podemos testar várias condições em sequência.

input "Hora do dia (0 a 23)" to hora

if hora < 12
  ? "Bom dia"
else
  if hora < 18
    ? "Boa tarde"
  else
    ? "Boa noite"
  endif
endif

Teste:

. do testeif2
Hora do dia (0 a 23): 10
Bom dia

4.2. Estrutura de decisão DO CASE

O comando DO CASE permite realizar uma série de testes em cima de uma variável ou campo. Sintaxe:

DO CASE
   CASE <condição_1>
        <comandos>
   [CASE <condição_2>
        <comandos>]
   ...
   [OTHERWISE
        <comandos>]
ENDCASE

Podemos inserir quantos cases quisermos. A cláusula OTHERWISE é executada se, e somente se, se todos os testes falharem. Exemplo:

accept "Estado brasileiro" to estado

do case
   case !(estado) = "RIO DE JANEIRO"
     ? "Eu conheco o estadio do Maracana"
   case !(estado) = "SAO PAULO"
     ? "Eu conheco o estadio do Morumbi"
   case !(estado) = "MINAS GERAIS"
     ? "Eu conheco o estadio do Mineirao"
   otherwise
     ? "Eu nao conheco o estadio desse estado"
endcase

Exemplo de uso do arquivo:

. do testcase
Estado brasileiro:Rio de Janeiro
Eu conheco o estadio do Maracana
. do testcase
Estado brasileiro:Goias
Eu nao conheco o estadio desse estado

4.3. Estrutura de repetição DO WHILE

A estrutura de repetição DO WHILE permite repetir uma série de comandos entre o DO e o ENDDO enquanto uma condição for satisfeita. Sintaxe:

DO WHILE <condição>
  <comandos>
ENDDO

Exemplo utilizando variáveis.

set talk off
store 1 to contador

do while contador < 5
  ? contador
  store contador + 1 to contador
enddo

set talk on

O comando SET TALK OFF desabilita as impressões padrões do sistema. O comando SET TALK ON habilita estas impressões.

Esta estrutura é útil para varrer tabelas e obter cálculos sobre ela. Veja o exemplo a seguir que utiliza a tabela notasmat.

set talk off

use notasmat
store -1 to maiormedia
go top

do while .not. eof
  store (bim1 + bim2 + bim3 + bim4) / 4 to media
  if media > maiormedia
    store media to maiormedia
    store matricula to mat
  endif
  skip
enddo

use alunos
locate for matricula = mat
? "Maior media dos alunos"
? "Nome: " + Nome
? "Media: " + str(maiormedia, 5, 2)

set talk on

Ao rodar o programa, a saída será:

Maior media dos alunos
Nome: Beatriz Saraiva
Media: 9.90

Nota importante: ao varrer uma tabela, NUNCA se esqueça de colocar o comando SKIP para saltar para o próximo registro. Caso seja esquecido o uso do SKIP, o loop DO WHILE será ETERNO. Testamos o fim da tabela através do EOF.

4.4. O comando LOOP

O comando LOOP funciona dentro de uma estrutura DO WHILE, com o objetivo de ignorar as linhas seguintes da estrutura e voltar para o início do loop.

Exemplo:

set talk off
store 1 to i

do while i <= 5
  if i = 3
    store i + 1 to i
    loop
  endif

  ? i
  store i + 1 to i
enddo

set talk on

Saída na tela:

      1
      2
      4
      5

Notas:

  1. Quando i tem valor igual a 3, o comando LOOP é chamado e a instrução de impressão é ignorada.
  2. Caso não incrementemos o valor de i ANTES do comando LOOP, o programa irá rodar em um loop infinito.
  3. Se colocássemos o incremento depois do comando LOOP, ele seria ignorado e o loop seria infinito.


Referências:

[1]- dBASE II PLUS para MSX interativo - curso prático, Nelson Casari, Ed. Atlas, 1990.

[2]- dBASE II PLUS para MSX programável - curso prático, Nelson Casari, Ed. Atlas, 1989.

[3]- dBASE III PLUS. Curso Data Rio, Rio de Janeiro, 1990.