Graciano Torrão's Deblog

O meu diário de trabalho em Debian … e não só!

Construção de algoritmos em Pseudocódigo – selecionar caso … fimselecionar

Depois de alguns exercício a aplicar a estrutura se… então… senão… fimse, provavelmente acabamos por concluir que, em certos casos específicos, não é muito prática a sua utilização.

Vamos pensar, a título de exemplo, no seguinte problema:

“Dado um número inteiro, compreendido entre 1 e 4, representando os quatro trimestres do ano, vamos fazer corresponder a sua descrição por extenso.”

Algoritmo em pseudocódigo

Nome Trimestres
Descrição
    Dado um número inteiro, compreendido entre 1 e 4, representando
    os quatro trimestres do ano, este programa faz corresponder a
    sua descrição por extenso.
Variáveis
    trimestre: Inteiro
Início
    ler (trimestre)
    se trimestre = 1
    então   escrever("Primeiro trimestre")
    senão   se trimestre = 2
            então   escrever("Segundo trimestre")
            senão   se trimestre = 3
                    então   escrever("Terceiro trimestre")
                    senão   se trimestre = 4
                            então   escrever("Quarto trimestre")
                            senão   escrever("ERRO!")
                            fimse
                    fimse
            fimse
    fimse
fim

Neste ponto já somos convidados a pensar como ficaria esta estrutura encadeada para outros exemplos como:

  • os dias da semana;
  • os meses do ano;
  • os signos;

Ler mais deste artigo

About these ads

Construção de algoritmos em Pseudocódigo – se… então… senão… fimse

Vamos avançar para a utilização de estruturas de decisão.

Em primeiro lugar vamos abordar a estrutura se… então… senão… fimse.

Para o efeito vamos considerar o problema seguinte:

“Dado um número inteiro, verificar se este é par ou ímpar.”

Algoritmo em pseudocódigo

Nome ParOuImpar
Descrição
    Dado um número inteiro, este algoritmo permite verificar se é par ou ímpar.
Variáveis
    nr: Inteiro
Início
    ler (nr)
    se nr % 2 = 0
    então   escrever ("O número é par.")
    senão   escrever ("O número é ímpar")
    fimse
Fim

Para saber se o número é par, utilizeio o operador %, conforme expliquei aqui, embora já numa abordagem em linguagem C++. Ler mais deste artigo

Divisão inteira em linguagem C++

DivisaoI

Observa o seguinte programa.

Exemplo 1

#include <iostream>
using namespace std;
int main()
{
    int A = 15;
    cout << A/3 << endl;
    cout << A/2 << endl;
    cout << A/30 << endl;
    return 0;
}

Output do Exemplo 1 Ler mais deste artigo

Formatação de números em C++ com recurso a manipuladores

Trata-se apenas de um exemplo muito simples, que pretende demonstrar como podemos formatar de forma rápida os números que enviamos para o output através do stream cout.

O que está em causa são dois aspetos:

  • espaço em carateres que o valor ocupa no stream
  • precisão em termos de casas decimais

A formatação é conseguida com recurso aos manipuladores tendo em conta os dois aspetos acima referidos, daí a utilização da bilbioteca iomanip.

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    double pi = 34.1415926535897932384626433;
    int x = 27;

    // Formatar o número para ocupar um determinado espaço em carateres
    cout << "Numero minimo de carateres:" << endl;
    cout << setw(5) << x << endl;
    cout << setw(1) << x << endl;
    cout << setw(10) << pi << endl;
    cout << setw(3) << pi << endl;
    cout << endl;

    // Formatar geral da precisão em números de vírgula flutuante
    cout << "Formatacao geral da precisao em numeros de virgula flutuante:" << endl;
    cout << setprecision(0) << pi << endl;
    cout << setprecision(1) << pi << endl;
    cout << setprecision(2) << pi << endl;
    cout << setprecision(3) << pi << endl;
    cout << setprecision(4) << pi << endl;
    cout << setprecision(5) << pi << endl;
    cout << endl;

    // Formatar fixa da precisão em números de vírgula flutuante
    cout << "Formatacao fixa da precisao em numeros de virgula flutuante:" << endl;
    cout << fixed;
    cout << setprecision(0) << pi << endl;
    cout << setprecision(1) << pi << endl;
    cout << setprecision(2) << pi << endl;
    cout << setprecision(3) << pi << endl;
    cout << setprecision(4) << pi << endl;
    cout << setprecision(5) << pi << endl;
    cout << endl;

    // Combinado as duas anteriores
    cout << "Combinado as duas anteriores:" << endl;
    cout << fixed << setw(8) << setprecision(4) << pi << endl;
    cout << fixed << setw(6) << setprecision(3) << pi << endl;
    cout << fixed << setw(10) << setprecision(6) << pi << endl;
    cout << endl;

    return 0;
}

A imagem seguinte mostra o output obtido.

manipuladoresOutput

Como calcular uma raiz quadrada em Linguagem C++

raizQuadrada

O programa seguinte demonstra como se pode calcular a raiz quadra de um número em linguagem C++.

 

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double x;
    cin >> x;
    cout << sqrt(x) << endl;
    return 0;
}

A função sqrt() pertence à bilbioteca cmath.

Construção de algoritmos em Pseudocódigo – Entrada e Saída de Dados

Finalmente, para sermos capazes de escrever um algoritmo, vamos necessitar de realizar as operações de entrada (input) e saída(output) de dados.

Por uma questão de simplificação, vamos assumir que as entradas de dados são feitas através do teclado.

Da mesma forma, as saídas de dados correspondem ao que é enviado para o ecrã do computador.

INOUTPUT

Operação de entrada de dados (input)

Em pseudocódigo, vamos convencionar que o comando a utilizar de forma a realizar uma entrada de dados é:

ler ( nomeDaVariável )

Exemplo 1 – Ler o valor da variável X a partir do teclado

ler ( X )

Exemplo 2 – Ler o valor das variáveis A e B a partir do teclado

ler ( A )

ler ( B )

ou

ler ( A, B )

Operação de saída de dados (output)

Da mesma forma, vamos convencionar que o comando a utilizar para realizar uma saída de dados é:

escrever( nomeDaVariável )

Exemplo 1 – Mostrar o valor da variável X no ecrã

escrever ( X )

Exemplo 2 – Mostrar o valor das variáveis A e B no ecrã

escrever ( A, B )

Anterior Índice Seguinte

Construção de algoritmos em Pseudocódigo – Operação de atribuição

A expressão matemática x = 6 é muitas vezes confundida com a operação de atribuição que vamos utilizar em pseudocódigo.

A diferença é clara!

Versão matemática

x = 6

Representa uma equação do 1º grau, que só é verdadeira quando x assume o valor 6.

Versão pseudocódigo

x ← 6

Representa uma instrução que indica ao computador que deve ser armazenado o valor 6 na variável x.

xiguala63532

Sinal de atribuição

Vamos convencionar que o carater “←” representa então a operação de atribuição, ou seja, o armazenamento dos dados fornecidos (6) na variável em questão(x).

Alguns exemplos

A

Sequência de instruções

a ← 5

b ← 2

c ← a – b

Representação gráfica das variáveis no final da execução

exemploa

B

Sequência de instruções

z ← 5

z ← 2

z ← -3

Representação gráfica das variáveis no final da execução

z-3

C

Sequência de instruções

x ← 5 – 1

y ← x + 2

z ← x + y

Representação gráfica das variáveis no final da execução

exemploc

Anterior Índice Seguinte

Construção de algoritmos em Pseudocódigo – Tipos de dados

Na linha do que afirmei anteriormente, quando apresentei a noção de variável, a uma variável corresponde a seguinte analogia.

exemplocantudovariavelAgora será necessário especificar o tipo de “caixa” que vamos utilizar, consoante aquilo que pretendemos armazenar.

Assim sendo, vamos necessitar de “caixas” próprias para números inteiros, outras para números reais e ainda outras para dados do tipo texto.

Isto significa que a cada variável ficará associado um “tipo de dados”.

Os principais, e sem esgotar todas as possibilidades, são:

  • Inteiro
  • Real
  • Texto

A imagem anterior ficaria assim.

exemplotipodados

Naturalmente que, outras variáveis, de diferentes tipos, poderão ser utilizadas consoante o algoritmo que estamos a escrever.

exemplovariaveis2No início do algoritmo, utiliza-se a lista de variáveis para indicar os nomes e os tipos da variáveis utilizadas no algoritmo.

 

Anterior Índice Seguinte

Construção de algoritmos em Pseudocódigo – Noção de variável

“Uma variável é uma localização de memória, identificada por um nome, onde é armazenada uma determinada informação.”

Vou utilizar uma analogia muito simples para tentar explicar este conceito.

Vamos supor que as variáveis são como caixas de papelão, onde podemos guardar informação.

Sendo assim, a imagem seguinte representaria uma variável.

variavelComo se pode ler na definição, todas as variáveis têm um nome, ou identificador.

Sendo assim, a figura seguinte representa as variáveis, valor1, valor2 e soma.

exemplovariaveisvalor1, valor2 e soma são os respetivos identificadores.

Naturalmente que não existem caixotes de papelão nos circuitos de memória do computador mas, admitindo a analogia, a nossa RAM (memória primária) vista à lupa, iria conter.ramalupaDesta forma, um algoritmo que leia dois valores e calcule a respetiva soma iria fazer a seguinte utilização da memória.

exemplocantudovariavelNote que os números 4 e 3 seriam fornecidos pelo utilizador, durante a execução do algoritmo, sendo o valor 7 obtido a partir deste.

Mais à frente veremos que existem diferentes tipos de dados, logo diferentes tipos de “caixas de papelão”, bem como a forma de guardar e retirar dados destas caixas.

Anterior Índice Seguinte

Construção de algoritmos em Pseudocódigo – Estrutura genérica de um algoritmo

Os nossos algoritmos iniciais vão obedecer à seguinte estrutura:

  1. Título: Nome
  2. Descrição: Descrição
  3. Lista de variáveis: Variáveis
  4. Indicação do início da execução do algoritmo: Início
  5. Corpo do algoritmo:
  6. Inficação do fim da execução do algoritmo: Fim

Nome

Deve ser um nome curto e que, na medida do possível, indique o que faz o programa.

Por exemplo, para um algoritmo que calcula a soma de dois números teríamos.

Bom exemplo: soma2, soma_ab, a_mais_b

Menos bom: calcular_a_soma_de_dois-números

Mau exemplo: programa

Descrição

Pretende-se obter aqui uma descrição sucinta a respeito do que faz este algoritmo.

Por exemplo:

Dados dois valores inteiros, este algoritmo calcula a respetiva soma.

Variáveis

Nesta secção vamos indicar os nomes, e respetivos tipos, das variáveis que pretendemos utilizar no algoritmo.

Esta deve ser pensada antes de se iniciar a criação do corpo do algoritmo propriamente dito mas, diz a experiência, é sempre bom reservar algum espaço para acrescentar variáveis de última hora!

Início

Serve apena para indicar que se vai iniciar a execução do algoritmo. Assim sendo, a linha seguinte contém a primeira instrução.

 … “Corpo do algoritmo”

Contém várias linhas, cada uma contendo uma ou mais instruções a executar.

Fim

Assinala o fim da execução do algoritmo.

Segue-se um exemplo de um algoritmo, escrito de acordo com esta convenção.

Nome soma2
Descrição
    Dados dois valores inteiros, calcula e apresenta a sua soma.
Variáveis
    valor1, valor2, soma:Inteiros
Início
    Ler(valor1)
    Ler(valor2)
    soma ← valor1 + valor2
    Escrever(soma)
Fim

Naturalmente que, de forma a compreender na íntegra o exemplo apresentado, falta adquirir algumas competências, nomeadamente:

  • noção de variável (valor1 e valor2)
  • tipos de dados associados a uma variável (Inteiros)
  • operação de leitura de dados ou input ( Ler() )
  • operação de atribuição ( ← )
  • operação de escrita de dados ou output ( Escrever() )
Anterior Índice Seguinte
Seguir

Get every new post delivered to your Inbox.

Junte-se a 211 outros seguidores

%d bloggers like this: