ESTRUTURA DE CONTROLE DE DADOS
As estrutura de controle de dado são responsáveis pela manipulação dos dados conforme seja necessário na realização de um processamento. Cada instrução programável possui uma lógica de operação e estabelece uma sequencia de ações a serem efetuadas ou verificadas.
Quando estivermos criando os algoritmos serão necessárias as manipulações de dados respeitando a sequencia lógica de cada comando, buscando sempre alcançar os objetivos almejados pelos algoritmos.
Basicamente as estruturas de controle de dados são de três tipos principais:
ESTRUTURA SEQUENCIAL
A estrutura sequencial é a mais convencional entre todas as possíveis, pois ela consiste na execução de uma instrução de cada vez, onde o encerramento da primeira instrução permite o acionamento da instrução seguinte, respeitando a ordem de cima para baixo.
Observe o exemplo a seguir:
Declarações
real NOTA; { cria uma variável real denominada NOTA }
Inicio
escreva("Informa a nota da prova: "); { orientação para o usuário }
leia(NOTA); { leitura e armazenamento do valor informado }
escreva("Nota =", NOTA);{ mostra a mensagem e o conteúdo de NOTA }
Fim
O algoritmo proposto no exemplo anterior é descritivo e respeita as regras de organização e sintaxe do português estruturado. Porém, qual é a primeira instrução a ser executada neste algoritmo?
Ele será executado de maneira sequencial, onde, a partir da palavra reservada Declarações, as instruções vão sendo executadas de cima para baixo e a próxima instrução só é executada após a anterior ser encerrada. O ponto e vírgula marca exatamente o final da instrução a ser executada.
É importante observar que sempre será executado primeiro o bloco de declarações e na sequencia o bloco de instruções. A execução da palavra reservada Fim encerra a execução do algoritmo.
ESTRUTURA DE SELEÇÃO OU CONDICIONAL
Este tipo de estrutura permitir a escolha de um caminho sequencial a ser executado. Primeiramente, ela efetua um teste condicional que definirá o caminho de execução do algoritmo baseado no resultado deste teste.
Os testes condicionais são baseados na lógica convencional, podem obter o resultado de verdadeiro ou falso. 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).
As estruturas de seleção podem ser classificadas de 4 formas diferentes, sendo esta classificação baseada na organização lógica existente em cada situação. Esta classificação se resume em:
Seleção Simples
Neste tipo de seleção é proposto um teste condicional, que sendo verdadeiro possibilitará a execução de uma instrução ou um conjunto de instruções (bloco condicional) específica.
Português estruturado
Acompanhe a seguir as regras de representação em algoritmo para a técnica descritiva do português estruturado.
Sintaxe:
:
se (<condição>) então
comando 1;
comando 2;
:
:
comando n;
fim se;
Exemplo:
Declarações
inteiro IDADE;
Inicio
escreva("Informe sua idade: ");
leia(IDADE);
se (IDADE < 15) então
escreva ("Você é uma criança");
fim se;
Fim
Este algoritmo será executado sequencialmente até chegar ao comando SE (comando condicional SE) que realizará o teste condicional para verificar a veracidade do valor informado pelo usuário e armazenado na variável IDADE.
Se ela for verdadeira, ou seja, for menor que 15 a mensagem "Você é uma criança" será mostrada na tela. Se o valor informado pelo usuário não atender ao teste condicional, a mensagem não será exibida e o bloco condicional não será executado.
Fluxograma:
Acompanhe a seguir a representação em algoritmo na técnica gráfica do fluxograma.
Seleção Composta
A seleção composta sempre executará um bloco condicional, pois se o resultado do teste condicional for verdadeiro um conjunto de instruções ou somente uma será executada e se o resultado não for verdadeiro um outro conjunto de instruções, ou somente uma, será executada também.
Este tipo de seleção sempre identificará um único caminho de instruções a ser percorrido, dependendo sempre do resultado da veracidade do testes condicional executado.
Sintaxe:
:
se (<condição>) então
comando 1;
:
comando n;
senão
comando 5;
:
comando m;
fim se;
Exemplo:
Declarações
inteiro IDADE;
Inicio
escreva("Informe sua idade: ");
leia(IDADE);
se (IDADE < 15) então
escreva ("Você é uma criança");
senão
escreva("Você é adulto");
fim se;
Fim
Se a idade informada for menor que 15 então a mensagem a classificará como uma criança, senão a mensagem apresentada será que Você é adulto.
Fluxograma:
Veja a seguir a representação gráfica do algoritmo anterior em fluxograma.
Seleção encadeada
A instrução de seleção (SE) pode ser encadeada uma dentro da outra, seja no bloco verdadeiro (então) ou falso (senão). Todas as instruções programáveis podem estar dentro de qualquer um dos blocos da instrução de seleção.
O encadeamento destas instruções também é chamada de aninhamento de instruções de seleção ou condicional várias, não existindo um limite de quantos testes condicionais podem estar dentro de outro. Quem estabelece este tipo de limite é a solução lógica proposta no algoritmo para alcançar uma solução eficiente.
Sintaxe:
:
se (<condição_1>) então
<bloco de comandos 1>;
senão
se (<condição_2>) então
<bloco de comandos 2>;
senão
se (<condição_3>) então
:
fim se;
fim se;
fim se;
Exemplo:
Declarações
inteiro IDADE;
Inicio
escreva("Informe sua idade: ");
leia(IDADE);
se (IDADE < 20) então
se(IDADE < 15) então
escreva ("Você é criança");
senão
escreva ("Você é adolescente");
fim se;
senão
se(IDADE < 50) então
escreva("Você é adulto");
senão
escreva("Você é velho");
fim se;
fim se;
Fim
Fluxograma:
Seleção de Múltipla Escolha
Uma outra instrução condicional, muito utilizada nas avaliações de igualdade, é a seleção de múltipla escolha. Ela verifica somente a igualdade do valor avaliado, onde sua veracidade resultará na execução de um bloco, ou de uma única instrução específica.
Sintaxe:
:
escolha (X)
caso <v1>:
comandos;
caso <v2>:
comandos;
caso <v3>:
comandos;
caso contrario:
comandos;
fim escolha;
<v1>, <v2>, <v3> são supostos valores a serem relacionados por meio da operação de igualdade
Exemplo:
Declarações
inteiro EPOCA;
Inicio
escreva("Digite o período trimestral do ano em que estamos: ");
leia(EPOCA);
escolha (EPOCA) { instrução de múltipla escolha sobre EPOCA }
caso 1: escreva ("verão"); { testes de igualdades sobre EPOCA }
caso 2: escreva ("outono");
caso 3: escreva ("inverno");
caso 4: escreva ("primavera");
caso contrario: escreva ("período inválido");
fim escolha;
Fim
ATIVIDADE DE FIXAÇÃO
No intuito de fixar os conteúdos abordados neste módulo e verificar qual foi sua aprendizagem sobre o mesmo é sugerido alguns exercícios de fixação para serem resolvidos. Clique sobre o diagrama abaixo e inicie a lista de exercício coerente com o conteúdo estudado até agora.
ESTRUTURA DE REPETIÇÃO
O processamento de valores pode ocorrer diversas vezes sobre uma mesma lógica, porém os dados a serem manipulados podem ser diferentes, como no calculo da tabuada de um número. Este calculo realiza a mesma operação de multiplicação sobre os valores numéricos inteiros sequencias, normalmente iniciados em um (1) e seguindo até o número dez (10) quando estamos aprendendo a calcular e memorizar o resultado obtido nesta operação.
Sendo assim, Vamos criar um algoritmo que leia um número positivo e apresente o resultado de sua tabuada de um a dez (1 à 10). Observe o exemplo proposto:
Exemplo:
Supondo que o valor desejado seja 2 então:
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
Solução (algoritmo descritivo):
Declarações
inteiro VALOR;
Início
escreva ("Informe o valor desejado: ");
leia(VALOR);
escreva(VALOR, " x 1 = ", (VALOR * 1) );
escreva(VALOR, " x 2 = ", (VALOR * 2) );
escreva(VALOR, " x 3 = ", (VALOR * 3) );
escreva(VALOR, " x 3 = ", (VALOR * 4) );
escreva(VALOR, " x 3 = ", (VALOR * 5) );
escreva(VALOR, " x 3 = ", (VALOR * 6) );
escreva(VALOR, " x 3 = ", (VALOR * 7) );
escreva(VALOR, " x 3 = ", (VALOR * 8) );
escreva(VALOR, " x 9 = ", (VALOR * 9) );
escreva(VALOR, " x 10 = ", (VALOR * 10) );
Fim
Para o exemplo acima foi desenvolvido um algoritmo que atende ao problema apresentado, mas se os valores tivessem que ser gerados até 1000. Assim o algoritmo não ficaria mais complexo, pois a operação a ser realizada seria a mesma, mas ele ficaria bem maior.
Com o intuito de controlarmos as manipulações necessários sobre os dados armazenados, também podemos utilizar as instruções de repetição, que permitem a repetição de uma operação quantas vezes forem necessárias, baseando esta repetição no resultado de um teste condicional.
PARA ... FAÇA
A instrução de repetição PARA ... FAÇA executa um conjunto de instruções por uma quantidade de vezes bem definidas (conhecidas).
Sintaxe:
:
para X de i até f passo p faça
<comandos>;
fim para;
onde
O problema da tabuada, apresentado anteriormente, pode ser solucionado com o algoritmo que usa eficientemente a instrução de repetição para ... faça.
Solução da tabuada (descritiva):
Declarações
inteiro VALOR, CONTADOR;
Início
escreva ("Informe o valor desejado: ");
leia(VALOR);
para CONTADOR de 1 até 10 passo 1 faça
escreva(VALOR, " x ",CONTADOR," = ", (VALOR * CONTADOR) );
fim para;
Fim
Vamos acompanhar outro exemplo na aplicação desta instrução de repetição.
Exemplo (descritivo):
Declarações
real NOTA, SOMA, MEDIA;
inteiro AUX;
Início
SOMA
0;
para AUX de 1 até 50 passo 1 faça
escreva("Informe sua nota: ");
leia(NOTA);
SOMA
SOMA + NOTA;
fim para;
MEDIA
SOMA / 50;
escreva ("Média da turma = ", MEDIA);
Fim
Neste exemplo, a repetição, ou looping, realizado pela instrução para ... faça efetua a leitura e a soma de 50 notas de alunos de uma turma, apresentando no seu final a média desta turma.
Fluxograma:
Acompanhe a seguir o algoritmo gráfico da solução descrita anteriormente me português estruturado.
ENQUANTO ... FAÇA
A instrução de repetição ENQUANTO ... FAÇA permite a execução do conjunto de comandos pertencentes ao seu bloco de repetição, sendo eles executados a partir de um teste condicional verdadeiro. Enquanto este teste permanecer verdadeiro a repetição é executada continuamente, sendo encerrada somente quando a condição for falsa.
Efetua um teste lógico antes de iniciar as instruções de repetição (ou looping).
O controle pode ser feito pelo usuário ou automaticamente por um contador.
Sintaxe:
:
enquanto (< condição >) faça
<bloco de repetição>; { com um ou vários comandos }
fim enquanto;
Fluxograma:
Observe a representação genérica em um algoritmo gráfico usando o ENQUANTO ...FAÇA.
Vamos utilizar o mesmo exemplo anterior, usado na instrução PARA ... FAÇA, para construir um algoritmo com a instrução de repetição ENQUANTO ... FAÇA.
Exemplo (descritivo):
Declarações
real NOTA, MEDIA;
inteiro AUX;
Início
AUX
1;
MEDIA
0;
enquanto (AUX <= 50) faça
escreva("Informe sua nota: ");
leia(NOTA);
MEDIA
MEDIA + NOTA;
AUX
AUX + 1;
fim enquanto;
MEDIA
MEDIA / 50;
escreva ("Média da turma = ", MEDIA);
Fim
Fluxograma:
REPITA ... ATÉ
A instrução de repetição REPITA ... ATÉ possui características relevantes na sua lógica de execução.
As principais características dessa instrução são:
Sintaxe:
:
repita
<bloco de repetição>; { com um ou vários comandos }
até (<condição>);
:
Vamos usar o mesmo exemplo demonstrado na instrução PARA ... FAÇA e ENQUANTO ... FAÇA para visualizarmos com mais facilidade a diferença no emprego de cada uma sobre um mesmo problema.
Exemplo (descritivo):
Declarações
real NOTA, MEDIA;
inteiro AUX;
Início
AUX
1;
MEDIA
0;
repita
escreva("Informe sua nota: ");
leia(NOTA);
MEDIA
MEDIA + NOTA;
AUX
AUX + 1;
até (AUX > 50);
escreva ("Média da turma = ", MEDIA / 50);
Fim
Usando a representação gráfica, vamos observar o mesmo exemplo usando a instrução REPITA ... ATÉ.
Fluxograma:
Formas de Controle das Estruturas de Repetição
As estruturas de repetição possuem um forma diferenciada para controlar a quantidade de repetições a serem executadas. Estes controles podem ser genericamente classificados em automáticos ou controlados pelo usuário do programa.
Vejamos alguns exemplos que facilitem esta compreensão.
# Contador automático usando a instrução enquanto:
{ algoritmo descritivo para ler o peso de 5 pessoas }
Declarações
inteiro CONTADOR;
real PESO;
Inicio
CONTADOR
0;
enquanto (CONTADOR < 5) faça
escreva ("Informe o peso: ");
leia (PESO);
CONTADOR
CONTADOR + 1;
fim enquanto;
escreva ("Foram informados 5 pesos.");
Fim
O algoritmo descritivo (português estruturado) anterior efetua a leitura de cinco pesos de pessoas e só é encerrado após a leitura dos cinco pesos lidos. Este tipo de repetição é classificada como automática, pois o algoritmo sempre lerá cinco pesos, nunca lendo mais ou menos valores. Observe as diferenças existentes no exemplo a seguir.
# Contador controlado pelo usuário usando a instrução enquanto:
{ algoritmo descritivo para ler o peso de pessoas }
Declarações
inteiro CONTADOR;
real PESO;
Inicio
PESO
1;
CONTADOR
0;
enquanto (PESO > 0) faça
escreva ("Informe o peso: ");
leia (PESO);
CONTADOR
CONTADOR + 1;
fim enquanto;
escreva ("Foram informados", (CONTADOR - 1), " pesos.");
Fim
O algoritmo anterior lê quantos pesos o usuário desejar, aplicando a mesma lógica para a quantidade que o usuário necessite. Este tipo de controle da repetição também é conhecido como flag ou sentinela de interrupção da repetição.
Acompanhe a seguir o exemplo anterior utilizando a instrução de repetição REPITA.
# Contador automático com a instrução repita:
{ algoritmo descritivo para ler o peso de 5 pessoas }
Declarações
inteiro CONTADOR;
real PESO;
Inicio
CONTADOR
0;
repita
escreva ("Informe o peso: ");
leia (PESO);
CONTADOR
CONTADOR + 1;
ate (CONTADOR = 5);
escreva ("Foram informados 5 pesos.");
Fim
O mesmo problema, porém com o algoritmo usando a instrução repita controlado pelo usuário é apresentado a seguir.
# Contador controlado pelo usuário usando o repita:
{ algoritmo descritivo para ler o peso de pessoas }
Declarações
inteiro CONTADOR;
real PESO;
Inicio
PESO
1;
CONTADOR
0;
repita
escreva ("Informe o peso: ");
leia (PESO);
CONTADOR
CONTADOR + 1;
ate (PESO = -1);
escreva ("Foram informados", (CONTADOR - 1), " pesos.");
Fim
linguagem de programação
O algoritmo auxilia o desenvolvimento dos programas, pois é nele que os programadores vão representar a solução proposta para ser testada e avaliada. Quando o algoritmo está finalizado, ou pronto, resta simplesmente transformá-lo em um programa computacional, respeitando toda lógica envolvida na solução testada e avaliada.
Realmente, um bom algoritmo só precisará ser traduzido para a linguagem de programação desejada, respeitando as suas regras de sintaxe e semântica. O período de aprofundamento no conhecimento relacionado ao problema em questão, sua proposta de solução, os testes e a manutenção da mesmo, ocorrem durante os estudos, pesquisas e elaboração do algoritmo restando assim, simplesmente a re-escrita da solução encontrada para uma linguagem de programação computacional (processo de tradução).
As linguagens de programação, assim como as de comunicação, possuem regras sintáticas e semânticas que devem ser obedecidas, pois as instruções computacionais não podem oferecer possibilidades de interpretação para o computador, que somente executa o que lhe é solicitado. Existem varias linguagens de programação, mas em todas elas a lógica relacionada a proposta construída no algoritmo poderá ser implementada para atender ao objetivo almejado.
Exemplo:
Acompanhe neste exemplo a "tradução" da instrução escreva proposta a seguir:
escreva("Informe a sua idade:");
A instrução escreva corresponde aos comandos especificados respectivamente na linguagens identificadas na relação a seguir: