Os elementos

EBER não lembra agora quem foi, mas um cientista disse que um número muito grande de problemas podem ser resolvidos com uns poucos elementos programacionais:

  • Operação
  • Atribuição
  • Condição
  • Repetição


O que o sujeito quis dizer é que basta dominar esses elementos pra adquirir fluência em programação. São as ferramentas mais básicas.
As linguagens oferecem outras estruturas complementares. As consideradas de alto nível foram criadas pra tornar a programação mais cômoda aos programadores. As mais usuais giram basicamente em torno desses elementos.



Operação

As linguagens de programação suportam vários tipos de operadores. Os mais elementares são os aritméticos.

Operadores Descrição
+ Soma
- Subtração
* Multiplicação
/ Divisão




Atribuição

Os primeiros programas foram implementações de algorítmos matemáticos. As variáveis e constantes da Matemática são simplesmente vitais em programação.
Quando se fala em quantidade de memória num computador está se falando basicamente em espaço reservado pras variáveis.


Recorde aquela matéria Funções da Matemática:

y = x + 10
x = 0 y = 10
x = 1 y = 11
x = 2 y = 12
x = 3 y = 13


Neste exemplo há duas variáveis: X e Y.
Em Matemática X representa o domínio; e Y, a imagem.
Ou seja, X representa valores de entrada e a função X + 10 produz valores Y como saída.

No exemplo acima, o domínio de X são os números 0; 1; 2; e 3.
A função de transformação age como uma espécie de liqüidificador. Ela transforma 0 em 10; 1 em 11; 2 em 12; e 3 em 13.

Se alterar a função pra X + X + 100 o liqüidificador tranformará 0 em 100; 1 em 102; 2 em 104; e 3 em 106.


Em programação o que interessa saber é que X e Y são as variáveis e os valores {0; 1; 2; 3} e {10; 11; 12; 13} são as constantes.
Atribuir um valor numa variável significa armazená-lo em algum local da memória.
A maneira de se fazer atribuições varia duma linguagem pra outra.

  Operador de atribuição Formato
Pascal := VARIAVEL:= VALOR;
C = VARIAVEL= VALOR;
VBScript = VARIAVEL= VALOR
JavaScript = VARIAVEL= VALOR;


O exemplo abaixo mostra melhor:

Pascal C VBScript JavaScript
 
var X, Y: Integer; int X, Y; dim X, Y var X, Y
 
X:= 0; X= 0; X= 0 X= 0;
Y:= X + 10; Y= X + 10; Y= X + 10 Y= X + 10;


Em Pascal, por exemplo, o que acontece acima é o seguinte:

- Os elementos X e Y são declarados como variáveis do tipo INTEGER;

- Variáveis do tipo INTEGER só podem receber números inteiros;

- Uma variável INTEGER geralmente gasta 4 octetos na memória;

- A instrução var X, Y: Integer; informará ao compilador pra gerar um código (de máquina) pra alocar 4 octetos na memória prum local chamado X e 4 octetos na memória prum local chamado Y;

- A atribuição X:= 0; informará ao compilador pra gerar um código que instrua o computador a armazenar a constante 0 na memória na posição indicada por X;

- A atribuição Y:= X + 10; informará ao compilador pra gerar um código que instrua o computador a somar a constante 10 com o que estiver na memória na posição indicada por X (neste caso 0) e armazenar o resultado na memória na posição indicada por Y;

- Atualmente os monoprocessadores executam as instruções sequencialmente. Ou seja, executam uma instrução após a outra exatamente na ordem em que são apresentadas;

- No nível da linguagem Pascal o código acima compõe-se de 3 instruções na ordem:
      - Instrução 1: alocar 2 variáveis do tipo INTEGER chamadas X e Y;
      - Instrução 2: atribuir 0 a X;
      - Instrução 3: atribuir X + 10 a Y;

- Ao término da execução dessas instruções, X armazenará a constante 0; e Y armazenará a constante 10.




Condição

O elemento Condição serve pra filtrar o fluxo de execução dum programa.

É o mesmo que pensar num sistema de irrigação.
Há um lago próximo duma plantação e se quer aproveitar suas águas.
Uma solução seria fazer valas de forma a direcionar a água pronde se deseja.
Segunda, quarta e sexta o fluxo principal se particionaria pras áreas norte e lesta da plantação.
Terça e quinta a água seria direcionada pras áreas sul e oeste.
Sábado e domingo a vala principal seria bloqueada, de maneira a evitar a irrigação.
Os elementos de Condição neste caso agiriam como chaveadores.
Um funcionário faria os chaveamentos de acordo com os dias da semana. Da mesma forma como se faz seccionamento nas linhas ferroviárias e nas linhas de transmissão elétrica.

Se fosse automatizar essa irrigação, o código ficaria mais ou menos assim:
- Que dia da semana é hoje?
- Se for segunda ou quarta ou sexta, liberar a água somente pras áreas norte/leste;
- Se for terça ou quinta, liberar a água somente pras áreas sul/oeste.
- Se for sábado ou domingo, bloquear a vala principal.

O elemento Condição é baseado em rígidas regras da Lógica Matemática.

As linguagens escrita e oral geralmente causam confusão por serem ambígüas.
Muitas vezes uma mãe reprime o filho por fazer isso ou aquilo como quem insinua que o filho faz ambas as coisas; ou seja, querendo dizer que ele tem feito isso e aquilo.
Há centenas de expressões idiomáticas que deturpam a conjunção "OU", fazendo-a se comportar ora como aquele "OU" que insinua um "E/OU", ora como "E", ora como "OU" mutualmente exclusivo.
Portanto as pessoas não levam o "OU" muito a sério e geralmente resolvem a questão baseando-se apenas no contexto.
Em programação isso não é permitido; do contrário os resultados seriam imprevisíveis.
Em robótica os programas são feitos pra simular as interpretações por contexto como fazem os humanos na conversação.
São simulações apenas.
Em níveis mais baixos de funcionamento a programação será sempre preditível, do tipo Booleana.
Se não fosse assim o robô poderia parar de funcionar duma hora pra outra, poderia repetir indefinidamente algum movimento, e tudo isso sem uma explicação aparente.


Veja, internauta, as construções a seguir:

[1] Se hoje for segunda ou quarta ou sexta, liberar a água somente pras áreas norte/leste.

[2] Se engravidar minha filha ou casa com ela ou será um homem morto.

[3] Tome aqui 10 reais. Compre uma camisa do São Paulo ou do Flamengo.

As construções [2] e [3] utilizam o "OU" com o mesmo intuito. A construção [3] poderia ser reescrita:
Se tomar aqui 10 reais ou compre uma camisa do São Paulo ou compre uma do Flamengo (mas não ambas).

Em [2] e [3] o "OU" é usado como ultimato. Há várias ações a serem escolhidas, porém deve-se escolher uma apenas. Isto está bem claro em [2]. O emissor da mensagem está fazendo um ultimato. As ações a serem tomadas pelo receptor são: A) Casar; B) Ser morto.
O sujeito vai ter de escolher uma só (ser morto!).

No caso [1] a água só será liberada pras áreas norte/leste se o dia for segunda, quarta ou sexta. Não há um ultimato aí. Em [1] o "OU" funciona como um operador programacional. Em Pascal é escrito como OR; em C é escrito como ||.

Em programação a construção [1] seria escrita:

SE hoje for segunda OR quarta OR sexta:
    liberar a água somente pras áreas norte/leste.


As linguagens de programação mais populares não resolvem o caso [2] com operadores. Há uma sintaxe própria. Ficaria assim:

SE engravidar minha filha:
    casa com ela
SENÃO:
    será um homem morto.


A sintaxe em Pascal pruma condição é:


if CONDIÇÃO then INSTRUÇÃO;
ou então:
if CONDIÇÃO then begin BLOCO DE INSTRUÇÕES end;




Repetição

EBER não lembra agora quem foi, mas alguém já disse "tudo é movimento".

Em programação é o elemento Repetição que dá vida a um programa.
Quando se diz que um programa está executando, diz-se que ele está dentro duma repetição.
Quando se fecha um programa o que se está fazendo é instrui-lo a sair de sua repetição principal.

Pascal C, JavaScript VBScript
 
while CondiçãoForVerdadeira do begin
  Instrução 1;
  Instrução 2;
  Instrução N;
end;
while (CondiçãoForVerdadeira) {
  Instrução 1;
  Instrução 2;
  Instrução N;
}
while CondiçãoForVerdadeira
  Instrução 1
  Instrução 2
  Instrução N
wend


Exemplificando:

Pascal C, JavaScript VBScript
 
while X <= 3 do begin
  Y:= X + 10;
  X:= X + 1;
end;
while (X <= 3) {
  Y= X + 10;
  X= X + 1;
}
while X <= 3
  Y= X + 10
  X= X + 1
wend


Uma das maneiras de dominar completamente a Repetição é pensar em como se escreveria um código sem utilizá-la.

É preciso compreender o que são blocos de código.

Quem olha pela primeira vez prum código de programação vai estranhar o espaçamento em certas linhas.
Por que certas instruções começam numa certa coluna e outros bem mais à direita?
Isto afeta a execução do código?
Depende.
Na época dos cartões perfurados afetava.
Em COBOL antigo, por exemplo, as instruções deviam começar em colunas pré-estabelecidas; do contrário a leitora descartava o código.
Há muitos anos que esse tal espaçamento não interfere.
Ele serve unicamente pra ajudar na visualização dos blocos de código.
Sem espaçamento os programadores teriam a mesma dificuldade de leitura que teriam pra ler um texto qualquer sem espaços entre as palavras, sem pontuação e sem parágrafos.
Afeta o conteúdo do texto? Não.
Na programação o espaço (simples) é obrigatório em poucas instruções; do contrário o compilador não conseguirá interpretar determinada palavra como pertencente a uma instrução ou a um nome de variável.
Por exemplo o "if" é palavra reservada em muitas linguagens de programação.
Se inexistir um espaço com a próxima letra do código, por exemplo "e", o compilador vai procurar em seu dicionário a palavra "ife"; não encontrando, só lhe restará interpretar como sendo o nome duma variável (ou nome duma constante).

Agora aquele deslocamento pra direita não é obrigatório.
Faz quem quiser.
Ele é conhecido como identação.
Quando as instruções estão no mesmo bloco é recomendado que tenham a mesma identação.
No exemplo acima Y:= X + 10; e X:= X + 1; estão dentro do mesmo bloco.
Como é que se sabe?
Em Pascal, tudo que estiver entre "begin" e "end" pertence ao mesmo bloco.

A sintaxe em Pascal pruma repetição é:


while CONDIÇÃO do INSTRUÇÃO ;
ou então:
while CONDIÇÃO do begin BLOCO DE INSTRUÇÕES end;
Tirando a identação, ficaria:

while X <= 3 do begin Y:= X + 10; X:= X + 1; end;

Até que ficaria claro.
O problema seria com um bloco com dezenas de instruções.



Um exemplo com os elementos

Pascal C VBScript
 
var X, Y: Integer;

X:= 0;
while X <= 3 do begin
  Y:= X + 10;
  X:= X + 1;
end;
int X, Y;

X= 0;
while (X <= 3) {
  Y= X + 10;
  X= X + 1;
}
dim X, Y

X= 0
while X <= 3
  Y= X + 10
  X= X + 1
wend


O código acima transforma o domínio {0; 1; 2; 3} na imagem {10; 11; 12; 13}. Está escrito:
'Inicialize X com 0. Enquanto X for menor ou igual a 3, execute: 'Y recebe X + 10; depois X recebe X + 1''.

Corresponde a se fazer:

X:= 0; X foi inicializado com a constante 0
 
Y:= X + 10; Y = 0 + 10; ou seja, Y armazenará o valor 10
X:= X + 1; X = 0 + 1; ou seja, X armazenará o valor 1
 
Y:= X + 10; Y = 1 + 10; ou seja, Y armazenará o valor 11
X:= X + 1; X = 1 + 1; ou seja, X armazenará o valor 2
 
Y:= X + 10; Y = 2 + 10; ou seja, Y armazenará o valor 12
X:= X + 1; X = 2 + 1; ou seja, X armazenará o valor 3
 
Y:= X + 10; Y = 3 + 10; ou seja, Y armazenará o valor 13
X:= X + 1; X = 3 + 1; ou seja, X armazenará o valor 4


O valor 4 de X na última instrução serve apenas pra ilustrar a condição de saída praquele código que contém a repetição.
Neste aí de cima não tem importância alguma pra solução do problema em questão (transformar {0; 1; 2; 3} em {10; 11; 12; 13}).





http://transeberiano.brinkster.net