Neo traderBot

Neo traderBot

Você sabia?

Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)

Curso Básico – Lógica de Programação

Aula 03 – Controles de Fluxo

Leitura estimada: 5 minutos 286 views

Controles de fluxo (Loops) são essenciais em programação. Nesta aula veremos:

Reproduzir vídeo

1. Introdução

Se na vida sempre chega uma hora que não dá para seguir o fluxo e temos que tomar decisões importantes, na programação isso acontece quase o tempo todo!

Lembra-se da parte da definição de algoritmo que diz ser uma sequência finita de ações!? Então…os programas são estruturados para serem executados de forma sequencial, eles seguem um fluxo que inicia na primeira linha de código e vai executando cada linha até chegar a última linha (a sequência precisa ser finita, ou seu computador vai ficar travado….rsrsrs)!

Se não pudéssemos alterar este fluxo, certamente a nossa capacidade de resolver problemas por meio de algoritmos seria muito reduzida. Assim, sistematizou-se a programação com estruturas básicas de controle de fluxo (ou Loops em inglês), as quais dividem-se em dois grandes grupos: CONTROLES DE SELEÇÃO e CONTROLES DE REPETIÇÃO. Vamos ver a seguir o que significa cada tipo de controle e como é sua estrutura.

2. Controles de seleção

Em nossas vidas, é muito comum condicionarmos as nossas ações à determinadas situações ou eventos. Você já deve ter pego a si mesmo dizendo algo do tipo: “Se eu ganhar na megasena eu compraria …”? Isso é um exemplo de controle de fluxo de seleção porque existe uma condição que é “ganhar na megasena”. SE essa condição for verdadeira, iremos SELECIONAR uma ação ou mais para serem executadas, no caso: “comprar alguma coisa”. Naturalmente que é muito improvável que este exemplo de condição seja verdadeira…mas não custa nada sonhar!

Sempre que dissermos condição podemos estar tratando na verdade de uma fórmula booleana tão complexa quanto fosse necessário…por exemplo: Se eu ganhar na megasena E (não tivesse filhos OU não fosse casado(a)), eu iria viajar 2 anos pelo mundo!

Dizem que para entendermos melhor basta desenhar…vamos tentar então! Veja a figura abaixo, ela é a estrutura básica de um controle de seleção. É a famosa estrutura if, em português: se!

A estrutura de fluxo do tipo if serve para realizar alguma ação dada que uma condição foi satisfeita, ou seja, é verdadeira. Se a condição for falsa, o programa continuará sua execução até o fim.

Podemos elaborar um pouco mais essa estrutura de seleção resultando na estrutura if..else (se…senão). Nessa estrutura além de um conjunto de ações ser executado se a condição for verdadeira, caso a condição seja falsa, é executado outro conjunto de ações, antes que o programa continue até o fim. Em diagrama, a estrutura if…else é representada da seguinte forma:

A partir dessa estrutura básica if…else, poderíamos colocar estruturas if…else dentro de uma estrutura if…else. Isso é o que chamamos em programação de aninhar (veja um exemplo na figura abaixo).

Ou seja, poderíamos aninhar uma estrutura if…else na parte else de outra estrutura, quantas vezes desejássemos (também poderia-se aninhar na parte if). Vamos a um exemplo abaixo em homenagem ao dia dos pais:

				
					definirPresenteDiaDosPais(Idade_pai: Integer:
  IF Idade_pai >= 20 AND Idade_pai <= 25:
     presente = comprar(“carteira”);
  ELSE
    IF Idade_pai > 25 AND Idade_pai <= 35:
      presente = comprar(“camiseta/calça”);
    ELSE
      IF Idade_pai > 35 AND Idade_pai <= 45:
        presente = comprar(“kit_ferramentas”);
      ELSE
        IF Idade_pai > 45 AND Idade_pai <= 55:
          presente = comprar(“conjunto_churrasco”);
        ELSE
          IF Idade_pai > 55 AND Idade_pai <= 65:
            presente = comprar(“sapato”);
          ELSE
            presente = comprar(“meias”);

  return presente;
				
			

Nada muito complicado, certo!? Mas o aninhamento descrito acima poderia ser escrito em uma sintaxe de melhor compreensão, que é a estrutura switch. É importante ressaltar que esse tipo de estrutura não está presente em todas as linguagens. Se fossemos reescrever o algoritmo acima utilizando a estututura switch, seria assim:

				
					definirPresenteDiaDosPais(Idade_pai: Integer:
  switch(Idade_pai):
    case Idade_pai >= 20 AND Idade_pai <= 25:
      presente = comprar(“carteira”);
    case Idade_pai > 25 AND Idade_pai <= 35:
      presente = comprar(“camiseta/calça”);
    case Idade_pai > 35 AND Idade_pai <= 45:
      presente = comprar(“kit_ferramentas”);
    case Idade_pai > 45 AND Idade_pai <= 55:
      presente = comprar(“conjunto_churrasco”);
    case Idade_pai > 55 AND Idade_pai <= 65:
      presente = comprar(“sapato”);
    default:
      presente = comprar(“meias”);
   end switch;

  return presente;
				
			

Com isso encerramos o que precisamos saber sobre estruturas de controle de fluxo de seleção. Espero que tenha entendido os conceitos até o momento!

3. Controles de repetição

Às vezes, para resolver determinado problema, precisamos repetir uma sequência de ações até que uma situação seja alcançada. Para estes casos, iremos utilizar os controles de repetição, cuja ideia geral está apresentada na figura abaixo:

Basicamente, enquanto uma condição for verdadeira, iremos executar algumas ações repetidamente. Após cada execução desse conjunto de ações, iremos verificar novamente se a condição é verdadeira, se for falsa o interromperá o loop de repetição e seguirá sua execução. Os tipos mais comuns de controles de repetição que encontramos nas linguagens de programação são: FOR e WHILE.

A estrutura FOR é geralmente utilizada quando queremos passar por uma sequência de dados e fazer algum tipo de operação para cada elemento. Em linguagem mais técnica, o processo de percorrer uma sequência de dados chama-se iterar.

No caso da estrutura FOR, geralmente temos uma variável inteira que inicia com determinado valor, e a cada execução do controle FOR esse valor é somado/subtraído de um passo (valor constante) até que chegue a um valor limite. Ou seja a quantidade de repetições é dada em função dessa variável que chamamos de iterador e seus limites inferior, superior e passo.

Por exemplo, vamos supor que tenhamos um array chamado NATURAIS, de números inteiros de 1 a 10, ou seja 10 elementos. Vamos supor ainda que tenhamos uma variável inteira chamada i, que é um índice para iterarmos sobre os valores do array. O primeiro elemento do array pode ser referenciado como NATURAIS[i] se i for igual a 1, e o valor de NATURAIS[1] é 1. Logicamente, o último elemento da lista será NATURAIS[10] e seu valor será 10.

Caso desejássemos obter o somatório de todos elementos do array, poderíamos utilizar o seguinte algoritmo:

				
					
soma = 0;
for i=1 until 10 step 1 do:
  soma = soma + NATURAIS[i];
				
			

Fácil, né!? Em linguagens de programação mais antigas, os iteradores eram apenas números inteiros. Algumas linguagens mais recentes permitem iterar de maneiras mais naturais e você certamente aprenderá esses detalhes mais específicos quando escolher uma linguagem para trabalhar.

A segunda estrutura de controle que utilizamos com frequência é WHILE. Nessa estrutura não temos um iterador explícito. Temos apenas a avaliação de uma condição que enquanto for verdadeira irá executar as ações previstas dentro do controle WHILE. Quando a condição se tornar falsa, o programa voltará ao seu fluxo de execução até o final.

Vamos a um exemplo simples…Suponha que queiramos “imprimir” na tela os números de 1 a 100. Você certamente pensou que podemos fazer isso facilmente com um controle FOR, mas vamos exercitar fazer isso com um controle WHILE:

				
					i = 1;
WHILE(i <= 100)
{
  Imprimir(i);
  i = i + 1;
}

				
			

Nas linguagens mais antigas havia variações da estrutura WHILE. Por exemplo, tem uma estrutura que se chama DO…WHILE, a qual executa primeiro as ações do controle WHILE antes de fazer a verificação da condição. Com isso, o controle de repetição é executado sempre ao menos uma vez. Novamente, não precisamos nos preocupar com essas peculiaridades, pois cada linguagem, embora haja muita semelhança entre elas, possuí sintaxes e características diferentes. E é mais oportuno aprofundar nisso quando você decidir por uma linguagem de programação para estudar.

4. Recapitulando

Tentamos ao longo dessa aula passar os conceitos gerais do que são os controles de fluxo sem entrar em detalhes específicos de linguagem de programação. É muito importante que tenhamos o entendimento do que são os controles de fluxo e como podemos utilizá-los para resolver problemas. Enquanto os controles de seleção nos permitem executar ações quando determinada condição (ou expressão booleana) for verdadeira, os controles de repetição nos permitirão repetir a execução de ações enquanto uma condição for verdadeira.

Ressaltei que neste momento, você não precisa se preocupar com peculiaridades de programação, pois você terá a oportunidade de aprender em maior profundidade quando escolher uma linguagem específica para trabalhar.

CONTENTS