• Nenhum resultado encontrado

Computadores e Programação p.1

N/A
N/A
Protected

Academic year: 2021

Share "Computadores e Programação p.1"

Copied!
50
0
0

Texto

(1)

Computadores e Programação

2005–2006

Jos´e Ant´onio Paix˜ao [email protected]

(2)

Programa

• O modelo de von Neumann do computador digital. Arquitectura

de um computador moderno.

• Representação digital de dados. Códigos binários para

representação de inteiros (código de valor absoluto e sinal e código de complementos de 2), reais (vírgula flutuante),

caracteres (ASCII, unicode), imagem (RGB, JPEG) e som (PCM).

• Operações numéricas sobre dados binários. Problemas ligados à

imprecisão da representação dos números reais em vírgula flutuante.

• Processadores. Funcionamento de um CPU. Representação

binária do código executável de um programa.

(3)

Programa

Assembladores, compiladores e interpretadores. Linguagens de

programação de alto nível e de muito alto nível (VHLL). Sistemas operativos.

• Introdução à linguagem de programação Python.

A instrução de atribuição. Aliasing. Noção de ponteiro.

• Tipos numéricos: inteiros, inteiros longos, números em vírgula

flutuante e complexos.

• Sequências (listas, tuplas e sequências de caracteres). Iteração

sobre sequências e operações de fatiagem (slicing). Dicionários.

• Instruções de controlo de fluxo: if..elif..else,

while..else, for..else.

(4)

Programa

• Funções. Espaço dos nomes e regras de alcance. Mecanismo de

passagem de argumentos e devolução de valores.

• Programação funcional e imperativa. Funções puras. As

ferramentas de programação funcional lambda, map, filter e reduce. Abrangências. Exemplos de pequenos programas em estilo funcional.

• Módulos. Ferramentas de introspecção e metaprogramação. • Ficheiros. Formatação. Redirecção dos canais de fluxo de

entrada e saída.

(5)

Programa

• Programação orientada por objectos. Noção de classe e

instâncias de classe. Atributos e métodos. Herança,

encapsulamento e polimorfismo. Sobrecarga de operadores. Objectos persistentes: módulos pickle e shelve.

• Excepções. As instruções raise e try..except..finally. • Recursão. Iteradores e geradores.

• Resolução de equações não-lineares: método da bissecção,

iteradores de ponto fixo, Regula-Falsi e Newton-Raphson.

(6)

Programa

• Interpolação de Lagrange.

• Ajuste de curvas a dados experimentais pelo método dos

mínimos quadrados.

• Derivação e integração numérica: método do trapézio, regra de

Simpson. Mínimos de curvas de energia potencial intramoleculares, momentos de inércia, etc.

• Resolução de equações diferenciais ordinárias: método de Euler,

Heun (preditor-corrector), Runge-Kutta e Runge-Kutta-Fehlberg (de passo adaptado). Equações do decaimento radioactivo,

osciladores, projécteis, movimento planetário, etc.

• Monte-Carlo.

(7)

Avaliac¸˜ao

• A avaliação da disciplina é feita por frequência (opcional) e por

exame. Uma classificação de frequência igual ou superior a 10 valores concede dispensa de exame.

• Os exames e a frequência têm ambos uma parte teórica e uma

parte prática com a cotação de 12 e 8 valores, respectivamente.

• A parte teórica contém uma série de 20 questões de escolha

múltipla e 3 questões de desenvolvimento. A parte prática

consiste na resolução de problemas (algoritmo e codificação do programa frente ao computador).

• A parte prática da frequência desenrola-se em duas sessões (2*3

problemas, 2 * 4 valores). Nos exames a parte prática é uma sessão única com 3 problemas.

(8)

Avaliac¸˜ao

• É garantida a nota da parte prática de frequência se for igual ou

superior a 4 valores.

• É garantida a nota da parte teórica de frequência se for igual ou

superior a 6 valores.

• Na parte prática é permitida a consulta a todo o material de

apoio. A parte teórica é sem consulta.

• As datas da frequência e dos exames são:

Prova Data Hora

1a Sessão Prática da Frequência 23/11 14h e 17h

Sessão Teórica da Frequência 16/12 9h

2a Sessão Prática da Frequência 16/12 14h e 17h

(9)

O computador digital

• Computador digital

Sistema digital programável que permite armazenar e processar informação em formato digital a velocidades elevadas, realizando operações aritméticas e lógicas elementares.

• Programa

Sequência de instruções que processam os dados.

• Os programas e os dados são armazenados na memória do

computador em formato digital usando um código binário.

(10)

O computador de Atanasoff e Berry

• O 1o computador digital (ABC) foi construído em 1939

(Atanasoff/Berry). A memória era formada por condensadores cujo estado de carga representava um número binário. Os

condensadores estavam montados em cilindros de baquelite com uma banda metálica na superfície exterior através da qual era

feita a leitura da memória. Cada cilindro tinha 30 cm de altura e 20 cm de diâmetro e podia guardar 30 números. . . Os dados eram introduzidos com cartões perfurados e o armazenamento dos resultados intermédios era feito queimando pequenos pontos num cartão com uma faísca: a resistência das partes

carbonizadas do cartão era diferente da das partes não queimadas. . .

(11)

O Z3 de Konrad Zuse

• Konrad Zuse constrói em 1938, na Alemanha, o Z1, um

computador capaz de efectuar cálculo em vírgula flutuante. Em 1941 Zuse completa um novo modelo, o Z3, destruído por uma bomba em 1944. Todos os modelos de Zuse usavam relés (Zuse não acreditava na fiabilidade das válvulas) e películas de

celulóide (filmes antigos) perfuradas para leitura dos programas e dos dados (o papel era escasso. . . ).

(12)

O MARK I

• Howard Aiken constrói em Harvard, em 1944, o IBM ASCC

(Automatic Sequence Controlled Calculator), mais conhecido por MARK I: > 750000 componentes, 15 m de comprimento, 2,40 m de altura, 4,5 toneladas! Velocidade de processamento: 0.00083 MIPS (Milhões de Instruções por Segundo)! (Os números tinham 23 bitse o Mark I conseguia multiplicar dois deles em 4

segundos. . . )

• Em 1947, Aiken previu que não haveria necessidade, nos EUA,

de mais do que 6 computadores. . .

(13)

O MARK I em Harvard (Abril de 1948)

(14)

O COLOSSUS de Alan Turing

• Em Dezembro de 1943 Alan Turing completa o COLOSSUS, um

dos primeiros computadores digitais electrónicos programável. Mas foi construído para decifrar as cifras dos nazis e não era capaz de efectuar multiplicações decimais. . . O COLOSSUS tinha 1800 válvulas.

(15)

O ENIAC

• O primeiro computador electrónico para uso geral foi construído

por John William Mauchly e J. Presper Eckert Jr. entre 1943 e 1946, na Universidade da Pensilvânia: o ENIAC (Electronic

Numerical Integrator And Computer). Ocupava 93 m2, tinha 3 m

de altura e pesava 27 toneladas. Os seus 10000 condensadores, 70000 resistências, 6000 interruptores e 18000 válvulas

necessitavam de 150 kW!

• Um dos problemas principais do ENIAC era a avaria das válvulas:

em média, 50 válvulas eram substituídas por dia!

(16)

O ENIAC

(17)

O EDVAC

• O ENIAC não possuía memória interna: tinha de ser fisicamente

programado usando interruptores e botões.

• Em 1944 Mauchly e Eckert decidiram construir um computador

com memória interna, para permitir que o programa executasse funções diferentes de acordo com o resultado obtido em cálculos anteriores: o EDVAC (Electronic Discrete Variable Automatic

Computer), que ficou operacional em 1952.

• O primeiro computador comercial, o UNIVAC I (UNIVersal

Automatic Computer), surgiu em 1951 e era baseado no EDVAC.

(18)

O EDVAC

(19)

Outras datas na hist´oria dos computadores

• 9 de Setembro de 1945: Grace Hopper (que desenvolveu o

primeiro compilador) encontra uma traça num dos relés do MARK II de Harvard e escreve no seu logbook: “First actual case of a bug being found”.

• Maio de 1973: o Micral, o primeiro computador baseado num

micro-processador (o Intel 8008) é lançado em França.

• Janeiro de 1975: é anunciado o Altair 8800, um kit para montar

em casa que se baseava no micro-processador 8080 da Intel e tinha 256 bytes de memória interna. Programava-se usando um painel de interruptores.

• Abril de 1975: Paul Allen e Bill Gates fundam a Microsoft e

lançam, em Julho, um interpretador BASIC para o Altair 8800.

(20)

A ´arvore geneal´ogica dos computadores

(21)

Outras datas na hist´oria dos computadores

• 1971: Surge a primeira versão do sistema operativo UNIX (Bell

Labs).

• 1 de Abril de 1976: Steve Wozniak e Steve Jobs fundam a Apple

poucas semanas depois de terem construído o Apple I, baseado no microprocessador 6502 da Motorola.

• 1979: É lançada a folha de cálculo VisiCalc para o Apple II. • 1981: A IBM inicia a venda do “IBM Personal Computer”. • 1985: Richard Stallman publica o “GNU Manifesto”.

• Dezembro de 1991: Linus Torvalds lança a versão 0.1 do sistema

operativo Linux.

(22)

O modelo de von Neumann

• O matemático Johann von Neumann, consultor do projecto

Manhattan, envolve-se nos projectos do ENIAC e do EDVAC em Junho de 1944. Inspirado por estes, concebe um modelo téorico para um computador, que é o modelo adoptado até hoje.

• O computador é constituído pelas seguintes unidades funcionais: ◦ Memória central

◦ Unidade aritmética e lógica ◦ Unidade de controlo

◦ Unidades de entrada e saída

Hoje em dia o processador engloba a unidade aritmética e lógica

e a unidade de controlo.

(23)

O modelo de von Neumann

Unidade

controlo

de

E/S

de

Unidades

A/L

Unidade

Memoria

Central

C

C

C

I

D

R

D

D

R

R

´

Computadores e Programac¸˜ao – p.23

(24)

O modelo de von Neumann

• O processador não efectua operações directamente sobre a

memória (à excepção da transferência de dados).

• O processamento é feito em células especiais de memória no

interior da UAL denominadas registos.

• A tranferência de dados entre a memória central e os dipositivos

de entrada e saída pode ser feita passando pelo processador ou através de acesso directo à memória (DMA).

(25)

Informac¸˜ao Digital

Os computadores processam informação digital. • Grandeza analógica

Varia de forma contínua (ex: temperatura lida num termómetro de Hg).

• Grandeza digital

Descontínua (existe apenas um número finito de estados).

• Elemento mínimo de informação: d´ıgito bin´ario (bit). • bit: 2 estados 0 ou 1.

(26)

Informac¸˜ao Digital

• Um conjunto de n bits pode tomar 2n configurações distintos,

podendo representar 2n objectos ou informações elementares. • Exemplo com 3 bits:

Configurações possíveis (8 = 23): 000, 001, 010, 011,

100, 101, 110, 111.

Podemos utilizar estas combinações de bits para representar de

forma unívoca 8 letras do alfabeto:

A 000 E 100 B 001 F 101 C 010 G 110 D 011 H 111

(27)

Codificac¸˜ao/descodificac¸˜ao

• Os computadores processam (apenas) informação/dados em

formato digital.

• Todos os dados têm que ser codificados num formato digital para

serem passíveis de tratamento informático.

• Para cada tipo de dado tem de se estabelecer um código que

permita atribuir uma configuração binária única a cada dado

desse tipo → codificação. A operação inversa é a descodificação.

• Vamos passar em revista alguns dos códigos actualmente usados

para representação digital de vários tipos de dados num computador:

◦ Números inteiros, inteiros relativos e reais ◦ Caracteres

◦ Som e imagem

(28)

Codificac¸˜ao de inteiros

• A forma mais simples de representar um número inteiro num

formato digital corresponde a utilizar a sua representação binária, isto é, na base 2.

O número é representado por n bits

an−1an−2 · · · a0

onde ai = 0, 1 e i = 0, ..., n − 1.

O inteiro correspondente a esta sequência de bits é:

an−12 n −1 + a n−22 n −2. . . + a 0 = nX−1 i=0 ai2 i

Este código designa-se por código binário ponderado.

(29)

Codificac¸˜ao de inteiros

• O maior número inteiro que é possível representar com um

conjunto de n bits é n −1 X i=0 2n = 2n − 1

n bits → 2n números inteiros, incluindo o zero: 0, 1, . . ., 2n −1.

(30)

Convers˜ao decimal/bin´ario

• A conversão de um número inteiro na base 10 em código binário

ponderado é muito fácil.

• Exemplo: Conversão do decimal 203 para a base 2.

Representando o quociente e o resto da divisão inteira pelos operadores div e mod, temos:

203 div 2 =101; 203 mod 2 = 1 = a0; 101 div 2 = 50; 101 mod 2 = 1 = a1; 50 div 2 = 25; 50 mod 2 = 0 = a2; 25 div 2 = 12; 25 mod 2 = 1 = a3; 12 div 2 = 6; 12 mod 2 = 0 = a4;

6 div 2 = 3; 6 mod 2 = 0 = a5; 3 div 2 = 1; 3 mod 2 = 1 = a6; 1 div 2 = 0; 1 mod 2 = 1 = a7; Então 20310 = 110010112.

(31)

Convers˜ao decimal/bin´ario

• A conversão inversa (binário → decimal) é trivial.

• Exemplo: 110010112 = 1 × 27 + 1 × 26 + 1 × 23 + 1 × 2 + 1 = 203 10

(32)

Notac¸˜ao octal/hexadecimal

É comum utilizar-se a notação hexadecimal, (base 16) para

exprimir de forma mais compacta números binários. Cada dígito hexadecimal equivale a 4 dígitos binários.

Noutra notação, denominada octal, o número é representado na

base 8, em que cada dígito octal (0 . . . 7) agrupa 3 bits.

• Em hexadecimal são utilizados os 16 símbolos 0, 1, 2, . . . , 9, A,

B, C, D, E, F. Por exemplo, o número 20010 pode ser escrito como

110010002, C816 ou 3108.

(33)

Tabela de convers˜ao entre as bases mais usadas Binário 0000 0001 0010 0011 0100 0101 0110 0111 Decimal 0 1 2 3 4 5 6 7 Hexa. 0 1 2 3 4 5 6 7 Octal 0 1 2 3 4 5 6 7 Binário 1000 1001 1010 1011 1100 1101 1110 1111 Decimal 8 9 10 11 12 13 14 15 Hexa. 8 9 A B C D E F Octal 10 11 12 13 14 15 16 17

• A transcrição de um número inteiro na base 10 para base 2 pode

ser facilitada, sobretudo quando se trata de números grandes, fazendo primeiro a transcrição para hexadecimal, e utilizando a tabela acima para transcrever cada dígito hexadecimal na

correspondente sequência de 4 algarismos binários.

(34)

Adic¸˜ao de n´umeros inteiros

• Como é que os computadores fazem operações aritméticas? • Comecemos por um exemplo simples, a adição de números

inteiros.

Começando pelo bit menos significativo, adicionam-se os 2

primeiros bits, escrevendo por baixo a respectiva soma. Se o resultado exceder a capacidade de um único bit faz-se o

“transporte” de um 1 para a coluna seguinte, e soma-se esse transporte conjuntamente com os bits dessa coluna.

Por conveniência, vamos representar no bit Ci de um conjunto

auxiliar de n bits o transporte que vai da coluna i para a coluna i + 1 e nos bits Ti de um outro conjunto auxiliar o transporte que

vem da coluna i − 1 para a coluna i.

(35)

Adic¸˜ao de n´umeros inteiros

• A operação adição em binário toma então a seguinte forma

simbólica: Tn Tn−1 . . . T1 T0 An An−1 . . . A1 A0 Bn Bn−1 . . . A1 B0 Sn Sn−1 . . . S1 S0 Cn Cn−1 . . . C1 C0 • Nota: T0 = 0 e Ti = Ci −1. Se Cn 6= 0 → ocorreu transbordo (overflow)! Computadores e Programac¸˜ao – p.35

(36)

Adic¸˜ao de n´umeros inteiros

• Consideremos um computador que utiliza 8 bits para codificar

inteiros. O maior número inteiro representável nesta codificação é 255 (confirme!).

• A operação de adição em binário efectua-se de forma análoga à

adição em decimal. • Exemplo: 100 + 88 = 188. 10010 = 011001002 8810 = 010110002 T 10000000 A 01100100 = 100 B 01011000 = 88 S 10111100 = 188 C 01000000 C7 = 0 → OK Computadores e Programac¸˜ao – p.36

(37)

Adic¸˜ao de n´umeros inteiros

• Exemplo de transbordo em 8 bits: 189 + 88 = 277 > 28 1 = 255.

T 11110000 A 10111101 = 189 B 01011000 = 88 S 00010101 6= 277 C 11111000 C8 = 1: resultado inválido Computadores e Programac¸˜ao – p.37

(38)

Adic¸˜ao de n´umeros inteiros

• Os dígitos binários S e C são funções (booleanas) de 3 variáveis

— os dois dígitos a adicionar e o transporte anterior: S(A, B, T ); C(A, B, T ).

• Pode-se mostrar que as funções S e C têm a seguinte forma

algébrica,

S(A, B, T ) = ¯A ¯BT + ¯AB ¯T + A ¯B ¯T + ABT C(A, B, T ) = AB + BT + AT

onde a disjunção e conjunção lógicas são representandas pelo soma e produto, e ¯X representa a negação do valor lógico de X.

(39)

Adic¸˜ao de n´umeros inteiros

• A tabela de verdade das funções booleanas S e C é a seguinte:

A B T S C 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Computadores e Programac¸˜ao – p.39

(40)

Codificac¸˜ao de n´umeros relativos

• Existem vários códigos que permitem codificar números inteiros

relativos (códigos bipolares).

O código bipolar mais simples é o código de sinal e valor

absoluto:

o bit mais significativo representa o sinalos restantes n − 1 bits o valor absoluto.

Por convenção, o bit de sinal tem o valor 1 quando o número é

negativo e o valor 0 quando é positivo.

Por exemplo, numa palavra de 8 bits, os números ±19 têm, neste

código, a seguinte representação binária: +1910 = 00010011 −1910 = 10010011

(41)

Codificac¸˜ao de n´umeros relativos

• Vantagem deste código: simplicidade. • Desvantagens:

◦ podem-se representar apenas 2n

− 1 números distintos com n bits e não 2n (o zero tem representação dupla)

◦ a adição de números relativos é problemática.

(42)

C´odigo de complementos de 2

No código de complementos de 2 representam-se os números

positivos como no código anterior, e representa-se cada número negativo somando 1 ao complemento do número positivo que lhe corresponde. Um eventual transbordo que ocorra nesta soma é ignorado.

Vejamos como representar o número −19 numa palavra de 8 bits

usando este código:

+1910 = 00010011

−1910 = 11101100 + 00000001 = 11101101

• Regra prática para converter um número binário no respectivo

complemento de 2: copiam-se os dígitos, a começar pelo bit menos significativo até encontrar o primeiro “1”, que também se copia. A partir daí, substituem-se os “0”s por “1”s e vice-versa.

(43)

C´odigo de complementos de 2

• Vantagens da representação de complementos de 2: ◦ O zero tem representação única (verifique!).

O bit mais significativo pode ser interpretado como bit de

sinal: este bit é zero nos números positivos e 1 nos números negativos.

O bit menos significativo determina sempre se um número é

par ou ímpar, o bit é zero nos números pares e 1 nos ímpares.

◦ O número total de números que é possível representar neste

código numa palavra de n bits é 2n, correspondendo ao

intervalo −2(n−1), . . . , 2(n−1) 1.

(44)

Adic¸˜ao de n´umeros relativos

• A implementação da adição de números relativos é muito simples

em complementos de 2. Utiliza-se o mesmo algoritmo da adição de números inteiros, sendo apenas necessário ter atenção a um eventual transbordo, cuja detecção é mais delicada.

• Exemplo: T 00001010 A 00000101 = 5 B 11110101 = −11 S 11111010 = −6 C 00000101 Computadores e Programac¸˜ao – p.44

(45)

Adic¸˜ao de n´umeros relativos

• A subtracção é feita de forma semelhante: para subtrair A de B,

soma-se a B o complemento de 2 de A , ou seja B − A = B + (−A).

A inspecção do bit de transporte Cn já não é suficiente para testar

se ocorreu transbordo! • Exemplo 1: T 11111110 A 00000001 = 1 B 11111111 = −1 S 00000000 = 0 C 11111111

bit de transporte = 1; OK!

(46)

Adic¸˜ao de n´umeros relativos • Exemplo 2: T 11111110 A 01111111 = 127 B 00000001 = 1 S 10000000 = −128 C 01111111

bit de transporte = 0; Huum. . .

(47)

Adic¸˜ao de n´umeros relativos

• As seguintes regras devem ser aplicadas para verificar se há

transbordo numa soma de números inteiros relativos em complementos de 2:

1. Se A e B têm sinais diferentes, nunca ocorre transbordo na operação A + B e o resultado é sempre válido.

2. Se A e B têm o mesmo sinal e A + B o sinal oposto, então ocorreu transbordo e o resultado é inválido.

• Forma alternativa de detectar um resultado inválido: comparar os

bits Tn e Cn; se não forem iguais ocorreu transbordo e o

resultado da operação é inválido.

(48)

Multiplicac¸˜ao e divis˜ao de n´umeros relativos

Para multiplicar um número por 2, basta deslocar os bits para a

esquerda uma casa, colocando um 0 no bit menos significativo. Para dividir um número por 2, deslocam-se todos os bits para a direita uma casa, mantendo o bit do sinal com o mesmo valor.

• Exemplo:

54 = 00110110

54 ∗ 2 = 54 << 2 = 01101100 54/2 = 54 >> 2 = 00011011

• No caso de números ímpares, o deslocamento para a direita dá

como resultado a divisão por 2 arredondada para −∞, ou seja, 51 deslocado de um bit para a direita dá como resultado 25; a mesma operação efectuada em −51 dá como resultado −26. Verifique!

(49)

Multiplicac¸˜ao e divis˜ao de n´umeros relativos

As operação de deslocamento de bits podem ser implementadas

de forma eficiente nos circuitos de electrónica digital.

• As multiplicações (e divisões) de inteiros por potências de 2

contam-se entre as operações mais rápidas que o processador pode efectuar, bem mais rápidas do que uma multiplicação ou divisão por outros números!

Combinando as operações de adição e de shift é possível

efectuar todas as operações aritméticas sobre inteiros.

(50)

Representac¸˜ao de n´umeros reais • Na base decimal

17.3210 = 1 × 101 + 7 × 100 + 3 × 10−1 + 2 × 10−2 • Do mesmo modo, na base 2 teremos

17.3210 = 1 × 24 + 0 × 23 + 0 × 22 + 0 × 21 + 1 × 20+ + 0 × 2−1 + 1 × 2−2 + 0 × 2−3 + 1 × 2−4 + 0 × 2−5 = + 0 × 2−6 + 0 × 2−7 + 1 × 2−8 + . . . = 10001.01010001 . . . 2 • Mas 10001.010100012 = 17.3164062510 6= 17.3210! • E 10001.01010001111010112 = 17.319992065429687510!

• Parece não haver representação binária finita de 17.3210. . .

Referências

Documentos relacionados

Da mesma forma que o diário e os demais escritos da autora apresentam-se como um espaço onde essa construía uma ou mais imagens de si mesma, a própria vida de Sylvia Plath, assim como

Trazer a história para o contexto da sala de aula permite ao professor acarretar a construção de tal conhecimento matemático, mostrando que o ensino matemático não é linear,

Un exemple typique d’un projet personnel inhérent à l’émetteur de la monnaie est celui de Ptolémée (367-283 avant J.-C), futur Ptolémée I Sôter I (PP VI 14538),

“O resultado das nossas investigações, corroborado pelas provas obtidas nos registos dos jacobinos e dos seus primeiros mestres, foi o de que esta seita com as suas conspirações não

Embora muitos críticos a considerem como uma figura menor no campo das letras, a actuação de Lady Augusta Gregory teve grande importância na evolução da literatura dramática não

PARÁGRAFO TERCEIRO : O valor das creches não poderá exceder á R$ 500,00 ( quinhentos reais ), por mês, arcando o empregador apenas com 20% ( vinte por cento ) deste

debêntures realizadas no período, bem como aquisições e vendas de debêntures efetuadas pela Emissora: (Artigo 12, alínea e, inciso XVII da Instrução CVM 28/83).. •

guerreronis em frutos de coqueiro no campo sob diferentes condições: i plantas com cachos removidos; ii cachos com a porção distal das espiguetas removidas; iii cachos