Introdução à programação/Estruturas de manipulação de dados
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.