computer Algoritmos Computacionais

Last updated: August 15th, 2018

Introdução

Algoritmos são uma sequência de passos para se chegar a um determinado objetivo e não precisam necessariamente que um computador os execute. Um algoritmo computacional é ,então, uma sequência de instruções que podem ser executadas por um computador e que manipulam e geram dados.

Para que um computador possa executar um algoritmo computacional, é necessário que uma implementação deste algoritmo seja feita em uma linguagem de programação que o computador "conheça" e depois transformado em linguagem de máquina para poder ser executado.

Flow de implementação de algoritmo

Alguns algoritmos não podem ser executados por um computador. Pode ser porque o computador não tenha recursos para executá-los (trocar um pneu), seja porque eles são indecidíveis.

Tipos de dados

Para que sejam manipulados por computadores, os dados devem estar em um formato adequado e devem obedecer a um conjunto de restrições.

Por isso os dados possuem tipos:

  • Numérico – guarda números inteiros ou reais;

  • Literal – guarda caracteres (texto);

  • Lógico – guarda valores lógicos (verdadeiro ou falso), também chamados de booleanos, em homenagem ao matemático George Boole.

Numérico

Dados numéricos são apenas os números como conhecemos e são divididos em 2 grupos: os inteiros e os reais

Dados do tipo inteiro são números, positivos ou negativos, que não possuem parte fracionária, pertencentes ao conjunto dos inteiros.

Exemplo: 36; 0; -18;

Dados do tipo real são aqueles que podem possuir compnentes decimais ou fracionários, e também podem ser positivos ou negativos, pertencentes ao conjunto dos racionais

Exemplo: 36.01; 0.0; -18.5; 42;

Literal

Dados literais são sequências de caracteres que podem conter letras, dígitos e/ou símbolos especiais. Também são chamados de alfanumérico, cadeia de caracteres ou, ainda, string. Observe que também é válida uma string vazia!

Usualmente são representados nos algoritmos pela coleção de caracteres delimitada por aspas (“ ”). Em algumas linguagens de programação, existe a diferenciação entre um caractere único (‘A’) e um conjunto de caracteres (“Olá Mundo”).

Exemplo: "Quem?"; "APC-2018-2"; "Olá Mundo!";

Lógicos

São caracterizados como tipos lógicos (ou booleanos), os dados que podem assumir apenas os valores verdadeiro ou falso (mas nunca os dois ao mesmo tempo).

Se definimos que Verdadeiro = 1, e Falso = 0, então um dado booleano pode ser representado em apenas 1 bit.

Conceitos

Os conceitos básicos necessários para escrever um algoritmo computacional são:

Constantes

Constantes são valores que não se modificam ao longo da execução do programa.

Uma constante criada pelo usuário deve ter um nome (nome da variável), um tipo (inteiro, real, etc) e um valor (10, 10.5, "ola"). Nenhum desses três elementos pode ser modificado pelo programa.

const float PI = 3.141522;
const char NOME_ALUNO[] = "Marcos";

Por convenção, é utilizado apenas letras maiúsculas e underscore (" _ ") no nome de constantes.

Constantes criadas pelo usuário tipicamente ocupam uma região de memória cujo conteúdo nunca muda.

Outro ponto são os valores literais no código, pois também são considerados constantes.

x = 2 * x;  // O 2 é uma constante
printf("Olá Mundo!\n"); // A string Olá mundo! é uma constante

Variáveis

Uma variável é uma região de memória. Isto é, ao declarar uma variável, o programador está reservando memória da máquina para ser usada por seu programa.

Para que não precisemos nos referir ao endereço de memória de uma variável diretamente, as linguagens de programação nos permitem atribuir-lhe um nome.

Toda variável deve também ter um tipo declarado.

Representação de variável na memória

Exemplos:

Declaração Memória Conteúdo
int a = 10; 0x00000000 10
int b; 0x00000004 ??
string name = "Stark"; 0x00000008 'S' 't' 'a' 'r'
0x0000000C 'k' ? ? ?
bool achou; 0x00000010 ??
float pi = 3.15; 0x00000014 3.15
... ... ...
  • Note que podemos assinalar um valor inicial para uma variável. Isso é chamado inicialização da variável.
  • Quando não inicializamos uma variável, o valor armazenado no espaço de memória reservado para ela é desconhecido.
  • Variáveis de tipos deferentes possuem tamanhos em memória diferentes.

Atenção!

o conteúdo, i.e., o valor armazenado em uma variável, pode mudar ao longo da execução, mas seu nome e seu tipo são constantes!

Palavras Reservadas

Palavras reservadas, são identificadores que têm um significado especial para o compilador, por isso não podem ser utilizadas pelo programador para nomear variáveis e constantes.

Por exemplo, na Linguagem ANSI C, algumas palavras reservadas são:

return union const float short unsigned continue for signed void default goto sizeof volatile do 
if static while auto double int struct break else long switch case enum register typedef char extern

Variáveis

Nomes de Variáveis

Ao definirmos o nome de uma variável temos que seguir algumas regras básicas:

  • O primeiro caractere deve ser uma letra.
  • Os caracteres seguintes só podem ser letras, underscore (_) ou algarismos.
  • O nome das variáveis é case sensitive, ou seja, existe diferença entre letras maiúsculas e minúsculas (var ≠ Var)
  • Nenhuma palavra reservada pode ser usada como nome de variável.
  • Duas variáveis diferentes no mesmo escopo não podem ter o mesmo nome.
  • Procure dar nomes mnemônicos às variáveis, isto é, nomes significativos, mas não muito longos.
Exemplos:
=> NOMES VÁLIDOS
nota        salario     X
valor       total       w
valor_min   valor_max   n1

=> NOMES INVÁLIDOS
5B      (não começa com letra)
X+Y     (Possui caractere inválido)
while   (Palavra reservada)
                                                    

Declaração de Variáveis

Variáveis geralmente são declaradas no início do programa. Elas precisam ter um nome e um tipo. Os tipos básicos são:

  • Inteiro - int
  • Real - float
  • Caractere - char
  • Literal - string
  • Lógico - bool

O tipo da variável vem primeiro, seguido pelo nome. Você pode declarar mais de uma variável de um mesmo tipo em uma única linha, separando o nome delas por vírgula (o tipo aparece só uma vez).

Exemplo:
string nome;
int qtd;
float valor, valor_total;
bool go;

Expressões e Operadores

Operadores Aritméticos

Para realizar cálculos, podemos escrever expressões aritméticas. Nessas expressões, podem aparecer apenas variáveis e constantes numéricas e os seguintes operadores:

Prioridade Operador Operação Tipo Exemplo
Maior

Menor
( ) Altera prioridade Unário 5 * (1 + 2) = 15
-, + Troca, mantém
o sinal
Unário -(-1) = 1
+(-5) = 5
^ Exponenciação Binário 2^3 = 8
*, / Multiplicação,
Divisão
Binário 1.0 / 2 = 0.5
1.0 * 2 = 2.0
- , + Subtração, Soma Binário 1 + 1 = 2

Expressões Lógicas

Quando precisamos verificar condições, utilizamos expressões relacionais e lógicas.

Expressões relacionais comparam valores, e retornam verdadeiro ou falso:

Prioridade Operador Operações Tipo Exemplo
Maior

Menor
< , <=,
>,  >=
menor, menor ou igual
maior, maior ou igual
binário 0 < 0 : F

1 <= 2 : V

-1 > -5  : V

=, != igual, diferente binário 1 = 1 : V

0 != 0   :   F

Operadores Lógicos

Expressões lógicas têm operandos com o valor verdadeiro ou falso e geram um resultado também verdadeiro ou falso, de acordo com os operadores:

Prioridade Operador Operações Tipo
Maior

Menor
NÃO não lógico
(negação)
binário
E
e lógico
(conjunção)
binário
OU
ou lógico
(disjunção)
binário
A
B NÃO A NÃO B
A E B A OU B
V V F F V V
V F F V F V
F V V F F V
F F V V F F