Notas de Aula de Algoritmos e Programação de Computadores



Documentos relacionados
MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores

INFORMÁTICA BÁSICA. Prof. Rafael Zimmermann

Programação de Computadores

LÓGICA DE PROGRAMAÇÃO

PROCESSAMENTO DE DADOS

Introdução à Programação 2006/07. Computadores e Programação

Tecnologia da Informação. Prof Odilon Zappe Jr

Exemplo de Subtração Binária

AULA 1. Informática Básica. Gustavo Leitão. Disciplina: Professor:

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar

Componentes de um computador típico

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

Informática Aplicada

Introdução aos Computadores

SISTEMAS INFORMÁTICOS

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

UCP. Memória Periféricos de entrada e saída. Sistema Operacional

Contextualização: Sistemas de Computação

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

Figura 1 - O computador

Curso EFA Técnico/a de Informática - Sistemas. Óbidos

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Trabalho compilado da Internet Prof. Claudio Passos. Sistemas Numéricos

O modelo do computador

Memória principal; Unidade de Controle U C P. Unidade Lógica e Aritmética

Aula 01 Introdução à Informática. Prof. Bruno Gomes

Curso de Data Mining

Introdução. INF1005 Programação I 33K Prof. Gustavo Moreira gmoreira@inf.puc-rio.br

FUNDAMENTOS DE HARDWARE COMO FUNCIONA UM PC? Professor Carlos Muniz

Notas de Aula de Algoritmos e Programação de Computadores

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO

Curso de Hardware Aula 01 Tema: Sistema de Medidas Por: Edmilson de Oliveira Reis Revisado em: 02/03/2012

Introdução à Lógica de Programação

Prof. Lázaro Nogueira

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

1.1. Organização de um Sistema Computacional

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

ARQUITETURA DE COMPUTADORES

Algoritmos e Programação _ Departamento de Informática

PROGRAMAÇÃO DE COMPUTADORES (Teoria)

3. Arquitetura Básica do Computador

Lição 1 Introdução à programação de computadores

Introdução a Informática. Prof.: Roberto Franciscatto

Fundamentos de Sistemas de Informação Hardware: Dispositivos de Entrada, Processamento e Saída

Disciplina: Introdução à Informática Profª Érica Barcelos

for Information Interchange.

Apostila Informática Básica. 1.0 Introdução 1/14

05/04/2013. Para efetuar medidas é necessário fazer uma padronização, escolhendo unidades para cada grandeza.

3 Sistemas de Numeração:

Algoritmos. Cláudio Barbosa

Memórias Prof. Galvez Gonçalves

Aula 01 Parte 03 Computadores e Algoritmos. Prof. Filipe Wall Mutz

Aula 2 Modelo Simplificado de Computador

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Introdução. à Estrutura e Funcionamento de um Sistema Informático

MC-102 Aula 01. Instituto de Computação Unicamp

Binária. Introdução à Informática. Introdução à Informática. Introdução à Informática. Introdução à Informática. Bit. Introdução à Informática

Conceitos Básicos sobre Sistema de Computação

Informática Computador Visão Geral. Prof. Marcos André Pisching, M.Sc.

Sistema de Computação

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 1

ULA Sinais de Controle enviados pela UC

Algoritmos e Linguagem de Programação de Computadores I

13 Números Reais - Tipo float

Capítulo I : Noções Gerais

DOS SISTEMA OPERACIONAL DO COMPUTADOR

Introdução à Informática

ARQUITETURA DE COMPUTADORES - CONCEITUAL

Introdução à Arquitetura de Computadores IFES Campus Serra

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr.

PRONATEC FUNDAMENTOS DE HARDWARE. Prof. Kilmer Pereira

UNIVERSIDADE DE MOGI DAS CRUZES JOSÉ DA SILVA CONCEITOS DE INFORMÁTICA

Organização de Computadores

Prof. Rafael Gross.

Informática Sistemas de Numeração. Profª. Me. Valéria Espíndola Lessa

Escola Secundária de Emídio Navarro

Informática, Internet e Multimídia

Introdução à Arquitetura de Computadores

ARQUITETURA DE COMPUTADORES

CONCEITOS BÁSICOS DE HARDWARE. Disciplina: INFORMÁTICA 1º Semestre Prof. AFONSO MADEIRA

Dispositivos de Entrada e Saída

COEFICIENTES DE ATRITO

ISL - Introdução. Sistema. Binário. Introdução. Tipos de Computador. Sub title text goes here. Unused Section Space 2. Unused Section Space 1

Dica : Para resolver esse exercício pegue o arquivo pontosm.txt, na página do professor.

Visão geral do sistema de armazenamento e hierarquia de memória

Princípios de funcionamento dos computadores

Estrutura geral de um computador

Prof. Sandrina Correia

Informática Aplicada à Química. Sistemas de Numeração Representação de Dados

Bacharelado em Ciência e Tecnologia Bacharelado em Ciências e Humanidades. Representação Gráfica de Funções

Computador. Algumas definições

Introdução à Programação de Computadores

Hardware de Computadores

Prof. Dr. Charlie Antoni Miquelin BÁSICO DE COMPUTAÇÃO EM TC

Transcrição:

Notas de Aula de Algoritmos e Programação de Computadores FÁO KED MYAZAWA om a olaboração de TOMASZ KOWATOWSK nstituto de Computação - UNCAMP ersão 20001

Estas notas de aula não devem ser usadas omo únia fonte de estudo O aluno deve ler outros livros disponíveis na literatura Nenhuma parte destas notas pode ser reproduzida, qualquer que seja a forma ou o meio, sem a permissão dos autores Os autores onedem a permissão explíita para a utilização e reprodução deste material no ontexto do ensino de disiplinas regulares dos ursos de graduação sob a responsabilidade do nstituto de Computação da UNCAMP Copyright 2000 nstituto de Computação UNCAMP Caixa Postal 6176 13083 970 Campinas SP fkm,tomasz @iuniampbr ii

1 ntrodução à Computação 11 Organização do Computador Um omputador é uma oleção de omponentes que realizam operações lógias e aritmétias sobre um grande volume de dados Na figura 1 apresentamos uma organização básia em um omputador seqüênial Unidades de Entrada Memórias Seundárias Unidade Central de Proessamento Memória Cahe Memória RAM Unidade de Controle Registradores Memória ROM Unidade ógia e Aritmétia Unidades de Saída A seguir desreveremos ada uma destas partes Figura 1: Organização Básia de um Computador Seqüênial Unidade de Entrada São os omponentes que permitem a entrada de informações exteriores para serem proessadas pelo omputador Exemplo: telado, mouse, âmera de vídeo, et Unidade de Saída São os omponentes que permitem a apresentações de informações proessadas para o meio externo Exemplo: monitor, impressora, et Unidade Central de Proessamento Também onheida omo CPU (Central Proessing Unit) É responsável pela exeução dos programas e pelo omportamento das outras unidades no sistema É apaz de fazer ontas matemátias e fazer deisões simples As prinipais partes da CPU são: a Unidade ógia e Aritmétia, Unidade de Controle e Memórias (Registradores, Memória Prinipal (ou Memória RAM), Memória ROM e Cahe) Unidade ógia e Aritmétia Parte da CPU que realiza operações aritmétias (soma, subtração, multipliação, divisão, resto, troa de sinal, et) e operações lógias (and, or, not, xor, et) Memória Prinipal É usado na CPU para manter instruções e dados Também onheido omo Memória RAM (Random Aess Memory) A reuperação dos dados é feita através de iruitos lógios e por isso é rápida Não é tão grande, já que depende muito da tenologia de integração destes iruitos É uma memória volátil, ie, quando o omputador é desligado, todos os dados nesta memória se perdem Memória ROM ROM (Read Only Memory) é uma memória que ontém dados e ódigos de exeução que não podem ser alterados Uma das apliações desta memória é manter ódigo de exeução para a leitura e exeução de um sistema operaional Memória Cahe Memória rápida projetada para guardar dados que foram reentemente aessados Para busar um erto dado na memória RAM, é onsiderado se este pode estar na memória ahe, e em aso positivo a busa na memória RAM é interrompido e este é reuperado diretamente da memória ahe Tem tempo de aesso mais rápido que a memória RAM Registradores Memórias de alta veloidade ligada a operações de álulos lógios e aritmétios Em geral em quantidade e tamanhos pequenos Unidade de Controle Parte da CPU que busa na memória a próxima instrução e a deodifia para ser exeutada Dependendo da instrução, pode-se ter uma transferênia do ontrole para a unidade lógia e aritmétia ou o envio de dados para os omponentes externos à CPU 1

Memória Seundária Memória para armazenamento a longo prazo Os dados armazenados nesta memória não são perdidos quando se desliga o omputador Em geral de dimensões maiores que a Memória RAM mas de aesso mais lento, já que envolvem o uso de dispositivos meânios Ex Disos rígidos, disquetes, fitas magnétias, et Podemos ver que há diversos tipos de memórias em um omputador Cada uma destas memórias usa tenologia que reflete no usto, na veloidade de aesso e na quantidade de armazenamento A seguinte ordem apresenta algumas memórias ordenadas, de maneira resente, pela quantidade de armazenamento: Registrador Memória Cahe Memória RAM Disos Rígidos Esta mesma ordem apresenta o usto relativo e a veloidade de maneira deresente 12 Alguns Termos Ténios ardware Componentes meânios e eletro- eletrônios que ompõem o omputador Parte dura do omputador Software Seqüênia de instruções e omandos que fazem o omputador realizar determinada tarefa, também hamados de programas de omputador Devem estar armazenados em algum tipo de memória Perifério É qualquer omponente do omputador (hardware) que não seja a CPU Exemplos: leitoras de disquete, monitores, telados, vídeo, impressoras, et Sistema Operaional Coleção de programas que gerenia e aloa reursos de hardware e software Exemplos de tarefas que um sistema operaional realiza são: leitura de dados pelo telado, impressão de informações no vídeo, gereniamento da exeução de vários programas pela CPU, gereniamento da memória prinipal e da memória seundária para uso dos programas em exeução, et Exemplos: inux, Unix, Windows98, OS2, MS-DOS, et inguagem de Máquina Conjunto de instruções que podem ser interpretados e exeutados diretamente pela CPU de um dado omputador É espeífia para ada omputador inguagem Assembler (inguagem de Baixo Nível) Representação da linguagem de máguina através de ódigos mnemônios Também é espeífia de ada máquina inguagem de alto nível inguagem que independe do onjunto de instruções da linguagem de máquina do omputador Cada instrução de alto nível equivale a várias instruções da linguagem de máquina, sendo assim mais produtiva Ex: Pasal, C, Algol, BASC, isp, Prolog, et Compilador Tradutor de programas esritos em uma linguagem de programação para programas em linguagem de máquina Uma vez que o programa foi onvertido para ódigo de máquina, este pode ser exeutado independente do ompilador e do programa original eja a figura 2 Programa Fonte Compilador Programa Exeutável Programa Exeutável Sistema Operaional CPU Sistema Operaional CPU (a) Geração do Programa Exeutável (b) Exeução do Programa Figura 2: Etapas para exeução de um programa ompilado nterpretador É um programa que exeuta outros programas esritos em alguma linguagem de programação A exeução de um programa interpretado é em geral mais lenta que o programa ompilado Por outro lado, o uso de programas interpretados permite que trehos de ódigos possam ser troados por novos failmente, fazendo om 2

que o programa fonte possa mudar durante sua exeução Este é um dos grandes motivos de se usar programas interpretados em sistemas espeialistas Duas linguagens para as quais podemos enontrar interpretadores são isp e Prolog eja a figura 3 Programa Fonte nterpretador Sistema Operaional CPU Exeução de programa interpretado Figura 3: Exeução de um programa interpretado Algoritmo É a desrição de uma seqüênia de ações para realizar alguma tarefa Em geral, estaremos interessados em algoritmos omputaionais, que desrevem uma seqüênia de ações que podem ser traduzidos para alguma linguagem de programação Uma maneira para alular o MDC (Máximo Divisor Comum) de dois números inteiros positivos e é através do Algoritmo de Eulides apresentado no quadro seguinte Passo 1: Adote e ; Passo 2: Adote (resto de dividido por ); Passo 3: Adote novos valores e ; Passo 4: Se é diferente de, volte ao passo 2; senão pare om a resposta Algoritmo de Eulides O seguinte programa apresenta uma versão mais estilizada: Passo1: Dados: e Passo2: Passo3: Passo4: Repita Passo41: "! ; Passo42: ; Passo43: ; Passo44: Até que # Passo5: mprima o resultado Algoritmo de Eulides Estilizado O seguinte programa apresenta uma versão na linguagem Pasal: 3

Program Eulides; var $ % '& integer; begin end Readln(m,n); (&) * ; +&) * ; repeat,&) - -0/1 2! ; (&) * ; 3&) 4 ; until # ; writeln( ); mplementação do Algoritmo de Eulides em Pasal 13 Bits e Bytes A menor unidade de informação usada pelo omputador é o bit Este tem atribuições lógias 0 ou 1 Cada um destes estados pode, internamente, ser representado por meios eletro-magnétios (negativo/positivo, ligado/desligado, et) É por isso que é mais fáil para armazenar dados em formato binário Assim, todos os dados do omputador são representados de forma binária Mesmo os números são omumente representados na base 2, em vez da base 10, e suas operações são feitas na base 2 Um onjunto de 8 bits é hamado de byte Um byte pode ter até 5768 95;:;< onfigurações diferentes O prinipal padrão usado para representar arateres ( a, b,,, A, B, C,,!, @, #, $,) é o padrão ASC (Amerian Standard Code for nformation nterhange), usada na maioria dos omputadores Cada um destes arateres é representado por um byte A tabela 1 apresenta o ódigo de alguns arateres no ódigo ASC: Observe que: 1 As odifiações para letras em maiúsulas e minúsulas são diferentes 2 A odifiação de B é a odifiação de A somado de 1; a odifiação de C é a odifiação de B somado de 1; assim por diante Esta odifiação permite poder omparar failmente se um arater vem antes do outro ou não nternamente, verifiar se o arater a vem antes do b, é verifiar se o número binário orrespondente a a é menor que o número binário orrespondente a b 3 As letras maiúsulas vem antes das minúsulas As seguintes denominações são omumente usadas na área de informátia nome bit byte memória =>$ 8 bits kilobyte (kbyte) 5@BA bytes (pouo mais de mil bytes (5@BAC D>EF5$G )) megabyte 57 A bytes (pouo mais de um milhão de bytes) gigabyte 57 A bytes (pouo mais de um bilhão de bytes) Atualmente, onfigurações de omputador om 64 megabytes de memória RAM, 4,2 gigabytes de diso rígido, diso flexivel de 1,44 megabytes são muito omuns no merado Certamente esta onfiguração já será onsiderada pequena dentro de um ou dois anos, devido ao ontínuo avanço da tenologia nesta área ejamos alguns exemplos de quanto é esta memória Uma página de um livro, armazenada em formato ASC, tem em torno de 50 linhas e 80 arateres por linha Assim, um livro de 1000 páginas teria algo em torno de 4000000 de arateres, que poderiam ser guardados em 4 megabytes Assim, um diso rígido de 4,2 gigabytes poderia guardar 4

P Q R T X G Carater Representação em ASC alor na base deimal ;">E">E;; GF! ;">E">E;"> G2> J ;">E">E">E GK5 ;">E">E">;> GKM ;">;>E;;; GKN > ;">;>E;;"> GKO 5 ;">;>E;">E :7 M ;">;>E;">;> :=> ">E;;;;"> <;: ">E;;;">E <;< ">E;;;">;> <FS ">E;;">E; <;N U ">;>E;;;"> OFS ">;>E;;">E O;N W ">;>E;;">;> O;O ">;>E;">E; >E; Tabela 1: em torno de 1000 livros deste tipo sto aparenta uma quantidade bastante grande de dados Por outro lado, a maioria das apliações atuais está fazendo uso ada vez maior de imagens, gráfios e sons Estas apliações demandam muita memória Por exemplo, se voê quiser representar uma imagem de tamanho 1000 Y 1000 pontos ( >E;Z pontos), ada ponto om uma or entre 65000 ores possíveis (dois bytes por ponto), gastaremos algo omo 2 megabytes para armazenar apenas uma imagem deste tipo A quantidade de memória aumenta quando armazenamos filmes, que usam em torno de 30 imagens por segundo Apesar do uso de métodos de ompressão sobre estes tipos de dados a neessidade de grande quantidade de memória ainda é ruial para muitas apliações 14 Base Binária, Base Deimal, Como vimos, é muito mais fáil armazenar os dados na base binária que na base deimal Assim, muitas das operações usadas no omputador são feitas na base binária Muito provavelmente, nós usamos a base deimal porque temos 10 dedos nas duas mãos E se tivéssemos 8 dedos em vez de 10 Neste aso, provavelmente estaríamos usando a base otal Bom, agora imagine que voê tem apenas dois dedos Neste raioínio, usaremos o sistema binário!! Primeiro, vamos lembrar o que representa o número 4027 na base deimal G[F>E ]\]>E 5]\C>E S]\^>E A Agora um número binário tem apenas os dígitos 0 e 1 O número >E;">;>E;_ no sistema binário representa o número: >`\a57b ]\a5$ d\e5 >f\a5 >a\f5 g\e5 A sto nos dá o número M;5 5 hm;n 5

5 M G N G Assim o número >E;">;>E;_ no sistema binário é igual ao número 38 no sistema deimal As operações aritmétias também podem ser feitas em binário Por exemplo: amos somar o número aima (>E;">;>E;_ ) om (>;>;>E_ ) Agora vamos onferir o resultado: >;>;>E_f,G está orreto Em deimal seria M;N S GK: >E;">;>E;_ >;>;>E_ >E">;>E">E_ >g DS E >E">;>E">E_^ im;5 > jgk: De fato, este número Exeríio 11 Dado um número no sistema deimal, enontre uma maneira de esrevḙ-lo no sistema binário Assim, em um byte (8 bits), é possível representar os números de até 5;:;: (5;:;:k h576`lm> ) binário deimal ;;;;;;; ;;;;;;"> > ;;;;;">E 5 ;;;;;">;> ;;;;">E; >;>;>;>;>;>;>E 5;:$G >;>;>;>;>;>;>;> 5;:;: Da mesma forma, em dois bytes (16 bits) é possível representar os números de até <;:;:;M;:k h5 Z ln> Muitas vezes um ompilador (ou mesmo o próprio omputador) tem uma estrutura para definir sinais (se negativo ou positivo) Um exemplo disso é usar um bit para representar o sinal do número Por exemplo, um número de 16 bits pode ter a representação interna om um bit para sinal e os outros 15 bits para o número propriamente dito Neste exemplo, poderíamos representar números de lo5 b l#>p! até 5 b lh> (ie, de l^m;5fs7<fs até M;5FS7<FS ) Note que neste exemplo o número é representado duas vezes ( e lq ) Na prátia, as representações internas levam isto em onsideração de forma que ada número é representado apenas uma vez, neste aso podendo ir de lcm;5fs7<;n até M;5FS7<FS É interessante observar que números positivos não nulos que são potênia de 2 são números que têm todos os bits iguais a 0, exeto um bit Assim, a multipliação de um número inteiro por um inteiro positivo não nulo que é potênia de 2 faz apenas um desloamento dos bits de de algumas asas Por exemplo, a multipliação de por 8 (5 ) faz o desloamento dos bits de de 3 asas para a esquerda tsku tsku vs@u ts@u ts 57^ rerer > rerer rerer rerer s@u s@u sku sku s rerer ts@u ts@u tsku tsku ts w[p57^ rerer Assim, muitos ompiladores, ao enontrar a multipliação de um inteiro por uma potênia de 2, troam esta multipliação por um desloamento de bits Quando a operação é para obter a parte inteira da divisão de um inteiro por uma potênia de dois, digamos 57x, basta desloar os bits de de y asas para a direita, perdendo y bits que estão mais a direita Também é sabido que a multipliação de inteiros em geral leva mais tempo que somas e desloamento de bits Assim, uma possível otimização feita por ompiladores é troar a multipliação de um inteiro por somas e desloamento de bits Por exemplo, digamos que desejamos obter 8[@>E O inteiro 10 não é potênia de 2, mas em vez de fazermos 6

a multipliação por 10, podemos reesrever esta multipliação por z[on 5F! e, podemos fazer {[K57 {[K5 Desta maneira troamos uma multipliação de um inteiro por dois desloamentos e uma soma, o que em muitos omputadores é feito de forma mais rápida que uma multipliação direta Obs: É possível mostrar que podemos fazer a multipliação z[ W, onde é inteiro e W é uma onstante inteira apliando este método fazendo no máximo };~ somas, onde W é a onstante inteira a multipliar Outro sistema muito usado na literatura é a base >< (hexadeimal) Neste sistema temos 16 dígitos usados na seguinte ordem: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F Assim, o número (F+1) é igual a 10 (10 em hexadeimal é igual a 16 no sistema deimal) Exeríio 12 Quanto é A9B em deimal W! 15 Álgebra Booleana Alguns omandos de programação estão estreitamente relaionados om um sistema de álgebra, hamado álgebra de boole, desenvolvido por George Boole Neste tipo de álgebra podemos operar sobre proposições que podem ser verdadeiras ou falsas, resultando em um resultado que também é verdadeiro ou falso Em 1930, Turing mostrou que três funções lógias (e (and), ou (or) e não (not)) são sufiientes para representar estas proposições lógias Uma das prinipais vantagens deste tipo de álgebra é que ela pode ser implementada efiientemente através de omponentes eletrônios Usando as letras F omo falso e omo verdadeiro, apresentamos na tabela 2 os valores para as funções (and), or e not x y and "! x y or "! Tabela 2: Funções booleanas and, or e not x not! Com estas três funções podemos onstruir funções mais omplexas Por exemplo, onsidere variáveis booleanas e, e uma função booleana ƒ "! que assume os valores onforme a tabela a seguir x y ƒ 2! Para onstruir a função ƒ 2!, podemos onsiderar a tabela aima, om todas as entradas possíveis de e, e onstruir ƒ 2! omo uma seqüênia de láusulas ligadas pela função or Cada láusula orresponde a uma entrada verdadeira para a função ƒ "!, feita om as funções and e not No exemplo aima, a função ƒ 2! pode ser esrita omo: ƒ 2! + ˆ 7 Š ;Œ "!!e 7 Ž FŒ!e 7 ŠŽ 2!! Exeríio 13 Construa uma fórmula booleana para a seguinte função 0! dada pela seguinte tabela: x y z ž ž ž š= œ7 Ÿ ž ž Ÿ ž ž Ÿ ž Ÿ ž Ÿ Ÿ ž Ÿ ž ž ž Ÿ ž Ÿ ž Ÿ Ÿ ž Ÿ Ÿ Ÿ Ÿ Ÿ 7