Escolar Documentos
Profissional Documentos
Cultura Documentos
Textos1 PDF
Textos1 PDF
APONTAMENTOS
Universidade de Coimbra
“Programming is the most difficult part of applied mathematics.”
– Edsger W. Dijkstra
“It has often been said that a person does not really understand something until
he teachs it to someone else. Actuallty a person does not really understand
something until he can teach it to a computer, i.e., express it as an algorithm.”
- Donald E.Knuth
CAP'ÍTULO I – CONTEÚDO
... - Com a necessidade de efectuar contagens o homem primitivo, para além da invenção de um
sistema numérico (decimal baseado nos dez dedos de uma mão humana), sentiu a necessidade de
guardar e alterar a informação numérica. É assumido pelos historiadores que, mesmo antes do
desenvolvimento da linguagem escrita, o homem já conhecia o conceito de inventariação de
objectos ou animais que possuía, gravando sulcos em varas de madeira ou nas paredes de cavernas.
Para além disso, com as trocas comerciais e o assumir da propriedade (como terras para cultivo ou
pastorícia e bens acumulados), os paus, as pedras ou as conchas deixam de ser eficientes pois há
cada vez mais informação a manipular. Surgem os primeiros dispositivos mecânicos de cálculo: os
ábacos.
Foi com o uso do ábaco que o cálculo sofreu a sua primeira sistematização, reflectindo o
funcionamento de uma hierarquia de valores conforme a coluna onde se efectue os cálculos
(sistema decimal). Cada conta na parte inferior do ábaco representa uma unidade e cada conta da
parte superior representa 5 unidades.
1623 - Baseado nos bastões de Napier (1614), documentados pelo inventor dos logaritmos, John
Napier (matemático e astrónomo), Wilhelm Schickard, em Tuebigen (Alemanha), cria o seu
“Relógio-Calculadora”: uma máquina capaz de somar e subtrair números com 6 dígitos, e que
indica ultrapassagem de capacidade com o som de uma campainha.
1633 – Ainda com base nos bastões de Napier, nasce a primeira versão de uma régua de cálculo,
que permitia ainda multiplicações e cálculo de alguns logaritmos.
Esta última foi, ao longo dos tempos, melhorada e aumentada e, era de tal modo completa, que foi
muito popular até cerca da década de 70, onde foi, finalmente, substituída pelas calculadoras
automáticas.
1642 - Com a idade de dezanove anos, o matemático francês Blaise Pascal projecta uma calculadora
mecânica que permitiu demonstrar as vantagens práticas do cálculo mecanizado.
Para operar a Máquina de Pascal, fazia-se girar uma série de rodas que tinham gravadas, ao longo
da sua circunferência, os dígitos de zero a nove. Assim que uma das rodas efectuasse uma volta
completa em torno do seu eixo, um mecanismo de rodas dentadas fazia rodar o dígito da roda à sua
esquerda de uma unidade. Os resultados (quer finais quer intermédios) eram visualizados nas
próprias rodas através do uso de indicadores.
1812 - Charles Babbage constrói a sua primeira máquina diferencial, Máquina das diferenças,
capaz de gerar tabelas logarítmicas com uma precisão de seis casas decimais. Babbage pretendia
mecanizar o cálculo logarítmico e as tabelas de astronomia.
1813 - Babbage projecta uma máquina que conseguiria realizar qualquer operação matemática
automaticamente. Movida a vapor e baptizada de Máquina Analítica, seria capaz de trabalhar
baseada num conjunto de instruções de operação, armazenadas em cartões perfurados, tal como nos
teares de Jackard.
Pela primeira vez, aparecem princípios e conceitos que só no século XX serão, efectivamente,
implementados: a máquina analítica deveria ser constituída por uma unidade aritmética, uma
unidade para entrada de dados e instruções, uma unidade para imprimir resultados e seria capaz de
realizar operações lógicas (que, como veremos seguidamente, são os constituintes principais de um
computador).
As ideias de Babbage foram documentadas e ampliadas por Augusta Ada Byron, condessa de
Lovelace (filha do conhecido poeta inglês Lord Byron), actualmente reconhecida como a primeira
programadora da história. Dotada de uma mente extremamente arguta para a resolução de
problemas matemáticos, deixou-nos uma herança que, talvez somente nos nossos dias, se esteja a
apreciar devidamente.
1890 - Herman Hollerith, do serviço de censos dos Estados Unidos, foi a primeira pessoa a usar
equipamento de cálculo eléctrico para análise estatística de informação, engendrando um processo
de codificar o nome, sexo, endereço e outros dados estatísticos em cartões perfurados. Este código
era posteriormente contado electricamente quando o cartão passava numa unidade de leitura. É este
processo que permite ao governo dos EUA, em 1890, realizar todas as contagens em menos de
metade do tempo que tinha demorado a realizar o censo anterior (1880) ainda que, relativamente a
este último, a população tenha sofrido um aumento de 25%.
1896 - Hollerith funda a Tabulating Machine Company que, mais tarde, se passa a chamar
International Business Machines Corporation - IBM. Máquinas construídas com base na máquina
de Hollerith são melhoradas e tornam-se mais rápidas permitindo o processamento de vencimentos,
facturação, análise de vendas, cálculo científico, etc.
1937 a 1944 - Principalmente com o eclodir da segunda guerra mundial e os problemas associados
à invenção e melhoramento do armamento e da bomba atómica, há uma aceleração no
desenvolvimento de sistemas informáticos, nascendo a primeira geração de calculadores digitais
automáticos de grande escala - MARK I (sucessivamente MARK II,III e IV).
Desenvolvido(s) pela IBM para a Universidade de Harvard, segundo um projecto de um elemento
desta universidade, Howard H. Aiken, o MARK I pesava 5 toneladas e era constituído por 78
dispositivos interligados por cerca de 800Km de cabos. Trabalhou durante 15 anos e foi retirado de
funcionamento em 1959. Realizava operações com números com 23 dígitos (subtracções e adições
em 3 décimos de segundo e multiplicações em 6 segundos). Era programável com fita perfurada e
capaz de controlar automaticamente máquinas de escrever eléctricas. Uma vez começado um
programa tinha que ser levado até ao fim sem hipótese de (inter)acções humanas ou alterações de
qualquer ordem.
A história do software como peça fundamental no funcionamento de um computador começa,
portanto, na década de 40 e, particularmente, com a contratação, por parte da marinha dos EUA,
duma jovem matemática, Grace M. Hopper, que tem como missão trabalhar com Howard Aiken em
Harvard.
1945 - Seria contudo necessário um outro avanço particular para atingirmos o conceito actual de
computador: o conceito de armazenamento de informação. O armazenar das instruções e dados num
dispositivo físico que funcionaria como uma memória e que pudesse ser alterado pelo próprio
computador nasceu com Von Neumann e foi rapidamente aproveitado para a construção de novas
máquinas, como:
1946 – o ENIAC (Electronic Numerical Integrator And Calculator), que constitui o primeiro
computador electrónico digital. Nasceu na Universidade da Pensilvânia, através dos esforços de J.
Presper Eckert e John W. Mauchly, e foi desenvolvido para o exército dos EUA, usando já válvulas
(ao invés de relés eléctricos e dispositivos mecânicos) e flip-flops para a memória;
A partir deste ponto, o desenvolvimento, quer físico quer lógico, dos computadores disparou até aos
nossos dias. O primeiro computador disponível comercialmente foi o UNIVAC, em 1950, ainda
bastante oneroso, logo, só usado por empresas com algum porte, e aparecem também os primeiros
dispositivos periféricos. Em 1951, Grace Hopper regista um problema com o UNIVAC I, devido a
uma borboleta (traça - bug) que se introduziu no equipamento produzindo resultados errados.
Desde aí, “BUG” continua a ser usado para significar erro ou defeito de um programa, e testar um
programa para verificar se não existem erros de execução diz-se : fazer o “debug” ou “debuging”
do programa (isto é, retirar os “bugs”).
No início da década de 60, surge a 2ª geração de computadores com a introdução dos transístores
em substituição das válvulas electrónicas. Em 1967, com a introdução generalizada de circuitos
integrados em vez de transístores, inicia-se a 3ª geração de computadores. Surgem novas
linguagens de programação e os sistemas operativos tornam-se independentes da arquitectura dos
computadores. Em 1968, Edgar W. Dijkstra, com um artigo na revista ACM (Association for
Computer Machinery) observa que a qualidade da programação é função inversamente
proporcional ao uso de instruções go to. Despoleta assim um movimento que culminará com o
aparecimento e definição da Programação Estruturada.
Durante a década de 70 há um aumento progressivo da capacidade de memória, velocidade de
operação e diminuição do tamanho dos computadores. Fala-se pela primeira vez na possibilidade de
ligar mais do que um computador em rede de comunicação.
Na década de oitenta, com o aparecimento dos circuitos de integração em larga escala (VLSI - Very
Large Scale Integration) surgem os primeiros computadores pessoais e a ideia de uma rede de
computadores interligados toma forma: dá-se nascimento do correio electrónico (e outro tipo de
comunicações entre computadores) que culmina, já na década de noventa pela ligação geral de
computadores de qualquer tipo através do uso de linhas telefónicas: Multimédia/Internet - acesso a
computadores remotos, comunicação inter-computador, transmissão directa de som/imagem/texto
(WWW, World Wide Web).
Os computadores podem ser primariamente divididos em duas grandes áreas, consoante o tipo de
aplicação pretendido:
• ÁREA CIENTÍFICA
A principal característica nesta área é o grande volume de cálculo a executar em
qualquer altura, muitas vezes acompanhado de um volume enorme de dados. Milhares
de aplicações científicas são executadas diariamente em computadores em todas as
áreas científicas.
Exemplos:
Meteorologia
Engenharia Civil
Engenharia Química
Arquitectura
...
• EDUCAÇÃO - HUMANÍSTICAS
Uma das vantagens fundamentais trazidas pelos computadores actuais é a da
disponibilidade de informação 24 horas por dia. Para além disso, podem ser uma ajuda
notável ao processo de raciocínio lógico, através da formulação de processos de solução
de problemas (algoritmos). Existem mesmo disciplinas onde apenas a simulação usando
um computador pode aproximar o estudante da vida real e da implementação prática
dos processos teóricos, como é, por exemplo, o caso das ciências políticas.
Para além das vantagens de aprendizagem óbvias, todos nós temos necessidade de
produzir texto, sendo o computador um auxiliar único no género. As possibilidades
oferecidas por um bom processador de texto, não só através da possibilidade de
correcção de erros, mas também através das bases de dados e outras combinações
possíveis, tornam o ofício (jornalistas), a arte (escritores) ou a necessidade de escrever
(todos nós) em algo bem mais criativo.
Num sistema informático, dados são o material básico da informação e só podem ser considerados
(eles mesmos) como informação num sentido limitado do termo. Dados são símbolos que,
agrupados e manipulados convenientemente, podem construir informação. Apesar de usarmos
ambos os termos de um modo bastante livre ao falar, só é considerado informação um conjunto de
símbolos dispostos segundo determinada ordem e forma, útil ao fim a que se destina. O
processamento é a manipulação dos símbolos (ou dados) de modo a criar, modificar ou consultar
informação.
O processamento de informação consiste, então, nas seguintes funções elementares:
Assim, podemos descrever a actividade de um computador através da descrição das suas funções
mais gerais:
• Funções Básicas de um Computador
•
• Entrada de informação - Dados
• Processamento
• Controlo de funções
• Armazenamento de informação - Memória
• Saída de Resultados
Estas funções básicas são agrupadas num modelo, dito Modelo de Von Neumann, que, apesar de ter
sido concebido em 1945, ainda hoje representa a organização interna de qualquer computador
digital não paralelo:
• Unidades de Entrada e Saída (Input/Output): são estas unidades que permitem a comunicação
com o exterior.
•
Unidade de
Controlo
C C C C - controlo
I D - dados
Unidade R - resultados
Aritmética e Lógica I - instruções
R R
D D
Unidades de D Memória
Entrada/Saída Central
R
A unidade de controlo é a mais importante de todas as unidades. É ela que controla todo o
funcionamento do sistema: retira, uma a uma, as intruções de execução da memória, analisa-as e
transforma-as em sinais de comando a serem obedecidas pelas diversas partes físicas do
computador. Comanda a entrada de dados e saída de resultados entre todas as restantes unidades e
sincroniza todas as operações a serem efectuadas, a velocidades muito elevadas. Esta sincronização
é feita usando um relógio interno que emite milhões de impulsos por segundo - MegaHertz (MHz)-
e cada instrução toma uns tantos impulsos desses milhões para se poder realizar.
• área de armazenamento de dados de entrada (que conterá os dados exteriores que o programa
necessita para a sua execução)
• área funcional (serve para anotar resultados intermédios do processamento)
• área de armazenamento de programas (guarda as instruções de processamento do programa a
correr no momento)
• área de armazenamento de saída (guarda resultados finais do processamento até que possam
sair da memória central)
Esta separação é apenas funcional, isto é, não é física nem permanente, variando de programa para
programa.
Existem também diferentes tipos de memória para além da central. Esta última tem que ser afecta
ao computador para que este possa trabalhar mas podemos estender a capacidade de memória de
um computador usando as chamadas memórias auxiliares. Estas unidades não são essenciais ao
funcionamento do computador por si só e, por isso, quando existem, são identificadas como
unidades periféricas. Dentro dos diferentes tipos de memória, podemos agrupá-los em dois grupos
principais:
• Memórias de acesso sequencial (para recolher uma informação qualquer, temos de passar toda
a informação que seja anterior a esta) - fita magnética (cartuchos, bobinas, cassetes …);
• Memórias de acesso directo (podemos recolher informação directamente através do uso de
endereços para localização) - discos magnéticos (disco duro, disquetes, …), discos ópticos
(CD/DVD).
Claramente, estas diferenças aparecem devido a custos de construção das diferentes memórias e,
mesmo dentro da memória central, teremos memórias mais rápidas e mais lentas para o trabalho do
computador. De facto, não só a velocidade de processamento é importante num computador mas,
também, a velocidade de acesso à informação é extremamente importante. Que interesse tem um
processador muito rápido se tivermos que estar à espera enquanto ele recolhe informação em
memória?
Os diferentes tipos de memórias que existem são fabricados em materiais diferentes que têm,
obviamente, capacidades diferentes (de armazenamento, de propagação de sinais eléctricos, etc) e
são uns mais caros que outros. Podemos, portanto, falar de uma hierarquia de memória, em termos
dos diferentes tipos de memória e em função da sua capacidade, tempo de acesso e custo, que se
encontra esquematizada na figura seguinte:
- +
memórias
capacidade/tempo de acesso centrais custo
memórias
auxiliares directas
As unidades de entrada e saída, que servem para efectuar a comunicação com o exterior, são
constituídas por todos os periféricos de comunicação com o exterior como, por exemplo:
• monitor
• teclado
• rato
• impressoras
• unidades de leitura óptica ou magnética (leitores de CD/DVD, disquetes, …)
• modems (unidades de comunicação digital entre computadores)
• scanners (unidades de leitura digitalizadoras)
• câmaras de video
• microfones
• joystick …
1.4. HARDWARE VERSUS SOFTWARE
• Software do Sistema (Sistema Operativo) - fornecido com cada computador, permite a gestão
do funcionamento integrado de todas as componentes
• Software de Suporte - fornecido pelos fabricantes, permite a gravação, aperfeiçoamento e
utilização dos programas de aplicação (tradutores, compiladores, editores, programas de
cálculo matemático, …)
• Software de Aplicação - programas escritos pelos utilizadores e programas que usam subrotinas
das duas classes anteriores (programas de cálculo estatístico, traçadores de gráficos,
processadores de texto, …)
Antes de qualquer outro, o software mais importante e que é o primeiro a ser introduzido num
computador é o sistema operativo. É com este conjunto de rotinas que a parte física pode funcionar
e é graças a ele que podemos comunicar com o computador. Assim, um sistema operativo (SO) é
um conjunto integrado de rotinas especializadas para controlar todo o sistema básico. Fica residente
em memória central e parte dos comandos de um sistema operativo ficam armazenados numa zona
especial de memória (dita, área apenas para leitura - ROM, Read Only Memory), não precisando
de ser activamente invocados para funcionar, basta, para tal, ligar o computador. De facto, são estes
comandos que tornam possível a primeira ligação com o utilizador, testando a operacionalidade de
todos os componentes e permitindo ao utilizador comandar o sistema.
Utilizador
Aplicações
Sistema Operativo
Hardware
Figura 3: Hardware/Software/Utilizador
É, portanto, o sistema operativo que controla a CPU e permite a ligação com o utilizador.
Como exemplos de sistemas operativos mais vulgares temos:
• DOS - nos primeiros computadores pessoais, o SO começou por ser armazenado num disco
flexível, daí o seu nome, que deriva do inglês, Disk Operating System.
• Linguagens de Programação
O computador, ou a sua CPU, só entende uma linguagem especial, dita linguagem máquina,
constituída apenas por zeros (0) e uns (1). Mais ainda, qualquer comando directo, tem que ser o
mais simples possível, porque a CPU só trabalha com ordens e operações muito elementares. É
também necessário conhecer muito bem os componentes físicos e o modo como são interligados (a
arquitectura do sistema), o que pode variar muito de máquina para máquina. Daí ser extremamente
difícil e moroso programar neste código. Uma vez que se pretende, com o computador, tornar o
trabalho mais eficiente, mais rápido e mais rentável, foram criadas linguagens mais próximas do
entendimento humano e das linguagens naturais. Vejamos uma tabela com alguns exemplos de
linguagens de programação:
• Linguagens de alto nível: mais próximas dos conceitos humanos e pouco ou nada dependentes
da máquina em questão. Cada instrução corresponde a muitas instruções de código máquina, o
que torna os programas mais curtos, legíveis e mais facilmente alteráveis por utilizadores
humanos.