Graciano Torrão's Deblog

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

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

Vamos avançar para a utilização de estruturas de decissã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

About these ads

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

Construção de algoritmos em Pseudocódigo

A respeito da definição de algoritmo, como eu já tinha referido anteriormente aqui, temos:

“Um algoritmo é uma sequência ordenada de passos precisos que descrevem a solução de um determinado problema.”

(Treamblay & Bunt, p.19)

Partindo do pressuposto de que existem inúmeras formas de descrever um algoritmo, vou tentar sistematizar uma delas, a que passaremos a designar de pseudolinguagem ou pseudocódigo.

# 1 – Estrutura genérica de um algoritmo

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

# 3 – Tipos de dados

# 4 – Operação de atribuição

#5 – Entrada e Saída de Dados

Observações:

Este é um trabalho em progresso.

Serão acrescentados novos elementos à medida que forem sendo abordados.

Seguir

Get every new post delivered to your Inbox.

Junte-se a 211 outros seguidores

%d bloggers like this: