Introdução
Problema Computacional
Objeto de discussão que possui instruções passo a passo que são mais facilmente resolvíveis em ambiente computacional.Um problema pode ser resolvido a partir de um algoritmo e implementado em um computador através de codificação, e as instruções vão determinar como o problema vai ser resolvido. Um problema é resolvível quando há um algoritmo capaz de resolvê-lo.
Alguns tipos de problemas são mais fáceis de resolvidos em ambiente computacional, como:
- Problemas de decisão: De carater lógico. Determinar alguma decição, ideia de pertencimento.
- Problemas de busca: Característica de relacionamento binário. Recorrente em teoria de grafos.
- Problemas de otimização: De carater intuítivo. O objetivo é maximizar ou minimizar uma função. Este tipo de problema possui N aplicações.
Ex: Dado um número (n) inteiro e positivo, determinar se ele é primo ou não.
Ex: Clique.
Ex: Minimizar o custo e maximizar o lucro.
O que é uma linguagem de programação?
Método padronizado composto por um conjunto de regras sintáticas e semânticas de implementação de um código fonte.Conjunto de palavras que possuem significados que vão executar determinadas ações e que são implementadas em um código fonte e são interpretadas por um computador.
O código fonte é exatamente esse conjunto de palavras que são regidos por determinados padrões, as linguagens de programação possuem regras, e cada linguagem possui suas próprias regras, semânticas e formas.
Como o computador entende os programas?
Programa é somente um amontoado de palavras senão for possível que o computador entenda. Sendo assim, precisa existir um processo de tradução, que transforma o programa em uma linguagem de máquina.O Compilador (é um programa) executa uma série de análises (léxica, sintática, semântica) no código fonte de alto nível, e caso não haja nenhum erro (que seja previsto pelo compilador), o código fonte é traduzido e convertido para uma linguagem de baixo nível, no caso Assembly e então é convertido para a linguagem de máquina a partir de montadores (refere-se a hardware) que é executada pelo computador.
Programa Fonte (alto nível) >> Compilador >> Programa Objeto (baixo nível) >> Máquina
O código fonte tem duas opções:
- Tradução: Consiste em duas etapas.
- Interpretação: Consiste em uma única etapa.
- 1. Geração de programa objeto
- 2. Execução de programa objeto
- Programa fonte executado diretamente
Características de um programa
O desenvolvimento de programas segue algumas diretrizes:
- Legilibilidade: Facilidade de leitura; coêrencia nas instruções, compreensão, definição adequada das estruturas (matrizes, filas, pilhas, etc).
- Redigibilidade: Facilidade de escrita; coêrencia nas instruções, simplicidade, abstração (subrotinas, funções, modularização), reuzabilidade, expressividade. Pode conflitar com a legibilidade.
- Confiabilidade: Fazer exatamente o que foi programado para fazer; verificação de tipos, tratamento de exceções, compatibilidade entre compiladores, uso de ponteiros (referencia da posição da variável na memória).
- Custo: Análise de impacto; Programar de maneira eficiente e otimizar recursos para minimzar o custo operacional; treinamento, codificação, compilação, execução, infra-estrutura.
Outras características:
- Atualizações
- Disponibilidade de ferramentas
- Comunidade ativa
- Adoção pelo mercado
- Uso para IA
Análises de Código
Quando o código é traduzido ele passa por uma série de análises dentro do compilador antes de ser convertido para a linguagem objeto.- Léxica: Conjunto de palavras existentes dentro de determinado idioma.
- Sintaxe: Análise da forma. Sintaxe é um componente (operadores, comandos) do sistema linguístico que interligam os constituintes da sentença (elementos do código), atribuindo-lhe uma estrutura.
- Semântica: Análise do significado. Incide sobre a relação entre significantes, como: palavras, frases, sinais e símbolos.Semântica é o processo de verificar se o código fonte é válido, se as variáveis são declaradas corretamente, se as funções são chamadas corretamente, etc. Ou seja, a lógica do programa.Um erro de semântica é caracterizado quando o programa não faz o que ele deveria fazer. Esses são os erros mais complicados de serem verificados. Exemplo:
- Possui três estapas:
- 1. Particionamento: Código fonte é decomposto e particionado em elementos denominados tokens
- 2. Classificação: Os elementos tokens são classificados em: identificadores, palavras reservadas, números, strings, etc.
- 3. Eliminação: Consiste na eliminação de tudo aquilo que não interessa na execução de programa, como: caracteres de espaços em brancos, quebra de linha, comentários, etc.
O padrão gramatical do código fonte depende da linguagem de programação usada. Ex: A forma de escrita de um comando pode ser diferente dependendo da versão da linguagem.
// Erro de semântica (A condição nunca vai ser satisfeita)
if(x = 0){
print("O valor é nulo");
}
// Correto
if(x == 0){
print("O valor é nulo");
}
Neste exemplo, o programa está executando com sucesso, sem erros de compilação, porém não está fazendo o que deveria fazer logicamente.
É uma BOA PRÁTICA depurar o código fonte.