Introdução à programação/Estruturas de manipulação de dados

Origem: Wikilivros, livros abertos por um mundo aberto.

Como já foi referido e é lógico, as linguagens de programação têm coisas em comum. Uma delas são as estruturas de controle. Estruturas de Controle são definidas como sendo a base da lógica de programação e podem ser de dois níveis: direto ou indireto (complexo). Para termos uma ideia da diferença entre um controle direto e um controle indireto, apresento a seguir dois diálogos representativos de duas situações do cotidiano:

Pedro - "Onde foste Miguel?"
Miguel - "Fui à loja comprar roupa."
Indivíduo - "Onde posso arranjar uma certidão A-R53?"
Inspetor - "Tem que levar a sua identificação ao guichê, pedir um impresso GHA NORMAL carimbado para 3 meses. Após a conclusão da escritura terá que aguardar até que seja chamado pela sua vez."

Analisando os dois casos, rapidamente concluímos que a resposta obtida no primeiro é direta e bem mais simples que no segundo. Ora, se quisesse converter estas situações para uma situação parecida no computador, poderíamos constatar que bastava-nos uma página de um código sequenciado para o computador proceder a recriação do conteúdo da primeira situação. O mesmo já não se verifica no segundo. Normalmente nestes casos, o programador utiliza peças fundamentais chamadas funções (do inglês function) que retratam cada um acontecimento da situação, havendo assim ligações entre eles dependendo dos resultados obtidos. Funções são retratadas mais à frente.

Penso que com estes dois exemplos o leitor já entende bem o que é um Algoritmo direto e um Algoritmo complexo.

Estruturas básicas[editar | editar código-fonte]

Qualquer programa tem que fazer alguma coisa (nem que seja enviar um sinal bip) senão não é um programa, ou seja, ele tem que apresentar conteúdo. Assim, como apresenta conteúdo, vai "alterar" estados dentro do computador, sendo que, o estado de uma das peças que vai inevitavelmente se alterar é a memória interna. É inevitável um programa não se "alojar" na memória do computador, assim, o programa precisa de um espaço físico na memória e para isso terá que o requisitar. É disso que iremos falar a seguir.

Variáveis e constantes[editar | editar código-fonte]

Uma variável é uma expressão que varia e normalmente é representada por uma incógnita X, e uma constante é uma expressão que não se altera (o número de Avogadro, o pi, o número de Neper) que pode ser representado por uma letra.

Nos programas, variáveis são todas as expressões que podem ou não variar, assim como também podem ser constantes. Uma coisa é óbvia: Constantes não podem ser variáveis!

Na função seguinte Y assume o dobro de todos os valores de X:
 Y = 2X  --> Nesta função, X varia por isso Y é uma variável

Na seguinte função Y assume sempre o valor 2:
 Y = 2   --> Nesta função Y não varia e por isso é constante.

Aqui está patente a diferença de uma função variável e uma função constante em matemática.

Transportando a noção de Variável e Constante para a programação, apresento agora dois trechos de código em PHP e C++:

//Vamos representar um texto como uma variável representada por p (sintaxe de PHP):
<?php
$p = "Olá Mundo!";
//Agora vou apresentá-la na tela
echo $p;
?>

No caso acima, uma variável é um texto que foi guardado em memória, representado por p.

//Represento agora um "Olá Mundo!" como uma constante (sintaxe do C++):
#include <iostream.h>;
int main() {
 cout << "Olá Mundo!";
 return 0;
}

Não se assuste se não entendeu nada do que se passou ali em cima. Aqui "Olá Mundo!" foi uma constante e não uma variável, pois ela não foi guardada em memória, mas imposta pela instrução cout diretamente.

Instruções[editar | editar código-fonte]

As instruções são pequenos comandos que ditam ao programa o que fazer com determinado dado. Elas podem guardar informação, apresentar informação, aguardar um input, etc.

Aqui apresentamos algumas instruções que são mais comuns assim como a sua implementação no C++ e PHP:

Instrução Descrição PHP Linguagem C++
MOSTRAR Mostrar dados na tela echo(); print(); cout <<
INPUT Requisitar um input $_GET[] (Não é usado de forma direta) cin.get()

Estruturas de controle[editar | editar código-fonte]

IF[editar | editar código-fonte]

IF é o mesmo que SE e é usado por todas as linguagens de programação por ser a estrutura mais simples que existe. A sua implantação representa o lançamento de um booleano Verdadeiro ou Falso.

IF isto
DO aquilo

ELSE[editar | editar código-fonte]

ELSE é usado como um acréscimo de IF, levando a que todos os dados retornados como FALSO em IF sejam controlados por este ELSE.

IF isto
DO aquilo
ELSE outra coisa

SWITCH[editar | editar código-fonte]

O SWITCH é visto como uma substituição de IF-ELSE quando existem mais de 2 opções a serem controladas.

SWITCH variável
 CASE argumento 1: código correspondente
 CASE argumento 2: código correspondente
 CASE argumento 3: código correspondente

Neste caso, SWITCH irá procurar qual o argumento que variável contém e assim escolher qual dos CASE correr.

FOR[editar | editar código-fonte]

FOR é um loop que acontece enquanto determinado argumento não se tornar verdadeiro.

X = 1
FOR X <= 10
 X = X + 1

Pode ser mais difícil desvendar este código (principalmente se o leitor for matemático e ficar perplexo com a linha "X = X + 1"), mas o que está escrito ali em cima é que "enquanto X não for igual a 10, a instrução FOR vai sempre voltar ao início e somar/incrementar 1 ao valor de X".

A saída no processamento é a seguinte:

X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
X = 10

While[editar | editar código-fonte]

WHILE, estrutura utilizada em grande parte das linguagens de programação atuais, especifica uma ação enquanto determinada condição for verdadeira. Observe o exemplo escrito em pascal.

while (x <> z) do
    begin
        writeln ('Qual o valor de Z?')
            readln (z)
    end;

No código acima, enquanto o valor de Z for diferente do estabelecido para X, será pedido ao usuário que entre com o valor de Z.

Funções[editar | editar código-fonte]

Funções são pequenos trechos de código independentes que são especializados a tratar determinado tipo de dados dentro de um programa. Há linguagens, como o C ou o C++, que só trabalham com Funções, outras, como as linguagens de script (PHP, Python, Perl, etc) , que trabalham com funções e com código solto em sequência.

Exemplo de implementação de funções:

FUNCTION nome_da_função (argumento 1, argumento 2, argumento x,...)
 Código
 RETURN dados a serem retornados ao código principal

Exemplo da implementação de funções num código:

FUNCTION multiplicador (numero)
 X = 10E21
 Y = numero * X
 RETURN Y
END-FUNCION

GET numero
IF numero >= 1
 GOTO multiplicador
 SHOW Y
END-IF
ELSE
 SHOW "Não é número inteiro"
END-ELSE

Neste código, nós conhecemos o poder das funções. No caso acima, é pedido ao utilizador a introdução de um número. Depois disso, o computador analisa se o número é inteiro, e se for, ele chama a função multiplicador, retornando uma variável Y contendo o número introduzido anteriormente multiplicado pelo expoente 22. Se pelo contrário, o número introduzido não for inteiro, o computador lança uma mensagem de erro "Não é número inteiro".

Arrays[editar | editar código-fonte]

Os Arrays são simples estruturas de dados, denominadas como vector ou lista se forem arrays uni-dimensionais, ou matriz se forem poli-dimensionais. O que acontece é que num Array os dados são listados e ordenados segundo propriedades ou variáveis que tentamos dominar.

No caso seguinte apresentamos um array ordenado com dados sobre o estado de um programa open-source:

ARRAY ("versão" => ARRAY ("alpha" => 0.1
                          "beta"  => 0.5
                          "final" => 0.9
                          )
                   FIM-ARRAY;
       "SO" => ARRAY ("win" => "Windows"
                      "uni" => "UNIX-Like"
                      "mac" => "Mac-OS"
                      )
               FIM-ARRAY;
       )
FIM-ARRAY;

Aos dados descritos como "versão" e "SO" chamamos Chave e todos os outros são Valores. Então a todo um valor aponta uma chave.

ARRAY (Chave => Valor);

Operações aritméticas[editar | editar código-fonte]

Em qualquer linguagem, existe a possibilidade de se calcular expressões algébricas aritméticas, segundo os sinais convencionais (+, -, *, e /), logo, qualquer expressão que seja numérica se comporta como dada na matemática elementar. Porém, é possível usar-se expressões alfa-numéricas para se proceder a cálculos mais complexos, matéria em que não iremos entrar pois aqui as linguagens diferem no seu comportamento - algumas aceitam, outras calculam o valor hexadecimal ou ASCII do caractere, outras formam strings (frases), etc - levando assim a um leque infinito de possibilidades de programação, dependendo das necessidades previstas por cada tipo de linguagem.

Operações aritméticas[editar | editar código-fonte]

Podemos somar qualquer expressão algébrica do seguinte modo:

2 + 2 = A
MOSTRAR A

Obviamente que iríamos obter 4 como resultado mostrado.

Analogamente, é possível calcular com qualquer calculadora matemática básica:

4 * 5 = B
MOSTRAR B  //resultado de 20

2 / 3 = C
MOSTRAR C  //resultado de 0,(6)

Uma vez visto isto, poderíamos pensar que seria possível calcular expressões complexas

3 * 5 + 2 / 3 - 5 = D
MOSTRAR D

O que obtemos acima pode ser ambíguo, resultado da maneira como as linguagens de programação interpretam a expressão - calcular a expressão por sequência lógica matemática ou por sequência apresentada. Atualmente todas as linguagens mais comuns seguem a sequência lógica matemática para calcular a expressão e assim o resultado obtido será 10,(6) e não 0,(6).

Operações complexas[editar | editar código-fonte]

Como será que o computador se comporta com os cálculos que usam números de ponto flutuante ou números exponenciais?

Da mesma maneira como na matemática, o computador tratará de arredondar casas decimais (algumas linguagens como PHP necessitam da função round() para arredondar bem matematicamente) e de calcular potências, tudo isto para chegar a um resultado com um número real aproximado ao que se diz matematicamente verdadeiro.

Ponto flutuante:
0,512 + 2/3 = 1,178(6) //com quantas casas decimais o leitor quiser 
e o computador permitir

Conclusão[editar | editar código-fonte]

Estas são as instruções mais básicas usadas por todas as linguagens de programação existentes, exatamente por serem básicas e simples. Sem elas, uma linguagem não era creditada e apresenta demasiados limites para ser considerada uma linguagem de programação racional.

Wikipedia
Wikipedia
A Wikipédia tem mais sobre este assunto:
Introdução à programação