Buscar

Desenvolvimento de sistemas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 293 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 293 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 293 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

DESENVOLVIMENTO DE SISTEMAS
Allen Oberleitner
Luís Carlos S. Silva
Editora Senac São Paulo – São Paulo – 2020
 
 
Sumário
Capítulo 1 
Apresentação inicial sobre desenvolvimento de
sistemas
1 Evolução do desenvolvimento de sistemas
2 Utilização dos conceitos na prática
Considerações finais
Referências
Capítulo 2 
Introdução a algoritmos
1 Introdução a algoritmos
2 Conceitos de algoritmos
3 Descrição narrativa de um algoritmo
4 Representação de algoritmos por fluxograma
Considerações finais
Referências
Capítulo 3 
Algoritmos variáveis
1 Programação imperativa
2 Utilização de pseudocódigo
3 Declaração de variáveis e constantes
4 Expressões aritméticas, literais, relacionais e de lógica booleana
Considerações finais
Referências
Capítulo 4 
Algoritmos: condicional
1 A arte de tomar decisões
2 Estrutura de controle condicional simples
3 Estrutura de controle condicional composta
Considerações finais
Referências
Capítulo 5 
Algoritmos: repetição
1 Repetir para aprender
2 Enquanto-faça (while)
Considerações finais
Referências
Capítulo 6 
Algoritmos: vetores
1 Teoria dos conjuntos
2 Conceito de vetores
3 Manipulando vetores
Considerações finais
Referências
Capítulo 7 
Algoritmos: matrizes
1 Matriz é tabela?
2 Conceito de matriz
3 Manipulando matriz
Considerações finais
Referências
Capítulo 8 
Programação estruturada
1 Linguagem de programação
2 Linearidade
3 Programação estruturada
Considerações finais
Referências
Capítulo 9 
Programação: funções e procedimentos
1 Conceitos de função
2 Procedimento
3 Aplicando funções
Considerações finais
Referências
Capítulo 10 
Programação: arquivo
1 Processo arquivado!
2 Conceitos de arquivo
3 Manipulando arquivo
Considerações finais
Referências
Capítulo 11 
Programação orientada a objetos
1 Conceito de POO
2 Classes e objetos
3 Aplicação de POO
Considerações finais
Referências
Capítulo 12 
Programação orientada a objetos: classes
1 Composição da classe
2 Instâncias
Considerações finais
Referências
Capítulo 13 
Programação orientada a objetos: Python
1 Linguagem orientada a objetos
2 Conceitos de Python
3 Aplicação de POO: Python
Considerações finais
Referências
Capítulo 14 
Banco de dados
1 Armazenamento de dados
2 Modelos de banco de dados
3 Conceito de banco de dados
4 Instâncias ou ocorrências de uma entidade
Considerações finais
Referências
Capítulo 15 
Linguagem SQL
1 Utilização de SQL nas aplicações
Considerações finais
Referências
Capítulo 16 
Atualização de tabelas em aplicações
1 Conceitos de CRUD (Create, Read, Update, Delete) para SQL
Considerações finais
Referências
Sobre os autores
Capítulo 1
Apresentação inicial sobre
desenvolvimento
de sistemas
Estamos na era dos nativos digitais, pessoas que já nasceram
em um mundo automatizado, virtualizado e conectado à internet.
Mas como essa tecnologia chegou ao que conhecemos hoje?
Na segunda metade do século XX, após o fim da guerra mundial,
os primeiros softwares começaram a surgir. Até aquela época, os
computadores eram programados por meio de chaves manuais e sua
utilização era muito trabalhosa e restrita, se comparado aos dias
atuais.
Essa primeira era de softwares foi marcada pelo uso básico, pois
naquela época não havia muito interesse no desenvolvimento. Como
os computadores eram muito limitados, era possível executar apenas
um programa de cada vez.
Com a visão de novas possibilidades e as necessidades do
mercado, os computadores começaram a ficar maiores, deixaram de
utilizar válvulas – que eram lentas e de alta manutenção, pois
queimavam muito –, migrando para a utilização de componentes
microeletrônicos, que, mesmo nas primeiras versões, já
apresentavam um poder computacional muito maior.
Conforme as décadas foram passando, assim como a tecnologia
dos computadores cresceu exponencialmente, os softwares
buscaram acompanhar essa evolução, otimizando os recursos e
trazendo novas funcionalidades para este poder computacional.
1 Evolução do desenvolvimento de
sistemas
No mundo digital em que vivemos, a utilização de programas e
sistemas está presente em praticamente tudo que nos cerca, mas
para chegarmos onde estamos hoje a programação de softwares
passou por um longo caminho.
A evolução da programação está diretamente ligada à história
dos computadores, e, para entendermos melhor esse conceito,
falaremos um pouco sobre isso.
“A necessidade de desenvolver ferramentas que facilitassem o
uso e o manuseio de operações de cálculos fez com que o ser
humano chegasse ao estágio atual de desenvolvimento da área da
computação” (MANZANO, 1996, p. 17).
A palavra computador significa o que computa ou aquele que
calcula. Na verdade, os computadores não só calculam, mas também
executam outras tarefas associadas, como receber, transmitir e
armazenar dados.
Todo o computador é composto essencialmente por duas
partes, conforme a figura 1:
Figura 1 – Hardware versus software
Fonte: adaptado de Capron; Johnson (2004).
1.1 Como tudo começou
O Eniac foi o primeiro computador digital de larga escala,
construído para quebrar códigos de comunicação do exército inimigo
e realizar vários tipos de cálculos, principalmente de artilharia, afim de
ajudar as tropas aliadas durante a Segunda Guerra Mundial; contudo,
foi mais utilizado nos últimos anos da Guerra Fria.
Segundo Platzman (1979), ele foi construído na escola Moore
por ordem do exército dos EUA. A equipe contava com o engenheiro-
chefe J. Presper Eckert, atuando inicialmente nos conceitos básicos
desenvolvidos por John W. Mauchly, que atuou como principal
engenheiro construtor e como consultor do departamento da
artilharia americana Herman H. Goldstine. O matemático húngaro
John Von Neumann também participou do projeto, desenvolvendo
uma lógica de números pseudoaleatórios, que trouxe um grande
ganho de desempenho. Este computador foi construído na década de
1940, sendo composto por quase 18 mil válvulas, utilização que
marca a primeira geração de computadores e originava repetidos
problemas de manutenção, pois estas queimavam com frequência.
De acordo com Matsuura (2016), mulheres como Ada Lovelace e
Grace Hopper foram fundamentais para o avanço dos softwares. As
seis programadoras do projeto Eniac criaram o sistema do primeiro
computador eletrônico digital, mas nenhuma recebeu o devido
crédito.
Embora o sistema operacional do Eniac fosse feito por cartões
perfurados, a programação não era através de linguagem, e sim por
chaves manuais. Larry Gonick (1983) explica que as válvulas, entre
outras funções, mostravam o resultado dos cálculos, da mesma
maneira que hoje usamos os monitores.
Mesmo que a sua arquitetura seja enorme, a quantidade de
processamento não se comparava à dos computadores atuais.
1.2 O início de uma revolução
No fim da Segunda Guerra Mundial, na década de 1940, a
maioria das pesquisas em todo o mundo, principalmente nos EUA e
na Inglaterra, sobre programas era financiada pelos governos e
desenvolvida como projetos de ciência por universidades, e outras,
mais específicas, pelo exército. Os computadores eram muito
grandes e caros, por isso só eram usados por especialistas. Era um
mundo ainda muito restrito, e as comunidades de especialistas
trabalhavam juntas para chegar a programas que fizessem os
computadores executarem tarefas específicas. Nesta fase, não
existiam grandes investimentos, pois ainda não interessava às
empresas e ao público.
O sistema operacional utilizado era o Unix, desenvolvido pela
AT&T nos laboratórios Bell, em 1969; já os hardwares não eram
específicos, montados conforme a necessidade, utilizando uma
mistura de componentes definidos e configurados por eles. Esses
computadores ficavam muito grandes e eram utilizados em salas
bem espaçosas.
Na metade do século XX, o mundo iniciou uma grande evolução
da tecnologia, unindo os conhecimentos científicos e a produção
industrial. As indústrias concentraram seus trabalhos na pesquisa e
conhecimento, dando início à chamada 3ª Revolução Industrial.
Como início do interesse das empresas pelos computadores,
eles começaram a receber configurações padronizadas e uma
considerável redução de tamanho.
1.3 O nascimento da Apple
Pouco depois, em meados dos anos 1970, dois jovens muito
talentosos decidiram criar algo para o público. Steve Wozniak –
detentor de grandes conhecimentos em programação – e Steve Jobs
– um gênio em vendas – uniram suas habilidades e criaram a
primeira empresa a vender computadores de boa performance para
usuários sem grande conhecimento. Assim nascia a Apple.
A intenção era desenvolver um computador confiável,
relativamente pequeno e que pudesse ser usado em qualquer
residência; para isso, utilizaram o sistema Unix, o mesmo sistema
empregado pelos especialistas, mas com comandos mais simples e
um ambiente mais amigável. Queriam que fosse tão popular quanto
um eletrodoméstico.
 PARA SABER MAIS
Até hoje, o fator de maior sucesso da Apple é o cuidado com os
clientes: mais potência nas configurações, utilizando os
componentes mais seguros do mercado e menos botões por fora,
ou seja, o mais simples e intuitivo possível para os usuários.
Quinafelex (2014) destaca o lançamento do Apple I no
Homebrew Computer Club – clube criado por entusiastas de
tecnologia, que se reuniam no Vale do Silício. Esse modelo era
formado por um kit com placa principal, que poderia ser comprada
em pequenas lojas. Esse kit tinha de se “adaptar”, pois não possuía
seu próprio gabinete. O aparelho tinha um processador de 1 MHz e
uma memória RAM de 8 KB. Inicialmente, o preço era por volta de
US$ 667.
1.4 Microsoft, uma nova visão entra no mercado
Segundo Bill Gates (1995), com o interesse do público crescendo
pela aquisição de computadores pessoais, empresas como a IBM
tinham o controle da produção de hardwares e decidiram fabricar
seus próprios computadores.
O grande problema era que a Apple não concordou em fornecer
seu sistema operacional, uma vez que sua intenção também era
vender um produto completo, com hardware e software juntos.
Neste cenário, surgiram Bill Gates, Paul Allen e Steve Ballmer.
Eles aceitaram o desafio de, em um curto espaço de tempo, fornecer
um sistema operacional. Sabendo que tinham um grande desafio e
pouco tempo para entregar, em 1980 compraram o “QDOS” – um
sistema operacional com várias falhas e bugs. Corrigindo os erros e
realizando diversas melhorias, o transformaram no DOS – Sistema
Operacional de Disco (da sigla em inglês, disk operating system).
Assim, conseguiram cumprir o prazo e entregar o sistema para o
grupo de empresas.
Figura 2 – Tela da DOS – sistema operacional da Microsoft
Atelsek (1983) compara o sistema operacional do PC a uma
caixa de ferramentas que temos em casa. Primeiro, colecionamos as
mais básicas ou essenciais, que realizam as tarefas mais simples,
como uma chave de fenda, um alicate, um martelo, etc. Conforme
vão surgindo outras necessidades, vamos adquirindo ferramentas
mais específicas, como furadeira, serra elétrica e outras.
A Microsoft, diferente da Apple, utilizou a tática de fornecer o seu
sistema para o máximo de fabricantes de hardware possível. Esta
tática acabou trazendo vários problemas, como incompatibilidade
com o hardware de alguns fabricantes e até problemas de segurança
com vírus.
Tanenbaum (2009) diz que as primeiras versões do Windows
apresentavam uma tela colorida com recursos gráficos, mas ainda
utilizam muitos arquivos de configuração do DOS.
1.5 Uma grande mudança no mercado
A possibilidade da utilização dos computadores nas casas e
escritórios impulsionou grandes mudanças na economia e no
mercado de trabalho.
Segundo Rifkin (2014), com a aplicação da tecnologia nas
indústrias, inicialmente, os valores dos produtos não eram baixos,
mesmo utilizando pouca matéria-prima, pois os gastos com estudos
e pesquisas eram altos.
Neste contexto, as atividades que mais se destacaram no
mercado eram as vinculadas à produção de softwares, computadores
e os circuitos microeletrônicos. Estes produtos estavam em alta, pois
eram necessários para a produção de equipamentos na área da
robótica, telefonia, televisão e internet.
Figura 3 – Linha de montagem da indústria automobilística
utilizando robôs autômatos
Fica claro um ciclo de dependência entre eles, sendo que a
inovação de um item afeta diretamente a evolução dos demais.
Na década de 1990, com o surgimento dos computadores com
ambiente gráfico e a popularização da internet, as empresas
começaram uma corrida para acompanhar esse crescimento.
A rotina dos escritórios, naquela época, era muito diferente do
que vivemos nos dias de hoje. Como os computadores ainda não
eram utilizados para estas atividades, tudo era feito em folhas de
papel e armazenado em grandes fichários e arquivos. Como a
internet ainda não era usada, todos os documentos eram enviados e
recebidos por meio de cartas e malotes.
Era necessário transformar todos aqueles documentos, fichas e
planilhas em documentos digitais e registros organizados em banco
de dados.
No mercado de trabalho também tivemos grandes mudanças,
como por exemplo uma corrida para formar e preparar os
funcionários para essa nova tecnologia. Também cresceu muito o
trabalho temporário, contratando digitadores para realizarem essa
transação digital, uma vez que ainda não havia programas de
digitalização confiáveis como temos nos dias de hoje.
O mercado de softwares começou a criar programas para
atender às empresas – eram programas que realizavam tarefas
específicas, sem nenhuma integração. Era muito comum andarmos
por uma loja de materiais de escritório e nos depararmos com
prateleiras repletas de caixas parecidas com caixas de cereais,
contendo os mais diversos títulos de aplicação, como por exemplo
controle de estoque, cadastro de clientes, folha de pagamento,
controle de vendas, etc.
O grande problema desses programas era a falta de integração
entre eles; por exemplo, como o programa de vendas não estava
interligado com o controle de estoque, a atualização no estoque
referente às vendas feitas no dia tinha de ser feita manualmente, no
fim do expediente ou no início do dia seguinte. Outro aspecto
negativo era o fato de nem sempre esses programas terem o formato
necessário para aquele determinado serviço, uma vez que eram
genéricos e produzidos em massa.
Atualmente, os softwares são desenvolvidos exclusivamente,
conforme a necessidade de cada empresa. São sistemas integrados
que não atendem a todas as áreas da empresa, automatizando todas
as informações, mas também se conectam com as filiais, empresas
parceiras e fornecedores.
2 Utilização dos conceitos na prática
Nos dias atuais, temos vivenciado um crescimento exponencial
da tecnologia – os sistemas desenvolvidos hoje executam atividades
complexas, impensáveis há poucos anos.
Acabamos não percebendo, mas ela está a nossa volta, em
todos os lugares – chamamos isso de computação ubíqua.
Weiser (1999) firmou esse termo com a ideia que as tecnologias
mais profundas são aquelas que desaparecem, referindo-se à
conexão de dispositivos que nem se fazem notar, mas estão por toda
a parte.
Utensílios de uso diário, como smartphones, tablets, televisores,
computadores de bordo de carros, eletrodomésticos, sistemas de
segurança, etc., todos estão conectados à internet e incorporados a
nossos hábitos, facilitando o nosso dia a dia.
Essas são algumas das fontes do oceano de dados que é o Big
Data – tecnologia que hoje traz avanços a todas as áreas, cruzando
dados e formando soluções.
Hoje, podemos ver na prática os grandes avanços e poderíamos
citar centenas de inovações, mas vamos falar das mais impactantes.
2.1 A Internet das Coisas
Segundo a SAP (2018), a Internet das Coisas é uma rede
composta de objetos físicos, que podem ser veículos, máquinas,
eletrodomésticos, etc. Esses objetos utilizam sensores e APIs para se
conectar e trocarem dados pela internet.
Utilizando várias tecnologias, como aplicativos, dispositivos
eletrônicos e internet, ela integra, monitora e realiza uma série de
eventos.
Podemos encontrar essatecnologia em diversas áreas de
nossas vidas, no computador de bordo de um carro, em
equipamentos de segurança em nossa residência, em
eletrodomésticos, e muitos outros.
2.2 Inteligência artificial e cognitiva
A inteligência artificial é a área da tecnologia que se propõe a
elaborar sistemas baseados em algoritmos complexos, que simulem
a capacidade humana de analisar e resolver os problemas e tomar
decisões.
Já a inteligência cognitiva, segundo D’Egmont (2016), difere da
inteligência artificial, porque o sistema cognitivo é capaz de aprender.
O exemplo mais famoso desse sistema é o Watson da IBM, uma
plataforma de serviços cognitivos, ou seja, você pode ensiná-lo a
resolver problemas. Hoje, ele é utilizado para as mais diversas
aplicações, desde atendimentos telefônicos e chats, até auxílio na
leitura de exames médicos complexos.
Além de aprender com as informações que recebe, ele também
conta com uma aplicação que reconhece o que compõe a imagem.
Esse recurso pode ser utilizado em diversas atividades, tendo um
espaço especial na segurança.
Considerações finais
O desenvolvimento de sistemas está em ciclo de evoluções
contí nuas. Em relação a outras ciências que os homens estudam, a
tecnologia é a que mais cresce e contribui para o progresso das
demais. Ela é muito nova, tem décadas, mas já se tornou vital para
todos.
Os ciclos têm sido cada vez mais curtos, pois a disseminação de
conhecimento é maior a cada dia e vemos profissionais do mundo
inteiro trazendo mais e mais inovações. A necessidade de adaptação
a este novo mundo é cada vez maior.
Referências
ATELSEK, Jean. Tudo sobre computadores. São Paulo: Editora Quark,
1983.
CAPRON, H. L.; JOHNSON, J. A. Introdução à informática. 8. ed. São
Paulo: Editora Pearson Prentice Hall, 2004.
D’EGMONT, Tahiana. O que é Watson? Plataforma cognitiva?
Inteligência artificial? Um robô?, 16 dez. 2016. Disponível em:
<https://www.ibm.com/blogs/digital-transformation/br-pt/o-que-e-
watson-plataforma-cognitiva-inteligencia-artificial-robo/>. Acesso em:
27 ago. 2018.
GATES, Bill. A estrada do futuro. São Paulo: Companhia das Letras,
1995.
GONICK, Larry. Introdução ilustrada à computação. São Paulo:
Harper & Row do Brasil, 1983.
MANZANO, J. A. N. G.; Oliveira, J. F. Algoritmos: lógica para
desenvolvimento de programação. São Paulo: Editora Érica, 1996.
MATSUURA, S. Hoje minoria da indústria de tecnologia, mulheres
foram fundamentais na gênese da computação, 14 fev. 2015.
Disponível em: <https://oglobo.globo.com/sociedade/historia/hoje-
minoria-na-industria-de-tecnologia-mulheres-foram-fundamentais-na-
genese-da-computacao-15336779#ixzz5PJ1tCp6j>. Acesso em: 27
ago. 2018.
PLATZMAN, G. W. The ENIAC computations of 1950 — gateway to
numerical weather prediction. Bulletin of the American
Meteorological Society, v. 60, 
n. 4, p. 302-312, 1979.
https://www.ibm.com/blogs/digital-transformation/br-pt/o-que-e-watson-plataforma-cognitiva-inteligencia-artificial-robo/
https://oglobo.globo.com/sociedade/historia/hoje-minoria-na-industria-de-tecnologia-mulheres-foram-fundamentais-na-genese-da-computacao-15336779#ixzz5PJ1tCp6j
QUINAFELEX, R. Confira a evolução dos computadores de mesa da
Apple, desde a origem. 27 out. 2014. Disponível em:
<https://www.techtudo.com.br/noticias/noticia/2014/10/confira-
evolucao-dos-computadores-de-mesa-da-apple-desde-origem.html>.
Acesso em: 27 ago. 2018.
RIFKIN, J. A Terceira Revolução Industrial. São Paulo: Bertrand
Editora, 2014.
SAP. O que é Internet das Coisas (IoT)? [s. d.]. Disponível em:
<https://www.sap.com/brazil/trends/internet-of-things.html>. Acesso
em: 27 ago. 2018.
TANENBAUM, A. S. Sistemas operacionais modernos. 3. ed. São
Paulo: Editora Pearson Prentice Hall, 2009.
WEISER, Mark. The computer for the 21st century. obile Computing
and Communications Review, v. 3, n. 3, p. 3-11, 1999.
https://www.techtudo.com.br/noticias/noticia/2014/10/confira-evolucao-dos-computadores-de-mesa-da-apple-desde-origem.html
https://www.sap.com/brazil/trends/internet-of-things.html
Capítulo 2
Introdução a algoritmos
Quando perguntamos o que é algoritmos, muitas pessoas
associariam a algo difícil ou os relaciona a conceitos complexos de
cálculos ou algo assim. Mas será que a primeira impressão está
correta?
Algoritmos na verdade são conceitos simples que usamos em
nosso dia-a-dia. Hoje em dia temos os algoritmos digitais em várias
tarefas do nosso cotidiano.
Quando você acessa um site, faz uma busca, lê os seus e-mails,
se relaciona com seus amigos através de redes sociais e até mesmo
faz aquelas compras on-line, isso tudo só é possível por causa dos
algoritmos. Mesmo quando estamos jogando um jogo, pode ser
aquele joguinho mais simples que você tem no seu smartphone até
aquele mais pesado que só funciona no seu console favorito, os
algoritmos estão trabalhando para te dar diversão.
Seria quase impossível imaginarmos a possibilidade de realizar
tantas tarefas como as que hoje nos sãos impostas sem as
facilidades proporcionadas pelos algoritmos digitais. Utilizamos
algoritmos todo tempo, no computador de bordo dos carros, nos
programas de celular, até mesmo em outros aparelhos mais simples
como um micro-ondas ou um refrigerador, tudo isso é possível
através dos algoritmos.
1 Introdução a algoritmos
Os algoritmos são tão antigos quanto a matemática, os
especialistas divergem muito sobre a sua origem. Temos associado
esta palavra à computação, mas este é um termo que pode ser usado
para várias ciências, inclusive ela nem nasceu da computação. A
teoria mais defendida sobre sua origem é a de que um grande
matemático que viveu na Pérsia no século IX chamado Abu Abdullah
Mohammad Ibn Musa Al-Khawarizmi, nascido em Khawarizm
(Kheva), ao sul do mar Aral.
Sua influência no crescimento de diversas áreas da ciência,
particularmente na matemática e outras como astronomia e
geografia é bastante notória. Ele tinha dentre estas obras, a de nome
Algorithmi de numero indorum (em indiano), que falava sobre
algoritmos que trabalhavam com o sistema de numeração decimal.
Suas obras só foram descobertas e apresentadas ao ocidente no
século XI.
O nome foi sofrendo mudanças por causa da pronuncia de seu
nome Al-Karismi, chegando ao falado hoje “algarismo” e deste
mesmo radical o termo “algoritmo”, termo usado hoje na computação,
mas também é muito utilizado em outras áreas como administração,
engenharia, entre outras.
Segundo Forbellone e Eberspacher (2005), a principal ideia
associada a palavra algoritmos se refere a maneira sistemática de
descrever um conjunto de regras formais para a obtenção de uma
resposta da solução de um problema incluindo fórmulas de
expressão aritmética. Xavier (2014) descreve que algoritmos, de uma
maneira bem simples, é uma sequência de passos ou ações para
atingir um objetivo.
Sua associação à computação se deu a partir da metade do
século passado, época da evolução dos computadores, pois é por
meio deles que é possível criarmos as instruções contidas nas
rotinas que eles trabalham. O crescimento da sua utilização hoje tem
crescido exponencialmente, pois eles são a base do desenvolvimento
dos programas, dos mais simples aos mais complexos.
Com a ampliação do poder de processamento dos computares
que possibilita a execução de tarefas muito mais complexas e as
novas tecnologias de armazenamento de informações, são os fatores
que impulsionaram este crescimento.
O avanço da tecnologia dos hardwares (parte física ou
componentes que formam os computadores), fez possível a
utilização de lógicas cada vez mais complexas e elaboradas para a
resolução dos problemas das mais diversas áreas.
Um dos grandes exemplos que podemos citar é o Big Data. Ele é
um conceito que descreve um grande volume de dados que é gerado
a cada segundo.
Figura 1 – O Big Data sendo usado para tomada de decisões
Hoje as tecnologias que nos auxiliam em diversas atividades do
nosso cotidiano geram muitos dados, que antes eram dispensados,
mas que hoje são armazenados, tratados e geram informações de
grande valor, importantes para a descobertassobre as inúmeras
possibilidades de crescimento econômico e social.
Estas informações, processadas pelos algoritmos que compõem
os sistemas, conseguem dar respostas precisas que até pouco
tempo atrás não seriam possíveis.
Também não poderíamos deixar de falar sobre a utilização de
algoritmos na construção da inteligência artificial, uma área da
computação criada na década de 50 que desenvolve algoritmos
capazes de simularem o raciocínio humano.
Esta área cresceu tão rápido que, em 1997, o supercomputador
Deep Blue, da IBM, venceu pela primeira vez o campeão mundial de
xadrez da época, o russo Gary Kasparov.
Segundo o especialista em Inteligência Artificial, M. Tim Jones, o
programa do Deep Blue era feito por algoritmos que possibilitavam
que ele imaginasse uma média de 200.000.000 de posições por
segundo, por isso o atual campeão acabou perdendo a partida.
(JONES, 2018). Ele ressalta a vitória do supercomputador Watson,
também da IBM, que enfrentou dois dos jogadores humanos de
maior sucesso de todos os tempos e os derrotou na frente de
milhões de telespectadores em 2011.
2 Conceitos de algoritmos
Usamos a lógica para guiar nossos pensamentos ou ações para
chegarmos a uma solução. Devemos ter sempre em mente que a
lógica está correta se ela atingir o objetivo para que ela foi proposta.
Para conseguirmos inserir lógica em nossas atividades,
precisamos aprender a pensar de forma estruturada, ou seja,
desenvolver e aperfeiçoar a técnica de pensamento e seguir uma
sequência de raciocínio que crie passos objetivos e seguros até a
solução.
 IMPORTANTE
Segundo Manzano e Oliveira (2012), para usar o raciocínio lógico, é
necessário ter domínio do pensar, bem como saber pensar, ou seja,
possuir e usar a “arte de pensar”.
Quando organizamos nossos pensamentos de forma lógica
conseguimos associar as informações e transformá-las em base
para nossas soluções.
Analise a lógica a seguir:
Se: todo mamífero é um animal E: todos os gatos são
mamíferos Logo: todos os gatos são animais!
Ou
Se: todos os veículos são transportes E: todas as motos são
veículos Logo: todas as motos são transportes!
No exemplo apresentado usamos a lógica para averiguar uma
situação e chegar a uma conclusão, fazendo associações entre eles.
A primeira parte analisa que se todos os seres mamíferos são
animais e que se todos os gatos são mamíferos, então os gatos
também fazem partes do grupo de animais. A segunda faz uma
análise parecida, que se todos os veículos são chamados de
transportes e se todas as motos são consideradas veículos, então as
motos também fazem parte do grupo de transportes.
Utilizamos a lógica a todo o momento em nossas vidas, quando
pensamos, falamos ou escrevemos, utilizamos a lógica para ordenar
as palavras e dar sentido ao que estamos fazendo.
Ao longo do dia, usamos o nosso raciocínio lógico para
resolvermos questões, das mais simples as mais complexas.
A lógica nos ensina a corrigirmos nosso pensamento, nos
ensinando a usá-lo corretamente. Usando o raciocínio de forma
ordenada dividindo a ação em vários passos até a solução do
problema.
Analise a lógica a seguir:
Se: A porta está fechada E: a mochila está dentro da casa
Logo: Preciso primeiro abrir a porta, entrar em casa para
depois pegar a mochila!
Ou
Se: Se Jussara é mais nova que José E: José é mais novo
que Fábio Logo: Jussara é mais nova que Fábio!
Resolver problemas utilizando o computador não é muito
diferente do que falamos agora, devemos encontrar uma maneira de
escrever o problema de forma que seguindo uma sequência de
passos, atingimos a solução desejada. Isto é algoritmo!
De acordo com Manzano e Oliveira (2012, p.27), “Algoritmos na
Ciência da Computação (Informática), está associada a um conjunto
de regras e operações bem definidas e ordenadas, destinadas à
solução de um problema, ou de uma classe de problemas, em um
número finito de passos. ”
Para termos a necessidade de criar uma solução, precisamos
antes ter um problema. A necessidade de enviar mensagens e
documentos mais rápido fez com que criarem o e-mail, a
necessidade de podermos nos relacionar virtualmente fez com que
criassem o Facebook.
3 Descrição narrativa de um algoritmo
Podemos utilizar diversas formas para escrever um algoritmo.
Isso sempre vai depender muito da sua necessidade e de quem vai ler
o que você produziu.
Escrevemos um algoritmo utilizando a descrição narrativa
quando queremos descrever um problema de forma que o receptor
entenda do assunto mesmo não tendo conhecimento de algoritmos.
O grande problema da forma narrada é que ela, por ser escrita
em uma linguagem comum como o português por exemplo, acaba
criando pontos de imprecisão, ou seja, de dupla interpretação. Isso
faz com que a forma de narrativa traga uma falta de confiabilidade no
entendimento do algoritmo. Outro ponto negativo é o fato dela gerar
uma descrição muito grande para dizer poucas coisas, se
comparando a outras formas.
Quando escrevemos um algoritmo de forma narrativa, mesmo
ele sendo um texto em linguagem simples, devemos escrevê-lo de
forma ordena, lógica e em passos bem definidos.
Se por exemplo, eu fosse passar instruções para uma criança
comprar pães em uma padaria desta forma:
1. Sair da padaria.
2. Pegar a comanda.
3. Pegar a fila do caixa.
4. Pedir 10 pãezinhos.
5. Entregar o dinheiro e a comanda.
6. Pegar a fila dos pães.
7. Conferir o troco.
8. Entrar na padaria.
Tenho certeza que você percebeu que a criança ficaria
totalmente perdida na padaria, pois nada daria certo. Para que uma
criança que ainda não conhece os procedimentos necessários para
uma simples compra de pães ter êxito, precisamos ordenar os
passos na ordem correta. Vamos ver agora como deveríamos
escrever o bilhete para a criança:
1. Entrar na padaria.
2. Pegar a comanda.
3. Pegar a fila dos pães.
4. Pedir 10 pãezinhos.
5. Pegar a fila do caixa.
6. Entregar o dinheiro e a comanda.
7. Conferir o troco.
8. Sair da padaria.
Para utilizarmos a lógica devemos definir o que deve ser feito
para solucionar o problema e colocar na ordem correta para
conseguir chegar na solução. Vamos a outro exemplo bem conhecido
nosso, que poucas pessoas pensariam que seria um algoritmo. Uma
Receita de bolo!
1. Misture os ingredientes.
2. Unte a forma com manteiga.
3. Despeje a mistura na forma.
4. Se houver coco ralado despeje sobre a mistura.
5. Leve a forma ao forno.
6. Enquanto não dourar deixe a forma no forno.
7. Retire do forno.
8. Deixe esfriar.
Repare que neste exemplo, mesmo ele estando na sequência
certa, alguns passos ficaram um pouco imprecisos, como enquanto
não dourar, pois a pessoa que vai fazer o bolo pode não saber o ponto
exato que a massa do bolo deve ficar. Por isso quando usarmos a
linguagem narrativa devemos ter o nível de detalhes compatível com
a precisão que o resultado deve ter, ou seja, o bolo não deve ficar
queimado e nem com a massa crua.
4 Representação de algoritmos por
fluxograma
Podemos representar os algoritmos de forma gráfica, para isso
utilizamos os fluxogramas.
Os fluxogramas são formados de caixas com formato variado
que conectadas de forma ordenada e lógica informam as instruções
a serem executadas. São muito populares por serem de fácil
entendimento das ideias contidas no algoritmo.
A representação do fluxograma é ótima para descrever
algoritmos de pequeno e médio tamanho (XAVIER, 2014).
Considerado um nível intermediário de descrição, o fluxograma
fica entre a narrativa, que vimos a pouco, e a de pseudocódigo, que
veremos um pouco mais a frente. Ele expressa melhor a parte física,
ou seja, de detalhes como entrada e saída de informações, o fluxo
das informações e até mesmo a forma de armazenamento.
Seguindo os princípios de entrada, processamento e saída, ele é
composto de um símbolo para iniciar, uma sequência de comandos e
tomadas de decisão e finaliza, independentemente de quantas
bifurcações geradas por tomadas de decisão, aos símbolos finais,
que são iguais ao início só que desta vem escrito fim.
Figura 2 – Exemplo de um fluxograma,onde se
verifica se a impressora está pronta para
impressão
A seguir temos os símbolos mais utilizados nos fluxogramas:
Figura 3 – Simbologia de fluxograma
Terminal
Símbolo utilizado no início e fim de um fluxograma. Também pode
ser usado na definição de sub-rotinas.
Entrada manual
Simboliza a entrada manual de dados, geralmente feita através de
teclado.
Processamento
Representa a execução de uma operação lógica ou matemática.
Exibição
Representa a saída visual de dados, geralmente através do
monitor.
Decisão
Representa a execução de uma operação lógica ou matemática.
Preparação
Representa a modificação de uma instrução em relação à ação de
sua atividade subsequente.
Processo predefinido
Definição de um grupo de operações estabelecidas como uma
sub-rotina de processamento anexa ao diagrama.
Documento
Representa a saída no formato de um documento.
Conector
Representa a entrada ou saída em outra parte do fluxo. Pode ser
usado para quebras de linhas e continuações em outras páginas.
Linha
Representa a conexão entre os outros elementos do diagrama de
blocos. Quando possui a ponta de um seta significa que está
mostrando a direção do fluxo.
Vamos fazer agora a um exemplo prático, montando um
fluxograma de uma funcionalidade do sistema de uma escola.
Devemos criar um fluxograma simples, que calcule a média de duas
notas de um aluno e logo após confirmando se ele está aprovando.
Levando em conta que a nota de aprovação é 7.
Figura 4 – Exercício proposto para calcular a
média de um aluno e verificar a aprovação
Podemos pode perceber que os fluxogramas ajudam a organizar
nossos pensamentos e facilita para imaginarmos o código antes
mesmo de implementá-lo.
Temos várias vantagens como ele, como:
Mostrar o código de forma organizada.
Simular a execução de um código dentro de um programa.
Mostrar a estrutura do programa em formato gráfico.
Usá-lo para mostrar a navegação de um programa ou site.
Podemos encontrá-los com outros nomes como fluxogramas de
processo, mapas de processos, fluxogramas funcionais, entre outros.
Considerações finais
Para escrevermos instruções para os computadores, precisamos
utilizar a lógica de programação, que nada mais é que um conjunto
de ações organizadas para resolver o problema proposto à aplicação.
Chamamos estes conjuntos de passos de algoritmos e podemos
encontra-los em quase tudo que utilizamos para realizar nossas
tarefas do dia-a-dia.
Podemos escrever estes algoritmos de forma narrativa, que nada
mais é que uma lista organizada de ações, que se seguidas de forma
correta, leva a solução do problema. Também podemos representa-
los de forma gráfica através de fluxogramas, um conjunto de
símbolos conectados que mostram o fluxo de execução de um
algoritmo.
Referências
FORBELLONE, André L. V.; EBERSPACHER, Henri F. Lógica de
Programação: A Construção de algoritmos e estrutura de Dados. 3.
ed. Editora Pearson Prentice Hall, Brasil, 2005.
JONE, M. T. As linguagens da IA. 19 jan. 2018. Disponível em:
<https://www.ibm.com/developerworks/br/library/cc-languages-
artificial-intelligence/index.html>. Acesso: 9 ago.2018.
MANZANO, José Augusto N. G.; OLIVEIRA, Jayr F. Algoritmos: Lógica
para Desenvolvimento de Programação. São Paulo: Editora Érica,
2012.
XAVIER, Gley F. C. Lógica de Programação. São Paulo: Editora Senac
São Paulo, 2014.
https://www.ibm.com/developerworks/br/library/cc-languages-artificial-intelligence/index.html
Capítulo 3
Algoritmos variáveis
O computador é uma máquina capaz de realizar comandos e
cálculos matemáticos, mas, diferente do que muitas pessoas
pensam, ele precisa receber instruções para conseguir realizar todas
essas tarefas. Para isso, criamos programas utilizando algoritmos
para passar essas instruções a ele.
Quando vamos criar um algoritmo, devemos utilizar uma
linguagem que seja imperativa, impondo os passos que ele deverá
executar, de forma que as instruções fiquem explícitas, diretas, sem
deixar dúvidas.
As formas de descrição que utilizamos até agora não são tão
precisas, elas podem deixar dúvidas na hora de um desenvolvedor
implementar a solução.
Assim, como na vida real, se não passarmos todos os detalhes
quando entregamos uma tarefa a alguém, temos uma grande
possibilidade de não recebermos o resultado esperado.
Só teremos a garantia de sucesso se escrevemos algoritmos,
utilizando valores que precisamos para resolver esses problemas,
manipulando-os de forma organizada e com recursos que nos
possibilitam utilizar a lógica computacional para gerar a solução para
todos esses casos.
1 Programação imperativa
Quando vamos criar um programa de computador, devemos
analisar qual paradigma, ou seja, qual o conjunto de características
que, juntas, definirão como ele deve operar para resolver o problema.
A programação imperativa é baseada nos estados de valores que
ele recebe – “variáveis” – e em instruções e comandos que dão a
ideia de ordens, dizer exatamente o que deve ser feito. Por isso, ela é
dinâmica, sendo constantemente mudada durante a sua execução.
 PARA SABER MAIS
Imperativo na língua portuguesa significa que acentua o caráter de
mando, de autoridade, ou exprime uma ordem.
O programador passa as instruções de como e o que o
computador deve fazer quando ler o programa. A utilização de
repetições, condições e atribuição de valores que hoje são usados
constantemente em todas as linguagens surgiram neste paradigma.
Um programa criado em uma linguagem imperativa deixa de ser uma
expressão, e passa a ser um comando.
Estas são algumas linguagens de programação que se baseiam
no modelo imperativo: Basic; C; PHP; Java; Cobol; Pascal; Python e
outros.
Na figura 1, a seguir, temos o modelo computacional do
paradigma imperativo.
Figura 1 – Modelo computacional do
paradigma imperativo
Fonte: adaptado de Sommerville (2011, p. 208).
Vamos apresentar como seria uma programação imperativa,
aplicada a uma tarefa do nosso cotidiano, como por exemplo fazer
um bolo:
Separar os ingredientes: leite, ovo, açúcar, margarina, farinha
e fermento.
Aqueça o forno a 180 graus.
Bata as claras em neve e reserve.
Misturar em uma vasilha grande o açúcar, a margarina e as
gemas.
Adicionar a farinha e o leite.
Mexa até que esteja bem misturado.
Juntar a clara em neve misturando vagarosamente.
Colocar a mistura em uma forma untada.
Coloque no forno aquecido por 40 minutos.
Se colocar o garfo no bolo e ele sair limpo, desligue o forno,
senão, o mantenha por mais cinco minutos.
Desligar o forno.
Repare no exemplo anterior que seu funcionamento utilizou
exatamente os conceitos que falamos até agora. Veja:
Informamos valores, que são os ingredientes.
Damos comandos para o programa executar ações com estes
valores, alterando assim o seu estado.
Recebemos a solução esperada do programa, um bolo
preparado corretamente.
Conforme falamos anteriormente, se analisarmos o algoritmo
que criamos acima e imaginarmos um robô executando os passos,
vamos perceber que devemos melhorar ainda mais este código, uma
vez que o robô não teria conhecimentos de coisas que para nós são
óbvias, como por exemplo:
Verificar se o gás estava aberto antes de ligar o forno.
Quebrar os ovos delicadamente e separar a clara da gema antes
de fazer as claras em neve.
Para untar a forma, deveriam ser utilizadas margarina e farinha.
Chamamos isso de refinamento de código, e devemos fazê-lo até
que tenhamos certeza que nosso código está performático.
Um outro exemplo utilizado por Xavier (2014, p. 26) demonstra a
riqueza de detalhes de um código bem refinado. Nele, temos as
instruções para começarmos a dirigir um carro:
Abrir a porta.
Sentar no banco.
Fechar a porta.
Ajustar o banco e os espelhos retrovisores.
Colocar o cinto de segurança.
Pisar na embreagem.
Pegar o câmbio.
Colocar o câmbio em ponto morto.
Soltar a embreagem.
Ligar o carro.
Pisar na embreagem.
Pegar o câmbio.
Colocar o câmbio na primeira marcha.
Acelerar o carro.
Soltar o freio de mão.
Soltar a embreagem devagar.
Neste exemplo, temos passos precisospara executar a ação –
repare que temos ações que servem de prevenção, preparação para
que o próximo passo tenha sucesso, como garantir que o câmbio
esteja em ponto morto, antes de ligar o carro; assim, mesmo que o
carro já estivesse em ponto morto, garantimos o bom funcionamento
da solução.
2 Utilização de pseudocódigo
O pseudocódigo, que poderíamos traduzir ao pé da letra como
“falso código”, é a linguagem que mais se assemelha às linguagens
que usamos para desenvolver os programas nos computadores. Ela é
a descrição de um algoritmo sem a necessidade de utilizar as
particularidades de uma linguagem de programação.
Segundo Medina e Fertig (2006), o pseudocódigo é uma
linguagem intermediária entre a narrativa e as linguagens de
programação de
alto nível.
 IMPORTANTE
Linguagem de programação de alto nível é aquela que se aproxima
mais da linguagem humana e se distancia da linguagem de
máquina. Ela não controla a parte física do computador, somente
trata da camada de ligação com o usuário, como aplicativos, e não
controla o hardware, como o processador, por exemplo.
É comum vermos outros nomes sendo atribuídos ao
pseudocódigo, como portugol ou português estruturado –
geralmente, utilizados para enfatizar que o pseudocódigo está sendo
escrito em português.
Quando trabalhamos nossos algoritmos utilizando o
pseudocódigo, buscamos ao máximo criar uma rigidez semântica e
sintática para que o código seja lido e interpretado corretamente pela
máquina. Vamos começar com um exemplo simples, sem todos os
passos de criação de um pseudocódigo, mas importante para
aprendermos a estrutura:
Início
Escreva: “Qual a nota do aluno?”
Leia: nota
Se a nota for maior ou igual a 7, então: Escreva: “aluno
aprovado”
Senão:
Escreva: “aluno reprovado”
Fim
Neste programa que acabamos de criar, ele envia uma pergunta
na tela ao usuário, espera ele digitar, verifica e, se o aluno tirou uma
nota igual ou maior que 7, ele responde “aluno aprovado”; senão, ou
seja, se a nota for menor que 7, ele responderá “aluno reprovado”.
Se estivéssemos escrevendo a mesma instrução de forma
narrativa, não teríamos essa riqueza de detalhes em cada ação, que
na hora da programação faria toda a diferença.
 IMPORTANTE
“Ação: Fato que, a partir de um estado inicial, após um período de
tempo finito, produz um estado final previsível e definido” (XAVIER,
2014, p. 32).
Você percebeu que temos alguns detalhes que ainda não
sabemos por que estão lá, como as aspas nas frases e termos mais
curtos e objetivos, como leia ou escreva? Falaremos mais no
momento oportuno.
Quando for construir um pseudocódigo, nunca comece a
escrever desordenadamente o que você tem em mente, procure
seguir estes passos:
1. “Compreensão e Estratégia” – Ao se deparar com um problema
novo, faça o seguinte: a. Separe os dados e o que você precisa
fazer com eles; b. Faça um rascunho para visualizar cada passo.
2. “Crie um plano para a solução” – Agora que tem as informações
sobre o problema organizadas: a. Verifique se já resolveu um
problema parecido; se sim, o que posso aproveitar neste; b. Se o
problema for muito complexo, separe-o em partes, assim fica
mais fácil resolver; c. Não se prenda a um só formato, se tiver
difícil de prosseguir, busque alternativas para resolver o
problema.
3. “Formalize a solução” – Hora de começar a montar o algoritmo:
a. Use o pseudocódigo para montar a solução baseada no plano
que você desenvolveu; b. Cuide para que cada passo seja escrito
de forma correta, não tenha pressa de escrever; muitas vezes,
um programa inteiro não funciona por um simples detalhe.
4. “Realize teste” – Agora com o algoritmo montado, vamos
executá-lo: a. Ao testar, veja se não apresenta nenhuma falha no
passo a passo; b. Verifique se ele solucionou o problema da
forma esperada, utilize valores diferentes para comprovar que
realmente está funcionando.
5. “Refine o código” – Será que ele pode ser melhorado?
a. Veja se não há nenhuma mudança que traga melhorias ao
resultado do programa; b. Verifique se existe algum código
redundante, ou seja, repetido ou que não seja necessário.
Vamos conhecer agora algumas partes que compõem a
estrutura do nosso pseudocódigo:
“Atribuição” – Quando o programa recebe informações,
precisamos atribuí-las a um espaço reservado da memória
chamado variável. Para indicar que o valor está sendo atribuído,
usamos o símbolo . Exemplo: valor 35 ou nome “João”.
“Bloco de Instrução” – Assim, no pseudocódigo, como em outras
linguagens de programação, as instruções são executadas na
sequência em que foram escritas. Por isso, usamos um bloco de
instruções para indicar onde ele se inicia, se desenvolve e
termina. Um bloco de instruções é delimitado pelas palavras
“início” e “fim”. Exemplo:
Início
“primeira instrução”
“segunda instrução”
........
“última instrução”
Fim
“Leia” e “Escreva” – Estas duas instruções são utilizadas para a
entrada e saída de informações para o usuário, são a interface
entre a máquina e quem está utilizando o programa. Todas as
vezes que quisermos mostrar uma mensagem ou resultado na
tela do computador, utilizamos a palavra escreva, seguida do
valor ou mensagem; e quando quisermos receber um valor
digitado pelo usuário, utilizamos a palavra leia, seguida do
endereço onde armazenaremos esta informação. Exemplo:
Início
escreva: (“Qual o seu nome?”) leia: (nome_convidado)
escreva: (“Seja bem-vindo ”,nome_convidado ) Fim
Este código escreve na tela uma pergunta para o usuário, o seu
nome recebe a resposta e armazena no espaço de memória
“nome_convidado” e depois escreve na tela uma mensagem de boas-
vindas personalizada com o nome que ele digitou.
3 Declaração de variáveis e constantes
A maior funcionalidade de um computador é manipular
informações. Para resolver um problema, ele precisa de dados para
processá-los.
É necessário que haja formas de se trabalhar com diferentes tipos
de dados em um programa. Apesar de internamente um
computador manipular unicamente números, as linguagens de
programação permitem que utilizemos outros tipos de
informações nos programas de forma transparente. (MEDINA;
FERTIG, 2006, p. 24)
Antes de continuarmos, precisamos entender alguns conceitos:
“Dados” – Utilizados para se referir ao que realmente está
armazenado, são dados isolados que não fazem sentidos
sozinhos. Exemplo: Nome (primeiro nome e sobrenome),
Endereço (logradouro, número e complemento).
“Informações” – Utilizadas para se referir ao significado dos
dados para um determinado usuário. No exemplo abaixo,
sabemos agora que o endereço é referente àquela pessoa.
Exemplo: Nome e Endereço.
Observe que a função dos nossos programas, basicamente, será
transformar informações iniciais, que usualmente chamamos de
dados, em informações finais, as respostas que serão usadas por
quem utiliza o programa. Temos dois tipos de Dados:
“Dados de Entrada” – Conjunto de informações que o programa
precisa receber para iniciar o processo.
“Dados de Saída” – Conjunto de informações que o programa
devolve como resposta após o processamento.
Agora, vamos fazer uma atividade para fixarmos esses
conceitos. Para cada algoritmo abaixo, pense qual seriam os dados
de entrada e saída:
Algoritmo para calcular a idade de uma pessoa.
Algoritmo para calcular o IMC (índice de massa corporal) de uma
pessoa.
Valor pago referente à dívida de meses de aluguel atrasado.
Para essas perguntas, as respostas seriam:
“Entrada”: data de nascimento e data atual. “Saída”: a idade
naquele instante.
“Entrada”: peso e altura da pessoa; “Saída”: a condição física da
pessoa relativa ao peso.
“Entrada”: valor do aluguel, quantidade de meses, taxa de juros;
“Saída”: valor a ser pago até aquela data.
3.1 Tipos de dados
Os tipos de dados são formas de representar valores do nosso
mundo real computacionalmente. As linguagens de programação
representam e manipulam esses dados, que podem ser classificados
como primitivos e não primitivos.
De acordo com Pinheiro (2012), um tipo de dado caracteriza um
conjunto de valores, determinandoa natureza, o tamanho, a
representação e a faixa de representação. No momento, nosso
enfoque será em sua natureza.
3.1.1 Tipos primitivos
Os tipos de dados primitivos são tipos básicos de dados que
compõem um programa – eles representam números inteiros,
frações, frases, etc. No programa de computador, devemos dizer
exatamente os tipos de dados que serão usados na entrada e saída
das informações.
Exemplo: A linguagem Java é uma linguagem fortemente tipada,
ou seja, se você não utilizar o tipo correto, a operação é interrompida
e uma mensagem de erro será apresentada.
Os tipos de dados primitivos são:
“Inteiro” – toda e qualquer informação numérica que pertence ao
conjunto de números inteiros relativos (negativo, nula ou
positivo).
“Real” – também chamada de flutuante, toda e qualquer
informação numérica que pertence ao conjunto dos números
reais (negativo, nula ou positivo).
“Literais” – também chamada de caractere, toda e qualquer
informação composta de um conjunto de caracteres
alfanuméricos 
(0 a 9), alfabéticos (A...Z, a...z) e especiais ( . , $ @ # ! ? ...).
“Lógico” – também conhecido como booleano, toda e qualquer
informação que pode assumir apenas duas situações
(verdadeiro ou falso, sim ou não).
 IMPORTANTE
Os números armazenados em variáveis, cujo tipo de dados é Literal,
não poderão ser utilizados para cálculos.
3.2 Variáveis
Variável é um tipo de dado armazenado no computador.
Chamamos ele assim porque o seu valor contido pode variar diversas
vezes ao longo do processamento. Ao declararmos uma variável,
estamos na verdade reservando um espaço na memória para aquela
determinada informação, enquanto ela é processada.
Todo dado a ser armazenado na memória de um computador deve
ser previamente identificado segundo o seu tipo; ou seja,
primeiramente, é necessário saber o tipo de dado, para depois
fazer o seu armazenamento adequado. (MANZANO; OLIVEIRA,
1996 p. 43)
Figura 2 – Imagem de uma caixa de correios representando as
locações de memória das variáveis
Imagine as variáveis criadas como se fossem esta caixa de
correio de um prédio – o carteiro só sabe onde deve colocar a
correspondência, porque todas estão com os números dos
apartamentos a que são correspondentes.
Para escrevermos corretamente o seu nome, devemos seguir
algumas regras:
Temos restrição ao primeiro caractere do nome, ele deve ser
sempre uma letra do alfabeto, não pode ser um número ou
símbolos gráficos, como cifrão, tralha, etc.
Não pode haver espaço dentro do nome; se for um nome
composto, como “pessoa jurídica”, devemos utilizar o underline
para separação. Ex.: pessoa_juridica.
Duas variáveis não podem ter o mesmo nome, logo de início o
sistema acusará um erro, mas, mesmo se fosse possível
começar, elas entrariam em conflito, sobrescrevendo as
informações.
Existem algumas palavras reservadas da linguagem que também
não podem ser utilizadas. Conheceremos estas palavras mais
adiante.
Devemos declará-las em nosso programa da seguinte forma: 
var idade: inteiro
3.3 Constantes
Chamamos de constantes todos os valores que não devem ser
modificados durante o processamento. Usamos as constantes para
valores que devem manter o seu valor independentemente dos
processos que as utilizarem.
Podemos usar como exemplo a letra grega “π” (PI), que
precisamos utilizar para cálculos referentes a círculos. Apesar de qual
cálculo estejamos fazendo, o seu valor será sempre o mesmo:
3,14159265. Devemos declará-las em nosso programa da seguinte
forma:
const PI = 3.14159265
Também podemos chamá-las de variáveis somente de leitura.
4 Expressões aritméticas, literais,
relacionais e de lógica booleana
Agora que já conhecemos as formas de declararmos os valores
para serem processados em nossos programas, precisamos
aprender as expressões para manipular estes valores. Para cada tipo
de dado, temos expressões exclusivas:
4.1 Expressões aritméticas
Expressões aritméticas são aquelas que o resultado é do tipo
numérico, podendo ser inteiro ou real. Os operadores que são
permitidos nestas operações são:
Tabela 1 – Símbolos de expressões aritméticas
OPERADOR SIGNIFICADO EXEMPLO
+ Adição 1 + 1
– Subtração 8 – 4
* Multiplicação 5 * 7
/ Divisão 520 / 45
% Módulo (resto da divisão) 65 % 6
** Exponenciação 5 ** 2
4.2 Expressões literais
Expressões literais são aquelas que o resultado é do tipo literal, e
mudam muito de uma linguagem para outra. O operador mais
simples é aquele que faz a concatenação entre dois trechos de texto,
que podemos chamar de string (corda, em português, se referindo a
uma corda de caracteres). O operador de concatenação no
pseudocódigo é o sinal “+”:
Tabela 2 – Símbolo de expressões literais
OPERADOR SIGNIFICADO EXEMPLO
+ Concatenação “Avenida” + “Paulista”
4.3 Expressões relacionais
Permitem efetuar comparações entre duas variáveis. O resultado
da comparação é sempre um valor lógico (booleano), ou seja,
verdadeiro ou falso. Os operadores que podemos utilizar nestas
expressões são:
Tabela 3 – Símbolos de expressões relacionais
OPERADOR SIGNIFICADO EXEMPLO
> Maior a > 7
>= Maior ou igual b >= a
< Menor c < 5
<= Menor ou igual c <= b
= Igual a a = 9
<> Diferente de b <> 0
4.4 Expressões de lógica booleana
Utilizamos as expressões lógicas para analisar condições, e
criamos condições que nos retornam 1 ou 0, ou então, verdadeiro ou
falso. Os operadores utilizados para fazermos esta lógica são:
Tabela 4 – Símbolos de lógica booleana
OPERADOR SIGNIFICADO EXEMPLO
e Conjunção
a = 3 e b <> 9
Se o valor de “a” for igual a 3 e o valor de “b” for diferente de
9, então retornará verdadeiro; caso contrário, retornará falso.
Ou Disjunção
a = 3 ou b <> 9
Se o valor de “a” for igual a 3 ou o valor de “b” for diferente
de 9, então retornará verdadeiro; caso contrário, retornará
falso.
não Negação
não a > 3
Se o valor de “a” não for maior que 3, então retornará
verdadeiro; caso contrário, retornará falso.
Considerações finais
Os algoritmos foram criados para implementarmos a lógica
computacional para a resolução de problemas reais. Para que o
programa que desenvolvemos realmente solucione esses problemas,
temos de ter sempre em mente que os comandos devem ser
expressados de forma imperativa, deixando sempre bem claro o que
deve ser executado; guardar os valores que fazem parte do problema
a ser solucionado, para ser possível manipulá-los na aplicação; e, for
fim, utilizar de forma correta os símbolos que não permitem trabalhar
com esses valores de forma lógica e organizada.
Estes não são apenas princípios iniciais, mas a base para uma
boa programação, que você deverá levar consigo para ter sucesso em
todas as aplicações que for desenvolver.
Referências
MANZANO, J. A. N. G.; Oliveira, J. F. Algoritmos: lógica para
desenvolvimento de programação. São Paulo: Editora Érica, 1996.
MEDINA, M.; FERTIG, C. Algoritmos e programação: teoria e prática.
São Paulo: Editora Novatec, 2005.
PINHEIRO, F. A. C. Elementos de programação em C. Porto Alegre:
Bookman, 2012.
SOMMERVILLE, I. Engenharia de software. 9. ed. São Paulo: Pearson
Prentice Hall, 2011.
XAVIER, G. F. C. Lógica de programação. São Paulo: Editora Senac
São Paulo, 2014.
Capítulo 4
Algoritmos: condicional
Neste capítulo, abordaremos a arte da tomada de decisão. Digo
que é uma arte, pelo fato de não ser nada fácil tomar decisões,
apesar de ser essencial. Você, caro leitor, acabou de tomar uma
decisão: ler esta obra! E a cada linha, a cada página, a cada capítulo,
estamos decidindo o que fazer: se continuamos lendo, se mudamos
de emprego, se começamos logo nosso projeto de Verão, se
casamos ou compramos uma bicicleta.
Por dia, tomamos dezenas e até centenas de decisões para
atingirmos nossos objetivos (como acordar, ir trabalhar, ir à
academia, ir à faculdade, etc.). Com o computador acontece a
mesma coisa. Para que seu computador possa desempenhar uma
tarefa, ou um algoritmo, como visto anteriormente, ele deve decidir
como fazer, como desenvolver os passos necessários.
E adivinhe! Quem diz ao computador qual decisãoele deve
tomar? Sim, você. E é exatamente isso que vamos abordar neste
capítulo. Entender as condições e avisar ao nosso computador como
tomar as decisões, de acordo com cada situação.
1 A arte de tomar decisões
Há muito tempo, o Homem escreve e se preocupa com tomadas
de decisões que norteiam nossas vidas. A obra A arte da guerra, de
Sun Tzu, escrita em 476 a.C., é o exemplo clássico de obra sobre
tomada de decisão como estratégia de liderança, negócios e
competitividade. Em uma de suas célebres frases, Tzu diz que
“devemos conhecer nossos inimigos e a nós mesmos”. Vamos partir
desse princípio para conduzir nossas ações e tomar as decisões
corretas no nosso sistema, para que execute as tarefas que
satisfazem as necessidades dos usuários.
Durante o desenvolvimento de um código, existem diversas
situa ções em que a resolução vai depender de um valor, para que
possa seguir um rumo e, consequentemente, que uma tomada de
decisão também seja seguida. Isso ocorre muito em nosso dia a dia,
quando planejamos uma tarefa, mas as “variáveis” do nosso
cotidiano fazem com que tenhamos que optar por mudanças de
planos. Um exemplo típico é quando estimamos um determinado
tempo para chegarmos em um local e um simples pneu furado do
seu veículo pode atrapalhar todo o planejamento do tempo outrora
estimado.
Vamos utilizar um exemplo de uma situação bastante comum no
dia a dia, de um aluno que quer calcular sua média em uma
determinada disciplina e, logo em seguida, vamos determinar se esse
aluno está APROVADO ou REPROVADO nesta disciplina.
Para nossa situação hipotética, vamos supor que o aluno teve
duas provas e a média é dada pela soma das duas notas dividido por
2: Media = (nota1 + nota2) / 2
As regras serão as seguintes: o aluno estará APROVADO, caso
sua média seja maior ou igual a 6.0; e estará REPROVADO, caso sua
média esteja abaixo de 6.0. Para facilitar o entendimento dessas
regras, vamos desenhar seu fluxograma:
Figura 1 – Fluxograma para cálculo da média
de um aluno e tomada de decisão
Baseado no fluxograma anterior, vamos escrever nosso código e
montar um de nossos primeiros algoritmos. Para começar, vamos
desenvolver em pseudocódigo (ou português estruturado) na IDE[1]
VisuAlg. O VisuAlg é um ambiente de desenvolvimento de algoritmos
em portugol, gratuito e portátil. Portanto, o primeiro passo é baixar
esse ambiente em sua máquina ou no seu pendrive (assim, poderá
levá-lo para onde quiser).
Figura 2 – IDE do VisuAlg
1.1 Estruturando o algoritmo
Antes de falarmos das tomadas de decisões, vamos preparar
nosso ambiente de acordo com o modelo do fluxograma anterior.
Então, no VisuAlg vamos começar nosso código.
Para resolver essa tarefa, teremos que criar três variáveis: duas
para armazenar as notas e uma para armazenar a média calculada.
Observem que essas variáveis são todas do tipo real, ou seja, são
variá veis que armazenam números fracionados (ou números
quebrados), pois as notas podem ter casas decimais, certo?
Contudo, vamos pensar em uma coisa! Como vamos atribuir as
notas do aluno às variáveis? Quem vai digitar essas notas? Por onde?
1.2 Estrutura de entrada e saída de dados
Além de declarar as variáveis, deveremos, também, pedir para o
usuá rio digitar as notas para que sejam armazenadas em nossas
variá veis e, para isso, utilizaremos dois métodos de entrada (input) e
saída (output) de dados que, no VisuAlg são leia() e escreva(),
respectivamente. Esses métodos são utilizados da seguinte maneira,
de acordo com Forbellone e Eberspacher (2005):
Leia()
Quando você precisar que o usuário entre com alguma
informação no seu sistema, utilize esse método. Dentro dos
parênteses, coloque onde essa informação será armazenada, ou seja,
em qual variável. Portanto, no nosso exemplo, se quisermos
armazenar a primeira nota, iremos escrever no VisuAlg:
1. Leia (Nota1)
Escreva()
Quando você precisar escrever alguma informação na tela, utilize
esse método. Essa informação pode ser um texto ou o conteúdo de
uma variável. Ambas devem estar dentro dos parênteses.
 IMPORTANTE
Quando a informação for um texto, este deve vir entre aspas “ “.
E quando a informação for uma variável, apenas devemos colocar o
nome dela.
Também podemos escrever na tela os dois tipos de informações
juntas, no mesmo método escreva(). Para isso, basta separá-las por
vírgula.
No VisuAlg, fica assim:
1. Escreva (“Digite sua nota”) // texto simples
2. Escreva (“Sua nota é “, Nota1) // imprime o texto seguido do
conteúdo da variável Nota1
Você pode escrever comentários em seu código para entender o
que está fazendo. Para isso, basta utilizar duas barras // e, logo em
seguida, seu comentário (como feito no exemplo acima).
Feito isso, nosso algoritmo estará assim:
Figura 3 – Primeira parte do exercício “Cálculo
de Média” no VisuAlg
Nesse momento, já temos nossas duas variáveis declaradas e as
duas notas digitadas pelo usuário e armazenadas nas nossas
variáveis. Agora, precisamos fazer o cálculo da média e depois tomar
a decisão se o aluno está APROVADO ou está REPROVADO.
Não se preocupe, isso é bem simples. Vamos separar nossa
missão em duas etapas: 1. Calcular a média; e 2. Tomar decisão.
 IMPORTANTE
No VisuAlg, atribuir um valor a uma variável, ou seja, dar um valor a
uma variável qualquer, é representada por uma seta ( <- ) apontando
a variável. Exemplo: Nota1 <- 5
Nome <- “João”
Na etapa 1, vamos calcular nossa média e atribuí-la à nossa
variável Média. Para os cálculos, utilize os operadores aritméticos
vistos no capítulo anterior. Veja como ficou nosso algoritmo até
agora:
Figura 4 – Segunda parte do exercício “Cálculo
de Média” no VisuAlg
Já na etapa 2, podemos tomar a decisão se o aluno está ou não
APROVADO, já que temos a variável na qual decidiremos (que é a
media). Para isso, utilizaremos estrutura de controle condicional.
2 Estrutura de controle condicional
simples
Para que estas tomadas de decisões sejam possíveis, devemos
utilizar, segundo Xavier (2014), um comando condicional identificado,
no VisuAlg, como se-entao. Sua sintaxe é simples:
Se (condição-lógica) entao // comandos Senao
// comandos Fimse
É importante saber como criar uma condição lógica para se usar
nas tomadas de decisões. Toda condição lógica é formada pela
comparação de dois valores (sejam esses valores conhecidos ou
conteúdo de variáveis), e essa comparação é dada por um operador
relacional.
O resultado dessa comparação é um FALSO ou VERDADEIRO.
Exemplos de condições lógicas:
1. Comparação de um valor conhecido e uma variável:
Nota1 = 3 // se a nota1 for igual a 3, esse resultado é
VERDADEIRO; se não for igual, o resultado é FALSO
2. Comparação de dois valores desconhecidos, ou seja, de duas
variáveis:
Nota1 >= Nota2 // se a nota1 for maior ou igual à nota2, o
resultado é VERDADEIRO; senão, é FALSO
3. Comparação entre valores não numéricos:
Nome <> “João” // se o nome do usuário for diferente de
João, o resultado é VERDADEIRO; senão, é FALSO
Nem sempre uma tomada de decisão utilizando “SE” vem
acompanhada do “SENAO”.
Utilizamos o “SENAO” quando a condição lógica analisada no
“SE” for “FALSA” e precisamos de uma resposta para essa negativa.
Voltemos ao nosso exercício do cálculo da média. Como
modelado no fluxograma, vamos comparar a média com o valor 6,
perguntando se a média é menor que 6 (media < 6) e, caso o
resultado seja VERDADEIRO, vamos escrever na tela “aluno
REPROVADO”. Caso contrário (se for FALSO), vamos escrever “aluno
APROVADO”. Nosso código ficará da seguinte maneira:
Figura 5 – Terceira parte do exercício “Cálculo
de Média” no VisuAlg
Para verificar o resultado, pressione F9 no VisuAlg para executar
seu código. Mas ainda podemos melhorar um pouco e colocar a
média dele junto com a situação. Por exemplo: aluno REPROVADO
com média _____.
Como colocar a média dele impressa na tela junto com esse
texto? Você já aprendeu isso nas orientações anteriores. Pense um
pouco e resolva esse problema.
 PARA PENSAR
E se o aluno tiver mais do que as duas situações de APROVADO e
REPROVADO?Por exemplo, se ele puder fazer exame?
Vamos imaginar essa nova situação:
Se o aluno tiver a média abaixo de 4.0 estará automaticamente
REPROVADO.
Se o aluno tiver a média entre 4.0 e 6.0 poderá realizar EXAME.
E se a média do aluno estiver acima de 6.0 estará APROVADO.
Agora, temos três possibilidades de resultado na tomada de
decisão. Como resolver isso?
3 Estrutura de controle condicional
composta
Para resolvermos esse problema, vamos recorrer às tomadas de
decisão compostas que, de acordo com Manzano e Oliveira (1996),
realiza ações compostas ou aninhadas, dependendo se a seleção (ou
condição) é verdadeira ou falsa. A condição é uma expressão
processada e transformada em um valor booleano. Podemos
trabalhar esse recurso de duas maneiras:
1. “SE” aninhado positivo
Nessa maneira, temos vários “SE” sequenciais, um dependendo
do outro. Exemplo: Se (media >= 6), então Se (frequência >= 75),
então Escreva (“aluno APROVADO”) Fimse
Note que: o sistema só vai verificar a condição da frequência,
caso a condição anterior seja VERDADEIRA, ou seja, o segundo “SE”
depende do primeiro ser verdadeiro. Caso o primeiro “SE” seja
“FALSO”, o sistema não fará nada e sairá do “SE” pelo comando
“FIMSE”.
2. “SE” aninhado negativo Nessa segunda maneira, temos, também,
vários “SE”, porém, um complementando a negativa do outro, ou
seja, para executar o segundo “SE”, o primeiro deve ser “FALSO”.
Exemplo: Se (media < 4), então Escreva (“aluno REPROVADO”)
Senao
Se (media < 6) entao Escreva (“aluno em EXAME”) Senao
Escreva (“aluno APROVADO) Fimse
Note que: caso o primeiro “SE” seja VERDADEIRO, o sistema não
executa o “SENAO”, escrevendo na tela apenas “aluno REPROVADO” e
saindo da tomada de decisão pelo último “FIMSE”. Porém, caso o
primeiro seja “FALSO”, o sistema executa o “SENAO” e faz uma nova
tomada de decisão. Se este for VERDADEIRO, o sistema escreve
“aluno em EXAME” e não executa o “SENAO” saindo dos dois “FIMSE”.
Todavia, caso este segundo “SE” também seja “FALSO”, o sistema
executa o “SENAO” e escreve na tela “aluno APROVADO” e depois sai
dos dois “FIMSE”.
Aliás, essa é a solução para a situação proposta. Faça no VisuAlg
e analise o resultado.
Para deixar ainda mais interessante nosso algoritmo, vamos
incluir a variável frequência, que deverá ser inserida pelo usuário. A
frequência vai armazenar a porcentagem de presença do aluno na
disciplina e será um número inteiro de 0 a 100 (onde 0 [zero] o aluno
não teve nenhuma presença e 100 [cem] o aluno frequentou todas as
aulas).
Ainda queremos calcular a média do aluno e informar se ele está
APROVADO, REPROVADO ou está de EXAME. A regra para a
frequência será: abaixo de 75% o aluno está automaticamente
REPROVADO. Vamos analisar como ficará nosso código:
algoritmo “Cálculo de média com frequência”
var Nota1, Nota2, Media: real freq: inteiro inicio escreval
(“Digite sua primeira nota”) leia (Nota1) escreval (“Digite sua
segunda nota”) leia (Nota2) escreval (“Digite sua frequência”)
leia (freq) Media <- (Nota1 + Nota2) / 2
se (Media < 4) entao escreva (“aluno REPROVADO”) senao
se (Media < 6) entao se (freq >= 75) entao escreva
(“aluno em EXAME”) senao escreva (“aluno
REPROVADO”) fimse senao se (freq >= 75) entao
escreva (“aluno APROVADO”) senao escreva (“aluno
REPROVADO”) fimse fimse fimse
Lembrando que: o algoritmo pode ser construído de várias
maneiras, por isso seu código pode ficar diferente do apresentado
acima e produzir o mesmo resultado.
Além disso, podemos melhorar ainda mais nosso código com o
uso de operadores lógicos (apresentados no [capítulo 2]). Vamos
abordar mais sobre esse assunto no próximo capítulo; porém, ative
sua curiosidade e tente ajustar seu código considerando esses
operadores.
 NA PRÁTICA
Sugiro que você tente fazer o exercício sozinho. Comece
desenhando o fluxograma e desenvolva o algoritmo no VisuAlg.
Depois compare com nossa solução abaixo e compare os
resultados.
Considerações finais
Tomar uma decisão faz parte do nosso dia a dia, além de ser
extremamente importante, é imprescindível, ou seja, impossível não
fazê-lo. Na computação não é diferente, temos que tomar várias
decisões para cumprir as tarefas necessárias aos objetivos dos
nossos usuários de sistema.
Porém, tomar decisões exige uma comparação (com uso de
operadores relacionais) entre dois valores, seja ele um valor
conhecido ou o conteúdo de uma variável. Além disso, devemos
seguir uma estrutura para tomada de decisão na qual perguntamos
SE o resultado da comparação lógica é FALSA ou VERDADEIRA. Caso
seja verdadeira, os comandos são executados. Caso contrário,
podemos ter ou não o tratamento da sua negativa, ou seja, o SENAO
(este comando é executado quando o resultado da comparação
lógica do SE for FALSA.
Por fim, podemos utilizar esse recurso de tomada de decisão de
maneira aninhada, com vários SE e várias comparações lógicas. No
aninhamento de SE podemos ter duas situações: 1. Aninhamento
positivo (no qual as expressões lógicas dependem de as anteriores
serem VERDADEIRAS, em uma sequência) e 2. Aninhamento negativo
(no qual as expressões lógicas se complementam e a próxima só
será executada caso a anterior seja FALSA).
Referências
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de programação:
a construção de algoritmos e estrutura de dados. 3. ed. São Paulo:
Editora Pearson Prentice Hall, 2005.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. Algoritmos: lógica para
desenvolvimento de programação. São Paulo: Editora Érica, 1996.
TZU, S. A arte da guerra. Adaptação de James Clavell. 38. ed. Rio de
Janeiro: Editora Record, 2002.
XAVIER, G. F. C. Lógica de programação. São Paulo: Editora Senac
São Paulo, 2014.
[1] IDE, do inglês integrated development environment, ou ambiente
de desenvolvimento integrado, é um programa de computador que
reúne características e ferramentas de apoio ao desenvolvimento de
software com o objetivo de agilizar esse processo.
Capítulo 5
Algoritmos: repetição
Exercícios e atividades cotidianas são comuns a todos nós.
Diariamente, repetimos, seguindo um processo ou padrão, tarefas
costumeiras e cíclicas, como comer, andar, respirar e estudar, por
exemplo.
Essas tarefas podem ser padronizadas, seguindo procedimentos
comuns, estudados aqui neste capítulo, conhecidos como estruturas
de repetição. Também chamadas de loops ou laços de repetição,
analisam condições lógicas e repetem, de uma forma cíclica, seu
trecho de código, de acordo com os resultados obtidos.
Este capítulo apresentará os conceitos de laço e contadores, que
são recursos usados para “contarmos” a quantidade de vezes que o
loop executou. Além disso, você aprenderá como incrementar e
decrementar os passos de um contador e aplicar na prática nosso
aprendizado.
Vamos continuar nosso exercício de cálculo da média,
melhorando seu funcionamento e o deixando mais eficiente. Você
também será provocado a cumprir desafios, com o objetivo de
melhorar a compreensão e se sentir familiarizado com esses
comandos tão úteis na programação de sistemas.
1 Repetir para aprender
Todos nós temos rotinas diárias e cotidianas preestabelecidas,
como levantar cedo, se arrumar, ir trabalhar, almoçar, ir para a
faculdade, ir para a academia e dormir, por exemplo. E repetimos
tantas vezes essas atividades, todos os dias, que acaba se tornando
um ciclo. Note que esse ciclo segue o mesmo processo, sempre; ou
seja, não precisamos inventar novas maneiras de acordar ou ir
trabalhar, todas seguem o mesmo padrão.
Para acordar, precisamos seguir um processo simples de
passos:
Abrir os olhos.
Levantar da cama.
Tomar banho.
Escovar os dentes.
Vestir-se.
Tomar café.
 PARA PENSAR
Note que o ato de “acordar” remete a uma ação com várias
atividades, e não simplesmente abrir os olhos. Chamamos isso de
método ou função, conceitos que discutiremos mais adiante.
Agora, imagine fazer isso todos os dias (e nós fazemos, não é
mesmo?). Quando já sabemos como se faz, torna-se mecânico o
processo e não nos preocupamos em como estamos executando
cada passo dessa tarefa.
O computador tambémexecuta diversas rotinas (ou funções)
repetidas vezes, como um saque em um caixa eletrônico, a
verificação de um cadastro, iniciar o sistema operacional quando
ligamos nosso computador e efetuar uma compra em algum site de
e-commerce, por exemplo. E todas essas rotinas são efetuadas da
mesma maneira, seguindo o mesmo processo, independente de
quem está utilizando a funcionalidade.
Para “facilitar” esse processo, no computador, vamos utilizar
alguns recursos de repetição de rotinas bem conhecidos na
programação. Esses recursos auxiliam bastante em nossa
programação, evitando que nós, programadores, reescrevamos o
mesmo código para atividades comuns. Ao invés disso, podemos
simplesmente criar um código, uma rotina, com o processo definido
pelas regras do nosso negócio e repetimos todas as vezes que
alguém precisar utilizá-las.
Lembra-se do nosso exercício do capítulo anterior? Do cálculo da
média a partir de duas notas do aluno e a tomada de decisão para
sabermos a situação desse aluno (APROVADO, REPROVADO ou EM
EXAME)? Pois bem, vamos continuar esse programa, mas agora com
a seguinte tarefa:
Nós pedimos para o usuário digitar sua nota, certo? Mas não
verificamos se a nota é válida, ou seja, se a nota está entre 0
(zero) e 10 (dez), pois não existe uma nota escolar fora desses
parâmetros. Então, vamos garantir que o usuário não digite uma
nota fora dos padrões.
 IMPORTANTE
Toda vez que o usuário digitar uma nota, devemos verificar se a
nota está dentro dos parâmetros que nós estabelecemos, neste
caso, entre zero e dez.
Como fazer isso e garantir que o programa só vai continuar se a
nota digitada está válida? Vamos entender o fantástico mundo dos
lações de repetição.
1.1 Estruturas de repetição
Quando uma sequência de comandos deve ser executada
repetidas vezes, usamos uma estrutura de repetição. Segundo Deitel
e Deitel (2005), a estrutura de repetição, assim como a de decisão,
envolve sempre a avaliação de uma condição. A diferença entre a
estrutura de decisão e a estrutura de repetição é a quantidade de
vezes que ela executa em nosso sistema. A figura 1 diferencia essas
duas estruturas em uma visão macro:
Figura 1 – Diferença de estrutura condicional e estrutura de
repetição
Note que a imagem A é uma tomada de decisão simples,
utilizando como recurso o “SE” (apresentado no capítulo anterior).
Essa verificação é efetuada apenas uma vez, ou seja, a expressão
lógica é analisada e, se seu resultado for FALSO, o programa segue
para um lado; e, se for VERDADEIRO, segue por outro lado, não
voltando mais para a verificação, o programa segue. A imagem B
mostra uma estrutura de repetição com o recurso “ENQUANTO” (que
vamos estudar em seguida). A expressão lógica também é analisada,
porém, ENQUANTO ela for VERDADEIRA, nosso trecho de código
continua se repetindo, até que ela se “torne” FALSA.
 IMPORTANTE
É importante ficarmos atentos ao resultado da expressão lógica na
estrutura de repetição. Ela deve ter alguma condição, dentro do
código, de mudar seu valor; caso contrário, caímos em um conceito
chamado LOOP INFINITO.
De acordo com Forbellone e Eberspacher (2005), essas
estruturas são também conhecidas como laços de repetição, ou
loops, e o loop infinito acontece quando a condição lógica analisada
for sempre VERDADEIRA. Para que isso não ocorra, devemos nos
preocupar em alterar nossa variável (que está sendo comparada na
condição lógica) dentro do laço de repetição. Daqui a pouco, veremos
como isso funcionará. Por enquanto, vamos ver alguns tipos de
estruturas de repetição e aplicar em nosso exercício.
2 Enquanto-faça (while)
Deitel e Deitel (2005) diz que a estrutura de repetição
“ENQUANTO” permite especificar instruções que devem ser repetidas
enquanto determinada condição for VERDADEIRA. A seguir, é
ilustrada a sintaxe dessa estrutura no VisuAlg:
Enquanto (condição lógica) faça
// código fimenquanto
Veja que a condição lógica é verificada e, quando seu resultado
for VERDADEIRO, o código (dentro do laço) será executado. Quando o
programa chegar na instrução FIMENQUANTO, o programa volta a
analisar a condição lógica e verifica novamente seu resultado. O
sistema fica nesse loop enquanto o resultado da condição for
VERDADEIRA.
Caso essa condição seja FALSA, o programa continua o código
pulando todo o laço de repetição, ou seja, o sistema encontra a
instrução FIMENQUANTO e continua a partir desse ponto, não
executando o código dentro do laço. Por isso, a importância de se
alterar o valor analisado na condição lógica para que possamos sair
desse laço. Caso contrário, ficamos presos dentro dele, causando um
loop infinito.
Agora que sabemos disso, que tal aplicarmos no nosso
exercício?
Vamos cumprir nossa tarefa, que é garantir que a nota digitada
pelo nosso usuário seja válida, ou seja, esteja entre zero e dez. Para
isso, vamos utilizar o recurso de repetição ENQUANTO e os
operadores lógicos.
 PARA SABER MAIS
Entender os operadores lógicos é de extrema importância para a
compreensão das condições lógicas e seus resultados e, assim,
dominar as estruturas de repetição e de tomada de decisão.
Sugerimos a leitura do livro C – como programar, de Harvey Deitel e
Pearson Deitel (2011).
Vamos relembrar que a decisão lógica é a comparação relacional
de dois valores. Caso precisemos comparar mais valores para obter o
mesmo resultado, deveremos fazer uso dos operadores lógicos. No
nosso exercício isso acontecerá, pois deveremos comparar se a nota
digitada é menor que zero OU a nota digitada é maior que dez. São
duas comparações para se obter um único resultado.
Note que estamos fazendo comparações daquilo que NÃO
queremos. Estamos comparando se a nota está fora dos padrões
estabelecidos. Por que fazemos isso, nesse caso? Se a nossa nota
for válida, ou seja, estiver dentro dos padrões de zero a dez, não
queremos que o laço de repetição faça nada. Queremos que o
programa pule todo o laço e continue o código depois do
FIMENQUANTO, pois nossa nota é válida.
Nossa intenção é identificar quando a nota está fora dos padrões
e pedir para o usuário digitar novamente. Após a nova digitação,
devemos verificar outra vez e, se a nota persistir errada (ou seja, se a
condição lógica for VERDADEIRA), o laço será executado de novo,
ficando em um ciclo, até que a condição lógica se torne FALSA
(quando o usuário digitar uma nota válida).
Portanto, nosso código, para verificar a primeira nota, ficará
assim:
Figura 2 – Verificação da Nota1 pela estrutura de repetição
“ENQUANTO”
Na figura 2, o usuário digita a primeira nota e, em seguida, o
sistema a verifica, comparando se ela é menor que zero OU se ela é
maior que dez. Essas são as condições que, quando verdadeiras, nos
levam a pedir novamente a nota, pois está fora dos padrões
estabelecidos.
 PARA PENSAR
O operador lógico “OU” utilizado no código torna o resultado da
condição VERDADEIRA se qualquer uma das duas comparações
forem verdadeiras. Caso precisássemos que as duas condições
fossem verdadeiras, deveríamos usar o operador lógico “E”.
Agora é sua vez. Faça a verificação da segunda nota e teste seu
programa.
Dissemos no início do capítulo que a estrutura de decisão “SE”
realiza apenas uma verificação e segue o programa. Quantas
verificações a estrutura de repetição “ENQUANTO” executa?
Essa estrutura executa enquanto o resultado da condição lógica
analisada for VERDADEIRO.
Na verdade, essa estrutura pode executar quantas vezes forem
necessárias. Nós não sabemos quantas vezes o usuário vai digitar a
nota inválida; enquanto isso, nosso sistema estará “preso”, esperando
a nota correta (claro que podemos limitar a quantidade de tentativas
do usuário, por exemplo, quando ele pode digitar até três vezes a
senha incorreta, caso contrário, sua conta é bloqueada). Para isso,
podemos utilizar “contadores”, que vão nos ajudar muito no próximo
tópico desse capítulo.
Pergunta: e se conhecermos a quantidade de vezes que vamos
executar o laço? Por exemplo, eu quero selecionar os primeiros 10
alunos da sala, ou quero selecionar os seis números da mega-sena,

Outros materiais