ESTRUTURAS DE CONTROLE

 

As estruturas de controle de dados consistem nos comandos ou instruções que os computadores já conhecem e são acionadas por meio de palavras ou expressões reservadas ou chaves.  Através destas instruções é possível esclarecer ao computador o que e como processar os dados relacionados a um problema computacional que partirá de uma situação inicial para outra desejada pelo seu usuário, denominada situação final.

 

Estas instruções programáveis possuem suas próprias lógicas de funcionamento e definem uma sequência de ações a serem executadas pelo computador, afim de sanar o problema computacional existente. Basicamente, estas estruturas de controle de dados correspondem a três lógicas de funcionamento principais, sendo estas:

 
  • Sequencial: conjunto de instruções que serão executadas em uma sequência linear,  obedecendo a pontuação e o alinhamento (indentação) definido nas instruções envolvidas.

 
sequencial
 

Este tipo de estrutura lógica de fluxo de dados no algoritmo é responsável pela sequência de execução das instruções contidas em seus blocos (Declarações e Instruções) principais, sendo ela a mais convencional entre todas as possíveis. Sua realização consiste na execução de uma instrução de cada vez, onde o encerramento da primeira instrução permite o acionamento da próxima instrução e assim sucessivamente até o encerramento do algoritmo (ordem de execução de cima para baixo).

 

Observe o exemplo do algoritmo em português estruturado a seguir:

 
algoritmo estrututaSequencial;
//  Síntese
//     Objetivo: armazenar e apresentar a distância entre duas cidades.
//     Entrada : distância em quilômetros.
//     Saída   : distância entre Brasília e São Paulo.

principal
	// Declarações
	
	// cria variável inteira denominada distancia
	inteiro distancia;
	// Instruções
	// mostra mensagem de orientação para interação com usuário
	escreva("Informe a distância entre Brasília e São Paulo:");	
	leia(distancia);// leitura e armazenamento do valor informado
	// mostra mensagem e o conteúdo de distancia
	escreval("Distância entre Brasília e São Paulo = ",distancia);
fimPrincipal // encerra algoritmo que só executa em estrutura sequencial
 

Analisando o algoritmo anterior pode ser observado que todas as regras para sua criação e organização estão sendo respeitadas, mas qual seria sua primeira instrução a ser executada?

 

O bloco principal de Síntese corresponde ao aspecto mais importante no desenvolvimento de um algoritmo correto, porém o mesmo não é executado diretamente pelo computador. Ele inicia seu processamento sequencial após o // Declarações. Todas as instruções a seguir são executadas de cima para baixo, da esquerda para direita, sendo a próxima instrução executada somente depois da anterior ter sido completamente encerrada.

 
  1. a declaração da variável distancia do tipo inteiro é a primeira execução

  2. escrever a mensagem de orientação ao usuário é a segunda instrução

  3. a terceira é a leitura e armazenamento do valor informado pelo usuário

  4. a quarta e última instrução mostra mensagem e distancia armazenada

 

É importante ressaltar que na execução de qualquer algoritmo sempre será executado primeiro o bloco de declarações e na sequência o bloco de instruções, onde a execução da instrução definida pela palavra reservada fimPrincipal encerra o processamento do algoritmo.

 
  • Seleção: a partir de um teste condicional elaborado com operadores relacionais e até lógicos, uma instrução, ou um conjunto de instruções, podem ser executados ou não, dependendo exatamente do resultado do teste efetuado (lógica convencional - V = verdadeiro ou F = falso).

 
condicional
 

Nesta estrutura de controle o fluxo de processamento dos dados escolhe um caminho sequencial de execução baseado em uma verificação ou teste condicional que selecionará qual percurso de execução entre as possíveis instruções será realizado pelo algoritmo.

 

Estes testes condicionais ou verificações são fundamentadas na lógica convencional, aplicada sobre os resultados obtidos com operadores relacionais e lógicos durante o processamento do algoritmo. Estes testes podem ser efetuados sobre operações relacionais simples ou com expressões lógicas complexas que resultem em um valor lógico(verdadeiro ou falso).

 

Quatro são as possíveis organizações lógicas principais para um algoritmo que utiliza as estruturas condicionais ou de seleção, sendo estas elencadas a seguir:

 
  • Seleção Simples

  • Seleção Composta

  • Seleção Encadeada

  • Seleção de Múltipla Escolha

 
Seleção Simples
 

A seleção ou condicional simples é formada por uma verificação (teste condicional) que altera o caminho de execução do algoritmo caso seu resultado seja verdadeiro. Esta alteração do caminho de execução consiste na seleção do caminho adequado à situação detectada pelo teste condicional realizado, podendo executar uma ou várias instruções (bloco condicional) específicas à esta situação.

 

Forma Geral de Sintaxe:

 
se (<condição>) entao
      instrução 1
      instrução 2
          ...      
      instrução n
fimSe
// continua as instruções do algoritmo em execução
fimPrincipal
 

Na situação do teste condicional não ser verdadeiro, este bloco condicional é saltado e o algoritmo prossegue sua execução de maneira sequencial até o mesmo ser encerrado.

 

No intuito de também esclarecer melhor a organização exigida no uso de estruturas de seleção em português estruturado é apresentado o exemplo de um algoritmo usando uma seleção simples. Atente as regras de alinhamentos (indentação) e palavras reservadas existentes neste exemplo.

 

Exemplo:

 
algoritmo avaliarDistancia;
//  Síntese
//     Objetivo: avaliar a distância entre duas cidades.
//     Entrada : distância em quilômetros.
//     Saída   : confirmação da distância ser considerável(longe).

principal
	// Declarações
	
	// cria variável inteira denominada distancia
	inteiro distancia;
	
	// Instruções
	
	// mostra mensagem de orientação para interação com usuário
	escreva("Informe a distância entre duas cidades brasileiras:");
	leia(distancia);
	se (distancia > 500) entao
		escreval("Distância considerável a ser percorrida.");
	fimSe
fimPrincipal
 

O algoritmo avaliar distância é executado sequencialmente até o processamento da instrução se (palavra reservada se) que executará o teste condicional para verificar a veracidade do valor informado pelo usuário e armazenado na variável distancia.

 

Note que a palavra entao e a expressão fimSe também estão destacadas neste algoritmo, pois ambas são palavras reservadas na seleção simples.  Atente a grafia correta da palavra entao, e não então, como parte da instrução se que não possui acento. Na expressão fimSe o cuidado é com a ausência de um espaço em branco para separar os dois termos (fim e se). Esta expressão só existe com a grafia exata e sem espaço, caso contrário o algoritmo não executará corretamente.

 

Analisando o algoritmo anterior, é possível verificar que se o teste condicional for verdadeiro, ou seja, for maior que 500, a mensagem "Distância considerável a ser percorrida." será mostrada na janela de execução (tela de interação do usuário com o algoritmo que está sendo executado pelo computador). Se o valor informado pelo usuário não atender ao teste condicional (resultado falso), a mensagem não será exibida e o bloco condicional não será executado.

 

Fluxograma:

 

Observe a seguir o mesmo problema sendo representado em algoritmo por meio da técnica do fluxograma (gráfica).

 
fluxograma Simples
 
Seleção Composta
 

Este tipo de seleção sempre alterará o caminho de execução do algoritmo, após seu teste condicional ser executado. Se o resultado deste teste condicional for verdadeiro o bloco de instrução condicional será executado, onde todas as instruções que seguem mais à esquerda da palavra reservada se, e depois do entao (próxima linha), até a nova palavra reservada senao que surge na seleção composta, serão executadas. Se o resultado deste teste condicional não for verdadeiro, ou seja, se ele for falso, um outro conjunto de instruções, descritas após a palavra reservada senao, serão executadas, até a instrução fimSe que encerra o processamento deste bloco condicional.

 

Assim, a seleção composta possui a mesma lógica da simples, porém o resultado falso não prossegue com a execução do algoritmo somente, pois ele seleciona o bloco condicional iniciado pela palavra reservada senao para ser executado antes da continuidade do algoritmo, após o encerramento da instrução de seleção (após fimSe).

 

Forma Geral de Sintaxe

 
se (<condição>) entao
  instrução 1
  instrução 2
  instrução n 
senao
  instrução 20
  instrução 21
  instrução m
fimSe
//  continua as instruções do algoritmo em execução
 

Procurando melhor esclarecer a organização exigida no uso desta nova estrutura de seleção em português estruturado é elaborado o exemplo a seguir como uma evolução do exemplo anterior. Atente também as regras de alinhamentos (indentação) que envolvem esta estrutura de seleção e todas as suas palavras reservadas.

 

Exemplo:

 
algoritmo avaliarDistancia;
//  Síntese
//     Objetivo: avaliar a distância entre duas cidades.
//     Entrada : distância em quilômetros.
//     Saída   : confirmação da distância ser considerável(longe).

principal
	// Declarações
	
	// cria variável inteira denominada distancia
	inteiro distancia;
	
	// Instruções
	
	// mostra mensagem de orientação para interação com usuário
	escreva("Informe a distância entre duas cidades brasileiras:");
	leia(distancia);
	se (distancia > 500) entao
		escreval("Distância considerável a ser percorrida.");
	senao
		escreval("Distância peculiar a ser percorrida.");
	fimSe
	
fimPrincipal
 

Neste portuguê estruturado elaborado acima a distância é analisada, sendo maior que 500 classificada como uma distância considerável para viagem (longe), senão a mensagem apresentada indicará que é uma distância peculiar para viagem entre duas cidades brasileiras.

 

Fluxograma:

 

Veja a seguir a representação gráfica em fluxograma do algoritmo anterior mostrado em português estruturado.

 
Fluxograma Composto
 
Seleção Encadeada
 

O encadeamento ou aninhamento das instruções de seleção se são possíveis e podem conter dentro de seus blocos, do entao quando o teste condicional for verdadeiro, ou do senao quando teste for falso, todas as instruções possíveis na elaboração de um algoritmo, além da própria instrução de seleção simples ou composta. A esta possibilidade de uma instrução condicional se estar dentro de outra condicional é que se denomina Seleção Encadeada.

 

Forma Geral de Sintaxe

 
se (<condição_1>) entao
  se (<condição_2>) entao
    primeiro bloco de instrução
  senao
    segundo bloco de instrução
  fimSe
senao
  se (<condição_3>) entao
    se (<condição_4>) entao
      terceiro bloco de instrução
    fimSe
    instrução n
  senao
    se (<condição_5>) entao
      quarto bloco de instrução
    senao
      quinto bloco de instrução
    fimSe
  fimSe
fimSe
// continua as instruções do algoritmo em execução
 

A grafia <valor_1>, <valor_2> e <valor_3> correspondem aos possíveis valores inteiros ou caracter que serão comparados ao valor que está armazenado no <identificador> que será descrito no início desta instrução, logo após a palavra reservada escolha, estando o mesmo entre parênteses.

 

Assim, será realizada a operação relacional de igualdade sem que o símbolo da mesma esteja descrito, explicitamente, na instrução, conforme pode ser observado no exemplo a seguir.

 

Exemplo:

 
algoritmo avaliarDistancia;
//  Síntese
//     Objetivo: avaliar a distância entre duas cidades.
//     Entrada : distância em quilômetros.
//     Saída   : classificação da distância a ser percorrida.

principal
	// Declarações
	
	// cria variável inteira denominada distancia
	inteiro distancia;
	
	// Instruções
	
	// mostra mensagem de orientação para interação com usuário
	escreva("Informe a distância entre duas cidades brasileiras:");
	leia(distancia);
	se (distancia > 500) entao
		escreval("Distância considerável a ser percorrida - longe.");
		
	senao
		se (distancia < 100) entao
			escreval("Distância pequena a ser percorrida - perto.");
		senao
			escreval("Distância peculiar a ser percorrida - mediana.");
		fimSe
	fimSe
	
fimPrincipal
 

Fluxograma:

 

Acompanhe a representação gráfica, em fluxograma, elaborada para o algoritmo anterior que está usando a seleção encadeada mostrada no português estruturado.

 
Fluxograma Encadeado
   

Seleção de Múltipla Escolha
 

Entre as quatro variações de instruções de seleção, a de Múltipla Escolha possui diferenças significativas em sua utilização, principalmente na sua sintaxe em português estruturado.  As palavras reservadas desta instrução são escolha, caso e fimEscolha, sendo opcional o uso da outroCaso, como ocorre com a instrução se... entao que pode usar o senao (seleção composta) ou não (seleção simples).

 

É importante destacar que esta instrução de seleção já possui a sua operação relacional definida e não pode ser utilizada outra além da igualdade, que é implícita nesta instrução (nunca aparece o símbolo = na instrução). Por meio dela só é possível verificar se existe igualdade entre um valor inteiro ou caracter desejado que se queira avaliar, onde sua veracidade resultará somente na execução das outras instruções disponíveis no caso que corresponde ao valor igual ao avaliado.

 

Caso nenhum dos valores estejam especificados como um caso desta instrução de múltipla escolha será executada as instruções disponíveis no outroCaso, se o mesmo existir, ou o algoritmo continuará sua execução após o fimEscolha.

 

Forma Geral de Sintaxe

 
escolha (<identificador>)
  caso <valor_1>
    primeiro bloco de instrução
  caso <valor_2>
    segundo bloco de instrução
  caso <valor_3>
    terceiro bloco de instrução
  outroCaso
    bloco de instrução do outro caso (valor diferente de todos anteriores)
fimEscolha
// continua as instruções do algoritmo em execução
 

A grafia <valor_1>, <valor_2> e <valor_3> correspondem aos possíveis valores inteiros ou caracter que serão comparados ao valor que está armazenado no <identificador> que será descrito no início desta instrução, logo após a palavra reservada escolha, estando o mesmo entre parênteses.

 

Assim, será realizada a operação relacional de igualdade sem que o símbolo da mesma esteja descrito, explicitamente, na instrução, conforme pode ser observado no exemplo a seguir.

 

Exemplo:

 
algoritmo estadoCivil;
//  Síntese
//     Objetivo: Indicar a o estado Civil .
//     Entrada : Opção que indica o estado Civil.
//     Saída   : Estado Civil .

principal
	// Declarações
	inteiro opcao;
	// Instruções
	escreval("Escolha a opção do menu referente ao seu estado Civil:");
	escreval("1 - Casado");
	escreval("2 - Solteiro");
	escreval("3 - Divorciado");
	escreval("4 - Viúvo");
	leia(opcao);
	escolha (opcao) // instrução de múltipla escolha sobre opcao
	caso 1  // testes de igualdades sobre opcao
		escreva("Casado");
		interrompa; // termina o caso 
	caso 2
		escreva("Solteiro");
		interrompa;
	caso 3
		escreva("Divorciado");
		interrompa;
	caso 4
		escreva("Viúvo");
		interrompa;
	outroCaso
		escreva ("Estado Civil incorreto");
	fimEscolha
	
fimPrincipal
	

 

Imagine que um usuário solicite a execução do algoritmo estação climática acima e digite o número 2 e aguarde a apresentação do resultado final em sua tela de execução. Esta situação está ilustrada na figura a seguir que representa a tela ou janela de execução deste algoritmo.

 
tela algoritmo
 

Uma situação importante no uso desta instrução na elaboração de algoritmos é seu teste condicional de igualdade usando o tipo de dado caracter. Apesar desta instrução permitir o uso de identificadores que armazenam vários caracteres juntos, ou seja, um conjunto de caracteres (também chamado de string no ambiente computacional), ela não pode ser traduzida literalmente para um programa de computador, pois esta manipulação de caracteres em um programa não possui um único caracter (um único valor), mas vários (conjunto de caracteres).

 

Dessa forma, é importante a análise através de opções de menu e não de conjunto de caracteres que não poderão ter sua lógica de solução traduzida realmente para um futuro programa de computador.

 

Fluxograma:

 

Note que a representação gráfica da instrução de múltipla escolha não possui nenhum diagrama novo em sua elaboração, mas uma organização lógica diferente para solução do problema em questão (algoritmo Estado Civil).

 
fluxograma Escolha
 
  • Repetição: conjunto de instruções, ou uma única instrução, que será executada repetidamente, de acordo com o resultado de um teste condicional, que compõem a instrução de repetição e permite o laço para a nova execução destas instruções que compõem o bloco de repetição.

 
repetiçã ou laço
 

Cada uma destas instruções básicas são fundamentais no desenvolvimento de lógicas coerentes nos algoritmos, sendo estas responsáveis pelo êxito no processamento de dados simples até o mais complexo, controlando o fluxo dos dados que serão processados pelo computador.

 

A importância no estudo das instruções de seleção e repetição conferem a esta abordagem inicial sobre as 4 possíveis seleções um momento de fixação dos conteúdos já abordados, para posterior continuidade sobre os conteúdos relacionados as instruções de repetição.

 
Atividade de Fixação
 

No intuito de fixar os conteúdos abordados neste módulo e verificar qual foi sua aprendizagem sobre os mesmos, são sugeridos alguns exercícios de fixação para serem resolvidos. Clique no link de exercícios ao lado e inicie a lista de exercícios coerente com o conteúdo estudado anteriormente.

 
 

Estrutura de Repetição

 

Entre as instruções de controle, as estruturas de repetição se destacam entre as principais, possibilitando que o processamento de algumas instruções do algoritmo seja executado repetidas vezes, conforme a necessidade da lógica envolvida para solução do problema computacional que se deseje resolver. Apesar das mesmas instruções serem repetidas em sua execução, geralmente, elas envolvem dados diferentes, o que ocasionará resultados distintos durante sua execução.

 

Um exemplo simples e didático ao início desta aprendizagem em Programação (instruções de repetição) é o cálculo da tabuada de um número, onde no período inicial de alfabetização e formação de jovens crianças, normalmente durante o ensino fundamental, são trabalhados e exercitados os aspectos cognitivos relacionados a este cálculo. Esta realização consiste na mesma operação aritmética (multiplicação) sobre valores numéricos inteiros diferentes e sequências, que geralmente variam entre um (1) e dez (10) sobre um outro valor inteiro desejado.

 

Almejando representar este conjunto de operações aritméticas de multiplicação sobre o número 5, efetuando o cálculo da maneira mais convencional ao momento de aprendizagem no ensino fundamental, ou seja, no intervalo de 1 até 10, acompanhe o exemplo a seguir.

 

Exemplo:

 

5 x 1 = 5

5 x 2 = 10

5 x 3 = 15

5 x 4 = 20

5 x 5 = 25

5 x 6 = 30

5 x 7 = 35

5 x 8 = 40

5 x 9 = 45

5 x 10 = 50

 

Relembrando a sequência de operações necessárias para realização deste cálculo no intervalo sugerido ([1,10]), acompanhe a elaboração do algoritmo a seguir, em português estruturado, que solicita ao usuário o número positivo que ele deseje verificar o cálculo da tabuada.

 
algoritmo tabuada;
//  Síntese
//     Objetivo: calcular a tabuada de um número inteiro positivo.
//     Entrada : número inteiro positivo.
//     Saída   : tabuada de 1 até 10 do número inteiro positivo informado.

principal
	// Declarações
	inteiro numero;
	// Instruções
	escreva("Informe um número inteiro positivo para tabuada:");
	leia(numero);
	escreval(numero," x 1 = ",(numero * 1));
	escreval(numero, " x 2 = ",(numero * 2));
	escreval(numero, " x 3 = ",(numero * 3));
	escreval(numero, " x 4 = ",(numero * 4));
	escreval(numero, " x 5 = ",(numero * 5));
	escreval(numero, " x 6 = ",(numero * 6));
	escreval(numero, " x 7 = ",(numero * 7));
	escreval(numero, " x 8 = ",(numero * 8));
	escreval(numero, " x 9 = ",(numero * 9));
	escreval(numero, " x 10 = ",(numero * 10));
	
fimPrincipal
 

Para representação exemplificada anteriormente (tabuada do 5) o algoritmo acima resolveria a situação para vários números inteiros positivos que fossem informados, inclusive o próprio 5. Mas imagine o crescimento desta criança, em fase de formação, e sua necessidade de cálculos que envolvam valores maiores que o intervalo sugerido inicialmente. Suponha que os valores da tabuada tivessem que ser gerados até 1000, ao invés de simplesmente no intervalo [1,10]. Esta nova suposição não tornaria o algoritmo mais complexo para ser resolvido, pois a operação aritmética a ser realizada será a mesma, porém este algoritmo, em português estruturado, ficará enorme, com muitas linhas de instruções para realizar esta operação aritmética simples, envolvendo somente valores básicos diferentes para tal operação.

 

No intuito de evitar esta e outras situações comuns no processamento de dados e tornar os algoritmos mais eficientes e claros em sua representação é que são empregadas as estruturas de repetição. Elas colaboram no controle das manipulações necessárias sobre os dados armazenados, permitindo a repetição de uma operação, ou conjunto de instruções, quantas vezes forem necessárias, baseando esta repetição no resultado de um teste condicional.

 

Basicamente, as estruturas de repetição são formadas por um bloco de instrução e um teste condicional, responsável pela verificação de que este bloco, denominado bloco de repetição, será executado ou não repetidas vezes. Estas estruturas também denominam o teste condicional como expressão de controle, pois sendo que seu resultado lógico (verdadeiro ou falso) resultará na repetição ou não da execução do bloco de repetição.

 

As estruturas de repetição são definidas em três, atendendo as características lógicas diferentes que possam ser encontradas no processamento de dados. Estes três tipos de instruções de repetição, também chamados de instruções de laço ou looping, são:

 
  • para... faca

  • enquanto... faca

  • faca... enquanto

 

Estas três estruturas ainda podem envolver uma instrução de interrupção brusca na lógica de repetição elaborada em um algoritmo, demonstrando a fragilidade do raciocínio representado por este programador (pessoa que elabora algoritmos e programas de computador). Assim, o uso da instrução interrompa está condicionado ao fraco raciocínio estruturado do programador, não devendo ser usado na elaboração de algoritmos com lógica adequada na solução de um problema computacional.

 
Estrutura de Repetição para...faca
 

A instrução de repetição para...faca repete a execução de seu bloco de repetição um número de vezes fixado em sua definição (repetição bem definida) sendo possível conhecer previamente a quantidade de vezes que isso ocorrerá durante a execução do algoritmo.

 

Esta instrução é definida em uma única linha de comando no português estruturado, porém torna implícita três instruções fundamentais a sua execução correta:

 
  • atribuição inicial a sua variável de controle;

  • teste condicional responsável pela repetição ou não de seu bloco;

  • definição do passo da repetição sobre a variável de controle.

 

A variável de controle consiste na definição de uma variável do tipo inteiro que será responsável pelo controle de quantas vezes esta repetição será executada, sendo a mesma utilizada pelas três instruções implícitas existentes em uma instrução para... faca.

 

Forma Geral de Sintaxe

 
para (<variável_controle> de <inicial> ate <final> passo <rep>) faca
    bloco de repetição
fimPara
fimPrincipal
 

onde:

 
  • para, de, ate, passo, faca e fimPara - são palavras reservadas;

  • <variável_controle> - variável inteira responsável pelo controle da repetição;

  • <inicial> - valor inteiro inicial que será atribuído a variável de controle no momento em que esta instrução for executada a primeira vez;

  • <final> - valor inteiro final que permitirá a execução do bloco de repetição pela última vez;

  • <rep> - valor inteiro que define o incremento ou decremento na variável de controle que será realizada a cada nova execução do bloco de repetição, antes da realização do teste condicional que definirá a execução ou não do bloco de repetição.

 

Com o conhecimento desta nova estrutura de controle é possível evoluir a solução apresentada anteriormente como solução do problema da tabuada. Uma solução mais adequada a este problema, que pode aumentar a quantidade de valores a serem calculados, saltando do convencional intervalo de 1 até 10 para até 1000 ou muito mais, é sugerido um algoritmo usando português estruturado com para... faca, que torna a lógica e a eficiência da solução mais coerentes ao processamento do computador.

 

Solução do problema da tabuada:

 
algoritmo tabuada;
//  Síntese
//     Objetivo: calcular a tabuada de um número inteiro positivo.
//     Entrada : número inteiro positivo.
//     Saída   : tabuada de 1 até 10 do número inteiro positivo informado.

principal
	// Declarações
	inteiro numero, controle;
	// Instruções
	escreva("Informe um número inteiro positivo para tabuada: ");
	leia(numero);
	para (controle de 1 ate 10 passo 1) faca
		escreval(numero, " x ",controle," = ", (numero * controle));
	fimPara
	
fimPrincipal
 

Compare os dois algoritmos para solução deste problema e analise a facilidade de compreensão da lógica envolvida na representação de ambos, além da agilidade para aumentar a solução para o processamento de 1000 valores ou mais. Veja que nesta solução com o para... faca só é necessário trocar o valor final da instrução de repetição para o mesmo gerar novos valores para tabuada desejada.

 

Apesar da instrução para... faca estar definida em uma única linha de código, esta linha possui as três instruções implícitas esclarecidas anteriormente, além da explicação a seguir sobre o momento de execução de cada uma delas.

 
  1. inicialização da variável de controle, denominada controle neste último algoritmo tabuada

  2.  

    controle = 1

    - instrução implícita da para... faca executada só na primeira repetição

     
  3. teste condicional que define a repetição ou não da execução do bloco de repetição

  4.  

    controle  <= 10

    - instrução implícita da para... faca executada antes de repetir a execução do bloco de repetição, sendo seu resultado verdadeiro para execução do bloco de repetição, caso contrário, resultado falso, o bloco de repetição não é executado e o algoritmo continua sua execução sequencial após a instrução fimPara.

     
  5. incremento ou decremento da variável de controle pelo valor do passo definido na instrução, sendo esta definição obrigatória em todas as instruções para... faca

  6.  

    controle = controle + 1

    - instrução implícita da para... faca executada sempre que o bloco de repetição termina sua execução chegando na instrução fimPara. A execução do incremento (+ 1) ou decremento (-1) é realizada antes do teste condicional ser executado novamente, para verificar se o bloco de repetição será executado ou não.

 
repetição
 

Dessa forma, a instrução de repetição possibilitou uma representação fácil para compreensão da lógica envolvida, além de processo de correção e manutenção mais clara.

 

Fluxograma:

 

Observe a representação do algoritmo anterior, usando a para... faca, em fluxograma e note que nenhuma nova figura geométrica foi inserida nesta representação gráfica, sendo a lógica responsável pela organização do algoritmo gráfico elaborado corretamente.

 
fluxograma para_ate
   
Estrutura de Repetição enquanto...faca
 

A instrução de repetição enquanto... faca permite a execução de seu bloco de repetição um número de vezes fixado por uma lógica adequada a solução de um problema computacional ou ainda a quantidade de vezes que seu usuário desejar, sendo ele responsável pelo controle de quantas vezes este bloco de repetição poderá ser executado.

 

A execução desta repetição está condicionada ao resultado de seu teste condicional ser verdadeiro, podendo este teste realizar expressões relacionais com operadores lógicos e aritméticos que cheguem a um resultado sempre do tipo de dado lógico (verdadeiro ou falso). Enquanto este teste permanecer verdadeiro o bloco de repetição é executado continuamente, sendo encerrado somente quando o teste for falso.

 

Forma Geral de Sintaxe

 
enquanto (<teste_condicional>) faca
  bloco de repetição

fimEnquanto

 

onde:

 
  • enquanto, faca e fimEnquanto - são palavras reservadas

  • <teste_condicional> - expressão relacional que resultará em um dado lógico (verdadeiro ou falso), indicando se o bloco de repetição será executado novamente (resultado verdadeiro) ou não (resultado falso).

 

Geralmente, esta instrução de repetição também usa uma ou mais variáveis de controle. Porém, todas as operações realizadas sobre a mesma devem ser explícitas e executadas conforme a lógica adequada a ser elaborada no algoritmo. Assim, a operação de inicialização da variável de controle deve ser realizada antes do teste condicional explícito nesta estrutura de repetição (enquanto... faca), pois só é possível uma verificação condicional se existirem valores a serem comparados em uma variável, caso contrário a mesma não possuirá valor, ou seja, em programação ela será vazia (sem valor), não podendo ser testada.

 

A operação de incremento ou decremento da instrução enquanto... faca também deverá ser explícita no bloco de repetição, caso contrário a variável de controle se manterá com o mesmo valor que resultou em sua entrada neste bloco (teste condicional verdadeiro) para execução, ocorrendo o processamento conhecido como laço infinito, ou seja, a repetição existente no algoritmo não alterará o valor da variável de controle e manterá o bloco de repetição em constante execução, pois seu teste condicional será sempre verdadeiro e o algoritmo nunca chegará ao final de seu processamento correto.

 

A representação do raciocínio lógico relacionado a instrução de repetição enquanto... faca em português estruturado é exemplificada no exemplo a seguir que procura encontrar a media de gols de um equipe de futebol que possui 11 jogadores em seu elenco.

 

Exemplo:

 
algoritmo mediaGols;
//  Síntese
//     Objetivo: calcular a média dos Gols de uma equipe de futebol
//     Entrada : quantidade de gols de cada jogador  de uma equipe de futebol
//     Saída   : média de Gols da equipe.

principal
	// Declarações
	inteiro contador;
	real gols, soma, media;

	// Instruções
	contador = 1; // inicialização explícita da variável de controle
	soma = 0;

	enquanto (contador <= 11) faca
	  escreva("Informe a quantidade de gols do jogador ", contador, ":");
	  leia(gols);
	  soma = (soma + gols); // acumulando os gols informados
	  contador = (contador + 1); // incremento explícito da repetição
	fimEnquanto

	media = (soma / 11); // calcula média dos gols acumulados
	escreva("Media do numero de Gols  da equipe = ",media:2:2);
fimPrincipal
 
imagen enquanto
 

A representação gráfica do algoritmo média de gols acima é elaborada no fluxograma a seguir.

 

Fluxograma:

 
fluxograma enquanto
 

É importante ressaltar que as instruções de repetição estudadas até o momento (para... faca e enquanto... faca) executam o bloco de repetição somente quando o resultado de seu teste condicional é verdadeiro, caso contrário, teste condicional falso, a repetição é encerrada e o algoritmo prossegue sua execução. Caso o teste condicional seja falso na primeira verificação, antes de executar o bloco de repetição pela primeira vez, a execução se desloca para instrução de encerramento da repetição sem executar nenhuma vez o bloco de repetição.

 
Estrutura de Repetição faca...enquanto
 

A terceira repetição é semelhante a repetição enquanto, com uma diferença: a condição é avaliada sempre após a execução do código. Isso significa que independente do resultado da expressão, o corpo da repetição irá executar pelo menos uma vez.

 

Forma Geral de Sintaxe

 
faca
  bloco de repetição
enquanto (teste_condicional);
 
  • faca e enquanto - são as palavras reservadas desta estrutura de repetição

  • teste_condicional - expressão relacional que resultará em um dado lógico (verdadeiro ou falso), indicando se o bloco de repetição será executado novamente (resultado verdadeiro) ou não (resultado falso).

 

Similar a instrução enquanto...faca a faca... enquanto também usa variável de controle, sendo todas as operações sobre a mesma explícitas para o seu correto funcionamento lógico no algoritmo. Uma preocupação na elaboração desta instrução também é o laço infinito, devendo-se ter muito cuidado com a lógica representada nas três instruções de repetição (para... faca, enquanto... faca e faca... enquanto) para que isso não aconteça.

 
repita... ate
 

Um exemplo em português estruturado é elaborado a seguir sobre o mesmo problema explorado no exemplo anterior, usado na explicação da instrução de repetição enquanto... faca. Por meio do mesmo exemplo é possível efetuar uma análise comparativa sobre o emprego de uma ou outra lógica de repetição na solução do problema (calcular a media de gols de uma equipe de futebol que possui 11 jogadores).

 

Exemplo:

 
algoritmo mediaGols;
//  Síntese
//     Objetivo: calcular a média dos Gols de uma equipe de futebol
//     Entrada : quantidade de gols de cada jogador  de uma equipe de futebol
//     Saída   : média de Gols da equipe.

principal
	// Declarações
	real gols, soma, media;
	inteiro contador; // declaração da variavel de controlhe

	// Instruções
	contador = 1; // inicialização explícita da variável de controle
	soma = 0;
	
	enquanto (contador <= 11) faca
	  escreva("Informe a quantidade   de gols do jogador ", contador, ":");
	  leia(gols);
	  soma = (soma + gols); // acumulando os gols informados
	  contador = (contador + 1); // incremento explícito da repetição
	fimEnquanto

	media = (soma / 11); // calcula média dos gols acumulados
	escreva("Media do numero de Gols  da equipe = ",media:2:2);
fimPrincipal
 

Acompanhe a seguir a representação do algoritmo em português estruturado acima, no fluxograma a seguir.

 

Fluxograma:

 
exemplo fluxograma
 

Observe que não existe nenhuma figura geométrica nova na representação do algoritmo que utiliza a instrução faca... enquanto, mas uma organização lógica de processamento diferente. Primeiramente, a repetição sendo executada quando seu teste condicional é falso e ainda a posição sequencial deste teste que se encontra no final desta instrução de repetição.

 

Formas de Controle nas Estruturas de Repetição

 

As estruturas de repetição propiciam uma organização lógica e de representação mais fácil na elaboração e compreensão dos algoritmos computacionais. Um aspecto importante na utilização destas estruturas está relacionada a sua forma de controle sobre a quantidade de vezes que um bloco de repetição será repetidas vezes executado até o encerramento da instrução de repetição envolvida. De maneira mais simples, a fim de colaborar no entendimento destes possíveis controles na repetição, é realizada uma classificação dos mesmos, podendo estes serem:

   

  • AUTOMÁTICO - emprega uma variável auxiliar (variável de controle) responsável pela quantidade de vezes que o bloco de repetição será executado, sem uma interferência direta do usuário sobre esta quantidade de repetições. Esta quantidade de vezes é coerente com a lógica de solução do problema, não podendo ser realizada a repetição um número de vezes maior ou menor do que a lógica exige, caso contrário o valor final processado pelo computador estará incorreto. Por exemplo, suponha o cálculo da potência de 2 elevado a 3, onde será realizada a multiplicação da base 2 somente 2 vezes (2 x 2), o que resultará em 4, sendo o resultado correto deste cálculo 8.

 

Assim, um controle automático não pode ter sua repetição livre ou podendo ter interferência direta sobre sua lógica para se alcançar um resultado esperado e correto.

 
  • CONTROLADO PELO USUÁRIO - este controle também emprega uma ou mais variáveis de controle para controlar a quantidade de execuções do bloco de repetição. Porém, este controle está sujeito a interferência do usuário do algoritmo e não somente a lógica de solução do problema computacional. Por exemplo, imagine o algoritmo que cadastra os dados pessoais de um funcionário de uma grande empresa, onde tal cadastro solicita a quantidade de dependentes deste funcionário e o nome e idade de cada um deles. Para realização deste cadastro por todos os funcionários existirá a variação na quantidade de dependentes de cada funcionário, podendo inclusive existirem funcionários que não tem dependentes.

 

Portanto, a repetição controlada pelo usuário depende, diretamente, da interferência do usuário, caso contrário ela não funcionará adequadamente às suas necessidades.

 

No intuito de esclarecer melhor as diferenças entre estes dois controles das repetições é exemplificada as abordagens automática e pelo usuário nos algoritmos em português estruturado a seguir.

 

Controle automático

 
algoritmo repeticaoAutomatica;
//  Síntese
//     Objetivo: confirma cadastro da altura dos jogadores titulares de uma 
vôlei // Entrada : 6 alturas. // Saída : mensagem confirmando o cadastro da altura dos titulares. principal // Declarações inteiro contador; real altura; // Instruções contador = 1; // inicialização explícita da variável de controle enquanto (contador <= 6) faca // titulares em vôlei são 6 jogadores escreval("Informe a altura do ", contador, " jogador: "); leia(altura); contador = (contador + 1); // incrementando a variável de controle fimEnquanto escreva("Cadastro dos titulares realizado com sucesso."); fimPrincipal
 

O algoritmo anterior efetua a leitura das seis alturas dos jogadores titulares de uma equipe de vôlei, só sendo encerrado após a leitura destas seis alturas. Este tipo de repetição é classificada como automática, pois o algoritmo sempre lerá seis alturas, nunca lendo mais ou menos alturas.

 

Controle pelo usuário

 
algoritmo repeticaoControladaPeloUsuario;
// Síntese
//  Objetivo: confirma a quantidade de alturas cadastradas
//  Entrada : alturas
//  Saída   : quantidade de alturas cadastradas


principal
	// Declarações
	inteiro contador;
	real altura;
	
	// Instruções
	altura =1;
	contador =0;
	
	enquanto (altura >0) faca		
	  escreval("Informe a altura a ser cadastrada: ");
	  leia(altura);
	  contador = (contador + 1);
	fimEnquanto

	escreva("Foi cadastrada ", contador -1, " altura(s).");
fimPrincipal
 

O algoritmo anterior lê quantas alturas o usuário desejar, respeitando a mesma lógica de cadastro para a quantidade que o usuário necessite. Repare que esta lógica pode cadastrar inclusive, nenhuma altura a ser contabilizada pelo algoritmo. Em diversas publicações literárias (livros, revistas, etc.) sobre algoritmo, este tipo de controle recebe várias denominações, estando entre as mais usadas a sentinela e o flag para interrupção da repetição.

 

Como abordado anteriormente, as soluções anteriores (algoritmos repetição automática e repetição controlada pelo usuário) também poderiam estar utilizando a instrução faca... enquanto, tendo o cuidado com as alterações coerentes com as lógicas desta outra repetição, assim como do problema que está sendo resolvido pelo algoritmo. Acompanhe, por exemplo, a solução em português estruturado elaborada para o problema anterior (cadastro de várias alturas).

 
algoritmo repeticaoControladaPeloUsuario;
// Síntese
//  Objetivo: confirma a quantidade de alturas cadastradas
//  Entrada : alturas
//  Saída   : quantidade de alturas cadastradas


principal
	// Declarações
	inteiro contador;
	real altura;
	
	// Instruções
	altura =1;
	contador =0;
	
	faca
	  escreval("Informe a altura a ser cadastrada: ");
		leia(altura);
		contador = (contador + 1);
	enquanto(altura > 0);

	escreva("Foi cadastrada ",contador -1," altura(s).");	
fimPrincipal
 

Apesar deste estudo abordar estas duas formas de controle das estruturas de repetição, ainda é possível um controle que utilize os dois tipos (automático e pelo usuário) em conjunto, de acordo com a necessidade do problema a ser resolvido. Por exemplo, suponha a necessidade de realização de vários cálculos de potência em uma mesma execução de um algoritmo. O cálculo em si empregará uma repetição automática, conforme sua lógica exige, porém a quantidade de cálculos de potência a serem realizadas será definida pelo usuário, de acordo com sua necessidade pessoal naquele momento.

 
Atividade de Fixação
   

No intuito de fixar a aprendizagem iniciada por meio deste módulo e verificar como seu entendimento sobre este conteúdo está, estão sendo sugeridos alguns exercícios de fixação para serem resolvidos. Clique no link de exercícios ao lado, pois será por meio dele iniciada a lista de exercícios sobre os conteúdos estudados até este momento nesta disciplina.