Bichos de X^n cabeças (parte 4/5)

O exemplo do sistema de cores pode parecer assustador. Mas podemos também comparar o byte com um objeto percebido popularmente como algo menos “computacional”, a flauta doce. Uma flauta doce possuí 7 buracos em cima e 1 buraco embaixo. O flautista sopra (equivalente à energia elétrica) e decide quais buracos tampar ou destampar. Para cada nota há então uma combinação destes 8 buracos, alguns tampados outros destampados (assumimos por simplicidade, que o flautista não possa deixar um buraco parcialmente tampado). Ao ler uma partitura e tocar uma melodia, na verdade está lendo uma sequência de bytes escritos na linguagem própria das partituras musicais, interpretando-as como movimentos de dedo para tampar e destampar buracos e executando assim seu código. Um código bem escrito e bem executado gera a melodia esperada. No caso, o flautista seria uma espécie de processador que lê o código e o executa por meio de um dispositivo físico (a flauta doce) que possuí como saída o som.

Exemplo de flauta doce com as 8 variáveis booleanas.

De volta à computação, também trabalhamos diretamente com os bytes a partir do código ASCII (American Standard Code for Information Interchange), traduzível como Código Padrão Americano para Intercâmbio de Informação. Este, codifica um conjunto de 128 sinais, desde letras do alfabeto, sinais de pontuação, matemáticos e outros particulares que não são imprimíveis na tela. Porém, 128 sinais podem ser representados por 7 bits, e como vimos anteriormente 1 byte tem 8 bits, então o que acontece com este bit a mais, se cada caractere utiliza 8 bits e não somente 7? Este bit a mais é utilizado pelo próprio computador para operações diversas dependendo do sistema operacional.

Podemos entender esta “reserva” de 1 bit, como uma estratégia análoga aos dígitos finais do CPF, que possuem o papel de verificadores da validade dos primeiros 9 dígitos (tanto que há uma fórmula envolvendo as operações básicas, para obtê-los a partir dos 9 primeiros).

Vamos agora exemplificar o tamanho dos caracteres do código ASCII e testar se aquilo que digitamos realmente ocupa este espaço. Para isto, abra o editor de texto mais básico possível (o software Bloco de Notas do Windows é um pouco menos básico do que desejamos, mas se não tiver outro, este servirá). No caso do sistema Lubuntu utilizado neste exemplo, temos o software LeafPad, disponível para sistemas operacionais semelhantes derivados do Ubuntu (conhecido popularmente como Linux). Este exemplo não funcionará com editores mais avançados como Office ou LibreOffice.

Com o editor aberto escreva alguma coisa, conte quantos caracteres usou, salve o arquivo. Selecione para ver as propriedades do arquivo e verifique que o tamanho do arquivo será a quantidade de caracteres usados em bytes. No exemplo abaixo, escrevi a palavra exemplo no editor de texto Leafpad, salvei o arquivo com o nome x e abri suas propriedades. Observe em Total size of files: que seu tamanho é de 7 bytes. Equivalente às 7 letras que utilizei na palavra exemplo. No caso, estes editores básicos não admitem formatações como negrito, mudanças de cores, imagens, ou outras ações comuns na edição de textos mais refinados, como o deste próprio editor.

Exemplo de tamanho do arquivo com 7 caracteres.

Digamos que é nesta representação que ocorre a mágica de programar. Quem programa (cria ou edita softwares) não o faz (salvo raríssimas exceções) na linguagem dos bits (0’s ou 1’s), e sim (para as linguagens de programação do tipo textual) na linguagem dos bytes (0, 1, 2, 3, …, 255) representada a partir da tabela ASCII. No caso, não é incomum que se programe em softwares como Bloco de Notas ou editores de texto básicos, ainda que existam softwares próprios para auxiliar esta escrita, corrigindo sintaxes, avisando de possíveis erros no código entre outras dicas para auxiliar o programador na produção deste texto que será o código.

Mas o que faz com que o programa funcione é o chamado compilador. A função do compilador é semelhante à Máquina de Turing Universal que explicamos anteriormente (não que qualquer compilador seja equivalente a uma Máquina de Turing Universal). No caso, ele é um software instruído para ler o que escrevemos e tomar ações a partir disto. De fato, o compilador interpreta nossos códigos de acordo com uma sequência de significados que definem uma linguagem de programação específica, traduz para a linguagem de 0’s e 1’s e faz o computador realizar as ações solicitadas.

Para exemplificar esta escrita, apresentamos o início de código próprio escrito e comentado em MatLab/Octave (softwares matemáticos) para realizar a interpolação de pontos (ligar todos os pontos) no plano por splines lineares (segmentos de reta) ou por splines cúbicas (curvas de um polinômio de grau 3). No caso, aquilo que aparece escrito em uma linha após # não é considerado pelo compilador, sendo uma técnica geralmente utilizada para comentar o código, uma forma de facilitar que o próprio programador ou outros programadores o compreendam e entendam os motivos de cada comando.

clc # limpa a tela

clear all # zera todas as variáveis

xfalso=[x1 x2 x3 … xm]; # troque aqui pelos valores das coordenadas x

yfalso=[y1 y2 y3 … ym]; # troque aqui pelos valores das coordenadas y

nfalso=length(xfalso); # mede o tamanho de xfalso

x(1)=xfalso(nfalso); # atribuindo ao primeiro x a última de xfalso

x(nfalso+2)=xfalso(1); # atribuindo ao último x a primeira de xfalso

y(1)=yfalso(nfalso); # atribuindo ao primeiro y a última de yfalso

y(nfalso+2)=yfalso(1); # atribuindo ao último y a primeira de yfalso

Abaixo apresentamos um resultado de sua aplicação para um conjunto de pontos previamente escolhidos. À esquerda temos os pontos do plano, no centro a interpolação por splines lineares e à direita a interpolação por splines cúbicas.

Ainda que pareça um exagero apresentar este código aqui no texto, consideramos um aspecto importante e que por vezes falta nos textos relacionados à divulgação científica. Muitas pessoas podem ter uma visão errônea sobre o que é um software, onde surge, como eles são criados… Dessa forma, o código acima encontra-se na linguagem MatLab/Octave, foi produzido em um bloco de notas e executado a partir de um software que compila textos/códigos nesta linguagem. Nas linhas 3 e 4 do código, substituímos pelas coordenadas de x e y os pontos que queremos conectar. Ao executá-lo, geramos os pontos em azul, a spline linear e a spline cúbica.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *