Aula 1
Aula 1
Aula 1
E ALGORITMOS
AULA 1
Você já parou para pensar na maneira com que você racionaliza para
realizar suas tarefas cotidianas? Por exemplo, ao acordar você segue, mesmo
que de maneira não intencionalmente, uma ordem para suas atividades. Quando
acorda, você veste-se, escova seus dentes, toma café, dentre outras tarefas.
2
Cada pessoa segue sua rotina como prefere, mas todos temos uma sequência
de passos, a serem realizados, que mais nos agrada. Tudo que fazemos e
seguimos em nossas rotinas tem um motivo, o qual é baseado em nosso
raciocínio lógico, desenvolvido ao longo da vida. Por que nos vestimos ao
acordar? Bom, porque sair de pijama na rua está fora da convenção social. Por
que tomamos café ao acordar? Porque precisamos de energia para o longo dia
de trabalho que virá. E, assim, podemos questionar o porquê do que fazemos e
veremos que temos para tanto uma resposta racional, mesmo que ela faça
sentido somente para nós mesmos.
O raciocínio lógico adotado para estabelecer nossas tarefas é um
pensamento que adotamos desde os nossos tempos primitivos. E que rege a
maneira como conduzimos nosso dia a dia. Esse tipo de raciocínio provém da
ciência da lógica. A lógica foi pela primeira vez conceituada na Grécia Antiga,
por Aristóteles (384-322 a.C.). A palavra lógica é de origem grega (logos) e
significa linguagem racional. De acordo com o Dicionário Michaelis, lógica é
“Parte da filosofia que se ocupa das formas do pensamento e das operações
intelectuais” (Lógica, 2015). Levando o conceito de lógica para a área da
computação e informática, novamente de acordo com o Dicionário Michaelis, o
termo lógica, quando associado a essa área, é entendido como a “Maneira pela
qual instruções, assertivas e pressupostos são organizados num algoritmo para
viabilizar a implantação de um programa” (Lógica, 2015).
Certo, o conceito do dicionário nos legou uma nova palavra: algoritmo.
Ainda não definimos o que um algoritmo é! Faremos isso na próxima subseção.
O que é relevante, neste momento inicial, é que compreendamos que o uso de
lógica é a base para o desenvolvimento de softwares computacionais. E é esse
tipo de raciocínio lógico que iremos desenvolver e trabalhar ao longo deste
estudo.
1
Sugestão: faça uma busca on-line pelas palavras Leibniz calculator ou calculadora de Leibniz.
E você verá a máquina manual construída por ele, no séc. XVII.
4
Depois, volte aqui e compare com as etapas a seguir. Observe que você deve
utilizar somente os ingredientes que citamos nesse exemplo (i.e., pão de forma,
queijo fatiado, presunto fatiado e manteiga).
Assim sendo:
Ficou parecido com o seu? É claro que cada um tem suas preferências
culinárias, como colocar ainda mais manteiga. Ou, quem sabe, mais fatias de
queijo? De todo modo, a ideia será bastante semelhante com a que foi
apresentada. Note, também, o nível de detalhes do algoritmo. Se pensarmos que
um computador deverá executar esse algoritmo, quanto mais se carecer de
detalhes, menos a máquina saberá como proceder, podendo resultar em um
sanduíche errado. Quer ver um exemplo de erro? Na etapa 2 do algoritmo, se
não fosse especificado que a ponta da faca deveria ser passada na manteiga,
qualquer parte dela poderia ser usada, inclusive o cabo. E, caso você não tenha
dito para usar uma faca, bom, aí seria possível usar até mesmo sua própria mão
para espalhar. Portanto, é necessário informar da maneira mais minuciosa como
construir o sanduíche.
Exercício de revisão: escreva uma sequência de passos (um algoritmo)
para resolver a equação do delta (Δ), na fórmula de Bhaskara (Δ = b2 − 4ac).
Resposta: disponível em Puga e Risseti (2016, p. 10).
Exercício de fixação: um cliente deseja fazer a consulta do saldo de sua
conta-corrente no computador, pela internet. Suponha que o computador já
esteja ligado e conectado à internet. A seguir estão os passos que poderiam ser
utilizados, porém dispostos fora de ordem. Organize-os na ordem correta (Puga;
Risseti, 2016, p. 16).
a. Inserir a senha.
b. Clicar no botão OK, de acesso.
5
c. Selecionar a opção de saldo.
d. Encerrar a sessão.
e. Abrir o navegador.
f. Preencher dados (os números de agência e conta).
g. Confirmar ou digitar o nome do usuário.
h. Fechar o navegador.
i. Confirmar o endereço do site do banco.
Figura 1 – Eniac
8
1. Memória – armazena o programa (algoritmo) em execução pela máquina,
sendo capaz de armazenar dados usados pelo programa e também
instruções de controle. Tudo é armazenado em codificação binária. A
memória que mantem os programas em execução é a random acess
memory (RAM).
2. Unidade lógica e aritmética (ULA) – essa unidade é responsável por
todos os cálculos aritméticos e lógicos do computador. Todas as
operações são realizadas nela. Uma máquina computacional é capaz de
realizar somente cálculos aritméticos e lógicos dos mais simples
possíveis, como somas, subtrações e operações relacionais (como de
maior ou menor). Dentro dessa unidade temos um registrador
especialmente denominado de acumulador. O acumulador é responsável
por armazenar temporariamente os resultados das operações, dentro da
ULA.
3. Unidade de controle (UC) – gerencia o fluxo de execução dos programas
dentro do computador. Define qual será a próxima instrução a ser a
executada e onde ela se encontra na memória.
4. Dispositivos de entrada – são as maneiras físicas pelas quais inserimos
informações em nossos programas. Um dispositivo de entrada comum é
um teclado, onde digitamos e as informações são transferidas ao
programa.
5. Dispositivos de saída – são maneiras pelas quais o resultado final de
uma ação do programa informa o usuário. Podemos citar como
dispositivos de saída uma tela/monitor ou mesmo lâmpadas indicativas,
acesas.
9
Em suma, a arquitetura de von Neumann, hoje considerada clássica, por
conta dos computadores modernos, é tida como o hardware mínimo necessário
para um computador digital funcionar. Qualquer software de computador que
iremos aprender a desenvolver ao longo deste estudo requer uma máquina de
von Neumann.
Porém, desde a proposta de computador digital feita por von Neumann,
em meados de 1945, as tecnologias para construção de computadores
evoluíram abruptamente. Na década de 1950 deu-se início à era da
miniaturização dos computadores, com o surgimento dos primeiros dispositivos
construídos a base de transistores e não mais valvulados. A evolução para
máquinas transistorizadas foi um firmamento, para a aritmética binária.
Transistores são componentes eletrônicos que, quando parametrizados
corretamente, podem operar no que chamamos de região de saturação,
funcionando como uma chave que liga e desliga milhares de vezes por segundo.
Em 1960, evoluímos para projetos com circuitos integrados, reduzindo ainda
mais o tamanho dos computadores e chegando a máquinas com tamanhos e
custos compatíveis para vendas residenciais. Toda a história e evolução dos
computadores pode ser lida em detalhes no livro Organização estruturada de
computadores (Tanenbaum, 2013a).
De todo modo, o que todas essas gerações tem em comum é que a
arquitetura que serviu como base está contida dentro de todas as nossas
máquinas digitais e não só em computadores e laptops, mas também em
smartphones e até mesmo em dispositivos eletrônicos embarcados, como forno
de micro-ondas, lâmpadas inteligentes etc. Tudo isso tem a máquina de von
Neumann como seu ponto de partida.
2
O nível e o tipo de sinal usado para representar o bit dependerão da tecnologia de memória
empregada no armazenamento. Por exemplo, memórias RAM convencionais trabalham com
capacitores, em que um capacitor carregado representaria nível lógico alto.
11
Tabela 1 – Nomenclatura do bit
Equivale a Abreviação
8 bits 1 byte B
1.024 bytes 1 kilobyte KB
1.024 KB 1 megabyte MB
1.024 MB 1 gigabyte GB
1.024 GB 1 terabyte TB
1.024 TB 1 petabyte PB
3
O assunto de sistemas operacionais é bastante complexo e requer um material inteiro para ele.
Caso tenha interesse em aprofundar-se no assunto, recomendamos a leitura complementar do
livro Sistemas operacionais modernos (Tanenbaum, 2013b).
13
Sony, temos uma variação do FreeBSD chamada de Orbis OS. No ramo
de dispositivos embarcados inteligentes, cada vez mais comuns hoje em
dia, sistemas operacionais também são empregados. O mais difundido
deles é o FreeRTOS.
14
b. Verificar se x e y são iguais.
c. Se x for igual a y, mostrar a mensagem Valores iguais!.
d. Se x for diferente de y, mostrar a mensagem Valores diferentes!.
e. Fim!
3.2 Pseudocódigo
a. Algoritmo de exemplo
b. Var
c. x, y: inteiro
d. Início
4
Programação estruturada é um paradigma de programação, um conceito que foi criado na
década de 1950. Linguagens que trabalham de maneira estrutura se utilizam de recursos como
estruturas de sequência, de tomadas de decisão e de repetição.
15
e. Ler (x, y)
f. Se (x = y), então...
g. Mostrar (Valores iguais!)
h. Se não...
i. Mostrar (Valores diferentes!)
j. Fim!
3.3 Fluxograma
16
Figura 3 – Simbologia para fluxogramas com base na ISO 5807:1985
Fonte: Elaborado com base em ISO, 1985; Puga; Risseti, 2016, cap. 2.
17
Figura 4 – Exemplo de um fluxograma
18
TEMA 4 – LINGUAGENS DE PROGRAMAÇÃO E COMPILADORES
Crédito: Iunewind/Shutterstock.
19
Saiba que, no passado, já construímos códigos assim, em binário, mas
nessa época desenvolvíamos programas bem mais simples e com pouquíssimos
recursos. Um exemplo de máquina programada diretamente bit a bit foi o Altair
8800, criado em 1975 e que funcionava com uma CPU Intel 8080. Todos os
interruptores no painel frontal serviam para programar o computador.
20
4.2 Histórico das linguagens de programação
5
As programadoras do Eniac eram: Jean Jennings Bartik, Betty Holberton, Marlyn Wescoff,
Kathleen McNulty, Ruth Teitelbaum, e Frances Spence. Existe um documentário sobre a história
dessas mulheres, chamado The invisible computers: the untold story of the Eniac programmers.
21
e todas as linguagens de programação mais usadas no mercado contêm uma
variedade bastante grande de bibliotecas pré-disponíveis.
Na década de 1980, tivemos a consolidação das linguagens imperativas,
ou seja, das linguagens de programação fortemente segmentadas, e o conceito
de programação orientada a objetos estava então formalizado. Neste estudo,
não iremos trabalhar com esses paradigmas por se tratarem de conceitos mais
avançados de programação 6. E, por fim, com o boom da internet, em meados de
1990, tivemos o surgimento de uma gama bastante grande de linguagens para
esse propósito, assim como o surgimento do conceito de linguagens funcionais,
cujo foco é a produtividade do desenvolvedor, abstraindo cada mais aspectos
técnicos e detalhes e agilizando o tempo de desenvolvimento.
6
Sobre paradigmas de programação orientada a objetos, recomendamos o livro Java: como
programar (Deitel; Deitel, 2017).
7
Sobre compiladores e seu processo de desenvolvimento e compilação, recomendamos o livro
Compiladores: princípios, técnicas e ferramentas (Aho et al., 2013).
22
Figura 8 – Processo de compilação
23
4.4 Linguagens de programação mais populares
24
Rankings como esse são ótimos termômetros para sabermos em qual
linguagem de programação devemos investir tempo estudando, uma vez que a
chance de nos depararmos com ela no mercado de trabalho será grande. Vamos
comentar algumas das linguagens mais populares, a seguir.
25
• Linguagem C# (C Sharp) – é uma linguagem desenvolvida pela Microsoft
como parte da plataforma .NET e também deriva da linguagem C. É
orientada a objetos e ganhou muito espaço devido às suas ótimas
integrações com serviços Windows e às suas bibliotecas de funções de
fácil uso e versáteis. É também muito usada no desenvolvimento de jogos
com a Unity Engine.
• Linguagem PHP – é uma linguagem interpretada desenvolvida
exclusivamente para desenvolvimento web. Já foi a mais usada no
desenvolvimento web, mas perdeu espaço para o JavaScript, nos últimos
anos.
26
Primeiramente, é válido ressaltar que o Python é uma linguagem de
propósito geral, ou seja, que não foi criada se pensando em um só setor de
desenvolvimento. O PHP, por exemplo, só é aplicável a programação web e
nada além disso. O Python pode ser empregado em qualquer área e em qualquer
plataforma. O que torna o Python tão versátil é a gama enorme de bibliotecas
que existem para ele. Você quer desenvolver jogos com Python? Sem
problemas, ele dá conta! Basta, para isso, instalar as bibliotecas do pygame e
aprender a usá-las. Desenvolvimento para web, interfaces, até mesmo recursos
de inteligência artificial e ciência de dados são facilmente localizados, para uso
no Python.
A linguagem caiu no gosto dos desenvolvedores por ser simples, fácil e
intuitiva. Programadores iniciantes tendem a se dar muito bem com Python, por
exemplo. A linguagem, devido às suas características de linguagem interpretada,
é multiplataforma, ou seja, não é necessário adaptar seu código para rodar em
sistemas diferentes. Um mesmo código deve ser capaz de funcionar tanto em
ambientes Windows, Linux ou mesmo até em dispositivos móveis, desde que
compilado para cada plataforma, é claro.
A linguagem Python é orientada a objetos. Porém, não iremos nos ater
aos paradigmas de programação imperativa neste estudo, uma vez que o Python
consegue trabalhar de maneira estruturada, também. O Python passa por
atualizações constantes na linguagem, tanto para corrigir bugs e falhas de
segurança, quanto também para incluir novos recursos e funcionalidades.
Atualmente, a linguagem Python está na versão 3. Ao entrar no site oficial da
linguagem você encontrará todas as versões para download para diferentes
plataformas: <https://www.python.org/downloads/> (Downloads, 2023).
Acerca da licença que rege a linguagem Python, conforme o site oficial, a
linguagem Python é open source. O Python contém uma licença própria, mas
compatível com a GPL 8.
Por fim, como curiosidade, a linguagem Python contém inclusive uma
espécie de filosofia da linguagem, chamada de Zen do Python. Esse mantra foi
criado por um de seus programadores, Tim Peters (2004), e é composta de 20
frases que, segundo Tim, todo programador deveria saber e seguir para tornar-
se um programador melhor. O Zen é encontrado também no site oficial da
8
A licença do Python 3 pode ser obtida em: <https://docs.python.org/3/license.html> (History,
[20--]).
27
linguagem, em: <https://www.python.org/dev/peps/pep-0020/> (PETERS,
2004a). A seguir, disponibilizamos, em tradução livre feita pela Python Brasil
(disponível em: <https://wiki.python.org.br/TheZenOfPython>), o que Tim Peters
(2004b, grifo do original) escreveu:
28
1974 e que até hoje arranca bastante risada do público, ao redor do mundo
(Figura 10).
Figura 10 – DVD do filme Monty Python and the Holy Grail, no Brasil traduzido
como Monty Python em busca do cálice sagrado
Crédito: Cash1994/Shutterstock.
29
Por fim, é importante ressaltar que, com o crescimento da linguagem
Python ao redor do mundo, foi criada, em 2001, a Python Software Foundation.
Essa fundação sem fins lucrativos é responsável por manter a linguagem Python
e torná-la tão importante no mercado, nos dias atuais, pois está sempre em
contato com os programadores, ouvindo-os e gerando melhorias para as novas
versões da linguagem. Empresas como Microsoft e Google são apenas alguns
dos exemplos de grandes nomes que fazem parte dessa fundação, mostrando o
impacto que a linguagem Python tem no mundo da tecnologia.
Crédito: Goodcat/Shutterstock.
30
Mas talvez as áreas em que o Python se mostre mais popular sejam as
de análise de dados, inteligência artificial e machine learning. O Python tem uma
enormidade de bibliotecas e recursos para se trabalhar com isso, como:
FINALIZANDO
9
Um pouco mais sobre a história da ILM com o Python pode ser consultada em:
<https://www.python.org/about/success/ilm/> (Python, [S.d.]).
31
A definição de linguagem de programação e como um computador, que
trabalha em linguagem de máquina, consegue compreender o que escrevemos
em programas foram apresentados nesta abordagem. Por fim, conhecemos
diferentes linguagens de programação do mercado e nos atentamos mais
detalhadamente à linguagem Python, a qual será adotada e utilizada ao longo
deste estudo.
É importante que você tenha em mente que todos os conceitos teóricos
desta abordagem devem ser bem consolidados para que você possa começar a
praticá-los a partir do próximo conteúdo. Ressaltando uma das frases de Tim
Peters (2004b) no Zen do Python: “Agora é melhor que nunca”. Comece a
estudar hoje e não deixe isso para depois. Programação é prática, e prática leva
ao aprendizado!
32
REFERÊNCIAS
DEITEL, P.; DEITEL, H. Java: como programar. 10. ed. São Paulo: Pearson,
2017.
PETERS, T. PEP 20: The Zen of Python. Python Peps, 19 ago. 2004a.
Disponível em: <https://peps.python.org/pep-0020/>. Acesso em: 28 nov. 2023.
TOCCI, R. J. et al. Sistemas digitais: princípios e aplicações. 10. ed. São Paulo:
Pearson, 2007.
33