Algoritmos e C++

 
 
Roteiro de aulas práticas
Parte II - estruturas de controle
Sumário:
  • Estruturas de controle
  • Seleção ou decisão
  • Estruturas de seleção
    • Estrutura simples (if)
    • Estrutura composta (if...else)
    • Estrutura de múltipla escolha (switch)
  • Estruturas de repetição
    • Com teste no início (while)
    • Com teste no final (do...while)
    • Com variável de controle (for)
  • Comandos de desvios
  • Bibliografia
 

Estruturas de controle

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)

c++p2_img01
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

c++p2_img03
»»
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)

c++p2_img04
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

c++p2_img05
»»
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)

c++p2_img06
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
c++p2_img07
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))
        caso '/', ':' : escreva ('Divisão = ', (valor1 / valor2))
     senão
        escreva ('Operação inválida')
     fim escolha
fim algoritmo
 
C++
#include <iostream.h>
void main()
{
     float n1, n2;
     char op;
     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)

c++p2_img08
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
c++p2_img09
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)

c++p2_img10
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
c++p2_img11
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
c++p2_img13
»»
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.