Escolar Documentos
Profissional Documentos
Cultura Documentos
Lógica e Organização - de Computadores
Lógica e Organização - de Computadores
de Computadores
2016
Copyright © UNIASSELVI 2016
Elaboração:
Prof.a Greisse Moser Badalotti
160
B132l Badalotti; Greisse Moser
189 p. : il.
ISBN 978-85-7830-967-1
1.Lógica.
I. Centro Universitário Leonardo Da Vinci.
Impresso por:
Apresentação
Prezado(a) Acadêmico(a):
Bons estudos!
III
UNI
O conteúdo continua na íntegra, mas a estrutura interna foi aperfeiçoada com nova
diagramação no texto, aproveitando ao máximo o espaço da página, o que também
contribui para diminuir a extração de árvores para produção de folhas de papel, por exemplo.
Todos esses ajustes foram pensados a partir de relatos que recebemos nas pesquisas
institucionais sobre os materiais impressos, para que você, nossa maior prioridade, possa
continuar seus estudos com um material de qualidade.
IV
V
VI
Sumário
UNIDADE 1 – HISTÓRICO DA COMPUTAÇÃO ........................................................................... 1
VII
8.2.1 Memória principal .................................................................................................................. 38
8.2.2 Armazenamento secundário ................................................................................................. 39
8.3 OS DISPOSITIVOS DE ENTRADA/SAÍDA . ............................................................................... 40
8.4 INTERCONEXÃO DE SUBSISTEMAS . ....................................................................................... 40
9 MICROPROCESSADORES / MICROCONTROLADORES / SISTEMAS EMBARCADOS. 40
10 ARQUITETURA RISC E CISC ......................................................................................................... 42
10.1 CAUSAS PARA UMA ARQUITETURA COMPLEXA . ........................................................... 42
10.2 RISC POR QUE? . ........................................................................................................................... 43
10.3 PIPELINING ................................................................................................................................... 45
LEITURA COMPLEMENTAR ............................................................................................................... 46
RESUMO DO TÓPICO 3 ....................................................................................................................... 62
AUTOATIVIDADE ................................................................................................................................. 63
VIII
2.3 ENTENDENDO FILAS ................................................................................................................... 106
2.4 ENTENDENDO LISTAS LINEARES GERAIS ............................................................................ 109
2.5 ENTENDENDO ÁRVORES ........................................................................................................... 112
2.6 ENTENDENDO GRAFOS .............................................................................................................. 114
LEITURA COMPLEMENTAR ............................................................................................................... 115
RESUMO DO TÓPICO 3 ....................................................................................................................... 132
AUTOATIVIDADE ................................................................................................................................. 133
IX
TÓPICO 5 – SUBALGORITMOS E ESCOPO DE IDENTIFICADORES .................................... 173
1 INTRODUÇÃO ..................................................................................................................................... 173
2 ESCOPO DE IDENTIFICADORES ................................................................................................... 174
LEITURA COMPLEMENTAR ............................................................................................................... 179
RESUMO DO TÓPICO 5 ....................................................................................................................... 184
AUTOATIVIDADE ................................................................................................................................. 185
X
UNIDADE 1
HISTÓRICO DA COMPUTAÇÃO
OBJETIVOS DE APRENDIZAGEM
A partir desta unidade, você será capaz de:
PLANO DE ESTUDOS
Esta unidade de ensino está dividida em três tópicos, sendo que no final de
cada um deles você encontrará atividades que contribuirão para a apropriação
dos conteúdos.
1
2
UNIDADE 1
TÓPICO 1
BREVE HISTÓRICO
1 INTRODUÇÃO
Embora os recursos tecnológicos disponíveis atualmente possam parecer
extremamente novos e atuais, o processo de desenvolvimento da tecnologia percorreu
um longo caminho para que pudéssemos nos beneficiar de tais tecnologias.
Vamos à leitura!
2 HARDWARE
Antes de acompanharmos a evolução do hardware, vamos descrever
hardware. Hardware é a parte física do computador, isto é, tudo o que “pode ser
tocado”, como, gabinete, monitor, teclado, mouse, processadores, memórias, disco
rígido etc.
3
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
Dispositivos mecânicos.
Dispositivos eletromecânicos.
Dispositivos eletrônicos.
Computadores com vávulas, com transistores, com circuitos integrados e com
itegração em larga escala.
UNI
O mais velho ábaco é o tablet Salamis (originalmente pensado para ser uma placa
de jogo), usada pelos babilônios por volta de 300 a.C., descoberto em 1846 na ilha de Salamina.
4
TÓPICO 1 | BREVE HISTÓRICO
O ábaco foi inventado há cerca de 4.000 anos atrás, pelos chineses. Foi
a primeira máquina utilizada para contagem e cálculo. É preciso uma grande
quantidade de tempo e prática para aprender a dominar o uso de um ábaco.
5
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
6
TÓPICO 1 | BREVE HISTÓRICO
Sua invenção assustou outros tecelões porque com este tear o pano era
produzido mais rápido e melhor do que com a mão. Por este motivo a casa e tear
Jacquard foi incendiada.
7
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
8
TÓPICO 1 | BREVE HISTÓRICO
Hollerith não parou com este invento. Ele começou uma empresa com o
nome de Tabulating Machine Company. Eventualmente, esta empresa mudou seu
nome para International Business Machines (IBM) - uma das maiores empresas de
informática do mundo.
9
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
10
TÓPICO 1 | BREVE HISTÓRICO
11
RESUMO DO TÓPICO 1
Maravilha! Conseguimos um avanço fantástico ao cumprirmos mais esta
tarefa. Você é a pessoa mais interessada em rever um pouco mais daquilo que
discutimos neste tópico.
12
AUTOATIVIDADE
1 Os primeiros ábacos eram feitos com fios verticais paralelos pelos quais o
operador podia fazer deslizar sementes secas. Quem foram os inventores
do ábaco?
a) Chineses
b) Incas
c) Romanos
d) Índios
13
14
UNIDADE 1
TÓPICO 2
1 INTRODUÇÃO
Em 1946, pequenas vias eletrônicas chamadas circuitos começaram a
realizar a contagem que antes era feita por engrenagens e outras peças mecânicas.
Com cada nova geração, o circuito tornou-se menor e mais avançado do que a
geração anterior. Como resultado da miniaturização, a velocidade, potência e
memória dos computadores aumentaram proporcionalmente. Novas descobertas
estão sendo constantemente desenvolvidas, as quais afetam a maneira como
vivemos, trabalhamos e nos divertirmos.
15
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
O ENIAC operava 1000 vezes mais rápido do que Mark I. Ele podia fazer
5000 adições por segundo e 300 multiplicações. Esta máquina custava cerca de 3
milhões de dólares.
FIGURA 8 – ENIAC
16
TÓPICO 2 | GERAÇÃO DOS COMPUTADORES
FIGURA 9 - UNIVIAC
FIGURA 10 – TRANSISTOR
18
TÓPICO 2 | GERAÇÃO DOS COMPUTADORES
19
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
20
TÓPICO 2 | GERAÇÃO DOS COMPUTADORES
O primeiro Apple II, recebeu este nome, em memória aos verões em que
Jobs passou colhendo maçãs no Noroeste, foi um enorme sucesso. Desde então, a
Apple tem feito muitos computadores, incluindo o Apple II Plus, Apple IIe, Apple
II, a Apple IIGS, Macintosh, iMac, iPod e iPhone (DECATUR CITY SCHOOLS, 2008).
21
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
22
TÓPICO 2 | GERAÇÃO DOS COMPUTADORES
DICAS
Assista ao filme Piratas do Vale do Silício para saber mais sobre a história das
principais empresas que contribuíram para o atual estado da tecnologia da informação.
8 QUINTA GERAÇÃO
A quinta geração da computação é chamada de "inteligência artificial", e é
o objetivo de cientistas e programadores de computador criarem computadores
mais espertos. Todas as linguagens de alto nível como C e C ++, Java, .Net etc.,
são utilizadas nesta geração.
8.1 JOGOS
Um dos maiores avanços da inteligência artificial foi em 1997, quando
um computador da IBM derrotou com sucesso o campeão mundial de xadrez
em seu próprio jogo. Foi a primeira vez que um computador tinha batido um
ser humano.
23
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
NOTA
24
TÓPICO 2 | GERAÇÃO DOS COMPUTADORES
8.5 ROBÓTICA
Esta pode ser a área mais popular da inteligência artificial entre aqueles
que não estão familiarizados com conceitos mais avançados, como "redes neurais"
ou "sistemas epecilalistas". Mas estes não são robôs típicos de limpeza. O campo
da robótica da inteligência artificial é sobre a criação de robôs que podem
experimentar, e reagir a estímulos externos, tal como os seus homólogos humanos.
Isso significa que esses robôs serão capazes de levar uma vida semiautônoma,
conscientes de seu entorno e capazes de modificar de forma independente o seu
comportamento com base no seu ambiente. É uma das áreas mais promissoras e
mais difíceis da inteligência artificial.
DICAS
25
RESUMO DO TÓPICO 2
Caro(a) acadêmico(a), neste capítulo você estudou que:
• Uma das empresas mais significativas dos últimos tempos na área da computação
é a Apple, fundada por Steve Jobs e Steve Wosniak.
26
AUTOATIVIDADE
a) ( ) Tubos a vácuo
b) ( ) Circuitos integrados
c) ( ) Microprocessadores
d) ( ) Inteligência artificial
5 Esta invenção foi 1.000 vezes mais rápida do que qualquer máquina construída
antes dela. Era tão grande que poderia preencher uma casa. Assinale a opção
correta:
a) Apple I
b) ENIAC
c) Windows
d) Z3
27
28
UNIDADE 1
TÓPICO 3
1 INTRODUÇÃO
Quando as pessoas pensam em computadores, geralmente relacionam
a um laptop ou desktop. Os computadores são, na verdade, tudo que nos rodeia,
e podem ser divididos em categorias distintas dependendo do seu tamanho e
poder de processamento. Algumas definições mudaram ao longo do tempo com
os avanços rápidos na tecnologia, temos computadores que cabem na palma de
nossas mãos e que têm poder de processamento imenso. Ainda assim, a maior
parte das qualificações gerais para cada categoria são as mesmas, juntamente com
as diversas subcategorias que podem se encaixar.
2 SUPERCOMPUTADORES
Supercomputador é um termo usado para descrever computadores que têm
o poder de processamento mais rápido. Os supercomputadores executam centenas
de milhares de processamentos, capazes de quatrilhões de cálculos de computação
em apenas alguns nanossegundos. Você provavelmente não vai precisar deste
tipo de capacidade para acessar o Facebook. Na verdade, os supercomputadores
são usados em ciência computacional para calcular e realizar uma infinidade de
tarefas complexas. Modelagem de estruturas moleculares, previsão do tempo, e no
campo da mecânica quântica, entre outros.
29
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
FIGURA 15 – SUPERCOMPUTADORES
3 COMPUTADORES MAINFRAME
Como os supercomputadores, os computadores mainframe são enormes,
elevando-se máquinas com lotes de poder de processamento. Mainframes são usados
principalmente por empresas, agências governamentais e bancos e organizações que
precisam de uma maneira de armazenar grandes quantidades de informação, tais
como a Receita Federal do Brasil. A capacidade de processamento de computadores
de grande porte é medida em MIPS, ou milhões de instruções por segundo.
Supercomputadores, por outro lado, são medidos em FLOPS, ou operações de ponto
flutuante por segundo.
30
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
FIGURA 16 – MAINFRAME
4 MINICOMPUTADORES
Um minicomputador é uma máquina de multiprocessamento que trabalha
com cerca de 200 usuários ao mesmo tempo. É como um computador mainframe
menos poderoso, e possui o tamanho parecido com de uma geladeira. Um servidor
pode ser um exemplo de um minicomputador, mas nem todos os servidores
são minicomputadores. Apesar do seu nome, um minicomputador não é um
computador pessoal como a máquina desktop que você pode ter em casa ou no
trabalho. Eles são muito maiores do que isso.
31
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
5 MICROCOMPUTADORES
Microcomputadores são os que as pessoas estão mais familiarizadas na
sua vida diária, não profissional, mas é claro que isso não significa que eles são
exclusivos para a casa. Microcomputadores são pequenos computadores que
rodam em microprocessadores em suas unidades de processamento central.
Eles são muito mais baratos do que os supercomputadores, computadores de
grande porte e até mesmo minicomputadores, porque eles foram feitos para usos
diários que são mais práticos do que profissional. A gama de capacidades para
microcomputadores é vasta. Um editor de filme poderia usar um microcomputador
para executar muitos programas de edição intensivos de uma só vez, enquanto
que um aluno pode usar um microcomputador para digitar um texto.
32
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
FIGURA 17 – MICROCOMPUTADORES
FONTE: A autora.
6 COMPUTADORES MÓVEIS
Estes são exatamente computadores pequenos e móveis. Você pode
argumentar que um computador de mesa é móvel, mas computadores móveis
são os que se destinam a serem transportados e levados de um lugar para outro.
Se um computador desktop é um microcomputador, em seguida, um laptop é
um computador móvel. Há muitos tipos diferentes de computadores móveis,
a seguir está uma lista de dispositivos que poderiam ser classificados como
computadores móveis.
33
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
• Console de jogos portátil: Dispositivos como o Game Boy, Game Boy Color,
Game Boy Advance, Sega Nomad, PlayStation Portable (PSP) e PlayStation Vita são
consoles de jogos portáteis. Assim como consoles regulares, estes são pequenos
computadores que permitem que as pessoas joguem jogos em movimento.
FONTE: A autora.
34
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
• Processamento de dados;
• Armazenamentode de dados;
• Movimentação dos dados, e
• Controle.
35
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
7.4 CONTROLE
O sistema de computador deve controlar as três funções acima citadas.
Dentro do computador, uma unidade de controle dirige e coordena a operação
de todos os outros componentes do computador, proporcionando sinais de
temporização e de controle e execução das instruções de um programa.
FONTE: A autora.
36
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
8.1 CPU
A Unidade Central de Processamento (CPU) é o componente central do PC.
Este componente é o responsável vital para o funcionamento de cada coisa no PC.
FIGURA 20 – CPU
FONTE: A autora.
37
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
38
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Memória só de leitura (ROM) armazena dados e é fixa e não pode ser alterada.
Ela é usada para armazenar dados de referência e programas que serão necessários
para a aplicação do computador. Por exemplo, quando um computador é ligado,
um conjunto de instruções armazenadas na ROM chamado BIOS ROM (Basic Input
Output System) diz ao computador como acessar seus drives de disco como o sistema
operacional. Então, o computador pode copiar esses arquivos para a RAM.
39
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
Mas você deve estar se perguntando por que ter dois tipos de armazenamento.
A razão para ter dois tipos de armazenamento é dividir as tarefas, enquanto:
9 MICROPROCESSADORES / MICROCONTROLADORES /
SISTEMAS EMBARCADOS
Um microprocessador é uma Unidade Central de Processamento (CPU)
em um único chip. O microprocessador contém a aritmética, lógica e circuitos
de controle necessários para interpretar e executar instruções de um sistema de
40
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
• Sistemas Embarcados.
41
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
O senso comum nos diz que as instruções inúteis (ou pouco utilizadas)
não devem ser adicionadas ao conjunto de instruções. Este conceito básico de não
adicionar instruções inúteis para o conjunto de instruções invocou um interesse
crescente em uma abordagem inovadora para a arquitetura de computador, o
computador com conjunto reduzido de instruções (Reduced Instruction Set Computer
- RISC). A filosofia da arquitetura RISC diz para adicionar o mínimo de instruções
para que façam o mínimo possível de operações, na qual resultam em um grande
ganho de desempenho. Sistemas RISC foram definidos e desenhados por diferentes
grupos em uma variedade de formas. A primeira máquina RISC foi construída
em 1982 pela IBM. As características comuns compartilhadas pela maioria destes
projetos são um conjunto limitado de instruções e simples, um grande número
de registros, um compilador para maximizar a utilização de registos e, assim,
minimizar os acessos à memória principal e a ênfase na otimização do pipelining.
Mais adiante você entenderá o que é pipelining.
42
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
43
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
de transistores em um único chip, este circuito chama-se Very Large Scale Integration
– VLSI. Como um resultado de menos instruções, modos de endereçamento e
formatos de instrução, obteve-se um pequeno e simples circuito para a unidade de
controle. Esta redução relativa do tamanho e da complexidade provocada por chips
VLSI produz alguns resultados desejáveis para CISC, que são discutidos a seguir.
que têm caches separados (ou armazenamento) para obter instruções e os dados
são às vezes chamados arquiteturas baseadas em Harvard. O uso de dois caches,
um para instruções e outro para dados, em contraste com um único cache pode
melhorar consideravelmente o tempo de acesso e, consequentemente, melhorar
o desempenho de um processador, especialmente um que faz uso extensivo de
canalização, como o processador RISC.
10.3 PIPELINING
O computador utiliza três etapas para o pipelining: busca, decodificação
e execução para cada instrução. Nos primeiros computadores essas fases eram
realizadas em série para cada instrução. Os computadores atuais utilizam uma
técnica chamada pipelining para melhorar o throughput (número total de instruções
realizadas em cada período de tempo). Se a unidade de controle pode realizar duas
ou três dessas fases simultaneamente, a próxima instrução pode começar antes que
a anterior seja concluída (FOROUZAN; MOSHARRAF, 2011).
45
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
LEITURA COMPLEMENTAR
O Apple II
Mas isso não era nada, porque outras companhias estavam surgindo na
região do Vale do Silício naquela época. Uma delas, chamada Processor Technology,
supostamente vendia mais de mil unidades por mês de seu computador SOL-20,
um sucesso no mundo da computação de uso doméstico. Além disso, era um
computador que tinha um teclado (que era a forma como eles passaram a ser
concebidos após eu mostrar o Apple I em uma reunião do Homebrew). O Apple I
deu início a essa tendência.
Adicionar cores não era apenas uma questão de comprar mais chips, mas
de eficiência e de elegância de projeto. Eu queria projetar as cores desde o início,
não apenas acrescentá-las em um computador já existente. Dessa forma, o Apple II
seria concebido desde o início com tal característica.
46
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
O Apple II, por sua vez, foi projetado e teve sua engenharia concebida a partir
do zero. Também somente por mim. Olhando para trás, eu poderia ter projetado o
Apple II primeiro – com cores e tudo –, mas escolhi avançar com um projeto que eu
pudesse desenvolver mais rapidamente.
Outros computadores chegaram perto do Apple II, mas levaram anos para
se equiparar ao que eu tinha feito. No final, cada um deles precisaria fornecer a
mesma lista de características.
47
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
Mas àquela altura, ninguém havia visto o Apple II. Eu ainda estava
finalizando-o, e naquele momento, ainda trabalhávamos em nossas casas: eu
trabalhava em meu apartamento e Steve trabalhava pelo telefone de seu dormitório
na faculdade. Ainda testávamos computadores na garagem da casa dos pais dele. E
eu ainda estava montando calculadoras na HP e pensando que a Apple era apenas
um hobby. Eu ainda planejava trabalhar na HP para sempre.
Mas não demorou muito para eu ter um Apple II funcionando logo após a
entrega das placas do Apple I para Paul Terrell. E como eu disse antes: o Apple II
não era apenas duas vezes melhor. Era algo como dez vezes melhor.
Concluí a placa, que era o núcleo do Apple II, em agosto de 1976. Lembro-
me disso muito bem porque foi nesse mesmo mês que Steve e eu viajamos para a
mostra PC’ 76, em Atlantic City.
48
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Sentei um dia com aquela pequena placa em branco com chips na parte de
cima e todos os pequenos fios enrolados em azul e vermelho soldados por baixo e
a conectei, através de alguns fios e transformadores, à minha TV colorida.
Depois brinquei com todos esses parâmetros, e isso tudo levou apenas
meia hora. Testei dezenas e dezenas de variações diferentes dos componentes até o
Breakout funcionar por completo no Apple II, mostrando a pontuação e tudo mais.
Chamei Steve Jobs para ver. Não podia acreditar que havia conseguido
fazer aquilo tudo; foi fantástico. Pedi a Steve que sentasse e mostrei a ele como o
49
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
jogo aparecia com a raquete e os tijolos. Depois disse: “Veja isto”. E digitei alguns
comandos BASIC e mudei a cor da raquete, a cor dos tijolos e local onde ficava a
pontuação na tela.
Então disse: “Se tivesse feito toda essa variedade de opções embutidas no
equipamento da forma que sempre foi feito, eu teria levado dez anos. Agora que
os jogos estão no software, o mundo inteiro vai mudar”.
E naquele exato momento foi que me dei conta. Os jogos em software serão
incrivelmente avançados se comparados com os jogos em hardware – isto é, jogos
que estão embutidos nos equipamentos tipo fliperama e em sistemas semelhantes.
Eu disse: “Veja, jogue este”. Então mostrei a ele como virar o botão para
que a raquete se movimentasse para cima e para baixo. Ele sentou e começou a
jogar. Todos na sala ficaram olhando para ele por aproximadamente 15 minutos. A
bola estava muito rápida, e ele, embora não soubesse realmente o que fazer com o
controle, continuava acertando. As pessoas simplesmente pensaram que John era
um jogador excepcional.
slots – um para a impressora e outro para um modem. Ele achava que assim seria
possível fabricar uma máquina menor e mais barata – e que fosse boa o suficiente
para as tarefas diárias.
Normalmente, sou uma pessoa fácil de se relacionar, mas daquela vez disse
para Steve: “Se é o que quer, vá conseguir outro computador para você”. Eu não
conseguiria economizar um único chip reduzindo o número de slots de 8 para 2, e
eu sabia que pessoas iguais a mim poderiam eventualmente descobrir coisas para
adicionar a qualquer computador.
Um dia, meu chefe, Pete Dickinson, disse que algumas pessoas em minha
divisão de calculadoras haviam criado um novo projeto, que seguiu para a aprovação
da diretoria, um projeto para desenvolver uma pequena máquina de mesa com um
microprocessador, memória DRAM, uma pequena tela de vídeo e um teclado. E até
já tinham designado cinco pessoas para desenvolver o BASIC para ela.
O horrível de tudo aquilo é que eles sabiam o que eu havia feito com o
Apple I – e mesmo com o Apple II. Mas mesmo assim começaram o tal projeto sem
mim! Por quê? Não sei. Acho que perceberam que o projeto deles era igual ao que
eu já havia feito.
Mas mesmo assim fui falar com o gerente do projeto, Kent Stockwell.
Embora tivesse criado computadores como o Apple I e o Apple II, eu queria tanto
trabalhar em um computador na HP que faria qualquer coisa para isso. Eu poderia
ser um mero engenheiro da interface da impressora. Algo pequeno.
Então disse a Kent: “Todo meu interesse na vida tem sido os computadores.
Não as calculadoras”.
51
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
Mas deveriam ter dito para si mesmos: “Como fazer para trazer Steve
Wozniak a bordo? Vamos colocá-lo como engenheiro da pequena interface com a
impressora”. Eu teria ficado muito feliz se isso tivesse acontecido, mas ninguém se
preocupou em me colocar onde eu mais gostava.
Uma das primeiras pessoas para quem mostramos o novo computador foi
Chuck Peddle. Lembra-se dele? O sujeito da MOS Technologies que me vendeu
na mostra da WESCON o processador 6502, em torno do qual projetei o Apple I
no ano anterior.
Nunca esquecerei como naquela sala de reuniões Steve Jobs fez o que eu
achava ser uma afirmação das mais ridículas. Ele disse: “Vocês poderão comprar
este produto por apenas algumas centenas de milhares de dólares”.
52
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Mas Al nos disse depois que a Atari estava muito ocupada com o mercado
de videogames para embarcar em um projeto de computador.
53
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
Bem, ele também recusou, mas nos colocou em contato com um sujeito
chamado Mike Markulla. Don nos disse que Mike tinha apenas 30 anos de idade,
mas que já havia se aposentado pela Intel. Ele nos contou também que Mike se
interessava por equipamentos eletrônicos. E que por isso talvez soubesse o que
fazer conosco.
A primeira vez que encontrei Mike, achei-o a pessoa mais legal que já tinha
conhecido. Era um rapaz jovem com uma bela casa nas colinas com vista para as
luzes de Cupertino. Ele tinha uma vista deslumbrante, uma esposa maravilhosa,
todo o pacote.
Mas quando Mike concordou em assinar ele nos disse: “Seremos uma
empresa da Fortune 500* em dois anos. Este é o início de uma indústria. E acontece
uma vez em cada década”.
54
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Quer saber? Acreditei nele somente por causa de sua reputação e posição
na vida. Ele era o tipo de pessoa que, se fazia tal afirmação – e era possível ver
sinceridade nele –, era porque realmente acreditava no que estava dizendo. Porém,
achei que a Fortune 500 estaria fora de nosso alcance. Quer dizer: uma empresa de 5
milhões de dólares seria imensa e inacreditável.
Se alguém sabe fazer certos julgamentos melhor que eu, não tento usar
minha lógica e meu raciocínio para desafiá-lo. Posso ser cético, mas se alguém
realmente sabe sobre o que está falando, então deve receber um voto de confiança.
Acontece que mesmo Mike estava subestimando nosso sucesso. Mas estou
me adiantando nos acontecimentos.
E Mike respondeu: “Não, você precisa deixar a HP”. Não me deu nenhum
motivo. Disse-me apenas que eu precisava decidir até terça-feira.
Então decidi que, afinal, não ficaria somente na Apple. Ficaria na HP, em
meu emprego de tempo integral, e projetaria computadores por diversão.
Fui até a cabana – Mike tinha uma cabana em sua propriedade – e disse
para Mike e Steve o que havia decidido. Disse-lhes que minha resposta era não.
Pensei a respeito e cheguei à conclusão de que não sairia da HP.
55
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
Mas Steve ficou chateado. Ele estava convencido de que o Apple II era o
computador com o qual deveriam seguir adiante.
Então Allen Baum ligou e disse: “Sabe, Steve, você realmente precisa seguir
adiante e fazer isso. Pense a respeito. Você pode ser um engenheiro, se tornar
um administrador e ficar rico, ou você pode ser um engenheiro, permanecer um
engenheiro e ficar rico”. Ele me disse que achava ser perfeitamente possível começar
uma empresa e permanecer um engenheiro. Também mencionou que eu poderia
fazê-lo sem nunca precisar lidar com aspectos da administração da empresa.
Depois me dei conta: Ih, é sempre melhor falar com o chefe primeiro. Então
fui rapidamente falar com ele, mas ele não estava em sua mesa. Esperei, esperei,
e às 4 horas da tarde ele ainda não havia aparecido. Enquanto eu esperava, todos
chegavam perto de mim e diziam: “Ei, ouvi falar que você está saindo”, e eu não
queria que meu chefe ouvisse aquilo de outra pessoa.
Por fim, meu chefe apareceu quase no fim do dia. Então disse a ele que
estava saindo para começar meu próprio negócio. Ele me perguntou quando eu
gostaria de ir. Respondi: “Imediatamente”. Então ele me levou até o departamento
de recursos humanos, eles me entrevistaram e, de repente, eu estava fora. Foi tudo
muito rápido.
56
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Acho que muitas pessoas se esqueceram dele, mas Mike foi presidente e
líder da Apple por quatro anos – ele abriu nosso capital para o mercado quatro
anos mais tarde.
Portanto, eu teria quatro meses para finalizar o projeto do Apple II. Naquele
momento, eu estava completando a codificação de 8 Kbytes que precisávamos
liberar para a Synertek, empresa que faria os chips de memória ROM para nós. Tais
chips seriam os responsáveis por fazer o Apple II rodar o BASIC.
Minha ideia tinha a ver com algo que li nos Papéis do Pentágono sobre
fraudes políticas e um sujeito chamado Dick Tuck, que executou truques sujos
(pequenos truques psicológicos), como divulgar falsos memorandos e notícias falsas
para alarmar as pessoas, escritos de tal maneira que não poderiam ser vistos como
mentirosos. Então decidi divulgar um falso memorando preparado por mim – um
anúncio falso, como um folheto, para um produto falso da MITS. Depois de ouvir
Mike Markulla dizer que distribuiríamos 20 mil brochuras sobre o Apple II, percebi
que seria possível conseguir milhares e milhares de anúncios falsos por fora.
A primeira coisa que fiz foi chamar Adam Schoolski, um hacker de telefone
que conheci alguns anos antes, quando ele tinha 13 anos de idade. Ele agia sob o nome
Johnny Bagel. Contei-lhe que queria pregar uma peça, mas que não poderia ser perto
da região da Baía de São Francisco. Na época, eu já tinha uma boa experiência em
aprontar brincadeiras como aquela, e sabia que não seria pego se tomasse algumas
precauções, como não fazer as coisas perto de minha casa ou trabalho, e manter um
certo nível de sigilo. Eu disse para Adam que a tal brincadeira seria enorme, porque
queria imprimir 8 mil folhetos para distribuição. Consegui juntar os 400 dólares de
que precisava para imprimir as tais 8 mil cópias em diferentes cores de papel.
58
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Seja como for, eu esperava que parecesse que a MITS estava mentindo em
seu quadro comparativo.
Então percebi que tudo aquilo era muito grande e que não havia jeito
de eu ser pego. Não deixaria isso acontecer. Eu tinha dois jovens amigos, Chris
Espinoza e Randy Wiggington, que sabiam sobre o que eu estava fazendo – eles
eram adolescentes na época. Disse a cada um deles que não importava o que
59
UNIDADE 1 | HISTÓRICO DA COMPUTAÇÃO
acontecesse: eles não poderiam contar nada daquilo para ninguém. Mesmo se
fossem chamados pela polícia e esta lhes dissesse que o parceiro deles contou tudo,
ainda assim deveriam continuar negando. “Nós vamos esconder isso”, disse a eles,
“e nunca admitir para ninguém”.
Adam Schoolski vivia em Los Angeles, mas veio para a feira. Quando nós
quatro chegamos com os 8 mil folhetos, vimos aquelas mesas enormes onde todas
as empresas estavam colocando suas brochuras e propagandas. Trouxemos 2 mil
de início e simplesmente colocamos em uma das mesas como se estivéssemos
fazendo algo normal. Depois fomos dar uma volta pela feira e gargalhar um pouco.
Mas Adam me procurou uma hora depois dizendo que todos os folhetos
haviam sumido. Com a caixa de papelão e tudo.
Fomos então para nosso hotel e pegamos outra caixa com 2 mil folhetos e
os deixamos na mesa. Ficamos por ali em volta observando, até que no final um
sujeito se aproximou, olhou um dos folhetos, pegou toda a caixa e levou embora.
Um representante da MITS estava interceptando os folhetos!
Graças a Deus Steve e Mike não descobriram nada. Mike, pelo menos,
teria dito: “Não, Steve, não faça brincadeiras. Não faça piadas. Elas geram uma
imagem errada da empresa”. Isso é o que qualquer tipo mais profissional teria
dito. Mas espera aí! Eles estão lidando com Steve Wozniak. Eu levo o trabalho a
sério – projetei um produto fantástico e todos sabiam disso – e fui sério ao fundar
uma empresa e ao introduzir um produto novo no mercado. Mas para mim, tudo
isso caminha junto com me divertir e fazer piadas. Passei toda a vida agindo assim.
E se pensar a respeito, boa parte da personalidade do computador Apple reside na
diversão. E tudo o que aconteceu só aconteceu de fato porque meu estilo era esse:
diversão. As piadas fazem as coisas valer a pena.
Não consegui parar de rir no dia seguinte na Apple, quando Steve viu o quadro
comparativo e começou a falar positivamente sobre o fato de nosso desempenho não
estar tão ruim em comparação. Claro que estávamos muito ruins, como todos os
demais, exceto meu Zaltair inventado, mas ele disse: “Ei, não fizemos muito feio,
afinal; tivemos melhor classificação do que alguns outros”. Ai, meu Deus! Randy
Wiggington precisou sair da sala porque chorava de tanto rir!
60
TÓPICO 3 | TIPOS DE COMPUTADORES E SEUS COMPONENTES
Acontece que cerca de um terço das pessoas, umas duas centenas, haviam
pegado o folheto. Portanto, ele circulou.
Eu disse a Gordon: “Você sabe, ouvi falar que existe um tipo de código
no folheto”. Então peguei a brochura e olhei para as letras como se estivesse
descobrindo aquilo pela primeira vez. “P... R... O... C...”.
Tenho certeza de que por anos a fio todos pensaram que a Processor Technology
é que havia feito o folheto. Eu não havia admitido nada para ninguém até muitos anos
mais tarde, quando estava em uma festa de aniversário de Steve Jobs.
Foi lá que apresentei para ele uma cópia emoldurada do folheto. Assim que a
viu, ele começou a gargalhar. Steve jamais suspeitara que eu estivesse por trás de tudo!
FONTE: WOANIAK, Steve. Iwoz: a verdadeira história da Apple segundo seu cofudador. São
Paulo: Évora, 2011, p. 198- 221.
61
RESUMO DO TÓPICO 3
Neste tópico vimos os tipos de computadores e suas características.
62
AUTOATIVIDADE
63
64
UNIDADE 2
CONCEITOS FUNDAMENTAIS DA
COMPUTAÇÃO
OBJETIVOS DE APRENDIZAGEM
Ao final desta unidade você será capaz de:
PLANO DE ESTUDOS
Esta unidade de ensino está dividida em três tópicos, sendo que no final de
cada um deles você encontrará atividades que contribuirão para a apropria-
ção dos conteúdos.
TÓPICO 3 – DADOS
65
66
UNIDADE 2
TÓPICO 1
SISTEMAS DE NUMERAÇÃO
1 INTRODUÇÃO
Através dos estudos realizados foi possível perceber que a área da
computação possui raízes no campo da matemática e que seu desenvolvimento
não ocorreu de forma repentina.
2 SISTEMA DE NUMERAÇÃO
Na antiguidade, diversos sistemas de numeração foram utilizados, como
os sistemas de numeração de base dois, três, cinco e vinte (BOYER, 1996). Para
representação numérica, diversas simbologias foram utilizadas. Isso implica em
podermos classificar os sistemas de numeração em dois grupos: os sistemas de
numeração não posicionais e os sistemas de numeração posicionais (FOROUZAN;
MOSHARRAF, 2011).
67
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
III 3
IV 4
VIII 8
XIX 19
LXXII 72
CI 101
MMVII 2007
FONTE: A autora
Binário Decimal
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
FONTE: A autora
69
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
Octal Decimal
12 = 10
23 = 19
35 = 29
FONTE: A autora
70
TÓPICO 1 | SISTEMAS DE NUMERAÇÃO
Hexadecimal Decimal
47 = 71
68 = 104
75 = 117
FONTE: A autora
71
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
Divisões sucessivas:
FONTE: A autora
72
TÓPICO 1 | SISTEMAS DE NUMERAÇÃO
FONTE: A autora
73
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
FONTE: A autora
74
TÓPICO 1 | SISTEMAS DE NUMERAÇÃO
FONTE: A autora
FONTE: A autora
75
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
FONTE: A autora
FONTE: A autora
76
TÓPICO 1 | SISTEMAS DE NUMERAÇÃO
FONTE: A autora
FONTE: A autora
77
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
14 REGRAS DE FIXAÇÃO
Após ter estudado estes métodos de conversão, pode-se perceber que as
conversões podem ser divididas em duas categorias. A primeira categoria é a das
conversões de valores do sistema de numeração decimal para outros sistemas de
numeração. E a segunda categoria, a das conversões de valores de outros sistemas
de numeração para o decimal. Poderíamos argumentar ainda que há uma terceira
categoria, que seria a das conversões entre sistemas de numeração que não envolvem
o sistema decimal, porém, se considerarmos que todas as conversões podem ser
realizadas convertendo-se primeiramente para o decimal e em seguida para o sistema
de numeração destino, podemos considerar a existência de apenas duas categorias.
Estas regras de fixação são importantes para que você não esqueça a forma
de realização das conversões entre sistemas de numeração. Porém, no seu dia a dia
profissional é muito provável que utilize calculadoras científicas, as quais realizam
estas operações de forma simples e rápida.
78
TÓPICO 1 | SISTEMAS DE NUMERAÇÃO
FONTE: A autora
79
RESUMO DO TÓPICO 1
Mais uma etapa foi cumprida! Nesse tópico você estudou que:
80
AUTOATIVIDADE
a) (101)2
b) (100111)2
a) 10110
b) 4010
a) 14410
b) 4310
81
82
UNIDADE 2 TÓPICO 2
BASES COMPUTACIONAIS
1 INTRODUÇÃO
Um sistema computacional é formado por diversos elementos que devem
funcionar harmoniosamente. Estes elementos são formados tanto por dispositivos
físicos, denominados de hardware (já estudado na Unidade 1), quanto de dispositivos
virtuais, denominados de software.
83
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
2 ARQUITETURA DE COMPUTADORES
Relembrando um pouco da Unidade 1, a arquitetura de computadores também
é tipicamente referenciada por arquitetura e organização de computadores, pois trata
da forma como os elementos físicos de um sistema computacional estão dispostos ou
organizados. Em relação à organização, os computadores podem ser divididos em três
categorias ou subsistemas: a Unidade Central de Processamento, a memória principal
e o subsistema de entrada e saída (FOROUZAN; MOSHARRAF, 2011).
84
TÓPICO 2 | BASES COMPUTACIONAIS
3 SOFTWARE
O computador é um sistema composto por duas partes importantes:
hardware e software (FOROUZAN; MOSHARRAF, 2011). O hardware é composto
pelos equipamentos físicos, ou seja, pelas máquinas e demais equipamentos
ligados ao computador. Já o software é composto pelo conjunto de programas que
são executados neste hardware.
85
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
86
TÓPICO 2 | BASES COMPUTACIONAIS
87
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
88
TÓPICO 2 | BASES COMPUTACIONAIS
4 REDES DE COMPUTADORES
Na sociedade contemporânea a confiabilidade e qualidade da informação
são fatores de importância fundamental. Mais e mais informações têm sido geradas
e utilizadas na tomada de decisões, tanto em nível pessoal quanto profissional,
89
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
definindo muitas vezes o sucesso de uma organização ou mesmo de toda uma nação.
Toda essa informação armazenada serve como uma grande base de conhecimento
que pode ser atualizada, consultada e utilizada para as mais diversas finalidades,
objetivando a melhoria da qualidade de vida de toda a sociedade.
Os sinais podem ser entendidos como ondas que são propagadas através de
algum meio físico, o qual pode ser um cabo, o ar ou outros meios disponíveis. Para
que o processo de transmissão de informação ocorra, há necessidade da execução
de uma sucessão de processos, os quais são relacionados a seguir:
91
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
As redes de computadores estão cada vez mais presentes no dia a dia das
pessoas e instituições, através de diversos tipos de estruturas de organização.
Ao longo do desenvolvimento das redes de computadores foram empregadas
muitas teorias, modelos e técnicas para que se chegasse aos modelos disponíveis
atualmente. Além da aplicação das teorias, modelos e técnicas, também foi
necessário que muitos experimentos fossem realizados para provar a efetividade
de determinadas teorias, modelos e técnicas.
92
TÓPICO 2 | BASES COMPUTACIONAIS
As redes locais, também conhecidas como LAN (Local Area Network), são
redes que podem abranger um ou mais edifícios que estejam fisicamente próximos.
Delimitar uma rede local em uma distância máxima específica é relativamente
complicado, pois pode haver grandes organizações que tenham quilômetros de
extensão e mesmo assim a rede ser classificada como uma rede local (COMER, 2001).
93
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
Uma parte dos recursos da rede é reservada para a chamada, de modo que
nenhuma outra chamada possa utilizar aqueles recursos antes que a conexão seja
encerrada. A maior vantagem do uso da comutação de pacotes é o fato de permitir
que pacotes de diferentes fontes possam utilizar a mesma linha, permitindo
otimizar o uso dos recursos instalados.
94
TÓPICO 2 | BASES COMPUTACIONAIS
95
RESUMO DO TÓPICO 2
Chegamos ao final do Tópico 2. Neste tópico você estudou que:
96
AUTOATIVIDADE
I- Software básico.
II- Software utilitário.
III- Software aplicativo.
a) ( ) III - I - II.
b) ( ) I - II - III.
c) ( ) II - I - III.
d) ( ) III - II - I.
I- Editor.
II- Compilador.
III- Montador.
IV- Depurador.
a) ( ) IV - I - III - II.
b) ( ) I - II - IV - III.
c) ( ) III - IV - II - I.
d) ( ) II - III - I - IV.
97
3 Para trabalharmos com o computador, precisamos de softwares. Os softwares
são divididos em quatro categorias: básicos, utilitários, aplicativos e
ferramentas de desenvolvimento. Descreva os softwares utilitários.
98
UNIDADE 2
TÓPICO 3
DADOS
1 INTRODUÇÃO
Para gerenciar a complexidade dos problemas e o processo de resolução
de problemas, os cientistas da computação usam abstrações, que lhes permitem
concentrar-se em uma “grande figura”, sem se perderem nos detalhes. Com a
criação de modelos de domínio do problema, somos capazes de utilizar um melhor
e mais eficiente processo de resolução de problemas. Esses modelos permitem
descrever os dados dos algoritmos de manipularão de uma forma mais consistente
no que diz respeito ao problema em si.
99
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
O que acontece com os TADs simples não acontece com muitos TADS
complexos e úteis. Precisamos de um TAD para lista, outro para pilha, outro para fila
e assim por diante. Os TADs para terem eficiência devem ser criados e armazenados
na biblioteca do computador que os utilizará. Novamente, o usuário precisa apenas
saber se a operação está disponível para a lista e não como ela é realizada.
100
TÓPICO 3 | DADOS
101
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
pilha_cria (nomedapilha)
pilha_cria
Operação pilha_vazia
FONTE: Forouzan e Mosharraf (2011, p. 282)
pilha_isere(nomedapilha, itemdedados)
102
TÓPICO 3 | DADOS
30 Elemento
30 do topo
Elemento
do topo
78 78
pilha_insere
20 Operação 20
pilha_exclui(nomedapilha, itemdedados)
Elemento
30 30
do topo
Elemento
78 78 do topo
pilha_exclui
20 Operação 20
103
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
pilha_vazia(nomedapilha)
TAD de pilhas
Definição: uma lista de itens de dados que somente pode ser acessada
em uma extremidade, chamada topo da pilha.
pilha_cria (P) P
12
pilha_insere (P, 12) P
10
2
pilha_insere (P, 2) P
10
FONTE: Forouzan e Mosharraf (2011, p. 284)
104
TÓPICO 3 | DADOS
contador topo
[n]
S
b. Implementação c. Implementação em
em vetor lista encadeada
a. TAD
FONTE: Forouzan e Mosharraf (2011, p. 286)
105
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
exclui insere
(fila_exclui) (fila_insere)
Como pilhas, filas também possuem muitas operações, vamos ver as quatro
básicas: fila_cria, fila_insere, fila_exclui e fila_vazia.
fila_cria(nomedafila)
fila_cria
Operação Fila vazia
FONTE: Forouzan e Mosharraf (2011, p. 287)
fila_insere(nomedafila, itemdedados)
106
TÓPICO 3 | DADOS
20 78 fila_insere 20 78 34
Fila antes Operação Fila
Filadepois
depois
FONTE: Forouzan e Mosharraf (2011, p. 287)
fila_exclui(nomedafila, itemdedados)
Dado excluído
inicio fim
20 inicio fim
da fila da fila da fila da fila
20 78 34 fila_exclui 78 34
Fila antes Operação Fila depois
FONTE: Forouzan e Mosharraf (2011, p. 288)
fila_vazia(nomedafila)
107
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
TAD de filas
Definição: uma lista de itens de dados na qual um item pode ser excluído
de uma extremidade, chamada início da fila ou pode ser inserido na outra,
chamada fim da fila.
fila_cria (F) F
fila_insere (F, 2) F 12 2
FONTE: Forouzan e Mosharraf (2011, p. 289)
NOTA
lista_cria(nomedalista)
109
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
lista_isere(nomedalista,elemento)
elementos
Lista
(depois da inserção) 10 20 25 30 Lista
Elemento
inserido
Na exclusão também é necessário que seja feita a busca na lista para localizar
os itens a serem excluídos. Depois que a localização dos dados é definida, a exclusão
pode ser efetuada. Vejamos a sintaxe (FOROUZAN; MOSHARRAF, 2011):
Restante
alvo 25 lista_exclui (lista, alvo, elemento) 25 dos dados
elementos
Lista
(depois da exclusão)
10 20 30 Lista
Chave
FONTE: Forouzan e Mosharraf (2011, p. 292)
110
TÓPICO 3 | DADOS
Lista
10 20 25 30
(depois da recuperação)
A operação lista vazia verifica o status da lista. Para esta operação utilizamos
a seguinte sintaxe:
lista_vazia(nomedalista)
111
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
lista_cria (L) L
lista_insere (L, 5) 5 10 L
5
se ( não lista_vazia (L) ) lista_exclui (L, 3) 10
L
lista_insere (L, 6) 5 6 10 L
112
TÓPICO 3 | DADOS
Cada nó de uma árvore pode ser uma subárvore, que inclui um de seus
filhos e todos os descendentes deste filho. (FOROUZAN; MOSHARRAF, 2011).
A: raiz
B e F: nós internos
A C, D, E, G, H e I: folhas
Nós
B E F
C D G H I
113
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
E
Subárvore E
B F
C D G H I
Subárvore C Subárvore D Subárvore G Subárvore H Subárvore I
Subárvore B Subárvore F
FONTE: Forouzan e Mosharraf (2011, p. 297)
114
TÓPICO 3 | DADOS
A A
B E B E
F F
C D C D
LEITURA COMPLEMENTAR
ÁRVORES
FIGURA 1
115
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
Como listas ligadas, árvores são estruturas de dados recursivas já que elas
são definidas recursivamente:
Uma árvore é:
1 CONSTRUINDO ÁRVORES
class Tree :
def __init__(self, cargo, left=None, right=None) :
self.cargo = cargo
self.left = left
self.right = right
def __str__(self) :
return str(self.cargo)
116
TÓPICO 3 | DADOS
A carga pode ser de qualquer tipo, mas os parâmetros left e right devem ser
células. left e right são opcionais; o valor default é None.
Uma forma de construir uma árvore é de baixo para cima. Aloque os filhos
primeiro:
left = Tree(2)
right = Tree(3)
2 PERCORRENDO ÁRVORES
Cada vez que você vê uma nova estrutura de dados, sua primeira pergunta
deveria ser “Como eu percorro esta estrutura? ”. A forma mais natural de percorrer
uma árvore é fazer o percurso recursivamente. Por exemplo, se a árvore contém
inteiros na carga, a função abaixo retorna a soma das cargas:
def total(tree) :
if tree == None : return 0
return total(tree.left) + total(tree.right) + tree.cargo
O caso base é a árvore vazia, que não contém nenhuma carga, logo a
soma das cargas é 0. O passo recursivo faz duas chamadas recursivas para achar
a soma das cargas das subárvores dos filhos. Ao finalizar a chamada recursiva,
adicionamos a carga do pai e devolvemos o valor total.
117
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
3 ÁRVORES DE EXPRESSÕES
FIGURA 2
118
TÓPICO 3 | DADOS
4 PERCURSO DE ÁRVORES
def printTree(tree) :
if tree == None : return
print tree.cargo,
printTree(tree.left)
printTree(tree.right)
Você pode suspeitar que se você percorre a árvore numa ordem diferente,
você produzirá expressões numa notação diferente. Por exemplo, se você imprime
subárvores primeiro e depois a raiz, você terá:
def printTreePostorder(tree) :
if tree == None : return
printTreePostorder(tree.left)
printTreePostorder(tree.right)
print tree.cargo,
119
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
def printTreeInorder(tree) :
if tree == None : return
printTreeInorder(tree.left)
print tree.cargo,
printTreeInorder(tree.right)
120
TÓPICO 3 | DADOS
>>> printTreeIndented(tree)
3
*
2
+
1
121
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
FIGURA 3
O token final end é prático para prevenir que o analisador tente buscar
mais dados após o término da lista.
A título de um exercício, escreva uma função que recebe uma expressão na forma
de uma cadeia e devolve a lista de tokens.
122
TÓPICO 3 | DADOS
def getNumber(tokenList) :
x = tokenList[0]
if type(x) != type(0) : return None
del tokenList[0]
return Tree(x, None, None)
123
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
def getProduct(tokenList) :
a = getNumber(tokenList)
if getToken(tokenList, ‘*’) :
b = getNumber(tokenList)
return Tree(‘*’, a, b)
else :
return a
124
TÓPICO 3 | DADOS
FIGURA 4
def getProduct(tokenList) :
a = getNumber(tokenList)
if getToken(tokenList, ‘*’) :
b = getProduct(tokenList) # this line changed
return Tree(‘*’, a, b)
else :
return a
125
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
Se você está disposto a brincar com esta definição, ela tem uma propriedade
interessante: podemos representar qualquer expressão (sem parênteses) como uma
soma de produtos. Esta propriedade é a base do nosso algoritmo de análise sintática.
def getSum(tokenList) :
a = getProduct(tokenList)
if getToken(tokenList, ‘+’) :
b = getSum(tokenList)
return Tree(‘+’, a, b)
else :
return a
126
TÓPICO 3 | DADOS
def getNumber(tokenList) :
if getToken(tokenList, ‘(‘) :
x = getSum(tokenList) # get subexpression
getToken(tokenList, ‘)’) # eat the closing
parenthesis
return x
else :
x = tokenList[0]
if type(x) != type(0) : return None
tokenList[0:1] = [] # remove the token
return Tree(x, None, None) # return a leaf with the
number
6 MANIPULANDO ERROS
def getNumber(tokenList) :
if getToken(tokenList, ‘(‘) :
x = getSum(tokenList)
if not getToken(tokenList, ‘)’):
raise ‘BadExpressionError’, ‘missing parenthesis’
return x
else :
# the rest of the function omitted
127
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
O comando raise cria uma exceção; neste caso criamos um novo tipo de
exceção, chamada de BadExpressionError. Se a função que chamou getNumber,
ou uma das outras funções no traceback, manipular a exceção, então o programa
pode continuar. Caso contrário Python vai imprimir uma mensagem de erro e
terminará o processamento em seguida.
A título de exercício, encontre outros locais nas funções criadas onde erros
possam ocorrer e adicione comandos ``raise`` apropriados. Teste seu código com expressões
malformadas.
128
TÓPICO 3 | DADOS
FIGURA 5
def animal() :
# start with a singleton
root = Tree(“bird”)
129
UNIDADE 2 | CONCEITOS FUNDAMENTAIS DA COMPUTAÇÃO
tree = tree.getLeft()
# make a guess
guess = tree.getCargo()
prompt = “Is it a “ + guess + “? “
if yes(prompt) :
print “I rule!”
continue
def yes(ques) :
from string import lower
ans = lower(raw_input(ques))
return (ans[0:1] == ‘y’)
A condição do laço externo é 1`, que significa que ele continuará até a
execução de um comando break, caso o usuário não pense num animal.
O laço while interno caminha na árvore de cima para baixo, guiado pelas
respostas do usuário.
130
TÓPICO 3 | DADOS
Uma falha do programa é que ao sair ele esquece tudo que lhe foi
cuidadosamente ensinado!
8 GLOSSÁRIO
árvore binária (binary tree): uma árvore em que cada célula tem zero, um ou dois
descendentes.
raiz (root): a célula mais alta de uma árvore, a (única) célula de uma árvore que não
tem pai.
folha (leaf): uma célula mais baixa numa árvore; uma célula que não tem
descendentes.
pai (parent): a célula que aponta para uma célula dada.
filho (child): uma célula apontada por uma célula dada.
irmãos (siebling): células que têm o mesmo pai.
nível (level): um conjunto de células equidistantes da raiz.
operador binário (binary operator): um operador sobre dois operandos.
subexpressão (subexpression): uma expressão entre parênteses que se comporta
como um operando simples numa expressão maior.
pré-ordem (preorder): uma forma de percorrer uma árvore visitando cada célula
antes dos seus filhos.
notação prefixa (prefix notation): uma forma de escrever uma expressão matemática
em que cada operador aparece antes dos seus operandos.
pós-ordem (postorder): uma forma de percorrer uma árvore visitando os filhos de
cada célula antes da própria célula.
in-ordem (inorder): uma forma de percorrer uma árvore visitando a subárvore
esquerda, seguida da raiz e finalmente da subárvore direita.
131
RESUMO DO TÓPICO 3
Chegamos ao final de mais uma unidade. Neste tópico vimos que:
• Um TAD é um pacote que define um novo tipo de dados, operações sobre ele e
encapsula os dados e as operações.
• Pilha é uma lista linear restrita na qual todas as inserções e exclusões são feitas
através do topo.
• As pilhas têm estrutura do tipo LIFO, ou seja, último a entrar, primeiro a sair.
• Fila é uma lista linear na qual os dados podem ser inseridos apenas no fim da fila.
• A fila possui estrutura do tipo FIFO, ou seja, primeiro a entrar, primeiro a sair.
• Lista linear geral é aquela na qual as operações, como inserção e exclusão, podem
ser feitas em qualquer local da lista, ou seja, no início, meio ou fim.
132
AUTOATIVIDADE
1 Um dos tipos de dados estudados são as pilhas. O que é uma pilha? Quais
são as quatro operações básicas com pilhas?
2 Qual a estrutura de dados baseada no princípio FIFO (first in, first out), em
que os elementos que foram inseridos no início são os primeiros a serem
removidos?
a) ( ) Pilha
b) ( ) Árvore
c) ( ) Lista
d) ( ) Fila
e) ( ) Lista Encadeada
a) ( ) A
b) ( ) B
c) ( ) C
d) ( ) D
133
134
UNIDADE 3
LÓGICA DE PROGRAMAÇÃO
OBJETIVOS DE APRENDIZAGEM
PLANO DE ESTUDOS
Esta unidade está dividida em cinco tópicos, sendo que no final de cada um
deles você encontrará atividades que contribuirão para a apropriação dos
conteúdos.
135
136
UNIDADE 3
TÓPICO 1
1 INTRODUÇÃO
O dia a dia de pessoas e instituições tem sido facilitado pelo uso de softwares
das mais variadas naturezas. Seu uso crescente requer que mais e melhores softwares
sejam desenvolvidos para atender diversas áreas de aplicação.
137
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
• Sistema: para fins computacionais, sistema pode ser definido como um conjunto
inter-relacionado de programas. Um sistema geralmente permite a execução
de um número maior de funcionalidades. Estas funcionalidades podem estar
organizadas em programas diferentes. Um exemplo é o sistema operacional. Ele
possui uma série de pequenos programas que auxiliam no seu funcionamento e
na execução das tarefas.
• Comando: é uma palavra ou símbolo que indica uma ordem para execução de
uma ação. Os comandos são imperativos. Por exemplo: leia, escreva, escolha,
entre outros.
• Instrução: é uma das tarefas que devem ser executadas para a obtenção do
resultado desejado através do software. Esta tarefa pode ser um cálculo, uma
atribuição, uma chamada de sub-rotina, entre outras.
• Sintaxe: é a forma de organização das instruções para que seja obtido o resultado
desejado, seguindo-se as regras da linguagem utilizada. É o conjunto de regras
que indicam o formato de escrita das instruções. Considera também a sequência
em que as instruções devem ser escritas para atender aos requisitos da linguagem
utilizada, pois não basta apenas a escrita estar correta, é necessário que haja
coerência na instrução.
138
TÓPICO 1 | FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO
3 LÓGICA
Pessoas utilizam lógica em seu cotidiano sem perceber, chegam a citá-la
sem entender direito seu significado.
139
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Este exemplo mostra lógica ordenada, porém, muitas vezes nosso raciocínio
funciona desordenadamente.
1. Sair do correio;
2. Entrar na fila;
3. Entrar no correio;
4. Informar seus dados ao atendente;
5. Procurar a fila;
6. Pegar a mercadoria;
7. Conferir a mercadoria.
Você conseguiria retirar a mercadoria? Não, pois mesmo que as ações estão
corretas, a sequência não está. Temos como primeira ação sair do correio. Como
retiramos a mercadoria estando fora dele? Vamos ver como ficariam as mesmas
ações, mas na ordem correta.
1. Entrar no correio;
2. Procurar a fila;
3. Entrar na fila;
4. Informar seus dados ao atendente;
5. Pegar a mercadoria;
6. Conferir a mercadoria;
7. Sair do correio.
4 LÓGICA DE PROGRAMAÇÃO
Quando falamos de lógica de programação estamos apenas contextualizando
a lógica em programação de computadores, onde, como na lógica, temos uma
sequência de ações para solucionar um problema.
140
TÓPICO 1 | FUNDAMENTOS DE LÓGICA DE PROGRAMAÇÃO
inicio
comando 1
comando 2
comando 3
fim
141
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Comando 1
Comando 2
Comando 3
142
RESUMO DO TÓPICO 1
143
AUTOATIVIDADE
1 Monte um algoritmo com a sequência correta de uma pessoa que vai de táxi
a uma reunião.
144
UNIDADE 3
TÓPICO 2
CONSTANTES E VARIÁVEIS
1 INTRODUÇÃO
Conforme estudos realizados no tópico anterior, vimos que o raciocínio
lógico é a base para fazermos um algoritmo, além disso vimos suas estruturas de
representação.
2 CONSTANTES
Constantes como o próprio nome diz, é tudo que é fixo, estável, inalterável,
imutável, contínuo, incessante, invariável, de valor fixo e que é aplicado em
diversos pontos de vista. Assim, constante é uma grandeza numérica fixa utilizada
normalmente em uma expressão aritmética ou matemática, a qual define um valor
que será inalterado na expressão, independentemente das variáveis envolvidas na
operação a ser realizada (MANZANO; OLIVEIRA, 2014).
145
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
3 VARIÁVEIS
Variável é tudo que está sujeito a variação, que é incerto, estável ou inconstante.
Os dados a serem processados em computadores são bastante variáveis.
O nome da variável pode ser formado por um ou mais caracteres e deve estar
sempre em letras maiúsculas. O primeiro caractere deve ser obrigatoriamente uma letra e
os caracteres seguintes podem ser letras ou números. Não é permitido o uso de símbolos,
sinais gráficos e de pontuação. Alguns exemplos de identificadores permitidos: NOME
IDADE END1 NOME_DO_ALUNO
146
TÓPICO 2 | CONSTANTES E VARIÁVEIS
4 TIPOS DE DADOS
O tipo de dado define o conjunto de valores que um identificador pode
assumir ou armazenar. Nas linguagens de programação estão disponíveis vários
tipos de dados. Para fins de desenvolvimento de algoritmos utilizam-se os tipos
de dados primitivos, pois as variações de tipos são definidas conforme os recursos
disponibilizados pela linguagem de programação e a necessidade de representação
ou armazenamento.
• Caractere: são delimitados pelo símbolo aspas (“ ”), e são representados por
letras de A até Z, números de 0 até 9 e símbolos. Exemplos: “Maria”; “Rua 296”;
greisse@uniasselvi.com.br, entre outros.
• Lógico: armazena valores do tipo sim e não, verdadeiro e falso. O tipo de dado
lógico também é conhecido como booleano.
cidade: caractere;
Podemos declarar mais variáveis ao mesmo tempo para cada tipo. Vejamos
a sintaxe:
147
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Vejamos o exemplo:
constante = valor;
Exemplos práticos:
salario_minino = 750,00;
aliquota: 7,5;
Algoritmo declaração;
Constantes
Percentual = 8,5
Reajuste = 6;
Variáveis
Sexo: caractere;
Quantidade: inteiro;
Peso, valor: real;
Início
<instruções>
Fim.
148
TÓPICO 2 | CONSTANTES E VARIÁVEIS
Exemplo(s):
Continuar = verdadeiro;
Aluna = “Maria”;
Quantidade = 7;
Total_Bruto = A + B;
Exemplo(s):
leia(Continuar);
leia(Total_Bruto);
leia(Idade);
leia(Nome);
leia(Prosseguir);
149
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Exemplo(s):
Escreva(“Primeiro Algoritmo.”);
Escreva(“Total: “, Total_Bruto);
Escreva(“Sua idade é: “, Idade);
Escreva(“Deseja prosseguir? (S/N): “);
Escreva(“Informe seu nome: “);
Exemplo:
Algoritmo comentário
Inicio
<comandos>
Fim.
150
TÓPICO 2 | CONSTANTES E VARIÁVEIS
Algoritmo Soma
{Definição de variáveis}
Var
{Declara três variáveis para armazenar valores do tipo real}
valor1, valor2, soma: real;
inicio
{Solicita e armazena os dois valores que o usuário deseja somar}
A soma de 5 + 3 é 8
7 EXPRESSÕES
No exemplo de nosso primeiro algoritmo utilizamos a expressão somar,
para calcularmos a soma dos dois números informados pelo usuário. A seguir
você irá conhecer outros tipos de expressões, seus operadores e suas descrições.
151
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Operador Função
+ Adição e concatenação
- Subtração
* Multiplicação
/ Divisão de valores reais
div Divisão de valores inteiros
Mod Resto da divisão de valores inteiros
FONTE: A autora
Operador Função
e Conjunção
ou Disjunção
não Negação
FONTE: A autora
Operador Função
= Igual
> Maior
>= Maior igual
< Menor
<= Menor igual
<> Diferente
FONTE: A autora
152
RESUMO DO TÓPICO 2
153
AUTOATIVIDADE
a) Metros
b) Peso
c) Valor_da_compra
d) CPF
e) Endereço
f) Ok
g) Estado_civil
a) 198 + 12
( ) Aritmético
( ) Aritmético e Lógico
( ) Relacional e Aritmético
( ) Aritmético e Lógico
( ) Aritmético e Relacional
( ) Lógico e Relacional
154
UNIDADE 3
TÓPICO 3
ESTRUTURAS DE CONTROLE
1 INTRODUÇÃO
As estruturas de controle permitem determinar como um conjunto de
instruções deverá ser executado para a realização das tarefas desejadas. Esta
determinação pode ser a ordem em que as instruções deverão ser executadas, a
submissão a determinadas condições ou o refinamento do processamento.
Exemplo:
155
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Algoritmo Calcula;
var
Primeiro, Segundo, Resultado : inteiro;
Início
Primeiro = 0;
Segundo = 0;
escreva (“Informe o primeiro número:”’);
leia(Primeiro);
escreva (’Informe o segundo número: ’);
leia(Segundo);
Resultado = (Primeiro * 3) + Segundo;
escreva(Resultado);
fim.
se (<condição>) então
instruções executadas após condição ser verdadeira
fim_se
instruções executadas após condição ser falsa ou após executar instruções
Exemplos:
156
TÓPICO 3 | ESTRUTURAS DE CONTROLE
se (<condição>) então
instruções executadas após condição ser verdadeira
senão
instruções executadas após condição ser falsa
fim_se
instruções executadas após condição ser falsa ou após executar instruções
Exemplo:
157
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Exemplo:
senão
início senão
escreva(A, ’ está entre 16 e 20’);
fim senão;
fim se
senão
início senão
escreva(A, ’ não está entre 10 e 20’);
fim senão;
fim_se;
Vejamos a sintaxe:
Escolha (expressão)
Caso <rótulo1>: <bloco de comandos>
Caso <rótulo2>: <bloco de comandos>
Caso <rótulo3>: <bloco de comandos>
158
TÓPICO 3 | ESTRUTURAS DE CONTROLE
Senão
<bloco de comandos>
Fim escolha
Exemplo:
escolha Numero
caso 1: escreva(’*’);
caso 2: escreva(’**’);
caso 3: escreva(’***’);
senão
escreva(’Este número está fora da faixa.’);
fim escolha.
159
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Quantidade = 0;
enquanto (Quantidade <= 5) faça
início enquanto
Quantidade = Quantidade + 1;
escreva(Quantidade, ’ª execução.’);
fim enquanto;
Algoritmo Enquanto_Faca;
variáveis
Quantidade : inteiro;
início
Quantidade = 1;
enquanto (Quantidade <= 5) faça
início enquanto
escreva(Quantidade, ’ vez.’);
Quantidade = Quantidade + 1;
fim enquanto;
fim.
Para essa estrutura utiliza-se os comandos para, de, até, passo, faça e fim_
para para realizar a construção da instrução desta estrutura. Pode-se executar um
determinado conjunto de instruções subordinadas a um bloco até determinado
160
TÓPICO 3 | ESTRUTURAS DE CONTROLE
Vejamos o exemplo:
Algoritmo Para_Faca;
variáveis
Quantidade : inteiro;
início
para Quantidade de 1 até 5 faça
início para
escreva(Quantidade, ’ vez.’);
fim para;
fim.
161
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Repita
<instruções>
Até_que
Vejamos o exemplo:
Quantidade = 0;
repita
Quantidade = Quantidade + 1;
escreva(Quantidade, ’ª execução.’);
até (Quantidade >= 5);
Algoritmo Repita_Ate;
variáveis
Quantidade : inteiro;
início
Quantidade = 1;
repita
escreva(Quantidade, ’ vez.’);
Quantidade = Quantidade + 1;
até (Quantidade > 5);
fim.
162
RESUMO DO TÓPICO 3
163
AUTOATIVIDADE
164
UNIDADE 3
TÓPICO 4
TIPOS ESTRUTURADOS
1 INTRODUÇÃO
A partir do momento em que se passa a construir algoritmos mais
sofisticados, aumenta proporcionalmente a necessidade de elementos que deem
suporte a esta construção.
2 REGISTROS
Registros permitem a criação de tipos de dados heterogêneos. Os elementos
que compõem o registro são chamados de campos. Estes campos devem ter nomes
(identificadores) diferentes e podem ter o mesmo tipo de dado ou tipos de dados
diferentes, conforme a necessidade.
165
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Algoritmo Registro;
tipo
TCadastroPessoas = registro
Codigo : inteiro;
Nome : caracter;
Endereco : caracter;
fim registro;
variaveis
CadastroPessoas : TCadastroPessoas;
início
escreva(’Informe o código: ’);
leia(CadastroPessoas.codigo);
escreva(’Informe o nome: ’);
leia(CadastroPessoas.nome);
escreva(’Informe o endereço: ’);
leia(CadastroPessoas.endereco);
fim.
3 VETORES
Vetor é o nome atribuído a um tipo estruturado que armazena um conjunto
unidimensional de elementos homogêneos. Os vetores são conjuntos homogêneos,
pois todos os elementos que o compõem são do mesmo tipo.
Vejamos a sintaxe:
166
TÓPICO 4 | TIPOS ESTRUTURADOS
Algoritmo VetorSimples;
tipo
TNumeros = Vetor[1..10] de inteiro;
variáveis
VetorNumeros : TNumeros;
Contador : inteiro;
início
para Contador de 1 até 10 faça
início para
escreva(’Informe um número: ’);
leia(VetorNumeros[Contador]);
fim para;
fim.
Exemplo:
Algoritmo VetorEstruturadoUm;
tipo
TCadastroAluno = registro
Codigo : inteiro;
Idade : inteiro;
Fim registro;
TAlunos = Vetor[1..10] de TCadastroAluno;
variáveis
VetCadAlu : TAlunos;
Contador : inteiro;
início
para Contador de 1 até 10 faça
início para
escreva(’Informe o código do aluno: ’);
leia(VetCadAlu[Contador].Codigo);
escreva(’Informe a idade do aluno: ’);
leia(VetCadAlu[Contador].Idade);
fim para;
fim.
167
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
4 MATRIZES
Matriz é o nome atribuído a um tipo estruturado que armazena um conjunto
bidimensional de elementos homogêneos. As matrizes são conjuntos homogêneos,
pois todos os elementos que a compõem são do mesmo tipo.
Algoritmo MatrizSimples;
tipo
TMatriz = Vetor[1..3, 1..3] de inteiro;
variáveis
Matriz : TMatriz;
Linha : inteiro;
Coluna : inteiro;
início
para Linha de 1 até 3 faça
início para
para Coluna de 1 até 3 faça
início para
escreva(’Informe um número para a ’, Coluna, ’ coluna da ’,
Linha, ’ Linha: ’);
leia(Matriz[Linha, Coluna]);
fim para;
fim para;
fim.
168
TÓPICO 4 | TIPOS ESTRUTURADOS
Uma matriz estruturada é composta por elementos cujo tipo de dado utilizado
é derivado de outros tipos de dados. Uma matriz estruturada também é conhecida
como uma matriz de registros.
Algoritmo MatrizEstruturadaUm;
constantes
MaxLin = 5;
MaxCol = 5;
tipo
TAlu = registro
Codigo : inteiro;
Idade : inteiro;
fim registro;
TMatAlu = Vetor[1..MaxLin, 1..MaxCol] de TAlu;
variaveis
Matriz : TMatAlu;
Linha : inteiro;
Coluna : inteiro;
início
para Linha de 1 até MaxLin faça
início para
para Coluna de 1 até MaxCol faça
início para
escreva(’Informe o código do aluno da ’, Coluna, ’ coluna da ’,
Linha, ’ Linha: ’);
leia(Matriz[Linha, Coluna].Codigo);
escreva(’Informe a idade do aluno da ’, Coluna, ’ coluna da ’,
Linha, ’ Linha: ’);
leia(Matriz[Linha, Coluna].Idade);
fim para;
fim para;
fim.
169
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Algoritmo MatrizEstruturadaDois;
constantes
MaxLin = 10;
MaxCol = 5;
tipo
TCadPes = registro
Codigo : inteiro;
Nome : caracter;
Endereco : caracter;
Renda : real;
fim registro;
TCad = Vetor[1..MaxLin, 1..MaxCol] de TCadPes;
variáveis
{Declaração da variável do tipo TCad}
Cad : TCad;
Linha : inteiro;
Coluna : inteiro;
início
para Linha de 1 até MaxLin faça
início para
para Coluna de 1 até MaxCol faça
início para
escreva(’Informe o codigo da pessoa da ’, Coluna, ’ coluna da ’,
Linha, ’Linha: ’);
leia(Cad[Linha, Coluna].Codigo);
escreva(’Informe o nome da pessoa da ’, Coluna, ’ coluna da ’,
Linha, ’ Linha: ’);
leia(Cad[Linha, Coluna].Nome);
escreva(’Informe o endereço da pessoa da ’, Coluna, ’ coluna da
’,Linha, ’ Linha: ’);
leia(Cad[Linha, Coluna].Endereco);
escreva(’Informe a renda mensal da pessoa da ’, Coluna, ’ coluna da
’,Linha, ’ Linha: ’);
leia(Cad[Linha, Coluna].Renda);
fim para;
fim para;
fim.
170
RESUMO DO TÓPICO 4
• Os registros são estruturas nas quais são definidos conjuntos de dados que
podem ser utilizados em vetores, matrizes ou mesmo em listas dinamicamente
alocadas na memória. Este conjunto de dados pode conter diferentes tipos de
dados, pois o registro é uma nova definição de tipo de dado.
171
AUTOATIVIDADE
172
UNIDADE 3
TÓPICO 5
1 INTRODUÇÃO
Os subalgoritmos são uma forma de organização que visa especializar
um conjunto de instruções e tornar ainda mais clara a descrição de cada parte da
solução.
Cabeçalho do subalgoritmo
Definição de constantes
Definição de tipos de dados
Definição de variáveis
Início do subalgoritmo
Corpo principal do subalgoritmo
Fim do subalgoritmo.
173
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Algoritmo Soma;
variáveis
Primeiro : inteiro;
Segundo : inteiro;
subalgoritmo SomaValores(N1, N2 : inteiro);
início
SomaValores = N1 + N2;
fim;
início
Primeiro = 0;
Segundo = 0;
escreva(’Informe o primeiro número: ’);
leia(Primeiro);
escreva(’Informe o segundo número: ’);
leia(Segundo);
escreva(SomaValores(Primeiro, Segundo));
fim.
2 ESCOPO DE IDENTIFICADORES
O escopo de identificadores (constantes, tipos e variáveis) define a
abrangência de utilização dos mesmos. O escopo define onde um identificador
pode ser utilizado. Os elementos declarados no cabeçalho podem ser utilizados em
qualquer ponto do algoritmo. Este tipo de declaração é conhecido como declaração
global (KOCHANSKI; ANDRIETTI, 2005).
Exemplo:
174
TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES
Algoritmo Calcula;
variáveis
Primeiro : inteiro;
Segundo : inteiro;
Resultado : inteiro;
subalgoritmo SomaValores(N1, N2 : inteiro);
início
Resultado = N1 + N2;
fim;
início
escreva(’Informe o primeiro número: ’);
leia(Primeiro);
escreva(’Informe o segundo número: ’);
leia(Segundo);
SomaValores(Primeiro, Segundo);
escreva(Resultado);
fim.
Exemplo(s):
Variáveis do tipo local (Soma) só podem ser vistas por quem a declarou.
Algoritmo Calcula;
variáveis
Primeiro : inteiro;
Segundo : inteiro;
Resultado : inteiro;
subalgoritmo SomaValores(N1, N2 : inteiro);
variáveis
inteiro : Soma;
início
Soma = N1 + N2;
fim;
início
escreva(’Informe o primeiro número: ’);
leia(Primeiro);
escreva(’Informe o segundo número: ’);
leia(Segundo);
escreva(SomaValores(Primeiro, Segundo));
fim.
175
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Exemplo: neste algoritmo são passadas por parâmetro duas notas lidas e o
subalgoritmo carrega a variável global “Media” com a média do aluno.
Algoritmo Media;
variáveis
inteiro : Nota1;
inteiro : Nota2;
real : Media;
subalgoritmo CalculaMedia(N1, N2 : inteiro);
início
Media = (N1 + N2) / 2;
fim;
início
escreva(’Informe a primeira nota: ’);
leia(Nota1);
escreva(’Informe a segunda nota: ’);
leia(Nota2);
CalculaMedia(Nota1, Nota2);
escreva(Media);
fim.
176
TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES
Algoritmo Emprestimo;
variáveis
ValorInicial : real;
ValorFinal : real;
Taxa : inteiro;
subalgoritmo CalculaJuros(Valor : real; Tx : inteiro): real;
início
CalculaJuros = (Valor * Tx) / 100;
fim;
início
escreva(’Informe o valor a emprestar: ’);
leia(ValorInicial);
escreva(’Informe a taxa de juros: ’);
leia(Taxa);
escreva(‘O valor dos juros é ‘,
CalculaJuros(ValorInicial, Taxa));
ValorFinal = ValorInicial + CalculaJuros(ValorInicial, Taxa);
escreva(‘O valor a pagar é ‘, ValorFinal);
fim.
177
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Algoritmo Juros;
variáveis
ValorInicial : real;
ValorFinal : real;
Taxa : inteiro;
subalgoritmo CalculaJuros(Valor : real;
Taxa : inteiro;
ValorFin : variaveis real): real;
início
ValorFin = Valor + (Valor * Taxa);
CalculaJuros = Valor * Taxa;
fim;
início
escreva(’Informe o valor a emprestar: ’);
leia(ValorInicial);
escreva(’Informe a taxa de juros: ’);
leia(Taxa);
escreva(‘O valor dos juros é ‘,
CalculaJuros(ValorInicial, Taxa, ValorFinal));
escreva(‘O valor valor a pagar é ‘, ValorFinal);
fim.
178
TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES
LEITURA COMPLEMENTAR
A pergunta que é feita por todo mundo que está aprendendo a programar
é: que linguagem de programação devo aprender? A resposta é óbvia: uma
linguagem de programação para iniciantes!
Antes de mais nada, você deve ter consciência de que ao longo da sua
carreira como programador, você sempre terá que aprender uma linguagem de
programação nova. Pois todas têm suas vantagens e desvantagens. Uma dica
interessante é: não seja fanático por uma linguagem específica! Muitas pessoas
defendem com unhas e dentes a linguagem de programação que têm mais
afinidade. Mas isso não é bom! Para cada projeto, cada trabalho, uma linguagem
é mais indicada ou não. Você deve decidir qual usar não com base no seu gosto
pessoal, mas nas vantagens que a linguagem oferece para o projeto.
179
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
Para mim foi difícil entender isso quando ensinava pessoas a programar,
queria logo que elas aprendessem java, ou C# etc. Mas a dificuldade dos iniciantes
era conseguir aprender lógica de programação tendo que “decorar” as restrições
exigidas pela linguagem. Por isso, nos artigos voltados para iniciante aqui no {
Dicas de Programação }, vamos escrever algoritmos em português (pseudocódigos)
e utilizar uma linguagem simples para transmitir os conceitos, pois o objetivo é
ensinar o básico.
180
TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES
181
UNIDADE 3 | LÓGICA DE PROGRAMAÇÃO
E
IMPORTANT
182
TÓPICO 5 | SUBALGORITMOS E ESCOPO DE IDENTIFICADORES
183
RESUMO DO TÓPICO 5
184
AUTOATIVIDADE
185
186
REFERÊNCIAS
ARAÚJO, Everton Coimbra. Algoritmos fundamentos e prática. Florianópolis:
Visual Books, 2007.
187
THE HISTORY OF COMPUTERS. 2008. Disponível em: <http://www.ptc.dcs.edu/
Moody/comphistory/comphistory_print.html>. Acesso em: 25 fev. 2016.
XAVIER, Gley Fabiano Cardoso. Lógica de Programação. São Paulo: Senac, 2004.
188
ANOTAÇÕES
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
189