Graciano Torrão's Deblog

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

Morcela com Ananás

Não é bem “Morcela com Ananás”, pois um dos ingredientes não mencionado faz a diferença.

Refiro-me às folhinhas de coentros, que para além do verde, dão uma acabamento delicioso a este trio.

Fruto do acaso, acabei com uma morcela nas mãos e, saltando os comentários mal intencionados que vos possam ter atravessado a mente, não sabia muito bem o que lhe fazer.

Nestas alturas, o Google está para o informático, tal com o bacalhau está para a cozinha Portuguesa, tal é o seu estatuto de fiel amigo.

Depois de iniciada a pesquisa, o mais difícil é escolher, e eu acabei por selecionar esta receita do Chefe João Pronto: http://lifestyle.sapo.pt/sabores/receitas/morcela-com-ananas?r=sabores.sapo.pt

Desde já aviso que é delicioso!

Enquanto faço a digestão, aproveito para deixar a recomendação.

morcelaComAnanasECoentros

Exemplo C++ – Validar o tipo de dados recebido via cin

Quando estamos a escrever pequenos programas, que utilizam o objeto cin para fazer a leitura de valores, é frequente depararmos com situações deste tipo:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    cin >> nota;
    if(nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Se repararem, o programa funciona muito bem se o utilizador for “educadinho”, ou seja, se fornecer apenas números inteiros.

No caso de este ser distraído, ou malandreco, em vez de um número inteiro, os resultados podem ser imprevisíveis. Experimentem e vejam o que acontece para os seguintes exemplos de input:

  • t
  • Z
  • x

Pois é! Todos reprovados, mesmo sem se saber a nota. Nem uma satisfação!

Uma forma muito simples de contornar esta limitação é a seguinte:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    if(!(cin >> nota) || nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Atendendo a que nota é uma variável do tipo int, cin >> nota irá devolver o valor lógico falso caso não receba um número inteiro (int).

Assim sendo, basta adicionais mais uma condição ao nosso if!

Como converter um documento do Word no formato pdf (pdf printer)

Gravei este vídeo apenas para ensinar como podem converter os documentos do office para o formato pdf.

Também apresento a possibilidade de instalação de uma impressora pdf (ver).

Vejam o vídeo:

Construção de algoritmos em Pseudocódigo – enquanto … fazer … fimfazer

Trata-se de uma estrutura de repetição, controlada pela avaliação do valor lógico de uma condição.

Este tipo de estruturas são geralmente designadas por “ciclos“.

enquanto &lt;condição&gt;
fazer
    instrução 1
    instrução 2
    . . .
    instrução n
fimfazer

Assim temos:

  • <condição> é uma expressão lógica que, sendo verdadeira, determina que se voltem a executar as instruções contidas no ciclo. Caso esta expressão tenha o valor lógico falso, o controlo passa para a instução seguinte, sendo o ciclo abandonado.
  • instrução 1 … instrução n  corresponde ao bloco de instruções que vão ser executados em cada iteração (entenda-se iteração como uma “volta”, tendo presente a noção de cliclo).

Este tipo de estrutura tem infinitas aplicações mas, em termos genéricos, podemos afirmar que se utiliza sempre que:

  • pretendermos repetir 0 bloco de instruções um número indeterminado de vezes;
  • o número de iterações, ou seja, o número de vezes que se repete o ciclo, depende do valor lógico da candição;
  • fazendo variar os valores das variáveis que são utilizadas na condição permite controlar o respetivo valor lógico, consequentemente, continuar a iterar ou terminar.

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

“Dada uma sequência de números, terminada por um número negativo, calcular a média dos seus elementos.”

Algoritmo em pseudocódigo

Nome MédiaN
Descrição
    Dada uma sequência de números, cujo fim é assinalado por um número
    negativo, este algoritmo calcula a respetiva média.
Variáveis
    contar: Inteiros
    num, soma, média: Real
Início
    contar ← 0
    soma ← 0
    ler (num)
    enquanto ( num >= 0 )
    fazer
        contar ← contar + 1
        soma ← soma + num
        ler (num)
    fimfazer
    média ← soma / contar
    escrever (média)
fim

Seguem-se uma implementação deste problema.

Em linguagem C++

#include <iostream>
using namespace std;
int main()
{
    int contar;
    double num, soma, media;
    contar = 0;
    soma = 0;
    cin >> num;
    while(num >=0)
    {
        contar = contar + 1;
        soma = soma + num;
        cin >> num;
    }
    media = soma/contar;
    cout << media;
    return 0;
}
Anterior Índice Seguinte

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

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 (&amp;quot;O número é par.&amp;quot;)
    senão   escrever (&amp;quot;O número é ímpar&amp;quot;)
    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
Seguir

Get every new post delivered to your Inbox.

Junte-se a 212 outros seguidores

%d bloggers like this: