1 Preliminares
Neste capítulo, motivaremos a importância da computação em diversos domínios, contaremos um pouco da história da computação e como ela se relaciona com os desafios de nossa sociedade e, por fim, definiremos os principais termos e conceitos a serem abordados nos próximos capítulos.
1.1 Motivação
Imagine instruir uma pessoa a calcular juros compostos. Dado que conhecemos o montante inicial \(x\), a taxa de juros \(j\) e o número de meses passados \(n\), podemos calcular o montante final \(y\) como \[ y = x \cdot (1 + j)^n\text{.} \]
Até o momento, temos uma fórmula fechada da solução para o problema. E se eu dissesse que temos que resolvê-lo sem utilizar a operação de exponenciação? Como o problema seria resolvido?
Uma opção seria \[ y = x \cdot \underbrace{(1 + j) \cdot \text{...} \cdot (1 + j)}_{n\text{ vezes}}\text{,} \] ou interpretando as instruções:
- Multiplique \(n\) vezes o fator \((1 + j)\);
- Multiplique o resultado anterior pelo valor \(x\);
- Utilize o resultado anterior como resposta para o problema.
A interpretação da fórmula acima começa a se aproximar do que definiremos como computação.
Podemos ir além, e imaginar reescrever essa fórmula sem utilizar a operação de multiplicação. Ainda, imagine escrever a mesma fórmula usando apenas operadores lógicos de conjunção, disjunção e negação!
É exatamente isso que os computadores digitais fazem.
1.2 Definições
Nesta seção, definimos os principais conceitos utilizados ao longo do livro.
1.2.1 Computação
As Ciências de Computação englobam o estudo de duas principais subáreas:
- os Sistemas Computacionais; e
- a Computação (ou Métodos Computacionais).
De maneira geral, Sistemas Computacionais correspondem ao estudo de componentes de hardware, lógica digital, sistemas operacionais, segurança cibernética e outras tecnologias computacionais. Normalmente, em cursos de Engenharia de Computação e Engenharia Elétrica há maior ênfase nesses tópicos.
Por outro lado, a Computação é uma Ciência Matemática com foco no estudo dos métodos que possibilitam e alimentam as tecnologias computacionais. Entre os tópicos de estudo estão a teoria da computação, linguagens de programação, algoritmos e estruturas de dados. Devido à ubiquidade de sistemas computacionais em nossa sociedade, a formação de todo engenheiro deve contemplar o entendimento e o domínio destes métodos para solução de problemas de engenharia.
1.2.2 Computador digital
Computadores digitais são dispositivos eletrônicos capazes de processar informação por meio de operações lógicas e aritméticas. Como consequência de sua natureza digital são restritos ao processamento de informação discreta e finita.
Esta limitação traz consigo características marcantes que diferem as soluções computacionais das soluções exatas (amplamente estudadas em disciplinas de matemática, física e similares no ensino básico e superior).
Quando lidamos com problemas computacionais, devemos levar em consideração restrições de hardware, escolha da tecnologia mais apropriada, custo computacional (custos relacionados ao tempo de execução, uso de memória e outros recursos computacionais), representação da informação (estruturas de dados), erros numéricos, bem como ponderar vantagens e desvantagens de cada algoritmo que potencialmente resolve o problema.
Ao longo do livro, abordaremos cada um desses tópicos na profundidade suficiente para um engenheiro resolver os diversos problemas computacionais em sua carreira.
1.2.3 Dado digital
Em computadores digitais, toda informação é representada por um conjunto finito de bits. Bit é a menor unidade de informação e pode assumir dois valores: zero ou um.
Os bits são agrupados em unidades de informação chamadas de bytes, sendo este último a menor unidade endereçável de memória. Veremos, posteriormente, que cada byte armazenado em memória possui um endereço único. Esta propriedade afeta diversos aspectos das linguagens de programação, por exemplo, limitando o menor tamanho possível de objetos. Na grande maioria das arquiteturas modernas, um byte é composto por 8 bits.
Na prática, apesar de cada byte ser endereçável, computadores digitais operam a nível de palavra. Ou seja, as operações lógicas e aritméticas são aplicadas em grupos de bytes. Uma palavra é a unidade natural de informação em um computador. Como os bytes, o tamanho das palavras depende da arquitetura. Computadores de propósito geral modernos possuem palavras de tamanho 32 ou 64 bits.
1.2.5 Programa de computador
Um programa de computador é uma sequência de operações e instruções que realizam uma tarefa. Um programa é sempre executado num computador; e, ainda, são programas que fazem os computadores funcionarem tornando-os úteis. Em outras palavras, programa de computador é a instância “concreta” de um algoritmo.