Skip to content

Latest commit

 

History

History
168 lines (148 loc) · 4.37 KB

estruturas.org

File metadata and controls

168 lines (148 loc) · 4.37 KB

Estruturas Explícitas de Controle de Fluxo

1 Estruturas de Controle

Definição

  • Servem para agregar expressões e comandos
  • Controlar o fluxo de execução do programa
  • Podem ser primitivos ou compostos

\pause Tipos

  • Sequenciais (conceito de bloco básico)
  • De seleção (comandos condicionais)
  • Iterativas (comandos iterativos)
  • De desvio incondicional
  • Comandos protegidos

2 Estruturas Condicionais

Caminho condicionado

Caminho duplo

Caminhos múltiplos

  • ifs aninhados (else if)
  • Comando de seleção múltipla (switch, case)

3 Comandos Iterativos (Repetição)

Número indifinido de repetições

  • Pré-teste
    while (<teste_verdadeiro>) { <comandos> }
        
  • Pós-teste
    do { <comandos> } while (<teste_verdadeiro>);
    Repeat <comandos> until <teste_falso>;
        

\pause E se necessitarmos de outros pontos de saída?

  • Desvios incondicionais

4 Comandos Iterativos (Repetição)

Número definido de repetições

  • Quantidade de iterações conhecidas
  • Variável de controle (contador/iterador)
  • Pode-se determinar o valor inicial, final, incremento
  • \pause Exemplos
    for i := 1 to 10 do vetor[i] := i*2;
    for i := 1 to 100 Step 2 do a := a + i;
    for i := 10 DOWNTO 0 Step 2 do a := a + i;
    for(i=0 ; i<10 ; i++) vetor[i] = i*2;
        

\pause Pode-se usar while

5 Comandos Iterativos (Repetição)

Considerações sobre número definido de repetições

Número de repetições deve ser fixo

  • Ada, por exemplo, impede a mudança dos limites

Variável de controle deve ser discreta

Comando for em C é um comando de repetição indefinida, como o while

A variável de controle deveria ter o escopo limitado ao laço

  • Ada, Java (até C)

6 Comando for em C/C++/Java

Sintaxe

for (<expr1> ; <expr2> ; <expr3>) <bloco>;

\pause Parâmetros do laço (todos opcionais)

  • <expr1> é avaliada uma vez (inicialização)
  • <expr2> é o controle do laço
    • avaliada a cada iteração em pré-teste
  • <expr3> avaliada no final de cada iteração

\pause Observações

  • Expressões podem conter declarações, comandos ou sequências de comandos separados por vírgula
  • O corpo do laço pode ser vazio, conter um comando simples, uma composição ou um bloco

7 Comando for em C/C++/Java

Cada expressão pode conter múltiplos comandos

for (conta1 = 0, conta2 = 0.0;
     conta1 <= 10 && conta2 <= 100.0;
     soma = ++conta1 + conta2, conta2 *=2.5);

Qualquer tipo de comando?

Mais exemplos

for (int i=0; i <n; i++) ...
for (i = 0, int j = 10; j == i; i++) ...
for (;;) ...
for (;;);

8 Iteradores

Motivação

  • Utilizar tipos de dados não convencionais para o controle de um laço?

LPs mais atuais permitem operações pré-definidas ou permitem definir iteradores para os mais diferentes tipos abstrato de dados

Também chamado de cursores

Iteradores

  • Mostrar grammar.cc da ellerre

9 Iteradores

Em Java, toda class que define uma coleção deve implementar a interface Iterator que export os métodos hasNext() e next()

Exemplo 1 \small

void cancelAll(Collection<TimerTask> c) {
  for(Iterator<TimerTask> i = c.iterator(); i.hasNext();)
     i.next().cancel();
}

10 Iteradores

Exemplo 2 \small

List<String> sabores = new ArrayList<String>();
sabores.add("chocolate");
sabores.add(“morango");
sabores.add(“limão");

Iterator<String> itemSabor = sabores.iterator();
while(itemSabor.hasNext()){
  System.out.println( itemSabor.next() );
}

11 Iteradores – Comando foreach

Java 1.5, C#, PHP

Exemplo 1

void cancelAll(Collection<TimerTask> c) {
   for (TimerTask t : c) t.cancel();
}

Exemplo 2

int sum (int[] a){
    int result = 0;
    for (int i : a) result += i;
    return result;
}