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 controlo. Estruturas de Controlo são definidas como sendo a base da lógica da programação e podem ser de dois níveis: directo ou indirecto (complexo). Para termos uma ideia da diferença entre um controlo directo e um controlo indirecto, apresento a seguir dois diálogos representativos de duas situações do quotidiano:
Pedro - "Onde foste Miguel?" Miguel - "Fui à loja comprar roupa."
Indivíduo - "Onde posso arranjar uma certidão A-R53?" Inspector - "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 é directa 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 à recriação do conteúdo da primeira situação. O mesmo já não se verifica no segundo. Normalmente para este tipo de casos, o programador utiliza peças fundamentais chamadas funções (do inglês function) que retratam cada um único 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 directo e um Algoritmo complexo.
Índice |
[editar] Estruturas básicas
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.
[editar] Variáveis e constantes
Como o leitor já deve ter dado na matemática, uma variável é uma expressão que varia e normalmente é representado por uma incógnita X, e uma constante é uma expressão que não se altera (o número de Avogrado, 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++:
//Estou a representar um texto como uma variável representada por p (sintaxe de PHP): <?php $p = "Olá Mundo!"; //Agora vou apresentá-la no ecrã 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 directamente.
[editar] Instruções
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 no ecrã | echo(); print(); | cout << |
| INPUT | Requisitar um input | $_GET[] (Não é usado de forma directa) | cin.get() |
[editar] Estruturas de controlo
[editar] IF
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 boleano Verdadeiro ou Falso.
IF isto DO aquilo
[editar] ELSE
ELSE é usado como um acrescento 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
[editar] SWITCH
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.
[editar] FOR
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
[editar] Funções
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 ficámos a conhecer 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".
[editar] Arrays
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 numa Array os dados são listados e ordenados segundo propriedades ou variáveis que tentamos dominar. No caso seguinte apresentamos uma array ordenada 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 descriptos 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);
[editar] Operações aritméticas
Em qualquer linguagem, existe a possibilidade de se calcularem 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 alpha-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 caracter, outras formam strings (frases), etc - levando assim a um leque infinito de possibilidades de programação, dependendo das necessidades previstas por cada tipo de linguagens).
[editar] Operações aritméticas
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 calculador matemática básica:
4 * 5 = B MOSTRAR B //resultado de 20 3 / 2 = 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. Actualmente todas as linguagens mais comuns seguem a sequência lógica matemática para calcularem a expressão e assim o resultado obtido será 10,(6) e não 0,(6).
[editar] Operações complexas
Como será que o computador se comporta com os cálculos que usam números de vírgula 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
[editar] Conclusão
Estas são as instruções mais básicas usadas por todas as linguagens de programação existentes, exactamente 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.
Prefácio Programar, o que é a programação? Como programar: pensar como uma máquina Aprendizagem: o "padrão eficaz" Linguagens de programação Estruturas de manipulação de dados Orientação a objectos Exercícios Bibliografia e ligações externas