ALGORITMOS E LÓGICA DE PROGRAMAÇÃO – TIPOS DE DADOS E ESTRUTURA – AULA 2

Tempo de Leitura: 8 Minutos

Neste segundo artigo, vamos estudar a estrutura necessária para se fazer um algoritmo, e o fluxo percorrido desde o inicio até a conclusão, e vamos detalhar a funcionalidade de cada etapa, e porque devemos seguir esse fluxo de maneira o mais rígido possível. Atualmente, muitas linguagens não precisam necessariamente de todos esses passos, nem que eles estejam nesta determinada ordem, mais indiferente da linguagem de programação escolhida, esses passos devem ser aprendidos principalmente por quem quer seguir carreira na área de desenvolvimento.

Como exemplo desse segundo artigo, vamos desenvolver um algoritmo para fazer um bolo de aniversário, de chocolate, com recheio, cobertura e decoração. E vamos desenvolvendo cada uma das partes, afim de no fim do artigo, ter um algoritmo completo, e com todas as partes detalhadamente comentadas, vamos lá:

DECLARAÇÕES: Servem para detalhar o que precisamos para executar, e as definições e especificações que estão presentes no corpo do código, analogamente a receita, são os pré-requisitos para que se obtenha o resultado, e também, em linguagens de programação propriamente ditas, são as bibliotecas que precisamos, as constantes, as variáveis que vamos trabalhar, veja o exemplo:

Declaração
    Usando: Forma de 30x45x7, forno caseiro, batedeira tradicional, colher de pau, xícaras, colheres medida, panelas, utensílios caseiros
    Padrões: forno a 180º, xícara de 180ml, colher de sopa medida universal
    Ingredientes: leite, óleo, ovos, farinha, chocolate em pó, açúcar, químico

Para que o bolo fique como a proposta, ou seja, do tamanho determinado, além da qualidade dos ingredientes, precisamos que eles estejam dentro da quantidade correta e que os utensílios necessários estejam prontos para serem usados, ou seja, se você ler essa pequena parte da receita, deve ser capaz de entender tudo o que precisa para executar a receita. A declaração usando, corresponde a importação de bibliotecas e classes, por exemplo em python as diretivas import, também necessárias em outras linguagens como C/C++ e Java, mesmo que a linguagem permita a declaração em outras partes do código, é recomendado que se faça isso no inicio, pois facilita a leitura e a manutenção futura, bem como a identificação de erros e dependências. Pois se algum destes itens não tiver presente, ou não for igual (por exemplo sua forma é industrial de 60×90) não vai ser possível fazer tudo exatamente como indicado.

Nos PADRÕES, temos as declarações de CONSTANTES, ou sejam, valores que esperamos encontrar e não precisamos ficar repetindo a todo momento, por exemplo, se definimos que nossa xícara tem 180ml sempre que nos referir-mos a xícara, vai ser essa de 180ml e pronto.

Ingredientes, são nossas variáveis, por exemplo, definimos que precisamos de 1 xícara do tipo leite, ou seja ela vai ter leite, mais não sabemos necessariamente sua marca, ou seu tipo, pois pode ser integral, ou desnatado, etc. Essa analogia, dos ingredientes, nos mostra a importância da declaração antecipada, pois podemos verificar e saber tudo que nosso programa precisa para funcionar, e as regras para cada coisa, sem ter acesso exato a ela.

INPUTS: Nesta parte, vamos separar tudo, validar esse processo e deixar tudo pronto para produzir nosso bolo. Seguindo nosso exemplo da receita, é neste ponto que vamos separar os ingredientes, ver se todos estão dentro do prazo de validade, em condições de uso, na quantidade que precisamos, se as tomadas e utensílios que precisamos funcionam, se tem gás suficiente, etc. Em linguagem de programação, vamos receber as entradas que nosso programa precisa, no caso de um sistema local, podem ser as entradas de usuário, ou as requisições da nossa API ou mesmo chamadas de outros componentes do sistema para uma função ou funcionalidade.

Separe, 1 xícara de chá de leite
Separe, 1 xícara de chá de óleo de soja
Separe, 2 unidades de ovo
Separe, 2 xícaras de chá de farinha de trigo
Separe, 1 xícara de chá de achocolatado em pó
Separe, 1 xícara de chá de açúcar
Separe, 1 colheres de sopa de fermento químico em pó
Verifique se a batedeira e a tomada funcionam
    se não funcionam,
         pegue um batedor manual
    Se funcionam,
         ligue e monte a batedeira
Verifique se o forno funciona e se tem gás
    se não tem gás,
        troque o gas
    se nao funciona,
        faça o bolo em outro momento
Verifique se todos os ingredientes estão na validade correta
    se não estão,
        anote o que falta na lista de compras
        faça o bolo em outro momento
    se estão, verifique se tem a quantidade correta
        se não tiver 
            anote o que falta na lista de compras
            faça o bolo em outro momento
Verifique os demais utensilhos
    se não estão bons, verifique o que pode ser substituido
         se não tem substituto, 
             anote o que precisa comprar
             faça o bolo em outro momento

Os inputs e checagens, garantem que aquele dado esperado para produzir o resultado, está presente, e é condizente com o que necessitamos, imagina um simples algoritmo de somar 2 números, e nosso usuário nos enviou uma letra e um número, nosso sistema deve checar se os dados passados são numéricos, e se não forem retornar para o usuário que o que estava sendo esperado não foi introduzido, ou veio com um erro. Neste ponto é também onde devemos fazer as validações necessárias, como filtros de dados, e a proteção contra injeção de código malicioso, ou de sql através desses inputs. Mais isso são assuntos vistos mais a frente, fique tranquilo.

PROCESSAMENTO: Nesta etapa, é a funcionalidade do nosso código, analogamente é o modo de fazer, aqui é a parte mais importante do algoritmo, é onde vamos usar as entradas passadas pelo usuário, e as funções da linguagem escolhida, dos condicionais e das demais estruturas afim de produzir os resultados (saídas) esperados. A importância da validação prévia e da declaração, é garantir que ao dar inicio a este ponto, não tem mais volta e se algo anterior falhou, impreterivelmente vamos acabar perdendo alguma coisa, ou o resultado não vai ser satisfatório. Veja:

Coloque os ingredientes líquidos  líquidos no liquidificador
bata até misturar bem
Coloque os outros ingredientes na batedeira
misture-os bem, acrescente um pouco do liquido
enquanto ainda tiver liquido,
    deixe a batedeira ligada e vá acrescentando o liquido aos poucos
bata por 2 minutos em velocidade média
desligue a batedeira
acrescente o fermento
bata até 
   ficar homogêneo
unte a forma
despeje a massa na forma untada
Leve para assar 
espere 20 minutos
verifique se esta assado,
    se não esta,
        espere mais 5 minutos.
    se esta,
        faça o teste do palito,
            teste ok,
                 retire o bolo do forno
            teste não ok
                 espere mais 3 minutos
enquanto bolo não estiver frio,
     espere bolo esfriar
desenforme bolo

Veja, no fim do processamento, nosso bolo já esta desenformado e pronto para ser entregue a confeiteira, para ser recheado e decorado, ou ser consumido como um bolo de massa no café, isso é o fim do processamento, e a preparação para a saída do algoritmo, que é o fim dele.

SAÍDA: Nesta ultima etapa, nosso sistema vai apresentar os resultados, note que esses resultados podem ou não ser apresentados para o usuário, pois ainda pode ser necessário retrabalhar em outra etapa ou não, novamente, sendo análogo a receita do bolo, podemos verificar se é um bolo para ser servido, se precisa ser enviado a confeiteira, ou se as etapas do processamento estão corretas. Veja:

verifique se o bolo esta correto e saboroso,
   se não esta,
       informe o cliente
       refaça todo o bolo novamente
se o bolo deve ser confeitado,
    envie para a confeiteira
senão,
    coloque na embalagem
    entregue para a cliente

Entenda, após essa finalização, seu programa não é mais o responsável pelo bolo, e pode ser finalizado, ou pegar o próximo pedido.

Porque temos diferentes tipos de dados?

Nós seres humanos, temos uma imensa capacidade de fazer associações, porém, sistemas eletrônicos não, a não ser que sejam feitos para reagir a um conjunto prévio de associações e padrões estabelecidos, para nós humanos, é perfeitamente possível entender a instrução “Quanto é dois mais dois”, porém, para uma calculadora esse texto seria totalmente inválido, pois ela espera uma instrução “2+2” justamente por isso é que temos diferentes tipos de dados.

Internamente, algumas linguagens mais modernas permitem que um determinado tipo de dado seja convertido em outro, porém, isso é um assunto para outro momento. Neste momento, vamos tratar os tipos de dados, como sendo a estrutura que vai permitir que o computador identifique e processe uma determinada entrada, ou seja, vai determinar o formato que esperamos um dado para ser processado.

As linguagens mais modernas são capazes de trabalharem com uma infinidade de tipos de dados e estruturas diferentes, porém, para começar-mos a nos familiarizar com estas definições, vamos nos ater a estes 5 tipos básicos:
-DADOS NUMÉRICOS, sejam eles números inteiros ou números decimais, positivos ou negativos. Neste momento vamos nos limitar a isso;
-DADOS TEXTO, que podem ser um caractere (ou seja, uma letra, um simbolo gráfico ou um simbolo algébrico), uma string (ou seja, uma palavra ou sequencia de caracteres com um tamanho máximo e minimo determinados) ou um texto (que pode ser um paragrafo ou conjunto de parágrafos com ou sem identificações de formatação)
-DADOS DATA, que podem ser usados para calcular ou identificar uma informação em um calendário, seja um dia, um mês, um ano, um horário do dia, um período passado ou futuro, uma diferença de tempo ou qualquer outra informação temporal passada, presente ou futura.
-DADOS BOOLEANOS, podem ser de 2 estados, ou seja, verdadeiros e falsos, são considerados tipos de dados primitivos, e são os únicos valores possíveis para instruções eletrônicas
-DADOS TIPO CONJUNTO, são grupos de dados iguais (todos do mesmo tipo) ou identificações do tipo CHAVE=VALOR muito usados em sistemas computacionais, conhecidos como ARRAY e ARRAY MULTIDIMENSIONAL de imediato, não vamos nos atentar a detalhes deles.

O Que são Operadores Lógicos e Condicionais

Os operadores condicionais são estruturas usadas para comparar um ou mais valores, como por exemplo igualdade, maior que, menor que, diferente de, maior ou igual a, menor ou igual a, verdadeiro ou falso e tem como objetivo verificar a condição destes pares de dados, retornando uma condição lógica booleana (ou seja, se a condição é verdadeira ou falsa).

E os operadores condicionais que permitem avaliar 2 ou mais grupos lógicos, retornando um valor também boleado de acordo com o resultado deste grupo, veja a tabela:

OPERADOR Retorno
AND Retorna VERDADEIRO se TODOS os pares lógicos forem também VERDADEIROS
OR Retorna VERDADEIRO se PELO MENOS UM dos pares lógicos serem verdadeiros
NAND Retorna VERDADEIRO se PELO MENOS 1 dos pares lógicos for falso
XOR Retorna VERDADEIRO se PELO MENOS 1 dos pares lógicos for verdadeiro
NOT

CONCLUSÃO

Nesta segunda aula, entendemos detalhadamente para que servem as partes de um algoritmo, e o que são tipos de dados e operadores, na próxima aula, vamos falar sobre as definições, o que são constantes e variáveis, como usamos os operadores lógicos e condicionais e as estruturas de controle, usadas para que nosso programa possa tomar decisões de acordo com as ações ou resultados obtidos.