As estruturas de controle determinam o curso de ações de um algoritmo.
Nesta etapa – Parte II – serão analisadas as estruturas seletivas e repetitivas.
Seleção ou decisão
Decisão ou seleção é a habilidade que o sistema possui para escolher uma ação de um conjunto de alternativas específicas.
Comandos de seleção:
Pseudocódigo
se...então / se...então...senão / escolha...senão
C++
if / if...else / switch
Seleção simples (if)
Pseudocódigo
se (condição) então
{comandos;}
fim se
C++
if (condição)
{comandos;}
(Testa uma expressão lógica. Caso seja verdadeira, o conjunto de instruções do bloco de comandos é executado.)
Exemplo:
Ler dois valores numéricos, efetuar a soma e apresentar a mensagem "Soma maior que dez" caso o resultado da adição seja maior que 10.
Diagrama de blocos
»»
Pseudocódigo
algoritmo adicao
declare num1, num2, soma inteiro
escreva ('Informe os valores: ')
leia (num1,num2)
soma <-- num1 + num2
se (soma > 10) então
escreva ('Soma maior que dez')
fim se
fim algoritmo
»»
C++
#include <iostream.h>
void main() {
int num1, num2,soma; // declaração de variáveis
cout<<"Informe os valores:";
cin>>num1>>num2; // leitura dos valores
soma=num1+num2;
if (soma > 10) // teste de seleção
cout<<"Soma maior que 10"; }
Seleção Composta (if...else)
Pseudocódigo
se (condição) então
{comandos;}
senão
{comandos;}
fim se
C++
if (condição)
{comandos;}
else
{comandos;}
(Testa uma expressão lógica e caso ela seja verdadeira, o conjunto de instruções após a expressão é executado. Caso a expressão seja falsa, serão executados os comandos que seguem a cláusula else.)
Exemplo:
Efetuar o cálculo da média aritmética das notas de três provas e avaliar a situação quanto à aprovação, como segue:
Diagrama de blocos
»»
Pseudocódigo
algoritmo mediaProvas
declare nt1, nt2, nt3, media real
escreva ('Introduza as tres notas:')
leia (nt1, nt2, nt3)
media <-- (nt1 + nt2 + nt3) / 3
se (media >= 6.0) então
escreva ('Aprovado')
senão
escreva ('Reprovado')
fim se
fim algoritmo
»»
C++
#include <iostream.h>
void main() {
float n1, n2, n3, media; // declaração de variáveis
cout<<"Introduza as tres notas: ";
cin>>n1>>n2>>n3; // leitura das três notas
media=(n1+n2+n3)/3; // cálculo da média
if (media >= 6.0) // expressão de teste (seleção)
cout<<"Aprovado";
else
cout<<"Reprovado"; }
Seleção de múltipla escolha (switch)
Pseudocódigo
escolha var
caso 1 : comando 1
caso 2 : comando 2
caso 3 : comando 3
...
senão
comando n
fim escolha
C++
switch (variável)
{
case 1 : comando1; break;
case 2 : comando2; break;
case 3 : comando3; break;
...
default
comando n
}
(Testa a igualdade entre uma variável e uma lista caso de constantes. Quando encontrar a equivalência executa o bloco de comandos correspondente.)
Exemplo:
Elaborar um algoritmo para simular uma calculadora eletrônica, efetuando uma das operações básicas por vez a critério do usuário.
Diagrama de blocos
Pseudocódigo
algoritmo calculadora;
declare valor1, valor2 real
declare oper caractere
escreva ('Calculadora eletrônica')
escreva ('Primeiro valor: ')
leia (valor1)
escreva ('Operador (+,-,*,/): ')
leia (oper)
escreva ('Segundo valor: ')
leia (valor2)
escolha oper
caso '+' : escreva ('Soma = ', (valor1 + valor2))
caso '-' : escreva ('Subtração = ', (valor1 - valor2))
caso '*', 'x' : escreva ('Multiplicação = ',(valor1 * valor2))
cout<<"Introduza a operação (1o.numero operador 2o.numero): ";
cin>>n1>>op>>n2;
switch (op)
{
case '+': cout<<"Soma: "<<n1 + n2; break;
case '-': cout<<"Subtração: "<<n1 - n2; break;
case '*': // símbolos opcionais (* ou x) para
case ‘x': // o usuário comandar a multiplicação.
cout<<"Multiplicação: "<<n1 * n2; break;
case '/': // símbolos opcionais (/ ou :) para
case ':': // o usuário comandar a divisão.
cout<<"Divisão: "<<n1 / n2; break;
default:
cout<<"Operador invalido";
}
}
Estruturas de repetição
A repetição é uma poderosa habilidade, ao lado da decisão, que o sistema tem para repetir um conjunto de ações específicas. A linguagem algorítmica possui três formas de repetição:
enquanto...faça – número de repetição indefinida de vezes;
faça...enquanto – número de repetição indefinida de vezes, executa pelo menos uma vez;
para...faça – número de repetição definida de vezes.
(A opção enquanto serve para todas as situações, as outras duas em certas situações podem ter melhor aplicação).
Correspondem em C++ aos seguintes comandos:
while – número de repetição indefinida de vezes;
do...while – número de repetição indefinida de vezes, executa pelo menos uma vez;
for – número de repetição definida de vezes.
Repetição com teste no início (while)
Pseudocódigo
enquanto (condição) faça
{comandos;}
fim enquanto
C++
while (condição)
{comandos;}
(Repete a execução de comandos enquanto uma dada condição for verdadeira.)
Exemplo:
Multiplicar dois valores fornecidos pelo usuário e apresentar o resultado, repetindo esse processamento por tantas vezes quantas forem as necessidades do usuário.
Diagrama de blocos
Pseudocódigo
Algoritmo multiplica
declare valor1, valor2, produto inteiro
declare resp caractere
resp<-- 'sim'
enquanto (resp = 'sim') faça
escreva ('Primeiro numero: ')
leia (valor1)
escreva ('Segundo numero: ')
leia (valor2)
produto<-- valor1 * valor2
escreva ('Resultado: ', produto)
escreva ('Deseja continuar? (sim/nao): ')
leia (resp)
fim enquanto
fim algoritmo
C++
#include <iostream.h>
void main( )
{
int num1, num2, prod;
char resp = 's';
while (resp == 's')
{
cout<<"\nInsira dois numeros: ";
cin>>num1>>num2;
prod=num1*num2;
cout<<"Produto: "<<prod;
cout<<"\nDeseja continuar? (s/n): ";
cin>>resp;
}
}
Repetição com teste no final (do...while)
Pseudocódigo
faça {
comandos
} enquanto (condição)
C++
do {
comandos;
}while (condição);
(Executa comandos enquanto uma condição for verdadeira. O corpo do laço é executado pelo menos uma vez.)
Exemplo:
Calcular e mostrar o fatorial de um número fornecido pelo usuário.
Diagrama de blocos
Pseudocódigo
algoritmo calcFatorial
declare num, fatorial, contador inteiro
fatorial<-- 1; contador<-- 1
escreva ('Informe um número: ')
leia (num)
faça
fatorial<-- fatorial * contador
contador<-- contador + 1
enquanto (contador <= num)
escreva ('Fatorial de ', num, ': ', fatorial)
fim algoritmo
C++
#include <iostream.h>
void main()
{
cout<< "Introduza um num. para cálculo do fatorial: ";
int num, fat;
cin >> num;
int i = fat = 1;
do
fat *= i++;
while (i <= num);
cout << "Fatorial de " << num << " = " << fat;
}
Repetição com variável de controle (for)
Pseudocódigo
para (var=inicio, até limite
passo incr ou decr)
comandos
fim para
C++
for (inicio; condição; incr ou decr)
{comandos;}
(Repete a execução de comandos enquanto uma dada condição for verdadeira.)
Pontos a considerar no comando for:
deve ser determinada uma variável de controle e os valores inicial e final;
tipicamente, este comando é usado quando se sabe o número de iterações a serem executadas.
Exemplo:
Efetuar a somatória de dez números inteiros quaisquer informados pelo usuário e escrever seu resultado.
Diagrama de blocos
»»
Pseudocódigo
algoritmo somatoria
declare num, soma, i inteiro
soma <-- 0
para i = 1 até 10 passo 1
escreva ('Informe o ', i, 'o. numero: ')
leia (num)
soma <-- soma + num
fim para
escreva ('Somatoria: ', soma)
fim algoritmo
»»
C++
#include <iostream.h>
void main()
{
int num,soma=0;
for (int i=0; i<10; i++)
{
cout<<"Informe o "<<(i+1)<<"o. numero: ";
cin>>num;
soma += num;
}
cout<<"Soma: "<<soma;
}
Comandos de desvios
Os comandos break e continue são usados nas estruturas de repetição (for, while e do while).
O comando break interrompe o andamento do laço em qualquer parte, saindo da estrutura de repetição.
O comando continue abandona a instância atual, saltando para a próxima avaliação da expressão de controle, sem sair do laço.
Bibliografia
ASCENCIO, Ana Fernanda Gomes, CAMPOS, Edilene Aparecida Veneruchi de. Fundamentos da programação de computadores : algoritmos, Pascal e C/C. São Paulo : Prentice Hall, 2002. xviii, 355p.
FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico. Lógica de programação : a construção de algoritmos e estruturas de dados. 2.ed. São Paulo : Makron Books, 2000. 197p.
JAMSA, Kris A. Aprendendo C. São Paulo : Makron Books do Brasil, 1999. 271p.
MIZRAHI, Victorine Viviane. Treinamento em linguagem C. Sao Paulo : Makron, 1994. v.
BERRY, John Thomas. Programando em C. Sao Paulo : Makron Books, 1991. xvi, 385p.
UCCI, Waldir; SOUSA, Reginaldo Luiz; KOTANI, Alice Mayumi, et al. . Lógica de programação : os primeiros passos. 8.ed. Sao Paulo : Erica, 1999. 339p.