3 Armazenamento de dados 37

Documentos relacionados
Depois do estudo deste capítulo, o estudante deve ser capaz de:

I n f o r m á t i c a

Manutenção de Computadores e Redes

Fundamentos de Arquiteturas de Computadores

HISTÓRIA DO COMPUTADOR

Unidade I ORGANIZAÇÃO DE. Prof. Antônio Palmeira

INFORMÁTICA ELETROTÉCNICA SUBSEQUENTE AULA I. Prof. MSc. Glécio Rodrigues de Albuquerque

Geração de computadores Arquitetura e Organização de Computadores Curso de Análise e Desenvolvimento de Sistemas

Universidade de Brasília Histórico e Introdução

Histórico e Introdução

1. Conceitos Básicos de Computação

Introdução. Agradecimentos. Objetivos. 1.1 MODELO DE TUrUNG' ^

FACULDADE LEÃO SAMPAIO

Softwares, Aplicativos e Sistemas Operacionais

GFM015 Introdução à Computação. Plano de Curso e Introdução. Ilmério Reis da Silva UFU/FACOM

Evolução da Informática: a Origem da Computação

Sistemas de Computação

História do Computador. Introdução ao Computador 2010/1 Renan Manola

Fat-Uerj: Introdução à computação

Histórico e Conceitos

CURSO TÉCNICO PROFISSIONALIZANTE. Disciplina: Informática Básica (História da Informática)

Ábaco. Ipad HISTÓRIA DA INFORMÁTICA E SUA EVOLUÇÃO. Tecnologias de Informação e Comunicação

Ementa. Adriano J. Holanda 15/2/2017. [Introdução à Computação I] ...

Introdução aos Sistemas Operacionais. Disciplina: Sistemas Operacionais Prof. Filipe Arantes Fernandes

IAC001 - Arquitetura e Organização de Computadores.

Histórico e Conceitos


Tópicos de Ambiente Web Tópico: História do Computador

Organização e Arquitetura de Computadores. Prof. Leonardo Araújo

Unidade I. Organização de Computadores. Prof. Renato Lellis

Máquinas de Calcular Mecânicas

Campus Avançado Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini

Evolução e Desempenho. Alberto Felipe Friderichs Barros

Organização de Computadores I

Máquinas Multiníveis Aula 04. Prof. Jadir Eduardo Souza Lucas Universidade Federal do Espírito Santo Departamento de Informática

Objetivos. Relacionar as gerações da tecnologia da computação. Identificar as principais inovações que caracterizam cada uma delas.

CONCEITOS BÁSICOS DE INFORMÁTICA. Disciplina: Informática Professor: Gustavo Sabry

Estrutura dos Computadores. Arquitetura de Computadores

Fundamentos de Arquiteturas de Computadores

INFORMÁTICA E CONTABILIDADE. Prof. Me. Fábio Assunção CMP 1128 Parte 01

Organização e Arquitetura de Computadores. Professor Airton Ribeiro de Sousa

Informática básica. Professor: Francisco Ary

Introdução ao Processamento de Dados (I P D)

Organização e Arquitetura de Computadores. Professor Airton Ribeiro de Sousa

Informática básica. Professor: Francisco Ary

Arquitetura de Computadores. Prof. Dr. Eng. Fred Sauer

18/08/2015. Quem sou eu... Para se dar bem... Capítulo 0: Introdução. Prof. Frederico Sauer (Fred)

Arquitetura de Computadores. Prof.º Me. James Clauton

Informática I. Aula 2. Aula 2-04/09/2006 1

Informática I. Aula 9. Aula 9-24/09/2007 1

CENTRO DE EMPREGO E FORMAÇÃO PROFISSIONAL DE ÉVORA TÉCNICO DE INFORMÁTICA E SISTEMAS EFA. UFCD: 0777 Processador de Texto Processamento e edição

Introdução à Programação Aula 02. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Disciplina de Arquitetura e Manutenção de Computadores

O que é um computador. Segundo o Dicionário Escolar da Língua Portuguesa, computador é avaliador, calculador.

Micr c o r co c ntr t o r lad a or o es

Máquinas de Calculo Mecânicas

Fundamentos de Programação 1

Aula 1: A Evolução dos Sistemas Computacionais

Aula Breve História dos Computadores - Informatiquês - O Computador - Software vs. Hardware. Introdução à Engenharia da Computação

História e evolução dos computadores. Professor Leonardo Cabral da R. Soares

ORGANIZAÇÃO DE COMPUTADORES

Programação Estruturada Aula - Introdução a Linguagem de Programação

Componentes do Computador

Histórico - Evolução INTRODUÇÃO À ENGENHARIA DA COMPUTAÇÃO. Professor: Rosalvo Ferreira de Oliveira Neto

INTRODUÇÃO. Introdução a Informática. Vinícius Pádua

INTRODUÇÃO À INFORMÁTICA

Arquitetura de Von Neumann

Arquitetura de Microprocessadores

Arquitetura e organização de computadores

EMENTÁRIO CURSO DE CIÊNCIA DA COMPUTAÇÃO MATRIZ 2013

INTRODUÇÃO AOS SISTEMAS LÓGICOS

CES-10 Introdução à Computação. Prof. Paulo André IEC - ITA

INSTITUTO FEDERAL CEARÁ - IFCE CAMPUS AVANÇADO DE ARACATI CURSO: BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO PROGRAMA DE UNIDADE DIDÁTICA PUD.

UNIVERSIDADE FEDERAL DE UBERLÂNDIA Faculdade de Computação Curso de Eng. Química Disciplina: FACOM39017 (Alg. Prog. de Computadores) Fundamentos

Informática I. Aula 1. Aula 1-30/08/2006 1

Computadores podem ser úteis em problemas que envolvem: Grande número de dados. Grande número de cálculos. Complexidade. Precisão.

Histórico da evolução dos. Ermeson Andrade

Aula 06 - Máquina Multinível e Von Neumann

Hardware. Computador. Computador. Computador. Evolução dos Computadores. Laboratório de Utilização de Microcomputadores (DCA0302) Aula 01

Introdução à Computação para Engenharia MAC2166 Prof. Dr. Paulo Miranda IME-USP. Aula 1 Introdução à Computação

O termo computação vem do latim computare significa executar cálculos

Introdução Computador Hardware Histórico e Evolução Linguagem de Programação Princípios Básicos

GBC015: INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO. Introdução. Ilmério Reis da Silva UFU/FACOM/BCC

Arquitetura de Computadores Aula 1 - Introdução

CP Programação de Computadores Prof. M.Sc. Carlos de Salles

Conceitos Básicos de Programação

Introdução à Computação MAC0110

Introdução à Computação MAC0110

Disciplina de. Organização de Computadores Digitais

Disciplina de. Organização de Computadores Digitais

Informática. História da Informática. O que é Informática? 02/03/2011. História da Informática 1ª Geração. História da Informática 1ª Geração

Sistema numérico decimal

Disciplina de Informática. Curso Tecnólogo em Gestão Ambiental Unidade Erechim Profª. Me. Valéria Espíndola Lessa

SSC510 Arquitetura de Computadores 1ª AULA

Os computadores ditigais podem ser classificados em 5 grupos distintos:

PROGRAMAÇÃO (PRG34) Prof. Rafael Berti Schmitz 2017/1

Aula 1: Introdução à Organização de Computadores

INTRODUÇÃO AO HARDWARE. Paulo Chagas Júnior

INE5223 Informática para Secretariado

1.Introdução capaz de executar uma sequência de instruções definidas pelo homem gerar um determinado resultado

Transcrição:

Sumário Prefácio xiii 1 Introdução 1 1.1 Modelo de Turing 1 1.2 Modelo de von Neumann 4 1.3 Componentes computacionais 5 1.4 Histórico 7 1.5 Questões sociais e éticas 10 1.6 A ciência da computação como uma disciplina 11 1.7 Esboço do curso 11 1.8 Leitura recomendada 12 1.9 Termos principais 12 1.10 Resumo 12 1.11 Conjunto de práticas 13 2 Sistemas de numeração 15 2.1 Introdução 16 2.2 Sistemas de numeração posicionais 16 2.3 Sistemas de numeração não posicionais 30 2.4 Leitura recomendada 31 2.5 Termos principais 31 2.6 Resumo 32 2.7 Conjunto de práticas 32 3 Armazenamento de dados 37 3.1 Tipos de dados 38 3.2 Armazenando números 40 3.3 Armazenando texto 56 3.4 Armazenando áudio 58 3.5 Armazenando imagens 59 3.6 Armazenando vídeo 62 3.7 Leitura recomendada 62 3.8 Termos principais 62 3.9 Resumo 63 3.10 Conjunto de práticas 64

viii Fundamentos da ciência da computação 4 Operações sobre dados 69 4.1 Operações lógicas 69 4.2 Operações de deslocamento 74 4.3 Operações aritméticas 77 4.4 Leitura recomendada 86 4.5 Termos principais 86 4.6 Resumo 86 4.7 Conjunto de práticas 87 5 Organização de computadores 91 5.1 Unidade Central de Processamento 92 5.2 Memória principal 93 5.3 Subsistema de entrada/saída 97 5.4 Interconexão de subsistemas 103 5.5 Execução de programas 107 5.6 Arquiteturas diferentes 111 5.7 Um computador simples 114 5.8 Leitura recomendada 123 5.9 Termos principais 123 5.10 Resumo 124 5.11 Conjunto de práticas 125 6 Redes de computadores 129 6.1 Introdução 129 6.2 Suíte de protocolos TCP/IP 134 6.3 Camadas 135 6.4 Aplicações da internet 147 6.5 Leitura recomendada 161 6.6 Termos principais 161 6.7 Resumo 162 6.8 Conjunto de práticas 163 7 Sistemas operacionais 167 7.1 Introdução 168 7.2 Evolução 169 7.3 Componentes 170 7.4 Um estudo sobre sistemas operacionais 181 7.5 Leitura recomendada 185 7.6 Termos principais 185 7.7 Resumo 186 7.8 Conjunto de práticas 187 8 Algoritmos 191 8.1 Conceito 191 8.2 Três construções 195 8.3 Representação de algoritmos 196 8.4 Uma definição mais formal 199 8.5 Algoritmos básicos 200 8.6 Subalgoritmos 207 8.7 Recursividade 208 8.8 Leitura recomendada 210 8.9 Termos principais 211

Sumário ix 8.10 Resumo 211 8.11 Conjunto de práticas 212 9 Linguagens de programação 215 9.1 Evolução 215 9.2 Tradução 217 9.3 Paradigmas da programação 219 9.4 Conceitos comuns 227 9.5 Leitura recomendada 236 9.6 Termos principais 236 9.7 Resumo 237 9.8 Conjunto de práticas 237 10 Engenharia de software 241 10.1 O ciclo de vida do software 241 10.2 Fase de análise 243 10.3 Fase de projeto 246 10.4 Fase de implemenção 247 10.5 Fase de teste 249 10.6 Documentação 252 10.7 Leitura recomendada 253 10.8 Termos principais 253 10.9 Resumo 254 10.10 Conjunto de práticas 254 11 Estrutura de dados 257 11.1 Vetores 258 11.2 Registros 263 11.3 Listas encadeadas 266 11.4 Leitura recomendada 276 11.5 Termos principais 276 11.6 Resumo 277 11.7 Conjunto de práticas 277 12 Tipos abstratos de dados 279 12.1 Conhecimento necessário 279 12.2 Pilhas 281 12.3 Filas 287 12.4 Listas lineares gerais 291 12.5 Árvores 296 12.6 Árvores binárias 297 12.7 Árvore de busca binária 301 12.8 Grafos 303 12.9 Leitura recomendada 303 12.10 Termos principais 304 12.11 Resumo 304 12.12 Conjunto de práticas 305 13 Estruturas de arquivos 309 13.1 Métodos de acesso 310 13.2 Arquivos sequenciais 310 13.3 Arquivos indexados 313

x Fundamentos da ciência da computação 13.4 Arquivos baseados em Hash 314 13.5 Diretórios 318 13.6 Arquivos texto versus arquivos binários 320 13.7 Leitura recomendada 321 13.8 Termos principais 321 13.9 Resumo 322 13.10 Conjunto de práticas 323 14 Banco de dados 327 14.1 Introdução 327 14.2 Sistemas de gerenciamento de bancos de dados 328 14.3 Arquitetura de banco de dados 329 14.4 Modelos de bancos de dados 330 14.5 O modelo de banco de dados relacional 331 14.6 Operações com relações 332 14.7 Projeto de bancos de dados 338 14.8 Outros modelos de bancos de dados 341 14.9 Leitura recomendada 342 14.10 Termos principais 342 14.11 Resumo 343 14.12 Conjunto de práticas 344 15 Compressão de dados 347 15.1 Compressão sem perda 348 15.2 Métodos de compressão com perda 355 15.3 Leitura recomendada 360 15.4 Termos principais 361 15.5 Resumo 361 15.6 Conjunto de práticas 361 16 Segurança 365 16.1 Introdução 365 16.2 Criptografia de chave simétrica 369 16.3 Criptografia de chave assimétrica 373 16.4 Comparação de métodos 375 16.5 Outros serviços de segurança 376 16.6 Gerenciamento de chaves 384 16.7 Leitura recomendada 385 16.8 Termos principais 386 16.9 Resumo 386 16.10 Conjunto de práticas 387 17 Teoria da computação 391 17.1 Linguagem simples 392 17.2 A máquina de Turing 395 17.3 Números de Gödel 403 17.4 O problema da parada 404 17.5 A complexidade dos problemas 406 17.6 Leitura recomendada 408 17.7 Termos principais 408 17.8 Resumo 408 17.9 Conjunto de práticas 409

Sumário xi 18 Inteligência artificial 413 18.1 Introdução 413 18.2 Representação de conhecimento 415 18.3 Sistemas especialistas 423 18.4 Percepção 425 18.5 Busca 431 18.6 Redes neurais 435 18.7 Leitura recomendada 438 18.8 Termos principais 438 18.9 Resumo 439 18.10 Conjunto de práticas 439 Apêndices A Unicode 443 A.1 Planos 444 A.2 ASCII 444 B Linguagem de modelagem unificada 447 B.1 Visão do usuário 448 B.2 Visão estrutural 448 B.3 Visão comportamental 450 B.4 Visão de implementação 456 C Pseudocódigo 459 C.1 Componentes 459 D Diagramas de estruturas 463 D.1 Símbolos do diagrama de estruturas 463 D.2 Leitura de diagramas de estruturas 466 D.3 Regras dos diagramas de estruturas 466 E Álgebra Booleana e circuitos lógicos 467 E.1 Álgebra Booleana 467 E.2 Circuitos lógicos 477 F Exemplos de programas em C, C++ e Java 483 G Revisão matemática 493 G.1 Expoente e logaritmo 493 G.2 Aritmética modular 497 G.3 Transformada discreta de cosseno 500 H Detecção e correção de erros 503 H.1 Introdução 503 H.2 Codificação em bloco 505 H.3 Códigos em blocos lineares 507 H.4 Códigos cíclicos 510 H.5 Soma de verificação 513 Siglas e Glossário 517 Índice remissivo 551

Prefácio Os computadores representam uma parte importante em nossas vidas diárias, e continuarão representando no futuro. A ciência da computação é uma disciplina jovem, que está evoluindo e progredindo. As redes de computadores têm pessoas conectadas nos pontos muito distantes do globo. A realidade virtual está criando imagens tridimensionais que surpreendem a todos. A exploração espacial deve parte de seu sucesso aos computadores. Os efeitos especiais criados em computadores vêm modificando a indústria do cinema. Os computadores têm representado papéis fundamentais na genética. Este livro foi projetado para a disciplina Introdução à ciência da computação, baseado nas recomendações da Associação Americana de Computação (ACM). Ele abrange amplamente todas as áreas da ciência da computação. Recursos pedagógicos Diversos recursos deste livro não somente o tornam único, mas também facilitam sua compreensão pelos iniciantes. Conceitos Ao longo deste livro, tentamos enfatizar o conceito, em vez do modelo matemático. Acreditamos que um entendimento do conceito leva à compreensão do modelo. Abordagem visual Um breve exame do livro mostrará que nossa abordagem é muito visual. Existem aqui aproximadamente 400 figuras. Embora elas aumentem o tamanho do livro, são muito úteis para a compreensão do texto. Algoritmos Inúmeros algoritmos foram acrescentados a fim de tornar o aluno familiarizado com a resolução de problemas e com a programação. UML Em todo o livro, utilizamos diagramas em UML (Linguagem de Modelagem Unificada) para que os alunos se familiarizem com esta ferramenta, que está se tornando o verdadeiro padrão na indústria. Pontos principais Estes são denotados pelo ícone i, à margem das páginas, como mostrado abaixo, e são resumos. São os pontos que os alunos precisam utilizar como revisão para auxiliá- -lo nas provas. Os computadores armazenam números positivos e negativos de modo diferente.

xiv Fundamentos da ciência da computação Exemplos Sempre que apropriado, utilizamos exemplos para demonstrar o conceito e o modelo matemático. Material de fim de capítulo O material no fim de cada capítulo contém quatro partes: Leitura recomendada, Termos principais, Resumo e Conjunto de práticas. Leitura recomendada Esta seção fornece uma lista de livros recomendados para aquele capítulo, que pode ser utilizada para consulta. Termos principais Esta seção apresenta uma lista dos termos importantes introduzidos no capítulo. Cada um deles está definido no glossário. Resumo Os resumos contêm uma visão geral concisa de todos os pontos mais importantes de cada capítulo. Eles são identificados por marcadores, para facilitar sua leitura. Conjunto de práticas Cada conjunto contém três partes: questões para análise, questões de múltipla escolha e exercícios. As questões para revisão testam o entendimento dos aspectos e conceitos mais importantes do capítulo. As de múltipla escolha são projetadas para testar o entendimento dos materiais. Os exercícios foram projetados para verificar se os alunos conseguem aplicar os conceitos e as fórmulas. Glossário Um glossário de todos os termos principais e siglas está incluído no final do livro. Agradecimentos Nenhum livro com essa abrangência pode ser desenvolvido sem o apoio de muitas pessoas, e isto é especialmente verdadeiro para este livro. Revisores parceiros * Para qualquer pessoa que não conheça bem o processo, o valor dos revisores parceiros não pode ser suficientemente apreciado. Escrever um livro rapidamente se torna uma tarefa que não possibilita uma visão do trabalho com o devido distanciamento. É impossível medir a importância da orientação dos revisores, que podem ficar de apoio e visualizar o livro como um todo. Gostaríamos de agradecer especialmente pela contribuição dos revisores da segunda edição: John Newman, University of Wales; Steve Maybank, Birbeck College; Mario Kolberg, University of Stirling; Colin Price, University de Worcester; Boris Cogan, London Metropolitan University; Thomas Mandl, University of Hildesheim; Daphne Becker, University of South Africa; Lubna Fekry Abdulhai e Osama Abulnaja, King Abdulaziz University; e Katie Atkinson, University of Liverpool. Profissionais na Cengage Learning Nossos agradecimentos também são dirigidos aos profissionais da Cengage Learning, Allie, Matthew e Gaynor, e também a Steve Rickaby, da Wordmongers, por todo seu cuidado e atenção com o manuscrito. Nossa família Por último, mas, obviamente, não menos importante, está o apoio de nossas famílias e de nossos amigos. Apesar de os autores sofrerem durante todo o processo de redação do livro, as famílias e amigos sofrem por causa de suas ausências. Podemos apenas esperar que, quando eles virem o produto final, sintam que seus sacrifícios valeram a pena. * A tradução da segunda edição internacional foi revisada pelo Doutor Ronaldo A. Lara Gonçalves, do Departamento de Informática da Universidade Estadual de Maringá (UEM).

1 Introdução A expressão ciência da computação tem, atualmente, um significado muito amplo. Contudo, neste livro, a definimos como as questões relacionadas aos computadores. Este capítulo introdutório, em primeiro lugar, tenta descobrir o que é um computador e, então, investiga outros aspectos diretamente relacionados a ele. Analisamos primeiro o modelo de Turing, como uma definição matemática e filosófica de computação. Em seguida, mostramos como os computadores, hoje em dia, têm como base o modelo de von Neumann. O capítulo termina com um breve histórico desse dispositivo que é capaz de transformar culturas... O computador. Objetivos Depois de estudar este capítulo, o aluno será capaz de: Definir o modelo de Turing de um computador. Definir o modelo de von Neumann de um computador. Descrever os três componentes de um computador: hardware, dados e software. Enumerar tópicos referentes ao hardware de computadores. Enumerar tópicos referentes aos dados. Enumerar tópicos referentes ao software. Discutir alguns aspectos sociais e éticos relacionados ao uso de computadores. Conhecer um breve histórico dos computadores. 1.1 MODELO DE TURING A ideia de um dispositivo de computação universal foi descrita, pela primeira vez, por Alan Turing, em 1937, propondo que toda a computação poderia ser realizada por um tipo especial de máquina, então chamada Máquina de Turing. Embora Turing tenha apresentado sua descrição matemática, estava mais interessado na definição filosófica de computação do que em construir a máquina propriamente dita. O modelo por ele descrito tinha como base as ações que as pessoas realizam quando envolvidas na computação. Então, abstraindo essas ações, Turing criou um protótipo para uma máquina computacional que realmente transformou o mundo.

2 Fundamentos da ciência da computação Processadores de dados Antes de discutirmos o modelo de Turing, vamos definir um computador como um processador de dados. Utilizando essa definição, um computador age como uma caixa-preta que aceita a inserção de dados, processa-os e cria informações referentes aos resultados (Figura 1.1). Embora esse modelo possa definir a funcionalidade de um computador, na atualidade tornou-se muito genérico, porque, a partir dessa definição, uma calculadora de bolso também é um computador (o que realmente é verdade, em um sentido literal). Dados de entrada Computador Dados de saída Figura 1.1 Uma máquina de computação de propósito único Outro problema desse modelo é que ele não especifica o tipo de processamento nem se é possível mais de um tipo. Em outras palavras, não está claro quantos tipos ou conjuntos de operações podem ser realizados por uma máquina que tem como base esse modelo. É uma máquina de propósito específico ou de propósito geral? Esse modelo poderia representar um computador de propósito específico (ou processador) que foi projetado para fazer um trabalho simples, como o controle da temperatura de um edifício ou o uso de combustível em um carro. No entanto, computadores, do modo como o termo é utilizado hoje em dia, são máquinas de propósito geral. Eles podem desempenhar muitos tipos de tarefas diferentes, o que implica que precisamos transformá-los no modelo de Turing para que seja possível refletir os reais computadores da atualidade. Processadores de dados programáveis O modelo de Turing é melhor para um computador de propósito geral, porque acrescenta um elemento extra de computação específica: o programa. Um programa é um conjunto de instruções que diz ao computador o que fazer com os dados. A Figura 1.2 mostra o modelo de Turing. Nesse modelo, os dados de saída dependem da combinação de dois fatores: os dados de entrada e o programa. Com os mesmos dados de entrada podemos gerar diferentes resultados, se modificarmos o programa. De modo similar, com o mesmo programa, podemos gerar diferentes resultados, se modificarmos os dados de entrada. Por fim, se esses dados e o programa permanecerem os mesmos, o resultado também será o mesmo. Vamos observar esses três casos. Programa Dados de entrada Computador Dados de saída Figura 1.2 Um computador que tem como base o modelo de Turing: processador de dados programável Mesmo programa, diferentes dados de entrada A Figura 1.3 mostra o mesmo programa de ordenação com diferentes dados de entrada. Embora o programa seja o mesmo, os resultados são diferentes, porque diferentes dados de entrada são processados.

Introdução 3 Programa Ordena 3, 12, 8, 22 Dados de entrada Computador 3, 8, 12, 22 Dados de saída Programa Ordena 14, 6, 8, 12 Dados de entrada Computador 6, 8, 12, 14 Dados de saída Figura 1.3 Mesmo programa, diferentes dados de entrada Mesmos dados de entrada, programas diferentes A Figura 1.4 mostra os mesmos dados de entrada com diferentes programas. Cada programa faz que o computador realize diferentes operações sobre esses dados. O primeiro programa ordena os dados, o segundo os adiciona e o terceiro encontra o menor número. Programa Ordena 3, 12, 8, 22 Dados de entrada Computador 3, 8, 12, 22 Dados de saída Programa Adiciona 3, 12, 8, 22 Dados de entrada Computador 45 Dados de saída Programa Encontra o menor número 3, 12, 8, 22 Dados de entrada Computador 3 Dados de saída Figura 1.4 Mesmos dados de entrada, diferentes programas Mesmos dados de entrada, mesmo programa Naturalmente, esperamos o mesmo resultado a cada vez se os dados de entrada e o programa forem os mesmos. Em outras palavras, quando o mesmo programa é executado com os mesmos dados de entrada, esperamos os mesmos resultados.

4 Fundamentos da ciência da computação A Máquina Universal de Turing A Máquina Universal de Turing pode realizar qualquer cálculo se o programa apropriado for fornecido; essa foi a primeira descrição de um computador moderno. Pode-se provar que um computador muito poderoso e uma Máquina Universal de Turing podem fazer as mesmas coisas. Precisamos apenas fornecer os dados de entrada e o programa a descrição de como realizar o cálculo para qualquer uma das máquinas. Na verdade, a Máquina Universal de Turing é capaz de calcular qualquer coisa que seja calculável. 1.2 MODELO DE VON NEUMANN Os computadores construídos com base na Máquina Universal de Turing armazenam dados em sua memória. Por volta de 1944-1945, John von Neumann propôs que, se o programa e os dados são logicamente os mesmos, os programas também devem ser armazenados na memória de um computador. Quatro subsistemas Os computadores construídos com base no modelo de von Neumann dividem o hardware do computador em quatro subsistemas: memória, unidade de lógica e aritmética, unidade de controle e entrada/saída (Figura 1.5). Computador Entrada/saída Dados de entrada Unidade de lógica e aritmética (ULA) Memória Dados de saída Unidade de controle Figura 1.5 O modelo de von Neumann Memória A memória é a área de armazenamento; é onde os programas e os dados são armazenados durante o processamento. Mais adiante discutiremos, neste capítulo, as razões para o armazenamento de programas e dados. Unidade de lógica e aritmética A unidade de lógica e aritmética (ULA) é onde ocorrem as operações de lógica e de cálculos. Para um computador agir como um processador de dados, ele deve ser capaz de realizar operações aritméticas sobre dados (como adicioná-los em uma lista de números) e também operações lógicas sobre dados, como veremos no Capítulo 4. Unidade de controle A unidade de controle controla as operações da memória, a ULA e o subsistema de entrada/saída. Entrada/saída O subsistema de entrada aceita a entrada de dados e programas vindos de fora do computador, ao passo que o de saída envia os resultados do processamento para o mundo externo. A definição do sistema de entrada/saída é muito ampla: também inclui dispositivos de armazenamento secundários, como discos ou fitas, que armazenam dados e programas para processamento. Quando um disco armazena dados que resultam de processamento, é conside-

Introdução 5 rado um dispositivo de saída; quando os dados são lidos a partir do disco, ele é considerado um dispositivo de entrada. O conceito de programa armazenado O modelo de von Neumann determina que o programa deve ser armazenado na memória. Isso é totalmente diferente da arquitetura dos primeiros computadores, nos quais somente os dados eram armazenados na memória: os programas para as respectivas tarefas eram implementados pela manipulação de um conjunto de comutadores ou modificação do sistema de fios. A memória dos computadores modernos mantém um programa e seus dados correspondentes. Isso implica que os dados e programas devem ter o mesmo formato, uma vez que são armazenados na memória. Na verdade, são armazenados como padrões binários na memória uma sequência de 0s e 1s. Execução sequencial de instruções Um programa no modelo de von Neumann é composto de um número finito de instruções. Nele, a unidade de controle busca uma instrução da memória, decodifica-a e, então, a executa. Em outras palavras, as instruções são executadas uma depois da outra. Naturalmente, uma instrução pode requerer que a unidade de controle salte para alguma instrução anterior ou posterior, o que não significa que as instruções não sejam executadas sequencialmente. Esse tipo de execução de um programa foi a exigência inicial de um computador com base no modelo de von Neumann. Os computadores da atualidade executam programas na ordem que for mais eficiente. 1.3 COMPONENTES COMPUTACIONAIS Podemos pensar em um computador como sendo formado por três componentes: o hardware, os dados e o software. Hardware Na atualidade, o hardware tem quatro componentes, de acordo com o modelo de von Neumann, embora possamos ter diferentes tipos de memória, de subsistemas de entrada/saída e assim por diante. Discutimos o hardware mais detalhadamente no Capítulo 5. Dados O modelo de von Neumann define claramente um computador como uma máquina de processamento de dados que aceita a dados de entrada, processa-os e fornece os resultados. Armazenando dados O modelo de von Neumann não define como os dados devem ser armazenados em um computador. Se um computador é um dispositivo eletrônico, a melhor maneira de armazenar dados é na forma de um sinal elétrico, mais especificamente: sua presença ou ausência. Isso implica que um computador pode armazenar dados em um de dois estados. Obviamente, os dados que utilizamos na vida diária não são encontrados apenas em dois estados. Por exemplo, nosso sistema de numeração utiliza dígitos que podem estar entre um de dez estados (de 0 a 9). Não podemos (ainda) armazenar esse tipo de informação em um computador, ela precisa ser modificada para outro sistema que utilize somente dois estados (0 e 1). Também devemos estar em condições de processar outros tipos de dados (texto, imagem, áudio, vídeo). Estes também não podem ser armazenados em um computador diretamente; antes, precisam ser modificados para a forma apropriada (0s e 1s). No Capítulo 3 aprenderemos como armazenar diferentes tipos de dados em um padrão binário, uma sequência de 0s e 1s. No Capítulo 4 mostraremos como os dados são manipulados, em um padrão binário, dentro de um computador.

6 Fundamentos da ciência da computação Organizando dados Embora os dados devam ser armazenados apenas de uma forma dentro do computador, em um padrão binário, os dados externos a um computador podem assumir muitas formas. Além disso, os computadores (e a noção de processamento de dados) têm criado um novo campo de estudo, conhecido como organização de dados, que faz a pergunta: podemos organizar nossos dados em diferentes entidades e formatos antes de armazená-los no computador? Atualmente, os dados não são tratados como uma sequência contínua de informações. Em vez disso, são organizados em pequenas unidades que, por sua vez, são organizadas em unidades maiores e assim por diante. Analisaremos os dados sob esse ponto de vista nos capítulos de 11 a 14. Software de computador A principal característica tanto do modelo de Turing quanto do de von Neumann é o conceito de programa. Apesar de os primeiros computadores não armazenarem o programa na própria memória, eles utilizavam o conceito de programas. Programar aqueles primeiros computadores significava modificar os sistemas de fios ou ligar, ou desligar, um conjunto de comutadores. Programar era, portanto, uma tarefa realizada por um operador ou engenheiro, antes de efetivamente iniciar o processamento de dados. Os programas devem ser armazenados No modelo de von Neumann, os programas são armazenados na memória do computador. Não precisamos que a memória mantenha somente os dados, mas também que mantenha o programa (Figura 1.6). Programa Dados Memória Figura 1.6 Programa e dados na memória Uma sequência de instruções Outra exigência de von Neumann é que o programa deve consistir de uma sequência de instruções. Cada uma delas opera em um ou mais itens de dados. Assim, uma instrução pode modificar o efeito de uma anterior. Por exemplo, a Figura 1.7 mostra um programa que entra com dois números, adiciona-os e então imprime o resultado. Esse programa consiste de quatro instruções individuais. 1. Entra com o primeiro número na memória. 2. Entra com o segundo número na memória. 3. Adiciona os dois e armazena o resultado na memória. 4. Mostra o resultado. Programa Figura 1.7 Um programa composto de instruções

Introdução 7 Podemos perguntar por que um programa deve ser composto de instruções. A resposta é a possibilidade de reutilização. Atualmente, os computadores realizam milhões de tarefas. Se o programa para cada tarefa fosse uma entidade independente, sem nada em comum com outros programas, a programação seria difícil. Os modelos de Turing e de von Neumann tornam a programação mais fácil ao definirem as diferentes instruções que podem ser utilizadas pelos computadores. Um programador pode, então, combinar essas instruções para realizar qualquer número de programas. Cada programa pode ser uma combinação diferente de instruções diferentes. Algoritmos A exigência de que um programa deve consistir de uma sequência de instruções tornou a programação possível, mas trouxe outra dimensão à utilização de um computador. Um programador precisa não somente compreender a tarefa realizada por cada instrução, mas também como combinar essas instruções para desempenhar determinada tarefa. Analisando essa questão de modo diferente, um programador deve primeiro resolver o problema, etapa por etapa, e então tentar encontrar a instrução apropriada (ou a série de instruções) para implementar aquelas etapas. Essa solução passo a passo é chamada algoritmo. Os algoritmos representam um papel muito importante na ciência da computação, e serão discutidos no Capítulo 8. Linguagens No início da era do computador, havia somente uma linguagem: a linguagem de máquina. Os programadores escreviam instruções (utilizando padrões binários) para resolver um problema. Contudo, à medida que os programas se tornaram maiores, escrever programas longos utilizando esses padrões se tornou uma tarefa tediosa. Os cientistas da computação apresentaram a ideia de utilizar símbolos para representar padrões binários, assim como as pessoas utilizam símbolos (palavras) para comandos na vida diária. Naturalmente, os símbolos utilizados na vida diária são diferentes daqueles usados em computadores. Desse modo, surgiu o conceito de linguagens de computador. Uma linguagem natural, como o inglês, é rica e tem muitas regras para combinar as palavras corretamente; a linguagem de computador, por sua vez, tem um número mais limitado de símbolos e também de palavras. Estudaremos as linguagens de computador no Capítulo 9. Engenharia de software Algo que não foi definido no modelo de von Neumann é a engenharia de software, que é o projeto e a escrita de programas estruturados. Atualmente, não é aceitável escrever um programa que realiza apenas uma tarefa; para tanto, deve-se seguir regras e princípios estritos. Discutiremos esses princípios, coletivamente conhecidos como engenharia de software, no Capítulo 10. Sistemas operacionais Durante a evolução dos computadores, os cientistas notaram que havia uma série de instruções comuns a todos os programas. Por exemplo, as instruções para dizer a um computador onde receber dados e onde enviar dados são necessárias para quase todos os programas. É mais eficiente escrever essas instruções somente uma vez para o uso de todos os programas. Assim surgiu o conceito de sistema operacional. Originalmente, esse sistema trabalhava como um gerenciador para facilitar o acesso aos componentes do computador por um programa, mas atualmente os sistemas operacionais fazem muito mais. Aprenderemos sobre eles no Capítulo 7. 1.4 HISTÓRICO Nesta seção, analisaremos brevemente a história da computação e dos computadores, dividida em três períodos. Máquinas mecânicas (antes de 1930) Durante esse período, foram inventadas diversas máquinas de computação que têm pouca semelhança com o moderno conceito de um computador.

8 Fundamentos da ciência da computação No século XVII, Blaise Pascal, um matemático e filósofo francês, inventou Pascaline, uma calculadora mecânica para fazer operações de adição e subtração. No século XX, quando Niklaus Wirth inventou uma linguagem de programação estruturada, deu-lhe o nome Pascal, em homenagem ao inventor da primeira calculadora mecânica. No final do século XVII, o matemático alemão Gottfried Leibnitz inventou uma calculadora mecânica mais sofisticada, que podia fazer multiplicações e divisões, além de adições e subtrações. Essa calculadora foi chamada Roda de Leibnitz. A primeira máquina que utilizou a ideia de armazenamento e programação foi o tear de Jacquard, inventado por Joseph-Marie Jacquard, no início do século XIX. O tear utilizava cartões perfurados (como um programa armazenado) para controlar o aumento dos fios da urdidura na fabricação de tecidos. Em 1823, Charles Babbage inventou a Máquina Diferencial, que podia fazer mais do que simples operações aritméticas também resolvia equações polinomiais. Posteriormente, ele inventou a chamada Máquina Analítica, que, até certo ponto, compara-se à ideia dos computadores modernos. Ela tinha quatro componentes: uma engrenagem (correspondente a uma moderna ULA), um local de armazenamento (memória), um operador (unidade de controle) e saída (entrada/saída). Em 1890, Herman Hollerith, trabalhando no Ministério de Recenseamento dos Estados Unidos, projetou e construiu uma máquina programável que podia, automaticamente, ler, registrar e ordenar dados armazenados em cartões perfurados. O nascimento dos computadores eletrônicos (1930 1950) Entre 1930 e 1950, vários computadores foram inventados por cientistas, que podem ser considerados os pioneiros da indústria dos computadores. Os primeiros computadores eletrônicos Os primeiros computadores desse período não armazenavam o programa na memória todos eram programados externamente. Cinco computadores tornaram-se proeminentes durante esses anos: O primeiro computador de propósito específico, que codificava as informações eletricamente, foi inventado por John V. Atanasoff e seu assistente, Clifford Berry, em 1939. Chamado ABC (Atanasoff Berry Computer), foi projetado especificamente para resolver um sistema de equações lineares. Ao mesmo tempo, um matemático alemão chamado Konrad Zuse projetou uma máquina de propósito geral, chamada Z1. Na década de 1930, a Marinha dos Estados Unidos e a IBM patrocinaram um projeto na Harvard University, sob a direção de Howard Aiken, para construir um computador chamado Mark I, que utilizava componentes elétricos e mecânicos. Na Inglaterra, Alan Turing inventou um computador chamado Colossus, que foi projetado para decifrar o código conhecido como German Enigma (Enigma Alemão). O primeiro computador de propósito geral, totalmente eletrônico, foi fabricado por John Mauchly e J. Presper Eckert, chamado ENIAC (Electronic Numerical Integrator and Calculator, ou calculadora e integradora numérica eletrônica). Ele foi concluído em 1946, utilizava 18 mil tubos de vácuo, media 30 metros de comprimento por 3 metros de altura e pesava 30 toneladas. Computadores baseados no modelo de von Neumann Os cinco computadores precedentes utilizavam memória somente para armazenamento de dados e eram programados externamente, utilizando fios ou comutadores. John von Neumann propôs que o programa e os dados deveriam ser armazenados na memória. Dessa maneira, todas as vezes que utilizamos um com-

Introdução 9 putador para realizar uma nova tarefa, precisamos somente modificar o programa, em vez de religar a máquina ou ligar e desligar centenas de comutadores. O primeiro computador com base nas ideias de von Neumann, chamado EDVAC, foi fabricado em 1950, na University of Pennsylvania. Ao mesmo tempo, um computador similar, EDSAC, foi construído por Maurice Wilkes, na Cambridge University, na Inglaterra. Gerações de computadores (1950 época atual) Os computadores construídos depois de 1950 seguiram, aproximadamente, o modelo de von Neumann. Apesar de se tornarem mais rápidos, menores e mais baratos, o princípio era quase o mesmo. Historiadores dividem esse período em gerações, sendo que cada uma delas testemunhou alguma importante transformação em hardware ou software (mas não no modelo). Primeira geração A primeira geração (aproximadamente de 1950 a 1959) foi caracterizada pelo surgimento de computadores comerciais. Durante essa época, eles eram utilizados somente por profissionais. Ficavam trancados em salas com acesso limitado somente ao operador ou especialista. Tais computadores eram muito volumosos e utilizavam tubos de vácuo como chaves eletrônicas. Naquele tempo, eram acessíveis somente às grandes organizações. Segunda geração Os computadores da segunda geração (aproximadamente de 1959 a 1965) utilizavam transistores, em vez de tubos de vácuo. Isso reduziu seu tamanho, assim como seu custo, e os tornou mais acessíveis para as companhias de pequeno e médio portes. As duas linguagens de programação de alto nível, Fortran e Cobol (veja o Capítulo 9), foram inventadas e tornaram a programação mais fácil; separavam a tarefa de programação da de operação dos computadores. Um engenheiro civil, por exemplo, poderia escrever um programa em Fortran para resolver um problema, sem se envolver com os detalhes eletrônicos da arquitetura do computador. Terceira geração A invenção dos circuitos integrados (transistores, fiação e outros componentes em um único chip) reduziu ainda mais o custo e o tamanho dos computadores. Os minicomputadores, então, surgiram no mercado. Programas enlatados, 1 popularmente conhecidos como pacotes de software, tornaram-se disponíveis. Uma pequena corporação podia comprar um pacote, por exemplo, para contabilidade, em vez de precisar escrever seu próprio programa. Surgiu, então, uma nova indústria, a de software. Esta geração durou, aproximadamente, de 1965 a 1975. Quarta geração A quarta geração (aproximadamente de 1975 a 1985) viu o surgimento dos microcomputadores. A primeira calculadora desktop, o Altair 8800, tornou-se disponível em 1975. Avanços na indústria eletrônica permitiram que completos subsistemas de computadores se adequassem a uma única placa de circuito. Esta geração também viu o aparecimento das redes de computadores (veja o Capítulo 6). Quinta geração Esta é a atual, começou em 1985 e ainda não terminou. Ela tem testemunhado o surgimento dos computadores laptop e palmtop, o desenvolvimento de aperfeiçoamentos nos meios de armazenamento secundário (CD-ROM, DVD e assim por diante), o uso da multimídia e o fenômeno da realidade virtual. 1 O termo enlatado refere-se a um produto de prateleira, comercializado em lotes, feito para satisfazer a maioria dos interessados, em sentido contrário ao produto feito exclusivamente para determinado usuário. (N.R.T.)