Sunteți pe pagina 1din 102

NDICE

1 INTRODUO ORGANIZAO E ESTRUTURA DOS COMPUTADORES ........7 1.1 IMPORTNCIA DA INFORMTICA.......................................................................................7 1.2 PROCESSAMENTO DE DADOS ............................................................................................7 1.3 CONCEITOS BSICOS ........................................................................................................8 1.4 O COMPUTADOR E SUAS MODALIDADES ..........................................................................8 1.4.1 Quanto a operao: .................................................................................................9 1.4.1.1 Analgico.............................................................................................................9 1.4.1.2 Digital ..................................................................................................................9 1.4.2 Quanto a utilizao: ................................................................................................9 1.4.2.1 Cientficos ............................................................................................................9 1.4.2.2 Comerciais .........................................................................................................10 1.4.3 Quanto ao Porte: ...................................................................................................10 1.4.3.1 Computadores de grande porte ..........................................................................10 1.4.3.2 Supercomputadores............................................................................................10 1.4.3.3 Mini Computador (Notebook) ...........................................................................10 1.4.3.4 Microcomputador ..............................................................................................10 1.5 COMO TUDO COMEOU ...................................................................................................11 1.5.1 baco ou Soroban (2000 a.C.) ..............................................................................11 1.5.2 Ossos de Napier (1617) .........................................................................................11 1.5.3 Mquina de Calcular (1642) .................................................................................11 1.5.4 Mquina Diferencial (1822) ..................................................................................11 1.5.5 Mquina Analtica (1833)......................................................................................11 1.5.6 Carto Perfurado (1874 / 1890)............................................................................12 1.5.7 Mquina de Multiplicar (1887) .............................................................................12 1.5.8 Mquina de Turing (1912 / 1942) .........................................................................12 1.5.9 Programao em Memria (1944) - Arquiterura de Von Neumann .....................12 1.5.10 Primeiro Computador - ENIAC (1946) .................................................................12 1.5.11 Primeira Linguagem de Programao - FORTRAN (1957) .................................13 1.5.12 Primeiro Computador com Transistor - IBM 7090 (1958) ...................................13 1.5.13 Primeiro Computador com Circuitos integrados - IBM 360 (1964) .....................13 1.5.14 Criao do Sistema Operacional CTSS pela IBM 1965 / 1967) ........................13 1.5.15 Criao da APANET (1969)..................................................................................13 1.5.16 Criao do Linguagem de Programao PASCAL (1971) ...................................13 1.5.17 Criao do Linguagem de Programao C (1972) ...............................................13 1.5.18 Implementao de parte do Unix em C (1973)......................................................14 1.5.19 Criao da Apple (1977) .......................................................................................14 1.5.20 Primeira Planilha Eletrnica - Visi-Calc (1978) ..................................................14 1.5.21 Criao da Linguagem C com Classes (1979 / 1982) ...........................................14 1.5.22 Lanamento do IBM PC e criao da Bitnet (1981) .............................................14 1.5.23 Criao do Padro TCP/IP (1983) .......................................................................14 1.5.24 Conceito de Orientao a Objetos (1983 / 1985)..................................................14 1.5.25 Lanamento do Macintosh (1984) .........................................................................14
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 2

1.5.26 Criados os Servidores de Nome e de Domnio - DNS (1984)................................14 1.5.27 Lanamento do Windows (1989) ...........................................................................14 1.5.28 Primeiro Servidor WEB (1992) .............................................................................15 1.5.29 Exploso do Netscape (1993) ................................................................................15 1.6 HISTRICO E EVOLUO DOS COMPUTADORES ..............................................................15 1.6.1 1 Gerao (1945 / 1952) ......................................................................................15 1.6.2 2 Gerao (1954 / 1964) ......................................................................................15 1.6.3 3 Gerao (1964 / 1970) ......................................................................................16 1.6.4 4 Gerao (1970 / 1988) ......................................................................................16 1.6.5 5 Gerao (1988 / at hoje)..................................................................................16 2 SISTEMAS DE NUMERAO.........................................................................................17 2.1 NMEROS DE PRECISO FINITA ......................................................................................17 2.2 CONCEITOS DE SISTEMA DE NUMERAO ......................................................................18 2.2.1 Sistemas de Numerao Posicionais .....................................................................19 2.2.2 Base de um Sistema de Numerao .......................................................................20 2.2.3 Representao Binria ..........................................................................................21 2.2.4 Representao em Octal e em Hexadecimal .........................................................24 2.3 CONVERSES ENTRE BASES ............................................................................................25 2.3.1 Converses entre as bases 2, 8 e 16 ......................................................................25 2.3.2 Converso de Nmeros em uma base b qualquer para a base 10.........................26 2.3.3 Converso de Nmeros da Base 10 para uma Base b qualquer ...........................27 2.3.3.1 Parte Inteira........................................................................................................27 2.3.3.2 Parte Fracionria ................................................................................................28 2.3.4 Converso de Nmeros entre duas Bases quaisquer.............................................29 2.4 ARITMTICA EM BINRIO ...............................................................................................29 2.4.1 Soma ......................................................................................................................29 2.4.2 Subtrao...............................................................................................................30 2.4.3 Complemento a Base .............................................................................................31 2.4.4 Multiplicao e Diviso.........................................................................................32 2.4.5 Representao de Nmeros em Complemento......................................................33 2.4.5.1 Sinal e Magnitude ..............................................................................................33 2.4.5.2 Representao de Nmeros Positivos em Complemento ..................................33 2.4.5.3 Complemento a UM ..........................................................................................33 2.4.5.4 Complemento a DOIS........................................................................................34 2.5 PRECISO........................................................................................................................34 2.6 PONTO FIXO E PONTO-FLUTUANTE.................................................................................34 3 CIRCUITOS LGICOS .....................................................................................................35 3.1 CONCEITOS DE LGICA DIGITAL.....................................................................................35 3.2 OPERADORES LGICOS ...................................................................................................35 3.2.1 E (ou AND) ............................................................................................................35 3.2.2 OU (ou OR)............................................................................................................36 3.2.3 NO (ou NOT) .......................................................................................................36 3.3 TABELA VERDADE ..........................................................................................................36 3.3.1 AND - Funo E ....................................................................................................36 3.3.2 OR - Funo OU ....................................................................................................36 3.3.3 NOT - Funo NO...............................................................................................37
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 3

3.4 APLICAO DA LGEBRA DE BOOLE AOS COMPUTADORES DIGITAIS.............................37 3.5 PORTA LGICA OU GATE ................................................................................................40 3.5.1 Porta NOT (NO)..................................................................................................40 3.5.2 Porta AND (E).......................................................................................................41 3.5.3 Porta OR (OU) ......................................................................................................41 3.5.4 Porta NAND (NO E) ...........................................................................................41 3.5.5 Porta NOR (NO OU)...........................................................................................42 3.5.6 Porta XOR (OU EXCLUSIVO)..............................................................................42 3.6 ALGEBRA DE BOOLE .......................................................................................................43 3.6.1 Avaliao de uma Expresso Booleana ................................................................43 3.6.2 Equivalncia de Funes Lgicas .........................................................................44 3.6.3 Propriedade da lgebra de Boole .........................................................................44 3.7 FORMAS CANNICAS......................................................................................................45 3.7.1 Soma dos Minitermos ............................................................................................47 3.7.2 Produto dos Maxitermos........................................................................................47 4 HISTRIA, CONCEITOS E TERMINOLOGIA DOS COMPUTADORES ...............49 4.1 CONCEITO DE PROGRAMA ARMAZENADO.......................................................................49 4.2 UNIDADE C ENTRAL DE P ROCESSAMENTO .......................................................................50 4.2.1 Unidade Lgica e Aritmtica (ULA)......................................................................50 4.2.2 Unidade de Controle (UC) ....................................................................................50 4.3 MEMRIA PRINCIPAL (MP) ............................................................................................50 4.3.1 Hierarquia da memria .........................................................................................51 4.4 DISPOSITIVOS DE ENTRADAS E SADAS...........................................................................51 4.4.1 Tipos de Dispositivos.............................................................................................52 4.4.1.1 De Entrada .........................................................................................................52 4.4.1.2 De sada .............................................................................................................52 4.4.2 Formas de Comunicao.......................................................................................53 4.4.2.1 Comunicao em Paralelo .................................................................................53 4.4.2.2 Comunicao Serial...........................................................................................53 4.4.2.3 Tabela Comparativa entre paralelo e serial .......................................................54 4.4.3 Transmisso Sncrona e Assncrona......................................................................54 4.4.3.1 Transmisso Sncrona ........................................................................................54 4.4.3.2 Transmisso Assncrona ....................................................................................54 4.4.4 Transmisso Simplex, Half-Duplex e Full-Duplex ................................................54 4.4.4.1 Transmisso Simplex.........................................................................................54 4.4.4.2 Transmisso Half-Duplex..................................................................................55 4.4.4.3 Transmisso Full- Duplex...................................................................................55 4.5 PROGRAMA EM LINGUAGEM DE MQUINA .....................................................................55 4.6 LINGUAGEM DE MONTAGEM ..........................................................................................56 4.7 LINGUAGEM DE PROGRAMAO.....................................................................................58 4.8 TRADUO .....................................................................................................................59 4.9 MONTAGEM ....................................................................................................................59 4.10 COMPILAO..................................................................................................................60 4.11 BIBLIOTECAS ..................................................................................................................60 4.12 LIGAO.........................................................................................................................61 4.13 INTERPRETAO.............................................................................................................61 4.14 COMPARAO ENTRE COMPILAO E INTERPRETAO .................................................62
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 4

4.14.1 Tempo de Execuo...............................................................................................62 4.14.2 Consumo de Memria............................................................................................62 4.14.3 Repetio de Interpretao....................................................................................63 4.14.4 Desenvolvimento de Programas e Depurao de Erros .......................................63 4.15 EMULADORES E MQUINAS VIRTUAIS ............................................................................63 4.16 SISTEMA OPERACIONAL..................................................................................................65 4.16.1 Exemplos de Sistema Operacional ........................................................................69 4.16.1.1 MS-DOS ........................................................................................................69 4.16.1.2 UNIX .............................................................................................................69 4.16.1.3 WINDOWS NT .............................................................................................70 4.16.1.4 WINDOWS 95...............................................................................................70 5 ALGORITMOS ESTRUTURADOS .................................................................................71 5.1 DESENVOLVENDO ALGORITMOS .....................................................................................72 5.1.1 Pseudocdigo.........................................................................................................72 5.1.2 Regras para construo do Algoritmo ..................................................................72 5.1.3 Fases de Construo..............................................................................................73 5.1.4 Exemplo de Algoritmo ...........................................................................................73 5.1.5 Teste de Mesa (ou Chins).....................................................................................74 5.2 CONSTANTES , VARIVEIS E TIPOS DE DADOS ................................................................74 5.2.1 Constantes..............................................................................................................75 5.2.2 Variveis ................................................................................................................75 5.2.3 Tipos de Variveis .................................................................................................75 5.2.3.1 Numricas ..........................................................................................................75 5.2.3.2 Caracteres ..........................................................................................................76 5.2.3.3 Alfanumricas ....................................................................................................76 5.2.3.4 Lgicas...............................................................................................................76 5.3 OPERADORES ..................................................................................................................76 5.3.1 Operadores Aritmticos.........................................................................................76 5.3.1.1 Hierarquia das Operaes Aritmticas ..............................................................77 5.3.2 Operadores Relacionais ........................................................................................77 5.3.3 Operadores Lgicos...............................................................................................78 5.4 ESTRUTURA DE DECISO E REPETIO...........................................................................79 5.4.1 Comandos de Deciso ...........................................................................................79 5.4.1.1 SE ENTO / IF ... THEN ..................................................................................79 5.4.1.2 SE ENTO SENO / IF ... THEN ... ELSE.....................................................80 5.4.1.3 CASO SELECIONE / SELECT ... CASE.........................................................81 5.4.2 Comandos de Repetio ........................................................................................82 5.4.2.1 Enquanto x, Processar (Do While ... Loop) .......................................................82 6 LINGUAGEM DE PROGRAMAO C .........................................................................82 6.1 A ESTRUTURA DE UM PROGRAMA EM C..........................................................................82 6.2 VARIVEIS ......................................................................................................................83 6.2.1 Definio de variveis globais ..............................................................................85 6.2.2 Entrada e sada do valor de variveis...................................................................86 6.2.3 Operaes aritmticas ...........................................................................................87 6.3 OPERADORES DE COMPARAO......................................................................................88 6.4 OPERADORES LGICOS ...................................................................................................88
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 5

6.5 PRECEDNCIAS ...............................................................................................................89 6.6 INTRUES .....................................................................................................................90 6.6.1 A instruo if..........................................................................................................90 6.6.2 O operador ?: ........................................................................................................91 6.6.3 A instruo switch..................................................................................................91 6.7 CICLOS E ITERAO........................................................................................................92 6.7.1 A instruo while ...................................................................................................92 6.7.2 A instruo do-while ..............................................................................................93 6.7.3 A instruo for .......................................................................................................94 6.7.4 break e continue.....................................................................................................95 6.8 ERROS COMUNS EM C.....................................................................................................96 6.8.1 Atribuio (=) versus comparao (==)...............................................................96 6.8.2 Passagem de endereo...........................................................................................96 6.8.3 Falta do operador () na chamada de uma funo.................................................97 6.8.4 O C case sensitive...............................................................................................97 6.8.5 O ponto e vrgula (;) termina as instrues...........................................................97 6.9 ENTRADA E SADA ..........................................................................................................97 6.9.1 Operaes bsicas de entrada/sada .....................................................................97 6.9.2 Entrada/sada formatadas .....................................................................................98 6.9.2.1 Printf ..................................................................................................................98 6.9.2.2 Scanf ................................................................................................................100 7 8 DESENVOLVIMENTO DE SOFTWARE .....................................................................100 BIBLIOGRAFIA ...............................................................................................................101 8.1 8.2 8.3 8.4 8.5 8.6 LIVROS .........................................................................................................................101 REVISTAS......................................................................................................................101 CADERNOS ....................................................................................................................102 DICIONRIO ..................................................................................................................102 ENCICLOPDIA SOBRE COMPUTADORES ........................................................................102 PRINCIPAIS FABRICANTES DE PROCESSADORES E SISTEMAS OPERACIONAIS ................102

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

INTRODUO ORGANIZAO E ESTRUTURA DOS COMPUTADORES

1.1 Importncia da Informtica No h exagero na afirmao de que a vida contempornea se desenvolve sobre o alicerce da Informtica: centenas das mais importantes atividades relacionadas com o nosso cotidiano seriam absolutamente impossveis, no fosse o concurso do computador eletrnico. Nesta nova sociedade, no s o desempenho de qualquer atividade profissional, como o prprio relacionamento com o meio e com os semelhantes impem o conhecimento da tecnologia dos computadores. Impe-se, hoje, conhecer a potencialidade, acompanhar o desenvolvimento, estar a par do incessante progresso, para manter condies de explorar judiciosamente os recursos disponveis. Avaliaes e aes, dentro desse quadro, s podero ser corretas se houver um lastro de conhecimento.. essa fundamentao apresenta-se, portanto como indispensvel na formao dos profissionais das mais diversas atividades. A Informtica a cincia da informao. Hoje em dia, com a velocidade com que as informaes so transmitidas e processadas, vital para o sucesso das empresas e o progresso das pessoas, o conhecimento desta cincia. Dentro da nova concepo atual sobre a relao homemsocial-trabalho, torna-se necessrio que os esforos humanos sejam direcionados para o progresso, a pesquisa, a criao, onde a inteligncia seja realmente necessria. Ficando a cargo da informtica e da tecnologia, o trabalho repetitivo e cansativo da produo. 1.2 Processamento de Dados Em qualquer atividade humana, verifica-se que a resoluo dos problemas consiste em uma srie de tarefas, das quais as fundamentais so: decidir o que e como fazer e executar as operaes.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

Podemos dizer que Processamento de Dados a atividade que consiste em transformar ou ordenar informaes para alguma finalidade prtica. Quando nos referimos em processamento, no estamos nos referindo diretamente aos computadores, pois qualquer atividade diria um processamento. Exemplos: - Escrever - Preparar um suco - Caminhar - Estudar Estes exemplos entre muitos outros precisam seguir uma certa ordem lgica, ou seja, ter um incio, meio e fim, a qual chamamos de Ciclo Vital do Processamento.

1.3 Conceitos Bsicos Dados Elementos conhecidos de um problema. Normalmente servem de base soluo de outros problemas.

Informao Um conjunto estruturado de dados. Instruo Programa Comando que define uma operao a ser executada. Conjunto de Instrues, ordenadas logicamente, visando um determinado fim.

1.4 O Computador e suas Modalidades O computador mais do que um simples instrumento para a soluo de problemas. uma mquina capaz de executar uma srie de tarefas complexas que, se fossem feitas manualmente, exigiriam um tempo maior. Tecnicamente, o computador um dispositivo eletrnico controlado por um conjunto de instrues, as quais chamamos de programas.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 8

Dependendo da aplicao dos computadores, podemos classific-los em trs modalidades: 1.4.1 Quanto a operao: 1.4.1.1 Anal gi co

Em um painel de um automvel, o velocmetro um marcador analgico; o hodmetro, assinalando as distncias percorridas digital. Nos sistemas analgicos, converte-se a manifestao do fenmeno, que se quer aferir, em algum tipo de sinalizao visual que se comporte analogicamente. Trata-se de uma classe de computadores que resolve problemas referentes condies fsicas, por meio de quantidades mecnicas ou eltricas. So usados em laboratrios de pesquisa e para aplicaes cientficas e tecnolgicas. 1.4.1.2 Di git al

Nos sistemas digitais mede-se com determinada freqncia o estado; e os resultados so sempre traduzidos por dgitos. Esses computadores tem emprego mais generalizado em bancos, comrcio, escolas, indstrias e empresas de modo geral. A diferenciao entre o que chamamos de computador analgico e computador digital que os analgi cos realizam operaes aritmticas por meio de analogia (sistema de representao de fenmenos por meio de pontos de semelhana), ou seja, no trabalham com nmeros ou smbolos que representem os nmeros, eles fazem analogia direta entre as quantidades; eles medem as quantidades a serem trabalhadas, tendo, portanto, uma analogia entre os valores com os quais pretende trabalhar e os valores internos da mquina. J os computadores digitais trabalham diretamente com nmeros, ou seja trabalham realizando operaes diretamente com os nmeros, enquanto os analgicos medem. 1.4.2 Quanto a utilizao: 1.4.2.1 Ci ent fi cos

Os computadores so do tipo cientficos quando dirigido a empregos na rea de clculos e pesquisas cientficas, onde so requeridos os resultados de maior preciso, isto , trata de problemas em que nmeros muito grandes ou muito pequenos esto presentes.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

1.4.2.2

Comerci ai s

Os computadores comerciais constituem a grande maioria dos equipamentos utilizados nas empresas, caracterizam-se por permitirem o trato rpido e seguro de problemas que comportam grande volume de entrada e sada de dados. 1.4.3 Quanto ao Porte: 1.4.3.1 Comput adores de grande port e

Surgiram na dcada de 60 e tambm so chamados de Mainframe. Suas principais caractersticas so a velocidade de processamento, grande capacidade de armazenamento de informao e a capacidade de gerenciar diversos usurios ao mesmo tempo (sistema multiusurio). Este tipo de computador utilizado para processar grande quantidade de dados. Exige pessoas especializadas e instalaes especiais. 1.4.3.2 Supercomput adores

So mquinas extremamente rpidas. Geralmente utilizados por institutos de pesquisa, produtoras de cinema, centros aeroespaciais, etc. Esse tipo de mquina geralmente se encontra mergulhada em um tanque de hidrognio para manter os circuitos eletrnicos resfriados. Graas ao seu grande poder de processamento (600.000.000 de clculos por segundo em mdia), utilizado para clculos de preciso e trabalhos grficos de alta resoluo. 1.4.3.3 Mi ni Comput ador (Notebook)

Foi construdo com caractersticas semelhantes a dos computadores de grande porte. Porm com capacidade de processamento e armazenamento inferiores ao seu predecessor. Sua grande vantagem sobre o computador de grande porte foi o baixo custo de comercializao, proporcionando as empresas de menor porte a aquisio de um computador. 1.4.3.4 Mi crocomp ut ador

Os microcomputadores so utilizados tanto para o uso profissional como para o uso particular. Possui um tamanho reduzido e sua capacidade de processamento e armazenamento de dados so limitadas. Podem ser monousurios (individual) ou multiusurio (rede de computadores que compartilham os mesmos perifricos).

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

10

1.5 Como tudo comeou 1.5.1 baco ou Soroban (2000 a.C.) Inventado pelos chineses na antigidades, usado ainda hoje, no comrcio, por chineses e japoneses. Utiliza o princpio de posicionamento digital de colunas de bits ou bolinhas com valores numricos 0, 1 e 5. Uma pessoa treinada pode efetuar operaes de soma, subtrao, multiplicao, diviso e radiciao com velocidades comparveis de u ma mquina de calcular, pois, mesmo nas mquinas de calcular eletrnicas, a velocidade da operao aritmtica fica limitada capacidade de digitao dos algarismos no teclado. 1.5.2 Ossos de Napier (1617) John Napier descobriu o algoritmo o algoritmo e usou-o para executar operaes de multiplicao e diviso (ou extrao de raiz quadrada ou cbica) atravs da manipulao de barras de ossos, com valores numricos gravados nas quatro faces da barra. 1.5.3 Mquina de Calcular (1642) Blaise Pascal, filsofo e matemtico francs construiu uma mquina de calcular, de oito algarismos, usando o princpio das engrenagens dentadas, capaz de somar e subtrair. A linguagem chamada PASCAL, feita em sua homenagem, bastante usada em microcomputadores. 1.5.4 Mquina Diferencial (1822) Babbage, estabeleceu os princpios de funcionamento dos computadores eletrnicos no seu projeto, capaz de resolver polinmios de at oito termos. 1.5.5 Mquina Analtica (1833) Charles Babbage, projetou e construiu (dizem que nunca ficou pronta) uma mquina de calcular programvel, onde a seqncia de operaes aritmticas era codificada em cartes perfurados e executada automaticamente, sem interveno de um operador. Devido aos princpios fundamentais de programao ainda hoje utilizados nos computadores, ele considerado o PAI do Computador.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

11

1.5.6 Carto Perfurado (1874 / 1890) J. Jacquard, usou cartes perfurados para controlar a seqncia de operaes de uma mquina de tecelagem. Mais tarde Herrman Hollerith aproveitou o mesmo princpio para mquinas mecnicas de calcular, para efetuar o censo demogrfico da populao dos Estados Unidos. Os cartes (com furos retangulares) de Hollerith e os cartes POWERS (furos circulares) ainda hoje so utilizados, porm j se encontram em extino. 1.5.7 Mquina de Multiplicar (1887) Leon Bolle, construiu uma mquina capaz de multiplicar, sem recorrer a adies sucessivas. 1.5.8 Mquina de Turing (1912 / 1942) Turing, matemtico ingls inventou uma mquina usada para estudar e provar matematicamente se possvel ou no resolver um problema. um modelo terico de mquina de calcular, onde seus componentes fita de papel (memria infinita) e um cabeote (para ler os dados da fita), teoricamente resolveriam qualquer tipo de problema. 1.5.9 Programao em Memria (1944) - Arquiterura de Von Neumann John Von Neumann, estudou e formulou modelos tericos de modernos computadores, foi o primeiro a propor a programao armazenada em memria, cujo conceito ainda hoje utilizado. At ento os computadores eram programados por fios intercambiveis que liam e processavam os bits perfurados em cartes. Recebe o valor em A Recebe o valor em B Calcula A vezes B em C Mostra A x B = C, no papel 1.5.10 Primeiro Computador - ENIAC (1946)

J. Presper Eckert e John Mauchly pesquisadores da Universidade da Pennsylvania, Estados Unidos, constrem o ENIAC (Eletronic Numeric Integrator And Calculator), utilizado para montar tabelas para o clculo da trajetria de projteis. Este computador tinha 18.000 vlvulas.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

12

1.5.11

Primeira Linguagem de Programao - FORTRAN (1957)

Uma equipe da IBM, c onduzida por John Backus, define a primeira linguagem de programao, o Fortran, para resolver problemas de engenharia e cincia. 1.5.12 Primeiro Computador com Transistor - IBM 7090 (1958)

A IBM lana o primeiro computador a usar transistor. 1.5.13 Primeiro Computador com Circuitos integrados - IBM 360 (1964)

A IBM lana o primeiro computador a usar circuitos integrados. 1.5.14 Criao do Sistema Operacional CTSS pela IBM 1965 / 1967)

Este sistema operacional permitiu que vrias pessoas usassem ou compartilhassem, um nico c omputador, por tcnica de compartilhamento de tempo. nessa fase que ocorre boa parte da formalizao de alguns conceitos fundamentais para a revoluo que se seguiu na informtica. Um congresso realizado no MIT (Instituto de Tecnologia d Massachusetts) vira marco pelo nmero impressionante de novidades apresentadas. Entre elas, o conceito bsico do Multics, que, posteriormente, resultou no desenvolvimento do Unix, pela Bell, e de um homnimo do Multics, pela honnwell. Os mesmos conceitos se aplicaram a seguir no TSS da IBM, MTS da Universidade de Michigan e VN/CMS tambm da IBM, modelos para praticamente todos os sistemas operacionais que vieram depois. O hardware tambm teve um ano e tanto, pois foram lanados os primeiros sistemas multi-tarefa e os primeiros multi-processadores. 1.5.15 Criao da APANET (1969) Pesquisa Avanada do

Criao da Agncia de Projetos de Departamento de Defesa dos Estados Unidos. 1.5.16

Criao do Linguagem de Programao PASCAL (1971)

Nicklaus Wirth projeta uma nova linguagem de programao, o Pascal, como padro para ensinar conceitos de programao estruturada. 1.5.17 Criao do Linguagem de Programao C (1972) pesquisador do Laboratrio Bell, desenvolve
13

Dennis Ritchie, linguagem C.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

1.5.18

Implementao de parte do Unix em C (1973)

Primeiro microcomputador e supercomputador (1975) Suguem o Altair, o primeiro microcomputador e o Cray-1, primeiro supercomputador. 1.5.19 Criao da Apple (1977)

Steve Wozniak e Steve Jobs criam a Apple. Este tambm o ano em que nasce a Usenet. 1.5.20 Primeira Planilha Eletrnica - Visi-Calc (1978)

Dan Bricklin e Bob Frankston desenvolveram a primeira planilha eletrnica, chamada de Visi-Calc. 1.5.21 Criao da Linguagem C com Classes (1979 / 1982)

Bjarne Stroustrup, pesquisador do Laboratrio Bell, cria a linguagem C com classes. 1.5.22 1.5.23 Lanamento do IBM PC e criao da Bitnet (1981) Criao do Padro TCP/IP (1983)

So criados cdigos de transmisso (TCP) e Internet Protocolo (IP). 1.5.24 Conceito de Orientao a Objetos (1983 / 1985)

A linguagem C com classes redesenhada e re-implementada como C++, sedimentando o conceito de orientao a objetos. 1.5.25 Lanamento do Macintosh (1984)

A Apple lana o Macintosh, primeiro computador comercialmente disponvel como uma interface amigvel, usando cones, janelas e mouse. 1.5.26 1.5.27 Criados os Servidores de Nome e de Domnio - DNS (1984) Lanamento do Windows (1989)

A microsoft lana o windows para computadores da plataforma intel.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

14

1.5.28

Primeiro Servidor WEB (1992)

Desenvolvidos no CERN, na Sua, um servidor WEB e o primeiro navegador. 1.5.29 Exploso do Netscape (1993)

O netscape toma o mundo, a WEB explode e nada mais como antes. 1.6 Histrico e Evoluo dos Computadores 1.6.1 1 Gerao (1945 / 1952) Os primeiros computadores eram constitudos de vlvulas eletrnicas. Elas eram grandes, caras, lentas e queimavam com grande facilidade. O computador tinha apenas uso cientfico e estava instalado nos grandes centros de pesquisa. Isto caracterizou a Primeira Gerao de Computadores. Estas vlvulas eram ligadas por Km de fios ligados manualmente. Isto explica as enormes dimenses fsicas dos computadores. Durante a 1 Gerao a programao era feita diretamente em linguagem de mquina que alm de difcil era demorado. As operaes de clculos eram realizadas em milesegundos. Realizando 39.000 adies/segundos. 1.6.2 2 Gerao (1954 / 1964) Esta Gerao foi originada pela revoluo dos Transistores os quais substituram as volumosas vlvulas. Houve uma enorme diminuio em cabos e fios, tendo em vista que cada transistor substitua dezenas de vlvulas. Desta maneira os computadores tornaram-se consideravelmente menores e devido a isso, muito mais velozes. O computador comea a ser utilizado nas grandes empresas. Tanto a vlvula quanto o transistor realizavam um processamento de cada vez. Com o desenvolvimento das tcnicas de integrao, surgiram os Circuitos Int egrados, onde numa pequena cpsula continha, vrias dezenas, centenas ou milhares de transistores, ocupando uma rea menor que uma unha, dando o nome de microprocessador (processador miniatura). A linguagem de programao foi simplificada e j se podia programar atravs de mnemnicos (comandos abreviados). Esta linguagem denominase ASSEMBLER. As operaes de clculos eram realizadas em milionsimos de segundos. Realizando 204.000 adies/segundos.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 15

1.6.3 3 Gerao (1964 / 1970) A 3 Gerao surgiu com a utilizao dos Circuitos Integrados - SLT (Solid Logic Technology) uma tcnica de microcircuitos. Nesta gerao os computadores podiam realizar vrios processamentos simultneos. As tcnicas de integrao evoluram de SSI (integrao em pequena escala) para MSI (integrao em mdia escala), LSI (integrao em grande escala) e VLSI (integrao em muito grande escala). Esta classificao baseada na quantidade de componentes que o integrado contm. A programao dos computadores desta gerao foi facilitada pelo aparecimento de linguagens orientadas para o problema especfico. As linguagens so de natureza universal e assemelham-se cada vez mais a linguagem do homem. As operaes de clculos eram realizadas em bilionsimos de segundos. Realizando 1.280.000 adies/segundos. 1.6.4 4 Gerao (1970 / 1988) A 4 Gerao apareceu com o desenvolvimento e utilizao da Tecnologia Bipolar MOS-LSI (Large Scale Integrated) - CHIPS. A quarta gerao (a partir de 1982) foi marcada pela utilizao do VLSI e o surgimento dos microcomputadores de baixo custo, que tomaram conta do mercado, atingindo empresas, escritrios e lares. Alguns autores no consideram a existncia da quarta gerao, por no ter havido mudana de componente, mas apenas a melhoria das tcnicas de integrao. Isso fez com que os computadores fossem reduzidos em suas dimenses mais ainda, e sua eficincia aumentada tornando-os mais velozes e mais econmicos. A programao foi melhorada ainda mais tornando-se interpretada, e voltadas para o usurio final. Realizando 15.000.000 adies/segundos. 1.6.5 5 Gerao (1988 / at hoje) previsto para esta dcada o surgimento da quinta gerao, que ser marcada pela tendncia de imitar a natureza, tanto nos circuitos integrados BIOCHIPS (Circuitos Integrados com molculas orgnicas) como na programao com o desenvolvimento das tcnicas de inteligncia artificial, processamento simblico, linguagens naturais, reconhecimento de voz. Outra tendncia para o computador de quinta gerao est sendo elaborado por um conjunto de cientistas de diversos pases, e dever conter basicamente: mltiplas unidades de "CPU" (Unidade Central de Processamento), construdas e arquitetadas sob novas concepes; unidades de memria e arquivos com mdulos pr - programados com conhecimento
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 16

para executar tarefas sem necessidade de programao, formando um enorme banco de dados de conhecimento; unidades processadoras de imagem e figuras; unidades processadoras da voz e de som. Definies Importantes: Vlvula Transistor Circuito Integrado Chip Milissegundo Dispositivo que conduz a corrente eltrica num s sentido. (Possui trs componentes bsicos: ctodo, nodo e grade). Amplificador de cristal, inventado nos EUA em 1948, para substituir a vlvula (Prmio Nobel de 1956). Circuito eletrnico constitudo de elevado nmero de componentes arrumados em um chip de poucos milmetros quadrados. Uma "pastilha" de semicondutor onde se monta um circuito integrado. A milsima parte de um segundo.

Microssegundo A milionsima parte de um segundo. Nanossegundo A bilionsima parte de um segundo. 2 SISTEMAS DE NUMERAO

2.1 Nmeros de Preciso Finita Ao se executarem operaes aritmticas, geralmente dado pouca importncia questo de quantos dgitos decimais so gastos para representar um nmero. Os fsicos podem calcul ar que existem 1078 eltrons no universo sem se preocuparem com o fato de que so necessrios 79 dgitos decimais para escrever o nmero completo. Ao se calcular o valor de uma funo utilizando lpis e papel, necessitando de uma resposta com seis dgitos significativos, basta manter resultados intermedirios com sete, oito dgitos ou quantos forem necessrios. Nunca acontece de o papel no ser suficientemente grande para nmeros de sete dgitos. Com os computadores bastante diferente. Na maioria dos computadores, a quantidade de memria disponvel para armazenar um nmero determinada no instante em que o computador projetado. Com um certo esforo, o programador pode representar nmeros com duas, trs ou mesmo muitas vezes esta quantidade fixa, mas isto no muda a natureza
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 17

deste problema. A natureza finita do computador nos fora a lidar apenas com nmeros que podem ser representados com um nmero fixo de dgitos. Chamamos tais nmeros de nmeros de preciso finita. Para estudar as propriedades dos nmeros de preciso finita, vamos examinar o conjunto dos inteiros positivos representveis por trs dgitos decimais, sem ponto decimal e sem sinal. Este conjunto tem exatamente 1000 elementos: 000, 001, 003,..., 999. Com esta restrio, impossvel expressar vrios conjuntos importantes de nmeros, tais com: ? ? Nmeros maiores que 999. ? ? Nmeros negativos. ? ? Nmeros irracionais e fracionrios. ? ? Nmeros complexos. Podemos concluir que embora os computadores sejam dispositivos de uso geral, sua natureza finita os torna inadequados para operaes aritmticas. Esta concluso, naturalmente, no verdadeira porque ela serve para ilustrar a importncia de entender como os computadores trabalham e quais so as suas limitaes. 2.2 Conceitos de Sistema de Numerao Os sistemas de numerao tem por objetivo prover smbolos e convenes para representar quantidades, de forma a registrar a informao quantitativa e poder process-la. A representao de quantidades se faz com os nmeros. Na antigidade, duas formas de representar quantidades foram inventadas. Inicialmente, os egpcios, criaram um sistema em que cada dezena era representada por um smbolo diferente. Usando por exemplo os smbolos # para representar uma centena, & para representar uma dezena e @ representando uma unidade (smbolos escolhidos ao acaso), teramos que ###&&@ representaria 321. Relembremos ainda um outro sistema, o sistema de numerao romano. Eram usados smbolos (letras) que representavam as quantidades, como por exemplo: I ( valendo 1), V (valendo 5), X (valendo 10), C (valendo 100), etc. A regra de posicionamento determinava que as letras que representavam quantidades menores e precediam as que representavam quantidades maiores, seriam somadas; se o inverso ocorresse, o menor valor era subtrado do maior (e no somado). Assim, a quantidade 128 era representada por CXXVIII = 100 + 10 + 10 + 5 + 1 + 1 + 1 = 128. Por outro lado, a quantidade 94 era representada por XCIV = (10 + 100) + (-1 + 5) = 94.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 18

Nesses sistemas, os smbolos tinham um valor intrnseco, independente da posio que ocupavam na representao (sistema numrico no-posicional). Um grande problema desse sistema a dificuldade de realizar operaes com essa representao. Experimente multiplicar CXXVIII por XCIV! Assim, posteriormente foram criados sistemas em que a posio dos algarismos no nmero passou a alterar seu valor (sistemas de numerao posicionais). 2.2.1 Sistemas de Numerao Posicionais Nos sistemas de numerao posicionais, o valor representado pelo algarismo no nmero depende da posio em que ele aparece na representao. O primeiro sistema desse tipo foi inventado pelos chineses. Eram usados palitos, sendo 1 a 5 palitos dispostos na vertical para representar os nmeros 1 a 5; de 6 a 9 eram representados por 1 a 4 palitos na vertical, mais um palito na horizontal (valendo 5) sobre os demais. Cada nmero era ento representado por uma pilha de palitos, sendo uma pilha de palitos para as unidades, outra para as dezenas, outra para as centenas, etc. Esse sistema, com as pilhas de palitos dispostas em um tabuleiro, permitia a realizao das quatro operaes aritmticas. No existia representao para o zero. O tabuleiro aritmtico (chamado swanpan), alm das quatro operaes, era usado na lgebra e na soluo de equaes. Essa tcnica era chamada de Mtodo do Elemento Celestial. O Alfabeto e o baco No Oriente Mdio, por esses tempos, criou-se uma das mais importantes invenes da humanidade: o alfabeto. Na antigidade, usavase um smbolo para representar cada conceito ou palavra. Assim, eram necessrios milhares de smbolos para representar todos os objetos, aes, sentimentos, etc - como so ainda hoje algumas linguagens. Como decorar todos? O grande achado foi decompor a linguagem em alguns poucos smbolos e regras bsicas. Uma conseqncia de fundamental importncia para nossos estudos de informtica foi possibilitar a ordenao alfabtica (essa uma tarefa tpica dos computadores). Nessa poca, foi tambm criado o baco - uma calculadora decimal manual. Os Algarismos e o Zero Por volta do ano de 650, os hindus inventaram um mtodo de produzir papel (que antes j fora inventado pelos chineses) e seus matemticos criaram uma representao para os nmeros em que existiam diferentes smbolos para os as unidades, incluindo um smbolo para representar o zero. Essa simples criao permitiu que se processasse a aritmtica decimal e se fizesse contas - no papel! Bom, depois de milhares de anos em que todos os clculos eram feitos com calculadoras (bacos, swan-pan, etc) finalmente
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 19

era possvel calcular sem auxlio mecnico, usando um instrumento de escrita e papel. A matemtica criada pelos hindus foi aprendida pelos rabes (que depois foram copiados pelos europeus). Por volta de 830, um matemtico persa (chamado Al-khwarismi, que inspirou o nome a lgarismo) escreveu um livro (Al-gebr we'l Mukabala, ou lgebra) em que apresentava os algarismos hindus. E esse livro, levado para a Europa e traduzido, foi a base da matemtica do Renascimento. Desde quando se comeou a registrar informaes sobre quantidades, foram criados diversos mtodos de representar as quantidades. O mtodo ao qual estamos acostumados usa um sistema de numerao posicional. Isso significa que a posio ocupada por cada algarismo em um nmero altera seu valor de uma potncia de 10 (na base 10) para cada casa esquerda. Por exemplo, no sistema decimal (base 10), no nmero 125 o algarismo 1 representa 100 (uma centena ou 102) , o 2 representa 20 (duas dezenas ou 1x101) e o 5 representa 5 mesmo (5 unidades ou 5x100). Assim, em nossa notao, 125 = 1x102 + 2x101 + 5x100 2.2.2 Base de um Sistema de Numerao A base de um sistema a quantidade de algarismos disponvel na representao. A base 10 hoje a mais usualmente empregada, embora no seja a nica utilizada. No comrcio pedimos uma dzia de rosas ou uma grosa de parafusos (base 12) e tambm marcamos o tempo em minutos e segundos (base 60). Os computadores utilizam a base 2 (sistema binrio) e os programadores, por facilidade, usam em geral uma base que seja uma potncia de 2, tal como 24 (base 16 ou sistema hexadecimal) ou eventualmente ainda 23 (base 8 ou sistema octal). Na base 10, dispomos de 10 algarismos para a representao do nmero: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Na base 2, seriam apenas 2 algarismos: 0 e 1. Na base 16, seriam 16: os 10 algarismos aos quais estamos acostumados, mais os smbolos A, B, C, D, E e F, representando respectivamente 10, 11, 12, 13, 14 e 15 unidades. A representao 125,3810 (base 10) significa 1x102+ 2x101+ 5x100 + 3x10-1+ 8x10-2.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 20

Generalizando, representamos uma quantidade N qualquer, numa dada base b, com um nmero tal como segue:
n.b -n

Nb = an.bn + .... + a2.b2 + a1.b1 + a0.b0 + a-1.b-1 + a-2.b-2 + .... + asendo que an.bn + .... + a2.b2 + a1.b1 + a 0.b0 a parte inteira e a-1.b-1 + a-2.b-2 + .... + a -n.b-n a parte fracionria.

Intuitivamente, sabemos que o maior nmero que podemos representar, com n algarismos, na base b, ser o nmero composto n vezes pelo maior algarismo disponvel naquela base (ou seja, b-1). Por exemplo, o maior nmero que pode ser representado na base 10 usando 3 algarismos ser 999 (ou seja, 103 - 1 = 999). Podemos ver que o maior nmero inteiro N que pode ser representado, em uma dada base b, com n algarismos (n "casas"), ser N = bn - 1. Assim, o maior nmero de 2 algarismos na base 16 ser FF16 que, na base 10, eqivale a 25510 = 162 - 1. 2.2.3 Representao Binria Os computadores modernos utilizam apenas o sistema binrio, isto , todas as informaes armazenadas ou processadas no computador usam apenas DUAS grandezas, representadas pelos algarismos 0 e 1. Essa deciso de projeto deve-se maior facilidade de representao interna no computador, que obtida atravs de dois diferentes nveis de tenso (ver em Bits & Bytes). Havendo apenas dois algarismos, portanto dgitos binrios, o elemento mnimo de informao nos computadores foi apelidado de bit (uma contrao do ingls binary digit). Bits & Bytes Devido simplicidade de projeto e construo, acarretando na reduo de seu custo e maior confiabilidade, os circuitos eletrnicos que formam os computadores digitais atuais so capazes de distinguir apenas dois nveis de tenso - computadores digitais binrios. Estes sinais eltricos so tenses que assumem dois diferentes valores: um valor positivo (hoje, nos PC's, cerca de +3 V - trs volts positivos) para representar o valor binrio 1 e um valor aproximado a 0 V (zero volt) para representar o valor binrio 0. Na realidade, estes valores no so absolutos, e sim faixas de valores, com uma margem de tolerncia (entre +2.5 e +3.5 V, representando o valor binrio 1, e entre 0 e + 0,5 V representando o valor binrio 0). A lgica que permite aos computadores operar baseados nestes dois
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 21

Obs.: os primeiros computadores eram decimais (por exemplo, o ENIAC) e hoje existem tambm computadores analgicos (para determinadas aplicaes especficas). BIT uma contrao de BInary DigiT e representa um dos valores possveis em binrio, 0 ou 1. BYTE um grupo de 8 bits ( bom lembrar que 23 = 8). Em um byte, h 28 = 256 combinaes, portanto pode-se representar 256 diferentes valores, desde 00000000 at 11111111. O termo "byte" foi inventado pela IBM. Em informtica, a expresso kilo (abreviada por k) eqivale a 210, ou seja 1024. Desta forma, 1 kb eqivale a 210 bits, ou seja 1024 bits e kilobyte (1 kB) eqivale a 210 bytes, ou seja 1024 bytes ou ainda 8.192 bits. Da mesma forma, a expresso mega eqivale a 220, ou seja 210 x 210 20 = 1.048.576. Desta forma, 1 megabit (1 Mb) eqivale a 2 bits, ou seja 20 1024 kb ou 1.048.576 bits e 1 megabyte eqivale a 2 bytes, ou seja 1.048.576 bytes. Seguem-se 1 giga, equivalente a 230 ou 1024 megas, 1 tera, equivalente a 240 ou 1.024 gigas, 1 peta, equivalente a 250 ou 1.024 teras. bom decorar estes termos, e seus valores, como quem decora uma tabuada. Vamos usar muito isso daqui por diante. Na base 2, o nmero "10" vale dois. Mas se 102 = 210, ento dez igual a dois? No, dez no e nunca ser igual a dois! Na realidade, "10" no significa necessariamente "dez". Ns estamos acostumados a associar "10" a "dez" porque estamos acostumados a usar o sistema de numerao decimal. O nmero 102 seria lido "um-zero" na base 2 e vale 210 (convertido para "dois" na base dez), 105 seria lido "um-zero" na base 5 e vale 5 10 (convertido para "cinco" na base dez), 1010 pode ser lido como "um-zero" na base 10 ou ento como "dez" na base dez, 1016 seria lido "um-zero" na base 16 e vale 1610 (convertido para "dezesseis" na base dez), etc. Portanto, 10 s ser igual a dez se - e somente se - o nmero estiver representado na base dez! Uma curiosidade: o nmero "10b" vale sempre igual base, porque em uma dada base b os algarismos possveis vo sempre de 0 a (b - 1)! Como o maior algarismo possvel em uma dada base b igual a (b-1), o prximo nme ro ser (b - 1 + 1 = b) e portanto ser sempre 10 e assim, numa dada base qualquer, o valor da base ser sempre representado por "10"!
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 22

Obs.: Toda vez que um nmero for apresentado sem que seja indicado em qual sistema de numerao ele est representado, estenderemos que a base dez. Sempre que outra base for utilizada, a base ser obrigatoriamente indicada. Um dia pode ser que os computadores se tornem obrigatrios e sejamos todos forados por lei a estudar a aritmtica em binrio! Mas, mesmo antes disso, quem programa computadores precisa conhecer a representao em binrio! Vamos comear entendendo as potncias de dois: Repr.Binria Potncia Repr.Decimal 1 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 20 21 22 23 24 25 26 27 28 29 1 2 4 8 16 32 64 128 256 512 1.024

10000000000 210

Depois (e s depois) de compreender bem a tabela acima, fazendo a devida correlao com a representao decimal, conveniente decorar os valores da tabela. As converses entre base 2 e base 10 e as potncias de 2 so utilizadas a todo momento e seria perda de tempo estar toda hora convertendo. Da mesma forma que, uma vez entendido o mecanismo da multiplicao, decoramos a tabuada, muito mais efetivo saber de cor a tabela acima que fazer as contas de converso toda vez que for necessrio.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

23

A representao binria perfeitamente adequada para utilizao pelos computadores. No entanto, um nmero representado em binrio apresenta muitos bits, ficando longo e passvel de erros quando manipulado por seres humanos normais, como por exemplo, os programadores, analistas e engenheiros de sistemas. Para facilitar a visualizao e manipulao por programadores de grandezas processadas em computadores, so usualmente adotadas as representaes octal (base 8) e principalmente hexadecimal (base 16). Ressaltamos mais uma vez que o computador opera apenas na base 2 e as representaes octal e hexadecimal no so usadas no computador, elas se destinam apenas manipulao de grandezas pelos programadores. 2.2.4 Representao em Octal e em Hexadecimal Em projetos de informtica (trabalhos realizados pelos programadores, analistas e engenheiros de sistemas), usual representar quantidades usando sistemas em potncias do binrio (octal e principalmente hexadecimal), para reduzir o nmero de algarismos da representao e consequentemente facilitar a compreenso da grandeza e evitar erros. No sistema octal (base 8), cada trs bits so representados por apenas um algarismo octal (de 0 a 7). No sistema hexadecimal (base 16), cada quatro bits so representados por apenas um algarismo hexadecimal (de 0 a F). A seguir, ser apresentada uma tabela com os nmeros em decimal e sua representao correspondente em binrio, octal e hexadecimal: Base 10 0 1 2 3 4 5 6 7 8 9 10 11 Base 2 0 1 10 11 100 101 110 111 1000 1001 1010 1011 Base 8 0 1 2 3 4 5 6 7 10 11 12 13 Base 16 0 1 2 3 4 5 6 7 8 9 A B
24

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

12 13 14 15

1100 1101 1110 1111

14 15 16 17

C D E F

Nota: a base 16 ou sistema hexadecimal pode ser indicada tambm por um "H" ou "h" aps o nmero; por exemplo: FFH significa que o nmero FF (ou 255 em decimal) est em hexadecimal. No confundir o "H" ou "h" com mais um dgito, mesmo porque em hexadecimal s temos algarismos at "F" e portanto no existe um algarismo "H". Exemplo: Como seria a representao do nmero 1610 em binrio, octal e hexadecimal? Soluo: Seria respectivamente 100002, 208 e 1016. 2.3 Converses entre Bases Vamos analisar agora as regras gerais para converter nmeros entre duas bases quaisquer. 2.3.1 Converses entre as bases 2, 8 e 16 As converses mais simples so as que envolvem bases que so potncias entre si. Vamos exemplificar com a converso entre a base 2 e a base 8. Como 23 = 8, separando os bits de um nmero binrio em grupos de trs bits (comeando sempre da direita para a esquerda!) e convertendo cada grupo de trs bits para seu equivalente em octal, teremos a representao do nmero em octal. Por exemplo: 101010012 = 10.101.0012 (separando em grupos de 3, sempre comeando da direita para a esquerda). Sabemos que 0102 = 28 ; 1012 = 58 ; 0012 = 18 portanto 101010012 = 2518 Se voc ainda no sabe de cor, faa a converso utilizando a regra geral. Vamos agora exemplificar com uma converso entre as bases 2 e 16. Como 24 = 16, basta separarmos em grupos de 4 bits (comeando sempre da direita para a esquerda!) e converter. Por exemplo: 110101011012 = 110.1010.11012 (separando em grupos de 4 bits, sempre comeando da direita para a esquerda). Sabemos que 1102 = 616; 10102 = A16 ; 11012 = D16 ; portanto 110101011012 = 6AD16

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

25

Vamos agora exercitar a converso inversa. Quanto seria 3F5H (lembrar que o H est designando "hexadecimal") em octal? O mtodo mais prtico seria converter para binrio e em seguida para octal. 3F5H=11.1111.01012 (convertendo cada dgito hexadecimal em 4 dgitos binrios) = = 1.111.110.1012 (agrupando de trs em trs bits) = = 17658 (convertendo cada grupo de trs bits para seu valor equivalente em octal). 2.3.2 Converso de Nmeros em uma base b qualquer para a base 10 Vamos lembrar a expresso geral j apresentada: Nb = an.bn + ... + a2.b2 + a1.b1 + a 0.b0 + a-1.b-1 + a-2.b-2 + ... + a-n.b-n A melhor forma de fazer a converso usando essa expresso. Tomando como exemplo o nmero 1011012, vamos calcular seu valor representado na base dez. Usando a expresso acima, fazemos: 1011012 = 1x25 + 0x24 + 1x23 + 1x22 + 0x21 + 1x20 = 32 + 0 + 8 + 4 + 0 + 1 = 4510 Podemos fazer a converso de nmeros em qualquer base para a base 10 usando o algoritmo acima. Exemplos: Converter 4F5H para a base 10 . Soluo: Lembramos que o H significa que a representao hexadecimal (base 16). Sabemos ainda que F16=1510. Ento: 4x162 + 15x161 + 5x160 = 4x256 + 15x16 + 5 = 1024 + 240 + 5 = 126910 Converter 34859 para a base 10. Soluo: 3x93 + 4x92 + 8x91 + 5x90 = 3x729 + 4x81 + 8x9 + 5 = 2187 + 324 + 72 + 5 = 258810. Converter 7G16 para a base 10. Soluo: Uma base b dispe dos algarismos entre 0 e (b-1). Assim, a base 16 dispe dos algarismos 0 a F e portanto o smbolo G no pertence representao hexadecimal.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

26

Converter 1001,012 para a base 10. Soluo: 1x23 + 0x22 + 0x21 + 1x20 + 0x2-1 + 1x2-2 = 8 + 0 + 0 + 1 + 0 + 0,25 = 9,2510 Converter 34,35 para a base 10. Soluo: 3x51 + 4x50 + 3x5-1 = 15 + 4 + 0,6 = 19,610 Converter 38,38 para a base 10. Soluo: Uma base b dispe dos algarismos entre 0 e (b-1). Assim, a base 8 dispe dos algarismos 0 a 7 e portanto o algarismo 8 no existe nessa base. A representao 38,3 no existe na base 8. 2.3.3 Converso de Nmeros da Base 10 para uma Base b qualquer A converso de nmeros da base dez para uma base qualquer emprega algoritmos que sero o inverso dos acima apresentados. Os algoritmos sero melhor entendidos pelo exemplo que por uma descrio formal. Vamos a seguir apresentar os algoritmos para a parte inteira e para a parte fracionria: 2.3.3.1 Part e Intei ra

O nmero decimal ser dividido sucessivas vezes pela base; o resto de cada diviso ocupar sucessivamente as posies de ordem 0, 1, 2 e assim por diante at que o resto da ltima diviso (que resulta em quociente zero) ocupe a posio de mais alta ordem. Veja o exemplo da converso do nmero 1910 para a base 2:

Experimente fazer a converso contrria (retornar para a base 10) e ver se o resultado est correto.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

27

2.3.3.2

Part e Fraci onri a

Se o nmero for fracionrio, a converso se far em duas etapas distintas: primeiro a parte inteira e depois a parte fracionria. Os algoritmos de converso so diferentes. O algoritmo para a parte fracionria consiste de uma srie de multiplicaes sucessivas do nmero fracionrio a ser convertido pela base; a parte inteira do resultado da primeira multiplicao ser o valor da primeira casa fracionria e a parte fracionria ser de novo multiplicada pela base; e assim por diante, at o resultado dar zero ou at encontrarmos o nmero de casas decimais desejado. Por exemplo, vamos converter 15,6510 para a base 2, com 5 e com 10 algarismos fracionrios:

Obs.: Em ambos os casos, a converso foi interrompida quando encontramos o nmero de algarismos fracionrios solicitadas no enunciado. No entanto, como no encontramos resultado 0 em nenhuma das multiplicaes, poderamos continuar efetuando multiplicaes indefinidamente at encontrar (se encontrarmos) resultado zero. No caso de interrupo por chegarmos ao nmero de dgitos especificado sem encontramos resultado zero, o resultado encontrado aproximado e essa aproximao ser funo do nmero de algarismos que calcularmos. Fazendo a converso inversa, encontraremos: Com 5 algarismos fracionrios: Parte inteira: 11112 = 1510 Parte fracionria: 0,101002 = 1x2-1 + 0x2-2 + 1x2-3 + 0x2-4 + 0x2-5 = 0,5 + 0,125 = 0,62510 Com 10 algarismos fracionrios: Parte inteira: 11112 = 1510

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

28

Parte fracionria: 0,10100110012 = 1x2-1 + 0x2-2 + 1x2-3 + 0x2-4 + 0x2-5 + 1x2-6 + 1x2-7 + 0x2-8 + 0x2-9 + 1x2-10 = 1/2 + 1/8 + 1/64 + 1/128 + 1/1024 = 0,5 + 0,125 + 0,015625 + 0,0078125 + 0,0009765625 = 0,649414062510 Ou seja, podemos verificar (sem nenhuma surpresa) que, quanto maior nmero de algarismos forem considerados, melhor ser a aproximao.

2.3.4 Converso de Nmeros entre duas Bases quaisquer Para converter nmeros de uma base b para uma outra base b' quaisquer (isso , que no sejam os casos particulares anteriormente estudados), o processo prtico utilizado converter da base b dada para a base 10 e depois da base 10 para a base b' pedida. Exemplo: Converter 435 para ( )9. 259 435 = (4 x 5 + 3)10 = 2310 ==> 23/9 = 2 (resto 5) logo 435 = 2310 =

2.4 Aritmtica em Binrio 2.4.1 Soma A tabuada da soma aritmtica em binrio muito simples. So poucas regras: 0+0=0 0+1=1 1+0=1 1 + 1 = 0 (e "vai 1" para o dgito de ordem superior) 1 + 1 + 1 = 1 (e "vai 1" para o dgito de ordem superior) Exemplo: Efetuar 011100 + 011010 Obs.: 1) Lembre-se: soma-se as colunas da direita para a esquerda, tal como uma soma em decimal.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 29

Obs.: 2) No exemplo, so usadas, em seqncia, da direita para a esquerda, todas as regrinhas acima. Obs.: 3) Na primeira linha, em azul, indicado o "vai um". Obs.: 4) Por simplicidade, no exemplo estamos considerando os dois nmeros positivos. Soluo: 11-----> "vai um" 011100 011010+ ---------110110 2.4.2 Subtrao Vamos ver agora a tabuada da subtrao: 0-0=0 0 - 1 = 1 ("vem um do prximo") 1-0=1 1-1=0 Obs.: Como impossvel tirar 1 de zero, o artifcio "pedir emprestado" 1 da casa de ordem superior. Ou seja, na realidade o que se faz subtrair 1 de 10 e encontramos 1 como resultado, devendo ento subtrair 1 do dgito de ordem superior (aquele 1 que se "pediu emprestado"). Exemplo: Efetuar 111100 + 011010 Obs.: 1) Lembre-se: subtrai-se as colunas da direita para a esquerda, tal como uma subtrao em decimal. Obs.: 2) No exemplo, so usadas, em seqncia, da direita para a esquerda, todas as regrinhas acima.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 30

Obs.: 3) Na primeira linha, em vermelho, indicado o "vem um". Obs.: 4) Por simplicidade, no exemplo estamos considerando os dois nmeros positivos. Soluo: ---02-> "vem um" 11100 01010---------10010 2.4.3 Complemento a Base A implementao do algoritmo da subtrao em computadores complexa, requerendo vrios testes. Assim, em computadores a subtrao em binrio feita por um artifcio. O mtodo utilizado o "Mtodo do Complemento a Base" que consiste em encontrar o complemento do nmero em relao base e depois somar os nmeros. Os computadores funcionam sempre na base 2, portanto o complemento base ser complemento a dois. Computadores encontram o complemento a dois de um nmero atravs de um algoritmo que pode ser assim descrito: se o nmero positivo, mantenha o nmero (o complemento de um nmero positivo o prprio nmero) - se o nmero negativo: ---inverta o nmero negativo ou o subtraendo na subtrao (todo 1 vira zero, todo zero vira um) --- some 1 ao nmero em complemento --- some as parcelas (na subtrao, some o minuendo ao subtraendo) --- se a soma em complemento acarretar "vai-um" ao resultado, ignore o transporte final) Como exemplo, vamos usar o algoritmo acima na subtrao abaixo:

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

31

1101 1100--------0001 mantm o minue ndo inverte o subtraendo soma minuendo e subtraendo soma 1 ignora o "vai-um" 2.4.4 Multiplicao e Diviso Vamos ver agora a tabuada da multiplicao: 0x0=0 0x1=0 1x0=0 1x1=1 No entanto, tambm a multiplicao em computadores feita por um artifcio: para multiplicar um nmero A por n, basta somar A com A, n vezes. Por exemplo, 4 x 3 = 4 + 4 + 4. E a diviso tambm pode ser feita por subtraes sucessivas! O que conclumos? Que qualquer operao aritmtica pode ser realizada em computadores apenas atravs de somas (diretas ou em complemento Uns exerccios um pouco diferente, para desenvolver o raciocnio: a) Durante uma explorao, a arqueloga Lara Croft encontrou numa escavao uma pedra gravada com os seguintes caracteres: %@#% ###& %&#&%
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 32

---> ---> ---> ---> --->

1101 0011 10000 10001 0001

Concluindo brilhantemente (e com uma boa dose de adivinhao) que os smbolos correspondiam a uma operao de adio entre dois nmeros positivos e que todos os algarismos usados pela antiga civilizao esto presentes na gravao, determine a base de numerao utilizada, o algarismo arbico correspondente a cada smbolo e a representao das parcelas e do resultado da adio, convertidas para a base 10. b) O Sr. M. recebeu certo dia um e-mail de seu agente Jaime Bonde, que estava em misso. O e-mail continha apenas o seguinte texto: SEND MORE MONEY Concluindo (tambm) brilhantemente (e tambm com uma boa dose de adivinhao) que os smbolos correspondiam a uma operao de adio entre dois nmeros positivos representados em decimal (Jaime NO era forte em informtica!), o Sr. M. raciocinou e ento enviou ao agente uma determinada quantia. Quanto o Sr. M. enviou para seu agente J. Bonde? 2.4.5 Representao de Nmeros em Complemento Complemento a diferena entre cada algarismo do nmero e o maior algarismo possvel na base. Uma vantagem da utilizao da representao em complemento que a subtrao entre dois nmeros pode ser substituda pela sua soma em complemento. 2.4.5.1 Si nal e Magnit ude

um tipo de sistema para a representao de nmeros negativos em computadores digitais. Nesse sistema, o bits mais esquerda o bit de sinal e os bits restantes contm a magnitude do nmero. Se o bit de sinal for zero, o nmero positivo, caso contrrio (igual a 1) ele positivo. 2.4.5.2 Repres ent ao de Nmeros Posi ti vos em Complemento

A representao de nmeros positivos em complemento no tem qualquer alterao, isto , idntica representao em sinal e magnitude. 2.4.5.3 Compl ement o a UM

Para se obter o complemento a 1 de um nmero binrio, devemos subtrair cada algarismo de 1. Uma particularidade dos nmeros binrios que, para efetuar esta operao, basta inverter todos os bits. Este sistema
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 33

obsoleto. 2.4.5.4 Compl ement o a DOIS

O primeiro passo nesse sistema feito da mesma forma do complemento a um, ou seja, so invertidos todos os nmeros. O prximo passo somar 1 ao resultado do primeiro passo. Nesta operao de adio, se ocorrer um vai-um do bit mais esquerda, ele desprezado. 2.5 Preciso Em muitos clculos o intervalo de nmeros utilizados muito grande. Por exemplo, um clculo em astronomia poderia envolver a massa de eltrons, 9 x 10-28 gramas, e a massa do sol, 2 x 1033 gramas. Realizando clculos com estes valores, podemos chegar a resultados com 62 dgitos significativos. Em um computadore binrio, a aritmtica de preciso mltipla poderia ser usada para prover preciso. Entretanto, a massa do sol no conhecida nem com preciso de cinco dgitos significativos, o que quer dizer ento de 62. Na verdade, poucas so as medies de qualquer tipo que possam ter preciso de 62 dgitos significativos. Embora pode-se manter todos os resultados intermedirios com 62 dgitos significativos e depois jogar fora 50 ou 60 deles antes de imprimir o resultado final, fazer isto gastar memria e tempo de CPU. Portanto, a preciso definida com um certo nmero de algarismos significativos. 2.6 Ponto Fixo e Ponto-Flutuante Uma maneira de separar o intervalo da preciso expressar os nmeros na notao cientfica familiar, atravs da frmula N = f x 10e, onde f denominada frao e e um nmero inteiro positivo ou negativo denominado expoente. A verso em computao desta notao denominada de ponto-flutuante. Alguns exemplos de nmeros expressos nesta forma so: 3,14 0,000001 1941 = 0,314 x 101 = 0,1 x 10-5 = 0,1941 x 104 = 3,14 x 100 = 1,00 x 10-6 = 1,941 x 103

Para ponto fixo, este tem o seu nmero definido de casas, isto , so trs casas aps da vrgula. (preo de combustvel).

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

34

CIRCUITOS LGICOS

3.1 Conceitos de Lgica Digital Todos as complexas operaes de um computador digital acabam sendo combinaes de simples operaes aritmticas e lgicas bsicas: somar bits, complementar bits (para fazer subtraes), comparar bits, mover bits. Estas operaes so fisicamente realizadas por circuitos eletrnicos, chamados circuitos lgicos (ou gates - "portas" lgicas). Computadores digitais (binrios) so construdos eletrnicos digitais - as portas lgicas (circuitos lgicos). com circuitos

Os sistemas lgicos so estudados pela lgebra de chaveamentos, um ramo da lgebra moderna ou lgebra de Boole, conceituada pelo matemtico ingls George Boole (1815 - 1864). Boole construiu sua lgica a partir de smbolos, representando as expresses por letras e ligando-as atravs de conectivos - smbolos algbricos. A lgebra de Boole trabalha com apenas duas grandezas: falso ou verdadeiro. As duas grandezas so representadas por 0 (falso) e 1 (verdadeiro). Nota: nos circuitos lgicos do computador, os sinais binrios so representados por nveis de tenso.

3.2 Operadores Lgicos Os conectivos ou OPERADORES LGICOS ou FUNES LGICAS so: 3.2.1 E (ou AND) Uma sentena verdadeira SE - e somente se - todos os termos forem verdadeiros. E ------> . (um ponto, como se fosse uma multiplicao)

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

35

3.2.2 OU (ou OR) Uma sentena resulta verdadeira se QUALQUER UM dos termos for verdadeiro. OU ----> + (o sinal de soma) 3.2.3 NO (ou NOT) Este operador INVERTE um termo. Os operadores lgicos so representados por:

NOT --> (uma barra horizontal sobre o termo a ser invertido ou negado). 3.3 Tabela Verdade So tabelas que representam todas as possveis combinaes das variveis de entrada de uma funo, e os seus respectivos valores de sada. A seguir, apresentamos as funes bsicas, e suas representaes em tabelas-verdade. 3.3.1 AND - Funo E

3.3.2 OR - Funo OU

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

36

Nota: A menos da estranha expresso 1 + 1 = 1, as demais expresses "parecem" a aritmtica comum a que estamos acostumados, onde E substitui "vezes" e OU substitui "mais". 3.3.3 NOT - Funo NO

Obs.: a inverso em binrio funciona como se fizssemos 1 - A = X. Ou seja, 1 - 0 = 1 e 1 - 1 = 0. 3.4 Aplicao da lgebra de Boole aos Computadores Digitais Boole desenvolveu sua lgebra a partir desses conceitos bsicos e utilizando apenas os algarismos 0 e 1. Os primeiros computadores fabricados, como o ENIAC, trabalhavam em DECIMAL. No entanto, a utilizao de circuitos eletrnicos que operassem com 10 diferentes nveis de tenso (para possibilitar detectar as 10 diferentes grandezas representadas no sistema decimal) acarretavam uma grande complexidade ao projeto e construo dos computadores, tendo por conseqncia um custo muito elevado. Surgiu ento a idia de aplicar a lgebra de Boole, simplificando extremamente o projeto e construo dos computadores. Mas como os conceitos da lgebra de chaveamentos (um ramo da lgebra do Boole) so aplicados ao projeto dos computadores digitais? A chave AUTOMTICA. de tudo um circuito eletrnico chamado CHAVE

Como funciona uma chave automtica? Vamos imaginar um circuito chaveador com as seguintes entradas: ? ? uma fonte de alimentao (fornece energia para o circuito) ? ? um fio de controle (comanda a operao do circuito) ? ? um fio de sada (conduz o resultado)
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 37

No desenho, a chave permanece aberta enquanto o sinal C no fio de controle for 0 (ou Falso). Enquanto no houver um sinal (sinal 1 ou Verdadeiro) no fio de controle, que mude a posio da chave, o sinal no fio de sada S ser 0 (ou Falso). Quando for aplicado um sinal (sinal 1 ou Verdadeiro) ao fio de controle, a chave muda de posio, tendo como resultado que o sinal na sada ser ento 1 (ou Verdadeiro). A posio da chave se manter enquanto no ocorrer um novo sinal na entrada. A chave automtica foi inicialmente implementada com rels eletromecnicos e depois com vlvulas eletrnicas. A partir da metade da dcada de 50, passaram a ser utilizados dispositivos em estado slido - os TRANSISTORES, inventados em Stanford em 1947. Os modernos Circuitos Integrados - CI's e os microprocessadores so implementados com milhes de transistores "impressos" em minsculas pastilhas. Vamos agora analisar o que ocorreria se ns ligssemos em SRIE duas chaves automticas como as acima, e ligssemos uma lmpada ao circuito. O circuito resultante poderia ser representado assim:

A lmpada acenderia se - e somente se - as DUAS chaves estivessem na posio LIGADO (ou verdadeiro), o que seria conseguido com as duas entradas A e B em estado 1 (Verdadeiro). Substituindo CORRENTE (ou chave ligada) por 1 e AUSNCIA DE CORRENTE (ou chave desligada) por 0, como ficaria nossa tabela verdade para LMPADA LIGADA = 1 e LMPADA DESLIGADA = 0?

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

38

A 0 0 1 1

B 0 1 0 1

L 0 0 0 1

D para reconhecer a nossa j familiar FUNO E? O circuito acima que implementa a funo E chamado de PORTA E (AND GATE). Vamos agora analisar o que ocorreria se ns ligssemos em PARALELO duas chaves automticas como as acima, e ligssemos uma lmpada ao circuito. O circuito resultante poderia ser representado assim:

A lmpada acenderia SE QUALQUER UMA DAS-CHAVES estivesse na posio LIGADO (ou verdadeiro), o que seria conseguido com uma das duas entradas A ou B em estado 1 (Verdadeiro). Substituindo CORRENTE (ou chave ligada) por 1 e AUSNCIA DE CORRENTE (ou chave desligada) por 0, como ficaria nossa tabela verdade para LMPADA LIGADA = 1 e LMPADA DESLIGADA = 0? A 0 0 1 1 B 0 1 0 1 L 0 1 1 1
39

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

E agora, d para reconhecer a nossa j familiar FUNO OU? O circuito acima, que implementa a funo OU, chamado de PORTA OU (OR GATE). 3.5 Porta Lgica ou Gate So dispositivos ou circuitos lgicos que operam um ou mais sinais lgicos de entrada para produzir uma (e somente uma) sada, a qual dependente da funo implementada no circuito.

Um computador constitudo de uma infinidade de circuitos lgicos, que executam as seguintes funes bsicas: ? ? realizam operaes matemticas ? ? controlam o fluxo dos sinais ? ? armazenam dados Existem dois tipos de circuitos lgicos: 1. COMBINACIONAL - a sada funo dos valores de entrada correntes; esses circuitos no tm capacidade de armazenamento [casos a) e b) acima]. 2. SEQUENCIAL - a sada funo dos valores de entrada correntes e dos valores de entrada no instante anterior; usada para a construo de circuitos de memria (chamados "flip-flops"). 3.5.1 Porta NOT (NO) A porta NOT inverte o sinal de entrada (executa a NEGAO do sinal de entrada), ou seja, se o sinal de entrada for 0 ela produz uma sada 1, se a entrada for 1 ela produz uma sada 0.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

40

3.5.2 Porta AND (E) A porta AND combina dois ou mais sinais de entrada de forma equivalente a um circuito em srie, para produzir um nico sinal de sada, ou seja, ela produz uma sada 1, se todos os sinais de entrada forem ; caso qualquer um dos sinais de entrada for 0, a porta AND produzir um sinal de sada igual a zero.

3.5.3 Porta OR (OU) A porta OR combina dois ou mais sinais de entrada de forma equivalente a um circuito em paralelo, para produzir um nico sinal de sada, ou seja, ela produz uma sada 1, se qualquer um dos sinais de entrada for igual a 1; a porta OR produzir um sinal de sada igual a zero apenas se todos os sinais de entrada forem 0.

3.5.4 Porta NAND (NO E) A porta NAND eqivale a uma porta AND seguida por uma porta NOT, isto , ela produz uma sada que o inverso da sada produzida pela porta AND.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

41

3.5.5 Porta NOR (NO OU) A porta NOR eqivale a uma porta OR seguida por uma porta NOT, isto , ela produz uma sada que o inverso da sada produzida pela porta OR.

3.5.6 Porta XOR (OU EXCLUSIVO) A porta XOR compara os bits; ela produz sada 0 quando todos os bits de entrada so iguais e sada 1 quando pelo menos um dos bits de entrada diferente dos demais.

Exemplo de circuitos utilizando portas lgicas: Uma campainha que toca (sada) se o motorista der a partida no motor do carro (entrada) sem estar com o cinto de segurana afivelado (entrada). Se a ignio for ACIONADA (1) e o cinto estiver DESAFIVELADO (1), a campainha ACIONADA (1). Caso contrrio, a campainha no toca Tabela Verdade: Ignio 0 0 1 1 Cinto 0 1 0 1 Campainha 0 0 0 1
42

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

Basta incluir uma porta AND. Detector de incndio com campainha para alarme (sada). vrios sensores (entradas) e uma

Se QUALQUER UM dos sensores for acionado (significando que um dos sensores detectou sinal de incndio), a campainha ACIONADA. Tabela verdade: Sensor 1 0 0 1 1 Sensor 2 Campainha 0 1 0 1 0 1 1 1

Basta incluir uma porta OR. 3.6 Algebra de Boole As operaes bsicas da lgebra de Boole so:

3.6.1 Avaliao de uma Expresso Booleana Uma expresso booleana uma expresso formada por sinais de entrada (chamados variveis de entrada) ligados por conectivos lgicos, produzindo como resultado um nico sinal de sada. Na avaliao de uma expresso Booleana, dever ser seguida uma ordem de precedncia conforme a seguir definido: 1 - avalie NOT 2 - avalie AND
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 43

3 - avalie OR Obs.: respeitando-se sempre os parnteses! Ex.: Avalie a expresso:

3.6.2 Equivalncia de Funes Lgicas Duas funes Booleanas so equivalentes se - e somente se - para a mesma entrada, produzirem iguais valores de sada . PORTANTO, DUAS FUNES LGICAS EQUIVALENTES TEM A MESMA TABELA VERDADE. Ex.: Verifique se as funes lgicas a seguir representam funes equivalentes:

3.6.3 Propriedade da lgebra de Boole

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

44

Exerccio: Simplifique a seguinte expresso:

Exerccio: Escreva a expresso do circuito abaixo e simplifique.

Soluo:

3.7 Formas Cannicas Representao de um Circuito atravs de uma Tabela Verdade Os circuitos de um computador realizam funes de grande complexidade, cuja representao geralmente no bvia. O processo para realizao de uma funo atravs de um circuito comea na descrio verbal do circuito (descrio do comportamento de suas possveis sadas, em funo das diversas combinaes possveis de seus sinais de entrada), a partir do que possvel montar sua tabela verdade.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 45

Exemplos: Considere um circuito eltrico composto de uma fonte de energia comercial (a alimentao da empresa de distribuio de energia, p.ex., a Light) e um interruptor (nossas entradas ) e uma lmpada (nossa sada). A lmpada acender se - e somente se - a) houver energia disponvel (se no estiver "faltando luz") e b) o interruptor estiver ligado. Elabore a tabela verdade que representa esse circuito lgico. Considere um sistema composto de duas caixas d'gua (uma superior e uma cisterna). A cisterna alimentada pela entrada de gua da "rua", via empresa distribuidora (ex.: CEDAE). A caixa superior serve para distribuir a gua, por gravidade, em todo o prdio: bicas, chuveiros, descargas sanitrias, circuitos anti-incndio, etc, com a gua sendo impulsionada por uma bomba hidrulica atravs de uma tubulao que liga a cisterna caixa superior. Considerando que a bomba queimar se for acionada sem haver gua no circuito hidrulico, projete um circuito lgico para acionar a bomba sempre que a caixa superior estiver vazia, desde que tenha gua na cisterna. Considere um circuito eltrico composto de uma fonte de energia comercial (a alimentao da empresa de distribuio de energia, p.ex., a Light), uma alimentao auxiliar (um gerador e um no-break, com bateria de acumulao) e um interruptor (nossas entradas ) e um sistema de computadores (nossa sada). O computador poder operar se: a) houver energia disponvel (se no estiver "faltando luz") em um dos circuitos de alimentao e b) o interruptor estiver ligado. Elabore a tabela verdade que representa esse circuito lgico. A partir da tabela verdade produzida conforme item anterior, possvel chegar expresso que representa o comportamento do circuito, e em seguida construir o circuito, usando as portas lgicas j estudadas. O processo de elaborao da expresso u as chamadas formas cannicas, sa que consistem em regras para representar as condies de entrada que: produziro sada 1 (e portanto as demais condies produziro sada 0) ou alternativamente, produziro sada 0 (e portanto as demais condies produziro sada 1). So portanto duas as formas cannicas: uma representa as condies que produzem sada 1 (soma dos minitermos) , a outra representa as condies que produziro sada 0 (produto dos maxitermos). Essas formas so alternativas, isto , a expresso poder ser encontrada aplicando-se alternativamente uma ou outra das formas.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 46

MINITERMO - so termos somente com AND (termos PRODUTO) MAXITERMO - so termos somente com OR (termos SOMA) 3.7.1 Soma dos Minitermos produzida construindo: um termo para cada linha da tabela verdade (que representa uma combinao de valores de entrada) em que a sada 1, cada um desses termos formado pelo PRODUTO (FUNO AND) das variveis de entrada, sendo que: ? ? quando a varivel for 1, mantenha; ? ? quando a varivel for 0, complemente-a (funo NOT). a funo booleana ser obtida unindo-se os termos PRODUTO (ou minitermos) por uma porta OR (ou seja, "forando-se" a sada 1 caso qualquer minitermo resulte no valor 1). Dessa forma, ligando os termos-produto (tambm chamados minitermos) pela porta OR, caso qualquer um dos minitermos seja 1 (portanto, caso qualquer uma das condies de valores de entrada que produz sada 1se verifique), a sada pela porta OR ser tambm 1. Ou seja, basta que se verifique qualquer uma das alternativas de valores de entrada expressos em um dos minitermos, e a sada ser tambm 1, forada pelo OR. Caso nenhuma dessas alternativas se verifique, produz-se a sada 0. Exemplo:

3.7.2 Produto dos Maxitermos produzida construindo:


Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 47

um termo para cada linha da tabela verdade (que representa uma combinao de valores de entrada) em que a sada 0, cada um desses termos formado pela SOMA (FUNO OR) das variveis de entrada, sendo que: ? ? quando a varivel for 0, mantenha; ? ? quando a varivel for 1, complemente-a (funo NOT). A funo booleana ser obtida unindo-se os termos SOMA (ou maxitermos) por uma porta AND (ou seja, "forando-se" a sada 0 caso qualquer minitermo resulte no valor 0). Dessa forma, ligando os termos-soma (tambm chamados maxitermos) pela porta AND, caso qualquer um dos minitermos seja 0 (portanto, caso qualquer uma das condies de valores de entrada que produz sada 0 se verifique), a sada pela porta AND ser tambm 0. Ou seja, basta que se verifique qualquer uma das alternativas de valores de entrada 0 expressos em um dos maxitermos, e a sada ser tambm 0, forada pelo AND. Caso nenhuma dessas alternativas se verifique, produz-se a sada 1. Exemplo:

Obs:. O mesmo comportamento (a mesma tabela verdade) pode ser igualmente representada por qualquer das formas cannicas. Exemplo: Se ambas as formas cannicas produzem expresses equivalentes, como escolher qual a representao a utilizar? Escolha a que resultar em menor nmero de termos, produzindo uma expresso mais simples. Por esse mtodo, pode-se encontrar a expresso que represente qualquer tabela verdade.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

48

Aps se encontrar uma expresso que represente o comportamento esperado, possvel que no seja uma expresso simples que possa ser construda com poucas portas lgicas. Antes de projetar o circuito, til SIMPLIFICAR a expresso, de forma a possibilitar construir um circuito mais simples e portanto mais barato.

HISTRIA, CONCEITOS E TERMINOLOGIA DOS COMPUTADORES

4.1 Conceito de Programa Armazenado A arquitetura bsica de um computador moderno segue ainda de forma geral os conceitos estabelecidos pelo Professor da Universidade de Princeton, John Von Neumann (1903-1957). Von Neumann props construir computadores que: ? ? Codificassem instrues que pudessem ser armazenadas na memria e sugeriu que usassem cadeias de uns e zeros (binrio) para codific-los ; ? ? Armazenassem na memria as instrues e todas as informaes que fossem necessrias para a execuo da tarefa desejada; ? ? Ao processarem o programa, as instrues fossem buscadas na diretamente na memria. Este o conceito de PROGRAMA ARMAZENADO.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

49

Toda a lgica dos computadores construda a partir de chaves liga / desliga. Inicialmente foram usados chaves mecnicas, depois rels eletromecnicos - o Z-1 construdo por Konrad Zuse em 1941 e o MARK 1 de Howard Aiken em 1944 (capazes de executar at 5 chaveamentos por segundo). Posteriormente, foram substitudos pelas vlvulas no ENIAC em 1946 (capazes de 100.000 de chaveamentos por segundo), e finalmente pelos transistores (semicondutores) inventados em Stanford em 1947. Os circuitos integrados (ou CI's) so encapsulamentos compactos (LSI - Large Scale Integration e VLSI - Very Large Scale Integration) de circuitos constitudos de minsculos transistores. 4.2 Unidade Central de Processamento A Unidade Central de Processamento (CPU) a responsvel pelo processamento e execuo de programas armazenados na MP. Funes: ? ? Executar instrues - realizar aquilo que a instruo determina. ? ? Realizar o controle das operaes no computador. A CPU divida em: 4.2.1 Unidade Lgica e Aritmtica (ULA) Ela responsvel pela realizao das operaes lgicas (E, OU, etc) e aritmticas (somar, etc). 4.2.2 Unidade de Controle (UC) Envia sinais de controle para toda a mquina, de forma que todos os circuitos e dispositivos funcionem adequada e sincronizadamente. 4.3 Memria Principal (MP) A Memria Principal tem por finalidade armazenar toda a informao que manipulada pelo computador - programas e dados. Para que um programa possa ser manipulado pela mquina, ele primeiro precisa estar armazenado na memria principal. OBS.: os circuitos da Memria Principal no so combinatrias, eles tem capacidade de armazenar bits. Os circuitos usados so do tipo "flipflop", que sero vistos em sistemas operacionais.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

50

Tem por finalidade permitir a comunicao entre o usurio e o computador. OBS.: Para executar um programa, bastaria UCP e MP; no entanto, sem os dispositivos de E/S no haveria a comunicao entre o usurio e o computador. 4.3.1 Hierarquia da memria A MP no o nico dispositivo de armazenamento de um computador. Em funo de caractersticas como tempo de acesso, capacidade de armazenamento, custo, etc., podemos estabelecer uma hierarquia de dispositivos de armazenamento em computadores. Tipo Registrador Memria Cache Memria Principal Capacidade Velocidade Bytes Kbytes Mbytes Custo Localizao Volatilidade Voltil Voltil Voltil No Voltil

muito alta muito alto UCP alta mdia baixa alto mdio baixo UCP/placa Placa Externa

Memria Auxiliar Gbytes

A CPU v nesta ordem e acessa primeiro a que est mais prxima. Subindo na hierarquia, quanto mais prximo da CPU, maior velocidade, maior custo, porm menor capacidade de armazenamento. 4.4 Dispositivos de Entradas e Sadas Conforme vimos no diagrama de blocos de um computador, o usurio se comunica com o ncleo do computador (composto pela CPU e memria principal) atravs de dispositivos de entrada e sada. Os tpicos a seguir vo analisar como funcionam os dispositivos de entrada e sada e como se faz a comunicao entre eles e o ncleo do computador. Os dispositivos de entrada e sada tem como funes bsicas: ? ? a comunicao do usurio com o computador ? ? a comunicao do computador com o meio ambiente (dispositivos externos a serem monitorados ou controlados) ? ? armazenamento (gravao) de dados.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

51

As caractersticas que regem a comunicao de cada um dos dispositivos de E/S (entrada e sada) com o ncleo do computador so muito diferentes entre si. Cada dispositivo de E/S se comunica com o ncleo de forma diversa do outro. Entre outras diferenas, os dispositivos de entrada e sada so muito mais lentos que o computador, caracterstica essa que impe restries comunicao, de vez que o computador precisaria esperar muito tempo pela resposta do dispositivo. Outra diferena fundamental diz respeito s caractersticas das ligaes dos sinais dos dispositivos. Os primeiros computadores, especialmente os de pequeno porte, eram muito lentos e os problemas de diferena de velocidade eram resolvidos sem dificuldade e no representavam problema importante. Dessa forma, a ligao dos dispositivos de E/S era feita atravs de circuitos simples (as interfaces) que apenas resolviam os aspectos de compatibilizao de sinais eltricos entre os dispositivos de E/S e a CPU. Os aspectos relativos a diferenas de velocidade (especialmente tempo de acesso e throughput) eram resolvidas por programa (isto , por software). Entre esses componentes, trafegam informaes relativas a dados, endereos e controle.

4.4.1 Tipos de Dispositivos 4.4.1.1 De Ent rada

Os dispositivos de ENTRADA so: teclado, mouses, scanners, leitoras ticas, leitoras de cartes magnticos, cmeras de vdeo, microfones, sensores, transdutores. As funes desses dispositivos so coletar informaes e introduzir as informaes na mquina, converter informaes do homem para a mquina e vice-versa, e recuperar informaes dos dispositivos de armazenamento. 4.4.1.2 De sa da

Os dispositivos de SADA so: impressoras, monitores de vdeo, plotters, atuadores, chaves, etc.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 52

As funes desses dispositivos so exibir ou imprimir os resultados do processamento, ou ainda controlar dispositivos externos. 4.4.2 Formas de Comunicao De uma forma geral, a comunicao entre o ncleo do computador e os dispositivos de E/S poderia ser classificada em dois grupos: comunicao paralela ou serial. 4.4.2.1 Comuni cao em Paral el o grupos de bits so transferidos byte) atravs de diversas linhas como vrios bits so transmitidos taxa de transferncia de dados

Na comunicao em paralelo, simultaneamente (em geral, byte a condutoras dos sinais. Desta forma, simultaneamente a cada ciclo, a ("throughput") alta.

4.4.2.2

Comuni cao Seri al

Na comunicao serial, os bits so transferidos um a um, atravs de um nico par condutor. Os bytes a serem transmitidos so serializados, isto , so "desmontados" bit a bit, e so individualmente transmitidos, um a um. Na outra extremidade do condutor, os bits so contados e quando formam 8 bits, so remontados, reconstituindo os bytes originais. Nesse modo, o controle comparativamente muito mais simples que no modo paralelo e de implementao mais barata. Como todos os bits so transferidos pelo mesmo meio fsico (mesmo par de fios), as eventuais irregularidades afetam todos os bits igualmente. Portanto, a transmisso serial no afetada por irregularidades do meio de transmisso. No entanto, a transmisso serial intrinsecamente mais lenta (de vez que apenas um bit transmitido de cada vez).

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

53

4.4.2.3

Tabel a Comparat i va ent re paralel o e seri al Caracterstica Custo Distncia Throughput Paralelo maior curta alto Serial menor sem limite baixo

4.4.3 Transmisso Sncrona e Assncrona A transmisso de caracteres atravs de uma linha de comunicao pode ser feita por dois diferentes mtodos: transmisso sncrona e assncrona. 4.4.3.1 Trans mi ss o S ncrona

Na transmisso sncrona, o intervalo de tempo entre dois caracteres subseqentes fixo. 4.4.3.2 Trans mi ss o Ass ncrona

J na transmisso assncrona, o intervalo de tempo entre os caracteres no fixo. 4.4.4 Transmisso Simplex, Half-Duplex e Full-Duplex 4.4.4.1 Trans mi ss o Si mpl ex

Uma comunicao dita simplex quando permite comunicao apenas em um nico sentido, tendo em uma extremidade um dispositivo apenas transmissor (transmitter) e do outro um dispositivo apenas receptor (receiver). No h possibilidade do dispositivo receptor enviar dados ou mesmo sinalizar se os dados foram recebidos corretamente. Transmisses de rdio e televiso so exemplos de transmisso simplex.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 54

4.4.4.2

Trans mi ss o Hal f-Dupl ex

Uma comunicao dita half-duplex (tambm chamada semi-duplex) quando existem em ambas as extremidades dispositivos que podem transmitir e receber dados, porm no simultaneamente.

4.4.4.3

Trans mi ss o Full -Dupl ex

Uma transmisso dita full-duplex (tambm chamada apenas duplex) quando dados podem ser transmitidos e recebidos simultaneamente em ambos os sentidos.

4.5 Programa em Linguagem de Mquina Para executar uma tarefa qualquer, um computador precisa receber instrues precisas sobre o que fazer. Uma seqncia adequada de instrues de computador, para a realizao de uma determinada tarefa, se constitui num PROGRAMA de computador. Uma linguagem de programao um conjunto de ferramentas, regras de sintaxe e smbolos ou cdigos que nos permitem escrever programas de computador, destinados a instruir o computador para a realizao de suas tarefas. A primeira e mais primitiva linguagem de computador a prpria linguagem de mquina, aquela que o computador entende diretamente e pode ser diretamente executada pelos circuitos do processador (pelo hardware). No incio da era da computao, os programas eram escritos em linguagem de mquina, isto , as instrues eram escritas diretamente na linguagem do computador (formada apenas com 1's e 0's). Um programa em linguagem de mquina uma longa srie de 0's e 1's, ordenados de forma que alguns representam cdigos de instrues e outros representam os dados que sero processados (ou indicam onde esses dados esto
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 55

armazenados). Em um programa escrito em linguagem de mquina, cada instruo escrita pelo programador ser individualmente executada, isto , a cada instruo do programa corresponder uma ao do computador. A relao portanto 1 para 1 - uma instruo do programa corresponde a uma operao do computador. Imagine ento um programa extenso escrito apenas usando 1's e 0's; imagine que para cada diferente marca ou modelo de computador, as regras para entender esses cdigos sero totalmente diferentes; e finalmente imagine que voce teria que escrever uma a uma as instrues e os dados adequadamente codificados e ordenados, perfurar todos o programa em cartes e submeter toda a massa de cartes ao computador, para finalmente receber algumas horas depois o seu programa de volta com uma mensagem de erro tipo "erro no carto X" e mais nada! Um programa escrito nessa linguagem era difcil de ser escrito sem que se cometessem muitos erros, processo esse longo, difcil, entediante e principalmente caro. Um programa em linguagem de mquina era tambm extremamente difcil de ser entendido por outros programadores que futuramente viessem a trabalhar na manuteno do programa. Essa complexidade levou necessidade de se desenvolverem tcnicas e ferramentas para tornar a escrita e manuteno de programas mais fcil, mais rpida e principalmente mais barata. Cada famlia de computadores possui sua prpria linguagem de mquina. Um programa em linguagem de mquina dependente do computador ou seja, tendo sido escrito para um determinado computador, somente poder ser executado em computadores da mesma famlia, que lhe sejam 100% compatveis. Obs.: Um programa em linguagem de mquina pode ser apresentado em binrio (0's e 1's) ou em hexadecimal (usando de 0 a F, ou seja, transformando cada 4 bits em um dgito hexadecimal). A apresentao em hexadecimal torna mais enxuta a representao (mas no mais simples), mas serve somente para visualizao, pois um programa somente pode ser submetido ao computador em binrio. 4.6 Linguagem de Montagem A primeira tentativa bem-sucedida para resolver o problema acima descrito foi a criao de uma linguagem em que os cdigos numricos foram substitudos por mnemnicos (palavras ou smbolos) como por exemplo: LOAD=carregar e ADD=somar, se aproximam de palavras comuns da lngua inglesa).

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

56

As localizaes dos dados foram substitudas por referncias simblicas. Foram tambm definidas regras de sintaxe de fcil memorizao, de forma a tornar a escrita de programas e sua posterior manuteno uma tcnica de complexidade relativamente menor. Essa linguagem simblica recebeu o nome de Assembly Language (Linguagem de Montagem). Assim, o programador no mais precisava decorar os cdigos numricos que representavam as diferentes instrues e os endereos reais de armazenamento, bastando decorar mnemnicos para as instrues e definir nomes para as referncias dos endereos (por exemplo, NOME para o local onde seriam armazenados os nomes e SALARIO para o local onde seriam armazenados os salrios, etc), o que sem dvida facilita enormemente o trabalho. importante lembrar que um computador sempre monoglota, isto , ele entende nica e exclusivamente a sua prpria linguagem de mquina. Portanto, para escrever um programa em outra linguagem e ele ser entendido e processado no computador, preciso haver algum outro programa que leia o programa escrito nessa linguagem alternativa e o traduza para a linguagem nativa do computador (isto , a linguagem de mquina entendida pelo computador). O processo de traduo da linguagem de montagem para a linguagem de mquina (chamado de montagem) realizado por um programa chamado Assembler (Montador). O programa Assembler l cada instruo escrita em linguagem Assembly e a converte em uma instruo equivalente em linguagem de mquina; e tambm converte cada uma das referncias simblicas de memria em endereos reais (resolve as referncias de memria). A criao de programas Montadores facilitou muito o trabalho dos programadores. Uma outra vantagem menos bvia foi possibilitar o desenvolvimento de programas de crtica de sintaxe (os debuggers), facilitando o processo de depurao de erros de programao. No entanto, o processo continuava lento e complexo, exigindo do programador uma grande compreenso do processo e profundo conhecimento da mquina que ele estava programando. Um programa de computador ainda era difcil de ser escrito, caro, e dependente do computador para o qual foi escrito, j que um programa escrito em linguagem de mquina para um determinado computador s poder ser processado em computadores 100% compatveis com ele.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

57

4.7 Linguagem de Programao Esses problemas levaram a uma busca por linguagens que fossem mais simples de programar e entender, mais rpidas e eficientes (levando a programas mais enxutos, com menos instrues), menos dependente do computador-alvo, mas que processassem com boa eficincia (no acarretando processamento lento no computador). Foram desenvolvidas diversas linguagens de programao, buscando afastar-se do modelo centrado no computador. Essas linguagens foram estruturadas buscando refletir melhor os processos humanos de soluo de problemas. Essas linguagens orientadas a problema so tambm chamadas linguagens de alto nvel, por serem afastadas do nvel de mquina. As primeiras linguagens foram FORTRAN (1957), usada basicamente para manipulao de frmulas; ALGOL (1958), para manipulao de algoritmos; COBOL (1959), para processamento comercial e ainda hoje bastante usada, especialmente em computadores de grande porte (mainframes) em bancos. Nas dcadas de 60 e 70, podemos citar Pascal, a primeira linguagem de alto nvel estruturada; BASIC, linguagem criada para facilitar a programao por no-profissionais; e ADA, linguagem para processamento em tempo real criada sob encomenda do DoD (Department of Defense norte-americano) e ainda hoje a nica linguagem aceita para programas escritos sob encomenda do DoD. Na dcada de 80, surgiu o C e depois o C++ (com suporte a objetos), que esto entre as linguagens mais utilizadas hoje. Cada nova linguagem criada visa atingir nveis de abstrao mais altos, isto , afastam cada vez mais o programador do nvel de mquina. Se por um lado essas novas linguagens facilitam muito o trabalho do programadores (e reduzem sua necessidade de conhecer o hardware da mquina), elas cobram um alto preo em termos de desempenho (isto , so cada vez mais lentas, ao consumir cada vez mais ciclos de mquina e espao em memria). Esse aumento de exigncia ao poder de processamento dos computadores compensado (e desta forma se faz menos notado) pelo aumento acelerado do poder de processamento dos novos chips (exemplificado pela chamada Lei de Moore, que afirma que o poder de processamento dos chips dobra a cada 18 meses) e pelos avanos na arquitetura dos computadores. Dentre as importantes tendncias atuais, citamos as linguagens de manipulao de bancos de dados (como dBase, Clipper, FoxPro, Paradox, Access, etc) e as linguagens visuais, como o Visual Basic, Visual C e Delphi.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 58

Tal como na linguagem humana, as linguagens de computadores proliferam e sempre h problemas que ainda persistem, continuando a busca por uma linguagem ideal - a soluo "definitiva". A linguagem Java a mais importante tendncia atual e mais recente avano na busca pela linguagem universal - o "esperanto" dos computadores. Java eleva a abstrao ainda mais um nvel e se prope a ser independente da mquina onde ser executado. Porm, na realidade, quando no est sendo processado em um processador Java nativo, o cdigo Java interpretado por uma c amada de software chamada mquina virtual Java (JVM - Java Virtual Machine), ou seja, um emulador. 4.8 Traduo Um programa escrito por um programador (chamado cdigo fonte) em uma linguagem de alto nvel um conjunto de instrues que clara para programadores, mas no para computadores. Ou seja, os computadores entendem nica e exclusivamente suas linguagens nativas, as linguagens de mquina. Programas em linguagem de alto nvel, a exemplo dos programas escritos em linguagem de Montagem, tambm precisam ser traduzidos para linguagem de mquina para poderem ser submetidos ao computador e processados. O processo de traduo do programa escrito em uma linguagem simblica pelo programador, chamado cdigo fonte para a linguagem de mquina do computador chamada cdigo objeto, chamado compilao e realizado por um programa chamado Compilador. 4.9 Montagem Citamos anteriormente uma forma de traduo rpida e simples: a executada pelo programa Montador. O processo de montagem traduz um programa escrito em linguagem Assembly em um programa equivalente em linguagem de mquina, possvel de ser executado pelo computador. A seguir, apresentado o fluxo que representa o processo de montagem. No processo de montagem, o cdigo examinado, instruo por instruo e feita a traduo, gerando o cdigo que ser executado (cdigo objeto). Os passos executados pelo programa Montador so: ? ? Verificar a correo do cdigo de instruo (se o mnemnico corresponde a uma instruo vlida para o computador, se os campos definidos na estrutura da linguagem e a sintaxe esto corretos) e substituir os mnemnicos pelos cdigos numricos binrios equivalentes. Qualquer erro no cdigo acarreta a interrupo do processo e a emisso de mensagem de erro.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 59

? ? Resolver as referncias de memria: os nomes simblicos adotados pelo programador so convertidos para endereos reais de memria (valores numricos binrios de endereos). ? ? Reservar espao instrues e dados. em memria para o armazenamento das

? ? Converter valores de constantes em binrio. 4.10 Compilao Compilao o processo de traduo de um programa escrito em linguagem de alto nvel para cdigo em linguagem de mquina. Compilao um processo anlogo ao da montagem (verificao / anlise do cdigo fonte, resoluo das referncias de memria, reserva de espao em memria e converso para cdigo de mquina binrio). O que diferencia a compilao do processo de montagem sua maior complexidade. No processo de montagem, h uma relao de 1:1, ou seja, cada instruo do cdigo fonte resulta em uma instruo de mquina, enquanto na compilao a relao mltipla, cada instruo do cdigo fonte gerando vrias instrues de mquina. Durante a compilao, o cdigo fonte analisado (anlise lxica, sinttica e semntica), gerado um cdigo intermedirio e so construdas tabelas de smbolos, alocam-se as reas de memria para variveis e atribui-se os registradores a serem utilizados, e finalmente gerado o cdigo objeto em linguagem binria de mquina. Em alguns compiladores, gerado um cdigo intermedirio em Assembly (que pode ser visualizado pelo programador) e que em seguida passa pelo montador para gerar finalmente o cdigo objeto em linguagem de mquina. O cdigo objeto pode ser absoluto (os endereos constantes so endereos reais de memria) ou relocvel (os endereos so relativos, tendo como referncia o incio do programa, e os endereos reais de memria so definidos apenas em tempo de execuo). 4.11 Bibliotecas O desenvolvimento de um programa certamente utilizar diversas operaes que so comuns a muitos outros programas. Por exemplo, a execuo de uma instruo de entrada e sada, a classificao dos dados de um arquivo, o clculo de funes matemticas, etc. Uma linguagem de alto nvel geralmente incorpora diversas rotinas prontas e que compem bibliotecas de funes pr-programadas que podero ser utilizadas pelo programador, poupando tempo, aumentando a eficincia e evitando erros.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 60

Dessa forma, um programa em alto nvel possivelmente conter diversas chamadas de biblioteca (library calls). Essas funes no devem ser confundidas com as instrues da linguagem - na realidade, so pequenos programas externos que so chamados atravs de instrues especiais de chamada de biblioteca. Para serem executadas, essas rotinas precisam ser incorporadas ao cdigo do programador, isto , a chamada de biblioteca precisa ser substituda pelo cdigo propriamente dito, incluindo os parmetros necessrios. 4.12 Ligao Assim, o cdigo objeto preparado pelo compilador em geral no imediatamente executvel, pois ainda existe cdigo (as rotinas de biblioteca) a ser incorporado ao programa. A cada chamada de biblioteca encontrada no cdigo fonte, o compilador precisar incluir uma chamada para a rotina e o endereo dos dados que devam ser passados para a rotina. A tarefa de examinar o cdigo objeto, procurar as referncias a rotinas de biblioteca (que constituem referncias externas no resolvidas), buscar a rotina da biblioteca, substituir a chamada pelo cdigo ("resolver as referncias externas") e obter os parmetros para inclu -los no cdigo objeto executada por um programa chamado Ligador (LinkEditor). O resultado da execuo do Ligador o cdigo final pronto para ser executado pelo computador, chamado mdulo de carga ou cdigo executvel. O mdulo de carga, aps testado e depurado (isto , depois de resolvidos todos os erros, tambm chamados "bugs") armazenado em memria de massa para ser executado quando necessrio. O processo de compilao e ligao executado apenas pelo programador na fase de desenvolvimento e no mais precisar ser executado pelo usurio, quando da execuo do programa. 4.13 Interpretao Com o processo de execuo de um programa em fases distintas (compilao / ligao / execuo) apresentado, um programa para ser executado precisa primeiro ter sido convertido para cdigo objeto pelo compilador e depois ter passado pelo ligador. Esse processo o mais largamente utilizado, porm no o nico. O mtodo alternativo chama-se de interpretao e, a partir do programa fonte, realiza as trs fases (compilao, ligao e execuo), comando por comando, em tempo de execuo. No existem fases distintas nem se produzem cdigos intermedirios. Todo o processo de converso efetuado em tempo de execuo e imediatamente executado.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 61

Nestemtodo cada comando lido, verificado, convertido em cdigo executvel e imediatamente executado, antes que o comando seguinte seja sequer lido. Linguagens como C, Pascal, COBOL, etc, so linguagens tipicamente compiladas, enquanto o BASIC foi desenvolvido como linguagem interpretada (hoje tambm existem linguagens BASIC compiladas e o programador pode optar). As linguagens de programao tipicamente de usurio, tais como das planilhas Excel, o Word Basic (linguagem de construo de Macros do Word), o Access, etc, so todas linguagens interpretadas. 4.14 Comparao entre Compilao e Interpretao Sempre que houver duas opes, haver vantagens e desvantagens para cada uma delas (pois se assim no fosse, a que apresentasse sempre desvantagem seria abandonada). Vamos comparar os mtodos: 4.14.1 Tempo de Execuo

No mtodo de interpretao, cada vez que o programa for executado, haver compilao, ligao e execuo de cada um dos comandos. No mtodo de Compilao, o tempo de execuo do programa reduzido, porque todos os passos preliminares (compilao e ligao) foram previamente cumpridos. 4.14.2 Consumo de Memria

No mtodo de interpretao, o interpretador um programa geralmente grande e que precisa permanecer na memria durante todo o tempo que durar a execuo do programa, pois um programa necessita do interpretador para ter traduzidos cada um dos seus comandos, um a um, at o trmino de sua execuo (o interpretador somente descarregado depois do trmino da execuo do programa). No mtodo de compilao, o compilador carregado e fica na memria apenas durante o tempo de compilao, depois descarregado; o ligador carregado e fica na memria apenas durante o tempo de ligao, depois descarregado. Essas so funes realizadas pelo programador e executadas apenas durante o desenvolvimento do programa. Quando o usurio for executar o programa, apenas o mdulo de carga (cdigo executvel) carregado e fica na memria durante a execuo. Desta forma, vemos que o mtodo de interpretao acarreta um consumo de memria muito mais elevado durante a execuo do programa.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 62

4.14.3

Repetio de Interpretao

No mtodo de compilao, um programa compilado e ligado apenas uma vez, e na hora da execuo carregado apenas o mdulo de carga, que diretamente executvel. No mtodo de interpretao, cada programa ter que ser interpretado toda vez que for ser executado. Outro aspecto que, em programas contendo loops , no mtodo de interpretao as partes de cdigo pertencentes ao loop sero vrias vezes repetidas e tero que ser interpretadas tantas vezes quantas o loop tiver que ser percorrido. No mtodo de compilao, a traduo do cdigo do loop se faz uma nica vez, em tempo de compilao e ligao. Estas caractersticas levam a um maior consumo de tempo no mtodo de interpretao, portanto mais lento. 4.14.4 Desenvolvimento de Programas e Depurao de Erros

No mtodo de compilao, a identificao de erros durante a fase de execuo fica sempre difcil, pois no h mais relao entre comandos do cdigo fonte e instrues do executvel. No mtodo de interpretao, cada comando interpretado e executado individualmente, a relao entre cdigo fonte e executvel mais direta e o efeito da execuo (certa ou errada) direta e imediatamente sentido. Quando a execuo de um comando acarreta erro, quase sempre o erro pode ser encontrado no comando que acabou de ser executado. Assim, o interpretador pode informar o erro, indicando o comando ou varivel causador do problema. Essa caracterstica, que a rigor a maior vantagem do mtodo de interpretao sob o ponto de vista do usurio, faz com que esse mtodo seja escolhido sempre que se pretende adotar uma linguagem que v ser usada por no-profissionais ou para a programao mais expedita. Por exemplo, o mtodo de interpretao usado pela maioria dos Basic (uma linguagem projetada para ser usada por iniciantes), e por todas as linguagens tpicas de usurio como dBase, Access, Excel, etc. 4.15 Emuladores e Mquinas Virtuais Uma aplicao interessante dos interpretadores a gerao de cdigo universal e mquinas virtuais. Sabemos que um computador somente capaz de executar programas que tenham sido desenvolvidos para ele. Assim, um programa desenvolvido para rodar em PC's rodando Windows no funciona em PC's com UNIX ou em Mcintosh.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 63

Se voce concorda com essa afirmao, imagine ento uma pgina na Internet, com textos, imagens e programas que podem ser visualizados e processados por quase qualquer computador. Como isso pode ser feito? Como computadores de marcas e modelos diferentes estaro lendo, interpretando e executando corretamente comandos que podem ter sido desenvolvidos usando um outro computador? O segredo a utilizao de linguagens padronizadas (tais como HTML - para a escrita das pginas - e PERL, CGI, Java, Java Script, etc, para programas) que so suportadas por diversas plataformas. Assim, cada uma das plataformas (atravs dos programas visualizadores de pginas Internet, conhecidos como browsers ou mesmo atravs de seus respectivos sistemas operacionais) pode interpretar corretamente qualquer pgina feita e hospedada em qualquer computador. Uma situao semelhante ocorre quando algum desenvolve um programa que "interpreta" o cdigo executvel produzido para um determinado computador e o converte para ser executado em outro computador incompatvel com o primeiro. Imagine pegar um jogo desenvolvido para os consoles originais Atari (por exemplo, o Space Invaders, Asteroids ou PacMan) e poder execut-lo num moderno PC. Ou pegar um programa que voce tenha escrito (por exemplo, uma planilha) para um dos Apple II originais e rod-lo num PC. Esse processo, em que um computador opera como se fosse o outro, conhecido como emulao. Levando esse conceito um pouco mais adiante, imagine desenvolver um programa conversor que pegasse qualquer programa escrito para uma determinada mquina e interpretasse seu cdigo executvel traduzindo-o em tempo de execuo para instrues de um outro computador. Esse programa criaria uma camada de emulao em que uma mquina se comportaria como uma outra mquina. Poderamos ter um PC "virtual" emulado em um Mcintosh, que estaria assim apto a rodar qualquer programa escrito para PC. Esse programa emulador criaria um ambiente que chamamos de mquina virtual, isto , uma mquina que se comporta como uma outra mquina diferente, no compatvel. Algo parecido foi desenvolvido pela Sun Microsystems na linguagem Java. Java uma linguagem que em princpio permite que programas escritos nela rodem em qualquer mquina. Na realidade, a Sun desenvolveu uma plataforma Java (JVM - Java Virtual Machine), com caractersticas de ambiente necessrias para que os programas escritos em Java rodem adequadamente. A JVM suporta uma represent ao em software de uma UCP completa, com sua arquitetura perfeitamente definida incluindo seu prprio conjunto de instrues. Os programadores Java escrevem cdigo usando o conjunto de instrues definido pela linguagem Java.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 64

Esse fonte ser ento compilado gerando cdigo de mquina virtual Java. Como o cdigo Java universal, os cdigos fonte Java e os cdigos objeto gerados so independentes da mquina em que o software ser depois processado. Assim, os programadores Java no precisam se preocupar em qual computador ou sistema operacional o programa vai ser executado: desenvolver para Java independente da mquina! Mas como possvel que isso funcione, sem desmentir tudo o que antes dissemos sobre o cdigo de mquina ser dependente do ambiente? Tudo bem que o cdigo Java rode bem em um processador Java. Mas, e em outras plataformas? Bom, em outras plataformas, programas escritos em Java rodariam em mquinas virtuais que emulariam o ambiente Java. Isso significa que as empresas desenvolvedoras de software contruiram uma camada de software que, em tempo de execuo, lem o cdigo Java e o interpretam, traduzindo-o para o cdigo nativo daquele ambiente. Esses programas interpretadores permitem que um programa Java seja traduzido, em tempo de execuo, para o cdigo nativo e seja executado no computador do usurio, com maior ou menor eficincia, porm sempre mais lentos que na mquina Java ideal. Assim, a linguagem Java, que foi inicialmente recebida com grande interesse, apresenta resultados algumas vezes decepcionantes (especialmente quanto ao desempenho) e sua aplicabilidade atualmente tem sido restrita a sistemas com requisitos de desempenho no-crticos. Comentrio: A Sun tem investido em melhorar o desempenho do cdigo Java. Alm de uma srie de interessantes otimizaes de software, foi criado um chip Java, que poderia ser adicionado aos computadores e criaria um ambiente Java ideal. Ora, se a vantagem do Java exatamente poder ser executado em qualquer computador, um contra-senso ser necessrio di spor de um chip Java para poder rodar Java eficientemente. Outro aspecto preocupante o esforo da Microsoft para criar extenses ao Java (ou seja, criar um Java Microsoft, sem respeitar o padro da Sun). Essa extenses visam fazer o cdigo Java rodar com mais eficincia no ambiente PC / Windows, porm podem destruir a padronizao. O sonho (mais das empresas de software que dos programadores, verdade) de uma linguagem universal, em que se desenvolveria para um e se rodaria em todos, parece que ainda fica para um tempo mais frente. 4.16 Sistema Operacional Um sistema operacional um programa de computador, que aps o processo de inicializao (boot) da mquina, o primeiro a ser carregado, e que possui duas tarefas bsicas:

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

65

? ? gerenciar os recursos de hardware de forma que sejam utilizados da melhor forma possvel, ou seja, tirar o mximo proveito da mquina fazendo com que seus componentes estejam a maior parte do tempo ocupados com tarefas existentes; e ? ? prover funes bsicas para que programas de computador possam ser escritos com maior facilidade, de modo que os programas no precisem conhecer detalhes da mquina para poderem funcionar. justamente neste segundo item que os sistemas operacionais podem ser bem sucedidos ou no, em despertar interesse para que a indstria de software e os programadores independentes construam programas para determinados sistemas operacionais. Isto justifica parte do sucesso do Microsoft Windows, pois ao mesmo tempo que ele prov uma interface bastante amigvel com o usurio, para o programador, no to difcil criar um programa com janelas, botes, listas, etc, como seria num sistema operacional como o MS-DOS. Computadores modernos possuem um ou mais processadores, memria principal, dispositivos de entrada e sada como discos, fitas, teclado, mouse, monitor, interface de rede, entre outros. Escrever programas que utilizem um computador com esta complexidade de forma eficiente muito difcil e trabalhoso. exatamente neste ponto que entram as funes do sistema operacional: abstrair as particularidades do hardware dos programas, fornecendo a eles facilidades para sua operao, tais como: rotinas de acesso a dispositivos diversos; funes de armazenamento de dados como criao de arquivos, leitura e escrita de dados; e rotinas de acesso aos dispositivos de interao com a mquina, como teclado, mouse, monitor, etc. Dada a existncia de softwares como o sistema operacional, os programas normalmente so classificados como: 1. software bsico (que inclui o sistema operacional), 2. softwares de aplicao, que so voltados a resolver problemas dos usurios. Podemos visualizar na figura a seguir um diagrama de integrao entre hardware, software bsico, e softwares aplicativos.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

66

Sistema Bancrio

Controle de Estoques Editores

Jogos

Programas de Aplicao

Compiladores

Interpretador de comandos (shell )

Programas de Sistema (software bsico)

Sistema Operacional
Linguagem de Mquina Microprogramao Dispositivos Fsicos
Hardware

Olhando para o diagrama, veremos que o que chamamos de hardware na verdade composto de trs camadas. Nem todas as mquinas seguem este esquema, algumas podem ter uma camada a menos, ou mesmo camadas adicionais, mas basicamente, os computadores seguem este esquema. No nvel mais inferior, temos os dispositivos eletrnicos em si, como o processador, os chips de memria, controladores de disco, teclado, e outros dispositivos, barramentos, e qualquer dispositivo adicional necessrio para o funcionamento do computador. Um nvel acima, temos a camada de microprogramao, que de forma geral, so pequenos passos (chamados de microoperaes) que formam uma instruo de processador completa, como ADD, MOV, JMP, etc. O conjunto de instrues do computador chamado de linguagem de mquina, e apesar de ser uma espcie de linguagem, podemos dizer que faz parte do hardware porque os fabricantes a incluem na especificao do processador, para que os programas possam ser escritos. Afinal, de nada adianta uma mquina maravilhosa, se no existir documentao alguma de como ela funciona. Assim, as instrues que a mquina entende so consideradas parte integrante do hardware. As instrues tambm incluem, geralmente, operaes que permitem ao processador comunicar-se com o mundo externo, como controladores de disco, memria, teclado, etc. Como a complexidade para acesso a dispositivos muito grande, tarefa do Sistema Operacional esconder estes detalhes dos programas. Assim, o sistema operacional pode, por exemplo, oferecer aos programas uma funo do tipo LEIA UM BLOCO DE UM ARQUIVO, e os detalhes de como fazer isso ficam a cargo do sistema operacional.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 67

Acima do sistema operacional esto os demais programas utilizados pelo usurio final, mas alguns deles ainda so considerados software bsico, como o sistema operacional. Entre eles podemos citar o shell, que consiste do interpretador de comandos do usurio, ou seja, a interface com o usurio. Nos sistemas operacionais mais recentes, freqentemente o shell uma interface grfica (ou em ingls GUI Graphics User Interface). Raramente, numa interface grfica bem elaborada, o usurio precisa digitar comandos para o computador. A maneira mais comuns de executar programas, copiar e mover arquivos, entre outras atividades mais comuns, atravs do uso do mouse. Nos tempos do MS-DOS, o teclado era o dispositivo de entrada dominante, por onde o usurio entrava todos os comandos para realizar suas tarefas do dia a dia. O que muito importante observar quanto ao software bsico que, apesar de que editores (ex: bloco de notas do Windows), compiladores (ex: compilador C no Unix), e interpretadores de comando (ex: command.com ou explorer.exe no Windows) normalmente serem instalados junto como sistema operacional em um computador, eles no so o sistema operacional. Eles apenas utilizam o sistema operacional. Portanto, o shell que normalmente usamos em um sistema operacional nada mais do que um programa que utiliza servios do sistema operacional, mas com a finalidade de permitir que os usurios realizem suas tarefas mais freqentes: executar programas e trabalhar com arquivos. A grande diferena entre o sistema operacional, e os programas que rodam sobre ele, sejam software bsico ou software aplicativo, que o sistema operacional roda em modo kernel (ou supervisor), enquanto os demais programas rodam em modo usurio. Estes dois modos de operao dos processadores dos computadores diferem no fato de que em modo supervisor, um programa tem acesso a todo o hardware, enquanto que os programas que rodam em modo usurio, tem acesso somente a determinadas regies de memria, no podem acessar dispositivos diretamente, e precisam pedir para o sistema operacional quando necessitam de alguma tarefa especial. Isto garante que os programas dos usurios, no acabem por invadir reas de memria do sistema operacional, e acabem por travar o sistema. Isto tambm possibilita que programas de diferentes usurios estejam rodando na mesma mquina, de forma que um usurio no consiga interferir nos programas de outro.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

68

4.16.1 4.16.1.1

Exemplos de Sistema Operacional MS-DO S

A sigla MS-DOS significa Microsoft Disk Operating System que em portugus significa Sistema Operacional de Disco. O prefixo MS representa Microsoft, empresa que criou o sistema. Este programa foi desenvolvido para permitir ao usurio realizar todas as funes bsicas e essenciais necessrias no computador. O MS-DOS o Sistema Operacional mais utilizado e faz parte do Software Bsico (programa indispensvel ao funcionamento do computador). um programa que se encarrega do Hardware do computador, por isso que muito especial. Com pouqussimas excees, qualquer outro programa que executado em seu computador executado com a ajuda do DOS, em outras palavras o DOS o programa que gerencia os componentes bsicos do computador e os aloca a seus programas quando necessrio. O DOS fica sob seu controle e existe para fornecer-lhe uma forma de comunicar suas instrues ao computador. Voc informa instrues ao DOS atravs de comandos que ele reconhecer. A maior parte desses comandos consistem em palavras baseadas na lngua inglesa, pr exemplo: copy, rename, date,time, label etc. 4.16.1.2 U NI X

As razes do UNIX datam de meados dos anos 60, quando a AT&T, Honeywell, GE e o MIT embarcaram em um massivo projeto para o desenvolvimento de um utilitrio de informao, chamado Multics (Multiplexed Information and Computing Service). Multics era um sistema modular montado em uma bancada de processadores, memrias e equipamentos de comunicao de alta velocidade. Pelo desenho, partes do computador poderiam ser desligadas para manuteno sem que outras partes ou usurios fossem afetados. Em 1973 o UNIX foi reescrito em C, talvez o fato mais importante da histria deste sistema operacional. Isto significava que o UNIX poderia ser portado para o novo hardware em meses, e que mudanas eram fceis. A linguagem C foi projetada para o sistema operacional UNIX, e portanto h uma grande sinergia entre C e UNIX. Em 1975 foi lanada a V6, que foi a primeira verso de UNIX amplamente disponvel fora dos domnios do Bell Labs, especialmente em universidades. Este foi o incio da diversidade e popularidade do UNIX. Nesta poca a Universidade de Berkley comprou as fontes do UNIX e alunos comearam a fazer modificaes ao sistema.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 69

4.16.1.3

W INDOW S NT

O Microsoft Windows NT comeou a surgir em 18 de setembro de 1996, quando a Intel Corporation e a Microsoft Corporation anunciaram que estavam trabalhando no desenvolvimento de um novo sistema operacional para a futura famlia de processadores de 64 bits da Intel. O Windows NT o sistema operacional da prxima gerao, visando operar PCs at boa parte do prximo sculo. Foi projetado para ser um sistema operacional portvel, capaz de se adequar facilmente a diversas plataformas de hardware, incluindo ambientes de um s processador e de mltiplos processadores. Ele poder ser facilmente estendido ou aperfeioado conforme o hardware evoluir. Pr se mover para uma implementao completa de 32 bits, deixou para trs muitos cacoetes e problemas associados aos sistemas mais antigos de 16 bits. Uma meta primria do Windows NT foi a compatibilidade com outros sistemas operacionais para PCs e com os programas projetados para rodas sob eles. Ou seja, o Windows NT foi projetado para permitir compatibilidade regressiva com a grande base de aplicaes para PC existentes. O Windows NT tambm foi projetado para satisfazer ou exceder os padres atuais de desempenho. Um outro aspecto importante que ele pode rodar em computadores com mltiplas CPUs. 4.16.1.4 W INDOW S 95

Criado pela Microsoft Corporation o Windows 95 um software bsico classificado na categoria de "Sistema Operacional". Ele cria uma interface grfica para o usurio (GUI - Graphical User Interface) para proporcionar a este uma comunicao mais intuitiva e fcil com o computador. Este software usa a metfora da mesa de trabalho (desktop) para dispor e arranjar informaes grficas e textuais na tela. O usurio tem acesso a essas informaes atravs do mouse, que usado para abrir janelas, selecionar opes, acionar vrios objetos atravs de cones, mover, copiar, renomear ou excluir arquivos, executar programas, etc. O Windows 95 incorporou um conjunto de tecnologias que, somadas as inovaes de sua interface, significam uma autntica revoluo no uso de micros. Uma das mudanas refere-se a prpria interface grfica, que evoluiu para facilitar ainda mais a maneira como o indivduo se relaciona com o equipamento. Essa melhoria beneficia tanto usurios que conhecem pouco ou quase nada de microinformtica quanto profissionais. Outro avano significativo o suporte Plug-and-Play - ligue e use automatizando totalmente a instalao e configurao da mquina.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 70

Esta tecnologia acaba com os problemas de instalao de placas e outros perifricos, pois autoconfigura os componentes e pe fim aos conflitos de endereo e interrupo de memria. O Windows 95 no traz apenas mudanas na interface. Sua grande mudana ocorreu nos bastidores. Ao contrrio do Windows 3.1 (que ambiente operacional), o Windows 95 um sistema operacional integrado completo, que no trabalha " sobre" o MS-DOS. O Windows 95 elimina as limitaes de memria herdadas do DOS. O Windows 95 tambm tem uma vantagem em relao a outros sistemas e ambientes operacionais: ele permite a criao de nomes longos de arquivos, assim o usurio poder gravar arquivos com nomes que realmente indiquem o que o arquivo representa. No Windows 95 os nomes de arquivos podem ter at 255 caracteres, incluindo espaos. 5 ALGORITMOS ESTRUTURADOS

Um algoritmo formalmente uma seqncia finita de passos que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma seqncia de instrues que do cabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, que explicam passo-a-passo como, por exemplo, gravar um evento. At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas. Por exemplo: ? ? Chupar uma bala. 1. ?Pegar a bala 2. ?Retirar o papel 3. ?Chupar a bala 4. ?Jogar o papel no lixo ? ? Somar dois nmeros quaisquer. 1. Escreva o primeiro nmero no retngulo A
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 71

2. Escreva o segundo nmero no retngulo B 3. ?Some o nmero do retngulo A com nmero do retngulo B e coloque o resultado no retngulo C =

Retngulo A

Retngulo B

Resultado

Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina, no caso um computador. Notem que dada esta interpretao rigorosa, um programa por natureza muito especfico e rgido em relao aos algoritmos da vida real. 5.1 Desenvolvendo algoritmos 5.1.1 Pseudocdigo Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso posterior implementao em uma linguagem de programao, ou seja, quando formos programar em uma linguagem, por exemplo Visual Basic, estaremos gerando cdigo em Visual Basic. Por isso os algoritmos so independentes das linguagens de programao. Ao contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo. O algoritmo deve ser fcil de se interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao. 5.1.2 Regras para construo do Algoritmo Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira simples e objetiva. Para isso utilizaremos algumas tcnicas: 1. Usar somente um verbo por frase 2. Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica 3. Usar frases curtas e simples
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 72

4. Ser objetivo 5. Procurar usar palavras que no tenham sentido dbio 5.1.3 Fases de Construo No item anterior vimos que ALGORITMO uma seqncia lgica de instrues que podem ser executadas. importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo, como por exemplo: COMO FAZER ARROZ DOCE ou ento CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais.

Entrada

Processamento

Sada

Onde temos: ENTRADA: So os dados de entrada do algoritmo PROCESSAMENT O: So os procedimentos utilizados para chegar ao resultado final SADA: So os dados j processados 5.1.4 Exemplo de Algoritmo Imagine o seguinte problema: Calcular a mdia final dos alunos do 1 Perodo de ICC. Os alunos realizaro quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = P1 + P2 + P3 + P4 4 Para montar o algoritmo proposto, faremos trs perguntas:
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 73

a) Quais so os dados de entrada? R: Os dados de entrada so P1, P2, P3 e P4 b) Qual ser o processamento a ser utilizado? R: O procedimento ser somar todos os dados de entrada e dividi -los por 4 (quatro) P1 + P2 + P3 + P4 4 c) Quais sero os dados de sada? R: O dado de sada ser a mdia final ? ? Algoritmo inicio Receba a nota da prova1 Receba a nota de prova2 Receba a nota de prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso fim 5.1.5 Teste de Mesa (ou Chins) Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de TESTE DE MESA (ou Chins), que significa, seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou no. 5.2 Constantes, Variveis e Tipos de Dados Variveis e constantes so os elementos bsicos que um programa manipula. Uma varivel um espao reservado na memria do computador para armazenar um tipo de dado determinado.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 74

Variveis devem receber nomes para poderem ser referenciadas e modificadas quando necessrio. Um programa deve conter declaraes que especificam de que tipo so as variveis que ele utilizar e as vezes um valor inicial. Tipos podem ser por exemplo: inteiros, reais, caracteres, etc. As expresses combinam variveis e constantes para calcular novos valores. 5.2.1 Constantes Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica, lgica e literal. Exemplo de constantes:

P1 + P2 + P3 + P4 4
5.2.2 Variveis

Constante

Varivel a representao simblica dos elementos de um certo conjunto. Cada varivelcorresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempodurante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, elas pode armazenar um valor a cada instante. Exemplo de variveis Variveis Produto = 10 Total = Produto * Quantidade Quantidade = 5 Total = 50 Contedo da Variveis

5.2.3 Tipos de Variveis As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres, Alfanumricas ou lgicas. 5.2.3.1 Numri cas

Especficas para armazenamento de nmeros, que posteriormente podero ser utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais. As variveis do tipo inteiro so para armazenamento de nmeros
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 75

inteiros e as Reais so para o armazenamento de nmeros que possuam casas decimais. 5.2.3.2 Caract eres

Especficas para armazenamento de conjunto de caracteres que no contenham nmeros (literais). Ex: nomes. 5.2.3.3 Al fanumri cas

Especficas para dados que contenham letras e/ou nmeros. Pode em determinados momentos conter somente dados numricos ou somente literais. Se usado somente para armazenamento de nmeros, no poder ser utilizada para operaes matemticas. 5.2.3.4 Lgi cas

Armazenam dados lgicos que podem ser apenas Verdadeiro ou Falso. 5.3 Operadores Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos trs tipos de operadores: 1. Operadores Aritmticos 2. Operadores Relacionais 3. Operadores Lgicos 5.3.1 Operadores Aritmticos Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtrao, multiplicao e diviso, podem utilizar tambm o operador para exponenciao. Os smbolos para os operadores aritmticos so: OPERAO Adio Subtrao Multiplicao SMBOLO

+ *
76

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

Diviso Exponenciao 5.3.1.1

/ **

Hi erarqui a das Operaes Arit mti cas

1 ( ) Parnteses 2 Exponenciao 3 Multiplicao, diviso (o que aparecer primeiro) 4 + ou (o que aparecer primeiro) Exemplo TOTAL = PRECO * QUANTIDADE 1 + 7 * 2 ** 2 1 = 28 3 * (1 2) + 4 * 2 = 5 5.3.2 Operadores Relacionais Os operadores relacionais so utilizados para comparar String de caracteres e nmeros. Os valores a serem comparados podem ser caracteres ou variveis. Estes operadores sempre retornam valores lgicos (verdadeiro ou falso/ True ou False). Para estabelecer prioridades no que diz respeito a qual operao executar primeiro, utilize os parnteses. Os operadores relacionais so: Descrio Igual a Diferente de Maior que Menor que Maior ou igual a Menor ou igual a Smbolo = <> ou # > < >= <=
77

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

Exemplo: Tendo duas variveis A = 5 e B = 3 Os resultados das expresses seriam: Expresso A=B A <> B A>B A<B A >= B A <= B 5.3.3 Operadores Lgicos Os operadores lgicos servem para combinar resultados expresses, retornando se o resultado final verdadeiro ou falso. Os operadores lgicos so: 1. E (AND) 2. OU (OR) 3. NO (NOT) E / AND Uma expresso AND (E) verdadeira se todas as condies foremverdadeiras OR/OU NOT Uma expresso OR (OU) verdadeira se pelo menos uma condio for verdadeira Um expresso NOT (NO) inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-versa. de Resultado Falso Verdadeiro Verdadeiro Falso Verdadeiro Falso

A tabela abaixo mostra todos os valores possveis criados pelos trs operadores lgicos (AND, OR e NOT) Exemplos: Suponha que temos trs variveis A = 5, B = 8 e C =1
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 78

Os resultados das expresses seriam: Expresses A=B A <> B A>B A<B A >= B A <= B AND OR NOT AND OR NOT B>C B=C B>C B<C Resultado Falso Verdadeiro Verdadeiro Verdadeiro Falso Falso

5.4 Estrutura de Deciso e Repetio Como j vimos anteriormente em Operadores Lgicos, na maioria das vezes necessitamos tomar decises no algoritmo. Essas decises interferem diretamente no programa. Trabalharemos com dois tipos de estrutura. Deciso e a estrutura de Repetio 5.4.1 Comandos de Deciso Os comandos de deciso ou desvio fazem parte das tcnicas de programao que conduzem a estruturas de programas que no so totalmente seqenciais. Com as instrues de SALTO ou DESVIO pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decises lgicas tomadas em funo dos dados ou resultados anteriores. As principais estruturas de deciso so: Se Ento, Se ento Seno e Caso Selecione 5.4.1.1 SE ENTO / IF ... THEN verificamos que andamento do andamento do A estrutura de

A estrutura de deciso SE/IF normalmente vem acompanhada de um comando, ou seja, se determinada condio for satisfeita pelo comando SE/IF ento execute determinado comando. Imagine um algoritmo que determinado aluno somente estar aprovado se sua mdia for maior ou igual a 5.0, veja no exemplo de algoritmo como ficaria.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

79

inicio entre com o valor da MEDIA Se MEDIA >= 5.0 Ento ALUNO aprovado Fim Se fim 5.4.1.2 SE ENTO SENO / IF ... THEN ... ELSE

A estrutura de deciso SE/ENTO/SENO, funciona exatamente como a estrutura SE, com apenas uma diferena, em SE somente podemos executar comandos caso a condio seja verdadeira, diferente de SE/SENO pois sempre um comando ser executado independente da condio, ou seja, caso a condio seja verdadeira o comando da condio ser executado, caso contrrio o comando da condio falsa ser executado. Em algoritmo ficaria assim: inicio entre com o valor da MEDIA Se MEDIA >= 5.0 Ento ALUNO aprovado Seno ALUNO reprovado fim Se fim No exemplo acima est sendo executada uma condio que, se for verdadeira, executa o comando APROVADO, caso contrrio executa o segundo comando REPROVADO. Podemos tambm dentro de uma mesma condio testar outras condies. Como no exemplo abaixo: inicio entre com o valor da MEDIA Se MEDIA >= 7.0 Ento ALUNO aprovado
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 80

Seno SE MEDIA < 5.0 Ento ALUNO reprovado fim Se Ento ALUNO recuperao fim Se fim 5.4.1.3 CASO SELE CIONE / SELECT ... CASE

A estrutura de deciso CASO/SELECIONE utilizada para testar, na condio, uma nica expresso, que produz um resultado, ou, ento, o valor de uma varivel, em que est armazenado um determinado contedo. Compara-se, ento, o resultado obtido no teste com os valores fornecidos em cada clusula Caso. No algoritmo abaixo, recebido uma varivel VALOR e testado seu contedo, caso uma das condies seja satisfeita, atribudo para a varivel Titulo a String Opo X, caso contrrio atribudo a string Opo Errada. Inicio Ttulo do Livro = VALOR = Digite a opo Selecione a entrada valor Caso 1 Ttulo = Opo 1 Caso 2 Ttulo = Opo 2 Caso 3 Ttulo = Opo 3 Caso 4 Ttulo = Opo 4 Caso 5 Ttulo = Opo 5
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 81

Caso diferente Ttulo = Opo Errada fim do selecione fim 5.4.2 Comandos de Repetio Utilizamos os comandos de repetio quando desejamos que um determinado conjunto de instrues ou comandos sejam executados um nmero definido ou indefinido de vezes, ou enquanto um determinado estado de coisas prevalecer ou at que seja alcanado. 5.4.2.1 Enquant o x, Process ar (Do W hil e ... Loop)

Neste caso, o bloco de operaes ser executado enquanto a condio x for verdadeira. O teste da condio ser sempre realizado antes de qualquer operao. Enquanto a condio for verdadeira o processo se repete. Podemos utilizar essa estrutura para trabalharmos com contadores. Inicio Nr = 0 Enquanto Nr <= 100 faa leia X Nr = Nr + 1 fim do enquanto fim 6 LINGUAGEM DE PROGRAMAO C

6.1 A estrutura de um programa em C A estrutura genrica de um programa em C a que se apresenta a seguir, podendo alguns dos elementos no existir: 1. Comandos do pr-processador 2. Definies de tipos
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 82

3. Prottipos de funes - declarao dos tipos de retorno e dos tipos dos parmetros das funes 4. Variveis globais 5. Funes Dever existir sempre uma funo main(). As funes tm a seguinte estrutura: tipo nome_da_funcao(parmetros) { variveis locais instrues em C } Assim, o programa: void main(void) { printf("Eu gosto do C\n"); } contm apenas uma funo (a funo main(), que obrigatria), que no retorna nada (void) e que no tem parmetros (outra vez void). Como instruo da funo temos apenas a chamada a printf(), uma funo da biblioteca standard que escreve no vdeo. Neste caso escreve uma cadeia de caracteres (string). A combinao \n no fim da string indica uma mudana de linha (o carcter new line ou line feed). Notar que no final d cada e instruo existe sempre um terminador - ; Se a chamada a printf() fosse: printf(".\n.1\n..2\n...3\n"); o que apareceria escrito no vdeo seria: . .1 ..2 ...3 6.2 Variveis O C tem pr-definidos os seguintes tipos de dados simples:

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

83

Tipo de dados char unsigned char short int unsigned short int int long int float double

Tamanho (bytes) Limite inferior Limite superior 1 1 2 2 4 4 4 8 -128 0 -32768 0 -231 -231 -3.21038 -1.710308 127 255 32767 65535 +231 - 1 +231 - 1 +3.21038 +1.710308

Geralmente nos sistemas UNIX os tipos int e long int so equivalentes (inteiros de 32 bits). No entanto noutros sistemas possvel que o tipo int seja equivalente a um short int (inteiro de 16 bits). necessrio consultar a documentao do compilador para o sistema em questo. O C no tem um tipo booleano pr-definido, no entanto, poder usarse um char (ou melhor um unsigned char) ou um int para o efeito. O prefixo unsigned pode tambm ser usado com os tipos int e long int . Para declarar variveis em C, de um dado tipo, usa-se a seguinte regra: tipo_das_variveis lista_de_variveis ; Por exemplo: int i, j, k; float x, y, z; char ch; Como curiosidade, vejamos algumas palavras reservadas do C. Auto break case char continue default do double else entry extern float for goto if int long register return sizeof short static struct switch typedef union unsigned while

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

84

6.2.1 Definio de variveis globais As variveis globais, visveis em todas as funes de um programa, declaram-se fora e antes de todas as funes (s so visveis a partir do local da daclarao). Por exemplo: short number, sum; int bignumber, bigsum; char letter; void main(void) { } tambm possvel inicializar as variveis globais no momento da declarao. Usa-se para isso o operador de atribuio = (equivalente ao := do Pascal). Por exemplo: float sum = 0.0; int bigsum = 0; char ch = 'A'; void main(void) { } Poderamos ter feito a mesma coisa de outra forma (mas mais ineficiente): float sum; int bigsum; char ch;

void main(void) { sum = 0.0; bigsum = 0; ch = 'A'; } O C tambm permite mltiplas atribuies (colocar o mesmo valor em vrias variveis ao mesmo tempo): a = b = c = d = 3; O C tem uma palavra chave que permite a definio de novos tipos typedef. Esses novos tipos declaram-se utilizando a regra:
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 85

typedef tipo_j_definido novo_tipo; Um exemplo muito sismples: typedef float real; typedef char letter; real sum = 0.0; /* o mesmo que float */ letter ch = 'A'; /* o mesmo que char */ 6.2.2 Entrada e sada do valor de variveis As funes da biblioteca standard printf() e scanf() permitem escrever no vdeo e ler do teclado, respectivamente, o valor de variveis. Estas funes tm como primeiro parmetro uma string especificando o formato e a ordem das variveis a escrever ou a ler. Seguem-se como parmetros as prprias variveis pela ordem especificada. Na string de formatao indicase o local e o tipo de um valor de varivel atravs do carcter % seguido de uma letra indicadora do tipo. Alguns dos tipos suportados so: ? ? %c - char ? ? %d - int's ? ? %f - float's Um exemplo: %f\n", ch, i, x); printf("Os valores das trs variveis so: %c, %d,

A modificao de formatos, pode ocorrer para especificar largura e numero de casas decimais. Assim o modificador colocado entre o sinal % e o cdigo do formato. Se tivermos %10f informa que o campo ter 10 posies incluindo a parte inteira o ponto e a parte decimal. Se tivermos %12.3f informa que ter 12 posies no total com 3 casas decimais. #include <stdio.h> void main(void) { double item; item = 10.12304; printf("%f\n", item); printf("%5.2f\n", item); } Produz o resultado: 10.123040 10.12

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

86

Notas: As strings em C definem-se entre aspas ". . .", os caracteres simples aparecem entre plicas '.'; o texto normal da string de formatao aparece tal e qual no vdeo, os valores das variveis aparecem nos locais indicados pelo carcter %; seguem-se as prprias variveis que devero aparecer pela mesma ordem e com os tipos indicados na string de formatao. 6.2.3 Operaes aritmticas O C suporta as quatro operaes aritmticas standard nas suas expresses que so representadas pelos smbolos habituais (+, -, *, /). Alm destas operaes aritmticas so suportadas outras. A atribuio representada no C pelo operador =. (No C a atribuio considerada uma operao aritmtica). Exemplos: i = 4; ch = 'y'; Outros operadores aritmticos so os operadores de incremento e decremento, representados respectivamente por ++ e --. Em geral geram cdigo mais eficiente do que a soma ou subtraco de 1 unidade. Assim a atribuio x = x + 1; pode ser substituda simplesmente por x++; Os operadores ++ e -- podem ser psfixos (colocam-se aps a varivel a incrementar ou decrementar) ou podem ser prfixos (colocando-se antes da varivel a incrementar ou decrementar. Quando o operador psfixo a expresso x++ tem como valor o contedo de x antes deste ser incrementado, enquanto que com o operador prfixo a expresso ++x representa j o valor de x depois de incrementado (em ambos os casos x incrementado, o que muda o valor que a combinao x++ ou ++x representa como conjunto). Vejamos o exemplo: int x, y, w; void main(void) { x = ((++z) - (w--)) % 100; } Este programa seria equivalente a: int x, y, w; void main(void) { z = z + 1; x = (z - w) % 100; w = w - 1; } Um outro operador aritmtico do C o operador mdulo - %. Este operador equivalente ao operador mod do Pascal e tem como resultado o resto da diviso inteira. S pode ser utilizado com valores inteiros.
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 87

O operador de diviso /, pode ser usado com inteiros e reais. No entando, se ambos os operandos forem inteiros o resultado a diviso inteira. Assim a atribuio x = 3 / 2; coloca em x o valor 1, mesmo que x seja float ou double. Se quisermos colocar em x o resultado correcto da diviso real (se x for float ou double) deveremos escrever x = 3.0 / 2; ou x = 3 / 2.0; ou melhor ainda x = 3.0 / 2.0; (sem converses de um inteiro para real). O C suporta tambm alguns modos expeditos de escrever atribuies. comum termos de escrever nos programas expresses como i = i + 3; ou x = x * (y + 2); Expresses deste tipo podem ser abreviadas para qualquer coisa como varivel op= expresso; e que equivalente a varivel = varivel op (expresso); Assim podemos reescrever as duas expresses anteriores como i += 3; e x *= y + 2; Note-se que esta ltima expresso vale sempre x = x * (y + 2); e nunca x = x * y + 2. 6.3 Operadores de comparao O operador de teste de igualdade no C ==. Note-se que muito fcil trocar o teste de igualdade pelo operador de atribuio (s um =), o que conduz invariavelmente a erros dificeis de detectar. A seguinte instruo condicional est sintacticamente correcta: if (i = j) ... ,no entanto o que faz copiar o valor de j para i e tem como resultado o valor de j, que interpretado como TRUE se for diferente de 0 e FALSE no caso contrrio. O que se pretendia era comparar i com j com resultado TRUE se fossem iguais. O operador de teste de desigualdade em C !=. Os outros quatro operadores de comparao so iguais ao Pascal: <, <=, > e >=. 6.4 Operadores lgicos Os operadores lgicos servem para combinar resultados de comparaes e so geralmente utilizados nas instrues condicionais. Os trs operadores lgicos do C so: ? ? not - ! ? ? and - && ? ? or - || Existem tambm os operadores & e |, com outro significado. No confundir.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

88

6.5 Precedncias Todos os operadores do C tm um nvel de precedncia. Os operadores de nvel mais elevado so avaliados antes dos operadores de nvel bais baixo. Por exemplo, a expresso a + b * c avaliada como a + (b * c) porque o operador * tem maior precedncia do que o operador +. Os operadores do mesmo nvel de precedncia so geralmente avaliados da esquerda para a direita (h excepes). Assim a - b - c avaliado como (a b) - c e no pela ordem inversa. Na tabela seguinte podem ver-se todos os operadores do C pela ordem decrescente do nvel de prioridade, e tambm a sua associatividade. Operadores () [] -> . ! - ++ -- * & (cast) sizeof */% +<< >> < <= > >= == != & ^ | && || ?: , Associatividade esquerda para a direita direita para a esquerda esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita direita para a esquerda esquerda para a direita

= += -= *= /= %= &= ^= |= <<= >>= direita para a esquerda

Assim a expresso a < 41 && 7 * b < c avaliada como (a < 41) && ((7 * b) < c). Da mesma forma a expresso a = b = fahr / celsius + limit avaliada como a = (b = ((fahr / celsius) + limit)).

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

89

6.6 Intrues 6.6.1 A instruo if A instruo if tem a mesma funo e estrutura de outras linguagens, como por exemplo o Pascal. Assume em C as duas formas bsicas seguintes: if (expresso) instruo; ou if (expresso) instruo_1; else instruo_2; Pode ser facilmente imbricada para o teste de mltiplas condies, como se v no exemplo seguinte: if (expresso) instruo_1; else if (expresso) instruo_2; else instruo_3; Outro exemplo: void main(void) { int x, y, z; ... if (x >= y) { z = x; ... } else { z = y; ... } ... } Notar a colocao das chaves alinhadas em cada bloco.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

90

6.6.2 O operador ?: O operador ?: (condio ternria) , como o nome indica, um operador que necessita de trs operandos, que podem ser resultados de expresses. Em certas situaes pode substituir a instruo if. Tem a forma: expresso_1 ? expresso_2 : expresso_3; Tem como resultado o valor de expresso_2 ou de expresso_3 consoante o valor de expresso_1 for verdadeiro (!= 0) ou falso (== 0) respectivamente. Por exemplo, para colocar o mximo de dois valores numa varivel podemos simplesmente escrever: z = (a > b) ? a : b; que perfeitamente equivalente a: if (a > b) z = a; else z = b; 6.6.3 A instruo switch A instruo switch semelhante instruo case do Pascal, e tal como esta permite uma escolha mltipla de execuo baseada no valor de uma expresso. A sua estrutura geral a seguinte: switch (expresso) { case item_1: instruo_1; break; case item_2: instruo_2; break; ... case item_n: instruo_n; break; default: instruo;

Os items que aparecem em seguida palavra case so valores constantes (no podem ser expresses nem variveis). Se a expresso inicial coincidir com algum desses items executa-se a instruo que vem logo a seguir. Caso contrrio, e se a palavra default estiver presente (no
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 91

obrigatrio), passa-se a essa instruo; se no estiver presente passa-se instruo que se segue instruo switch. A palavra break ( uma instruo do C) faz com que se passe imediatamente instruo que se segue presente (a instruo que vir a seguir a esta instruo switch no programa). Se no estiver presente a execuo continua para a instruo do prximo case, o que no usual em outras linguagens. Podemos considerar o seguinte exemplo: switch (letter) { case 'A': case 'E': case 'I': case 'O': case 'U': nr_de_vogais++; break; case ' ': nr_de_espacos++; break; default: nr_de_consoantes++;

Notar os 5 cinco primeiros casos (vogais), que conduzem mesma instruo. 6.7 Ciclos e Iterao 6.7.1 A instruo while A instruo while semelhante que outras linguagens possuem. No entanto a utilizao de uma expresso genrica como controle pode abrir novas possibilidades. A sintaxe geral da instruo while : while (expresso) instruo; Um exemplo simples: int x=3; void main(void) { while (x > 0) { printf("x = %d\n", x); x--; }
92

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

} escreve no vdeo ... x=2 x=1 x=3

Uma vez que a instruo while pode receber uma expresso geral em vez de apenas uma condio (o valor da expresso interpretada c omo TRUE se for diferente de 0, e como FALSE se for igual a 0), as instrues seguintes so todas legais: while (x--); while (x = x + 1); while (x += 5); Usando qualquer das expresses mostradas, estas so avaliadas sucessivamente at atingirem o valor 0 (FALSE). Outros exemplos: while (x++ != 10); while ((ch = getchar()) != 'q') putchar(ch); O primeiro exemplo leva i at 10. O segundo usa as funes standard do C getchar() e putchar() (declaradas em stdio.h) que lem e escrevem um carcter respectivamente do teclado e para o vdeo. O ciclo while l caracteres do teclado e mostra no vdeo at que o usurio entre um carcter 'q'. 6.7.2 A instruo do-while A instruo do-while testa a expresso que dela faz parte depois de executar as instrues do ciclo e continua enquanto se mantiver em TRUE. O ciclo executado pelo menos 1 vez. A sua sintaxe : do instruo; while (expresso); O seguinte cdigo int x = 3; void main(void)
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 93

{ do printf("x = %d\n", x--); while (x > 0); } escreve ... x=2 x=1 x=3

6.7.3 A instruo for A sintaxe da instruo for diferente do habitual para outras linguagens. Uma instruo for ento definida como: for (expresso1; expresso2; expresso3) instruo; A expresso1 o inicializador, a expresso2 constitui o teste de terminao, e a expresso3 o modificador ( executada em cada ciclo e pode fazer mais do que um simples incremento ou decremento). A instruo for equivalente a um ciclo while com a seguinte construo: expresso1; while (expresso2) { instruo; expresso3; } Por exemplo, o seguinte cdigo int x; void main(void) { } for (x=3; x>0; x--) printf("x = %d\n", x);

escreve no vdeo ... x=2 x=1 x=3

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

94

As prximas instrues for so todas legais: for (x = 0; x <= 9 && x != 3; x++); for (x = 0, y = 4; x <= 3 && y < 9; x++, y += 2); for (x = 0, y = 4, z = 1000; z; z /= 10); Reparar no uso do operador , para executar mltiplas aces. No terceiro ciclo, a execuo continua at que z se torne 0 (FALSE). 6.7.4 break e continue As instrues break e continue permitem-nos controlar melhor a forma de execuo dos ciclos: ? ?break - termina imediatamente a execuo de um ciclo ou da instruo switch ? ?continue - salta imediatamente para a avaliao da expresso de controle do ciclo No exemplo seguinte pretende-se ler uma srie de inteiros do teclado e fazer qualquer coisa com eles. No entanto se o valor lido for 0 terminamos a leitura, se o valor for negativo escrevemos uma mensagem de erro e terminamos o ciclo, e se for maior do que 100 ignoramos esse valor e passamos leitura do seguinte. while (scanf("%d", &value) && value != 0) { if (value < 0) { printf("Valor ilegal\n"); break; } if (value > 100) continue; ...; /* processar value */ ...; } A funo scanf() l valores do teclado e coloca-os em variveis. Retorna o nmero de caracteres lidos se tiver sucesso e 0 no caso contrrio. Assim, se houver uma leitura, ela retorna um valor diferente de 0, que interpretado como TRUE.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

95

6.8 Erros Comuns em C Antes de vermos as caractersticas finais da linguagem C vamos apontar os erros mais comuns cometidos pelos programadores principiantes. Alguns dos erros descritos so cometidos muito comummente pelos programadores. 6.8.1 Atribuio (=) versus comparao (==) Um erro comum e difcil de detectar provm do facto de uma atribuio ser considerada uma expresso em C e alm disso qualquer expresso ter um valor lgico (TRUE ou FALSE). Assim a seguinte instruo sintacticamente correcta mas frequentemente no isso o que o programador pretende: if (a = b) { ... }; Na instruo de cima o valor de b atribudo a a e o if avaliado como verdadeiro se esse valor for diferente de 0. O que geralmente se pretende numa instruo como aquela ser comparar o valor de a com o valor de b: if (a == b) { ... }; 6.8.2 Passagem de endereo Certas funes so escritas esperando um apontador em alguns dos seus argumentos, como vimos no captulo anterior. frequente o programador esquecer-se de fazer corresponder a esses argumentos um endereo. Se esses argumentos forem apontadores para qualquer tipo, excepto arrays, o programador dever usar o operador &, que fornece o endereo de uma varivel. Exemplo: int k; struct coord p1; float f[100]; void fn1(int *i, struct coord *p, float *ar) { ... } ... fn1(&k, &p1, f); array ... /* chamada funo fn1() - notar a passagem de um */

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

96

6.8.3 Falta do operador () na chamada de uma funo Quando se est habituado a programar em Pascal frequente o esquecimento dos parntesis curvos na chamada de uma funo sem argumentos. Em C, todas as chamadas a funes tm de incluir os parntesis curvos: void fn2(void) { ... } ... fn2( ); ... /* chamada funo fn2() */

6.8.4 O C case sensitive Os caracteres minsculos e maisculos so diferentes no C, ao contrrio do que sucede noutras linguagens. Nomeadamente as palavras chave tm de ser escritas com caracteres minsculos. 6.8.5 O ponto e vrgula (;) termina as instrues Todas as instrues devero ser terminadas com ;, exceto a instruo composta, ou seja o ; um terminador e no um separador de instrues. No entanto, o compilador detecta facilmente este erro. 6.9 Entrada e Sada 6.9.1 Operaes bsicas de entrada/sada As funes mais entrada/sada so: bsicas que permitem efetuar operaes de

?? int getchar(void); - l apenas um carcter de stdin int putchar(char ch); - coloca o carcter ch em stdout

Estas funes, bem como todas as outras que dizem respeito a operaes de entrada/sada suportadas pela biblioteca standard do C, esto declaradas no arquivo de incluso stdio.h.

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

97

Exemplo: ... int ch; ... ch = getchar(); putchar((char) ch); ... #include <stdio.h>

6.9.2 Entrada/sada formatadas J temos visto, em exemplos anteriores, a escrita de texto e valores, com um formato especificado, no terminal utilizando a funo printf(). Vamos ver a utilizao desta funo em maior detalhe a seguir. Veremos tambm a funo inversa, que l valores do teclado diretamente para variveis - a funo scanf(). 6.9.2.1 Pri nt f

A funo, tambm declarada em stdio.h, definida como se mostra a seguir: int printf(char *format, ...); - Escreve em stdout a sua lista de argumentos (especificada em ...) de acordo com um formato especificado na string format; retorna o nmero de caracteres escrito. Especificador de formato (a seguir a %) c i ou d o Tipo char int int Resultado um nico carcter nmero inteiro nmero em octal nmero em hexadecimal (com letras minsculas ou maisculas) nmero inteiro sem sinal

x ou X

int

unsigned int

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

98

char * double ou float double ou float double ou float short long long double -

escreve o string terminado com \0 nmero real com parte decimal nmero real escrito em notao cientfica equivalente a e ou f ( escolhido o que ocupar menos espao) nmero inteiro curto nmero inteiro longo nmero real com parte decimal escreve o carcter %

e ou E

g ou G

hi ou hd li ou ld Lf %

Em geral os prefixos h e l representam os modificadores short e long, respectivamente. Entre o carcter % e o carcter especificador de formato podemos colocar ainda os seguintes indicadores: ? ?(sinal menos) : faz uma justificao esquerda; ? ?+ (sinal mais) : o valor a escrever contm sempre um sinal (- ou +); ? ?valor inteiro : tamanho em caracteres do valor a escrever (se o valor para ser escrito ocupar mais caracteres do que o especificado, no truncado); ? ?indicador na forma caracteres do valor algarismos decimais). Alguns exemplos: num1.num2 : num1-tamanho total em a escrever; num2-preciso (nmero de

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

99

printf("%-2.3f\n", 17.23478); produz no terminal a sada: 17.234

printf("VAT = 17.5%%\n"); que escreve: 6.9.2.2 Scanf VAT = 17.5%

A funo scanf() definida em stdio.h como se segue: int scanf(char *format, ...); - l caracteres de stdin e coloca os valores lidos e convertidos nas variveis cujos endereos so passados na lista de argumentos a seguir indicao do formato; retorna o nmero de caracteres lidos e convertidos. A indicao do formato muito semelhante especificada para printf(). A nica excepo diz respeito aos especificadores f, e ou g, que aqui se referem exclusivamente a valores do tipo float ( os valores lidos e convertidos devero ser passados a apontadores para variveis do tipo float). Para especificar valores do tipo double devero ser usados os especificadores lf, le ou lg. Como j se disse a lista de argumentos, que iro receber os valores lidos, dever conter apenas apontadores ou endereos de variveis. Por exemplo: scanf("%d", &i); i. para ler um valor inteiro do teclado e coloc-lo na varivel de tipo int

No caso de arrays (strings , por exemplo) o prprio nome pode ser directamente usado na lista de argumentos, uma vez que representa o endereo da 1 posio do array. Veja-se o exemplo: char str[80]; ... scanf("%s", str); 7 DESENVOLVIMENTO DE SOFTWARE

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

100

BIBLIOGRAFIA

8.1 Livros IDOETA, I. V., CAPUANO, F. G., Elementos da Eletrnica Digital, Editora rica; FARRER, H., Algoritmos Estruturados, Editora Guanabara; GUIMARES, Lages; Algoritmos e Estruturas de Dados, LTCLivros Tcnicos e Cientficos Ed. GUIMARES, Lages; Introduo Cincia da Computao, LTCLivros Tcnicos e Cientficos Ed. TREMBLAY, Jean-Paul; Cincia dos Computadores - Uma Abordagem Algortmica. APRENDENDO C++ - Kris Jamsa, Ph. D. ISBN - 85.346.0953-5 C COMPLETO E TOTAL 3 Edio - Herbert Schildt - ISBN 85.346.0595-5 Introduo Organizao de Computadores - Mrio Monteiro - Editora LTC

1. TANEMBAUM, A. Organizao Estruturada de Computadores (3 edio). Ed. Prentice-Hall do Brasil. 2. MONTEIRO, M. Introduo Organizao de Computadores (2 ou 3 edies). Ed. Livros Tcnicos e Cientficos. 3. IDOETA, I. V. e CAPUANO, F. G. Elementos da Eletrnica Digital. Ed rica. 4. FARRER, H. Algoritmos Esturuturados. Ed Guanabara. 5. GUIMARES, A. M. e LAGES, N. A. C. Algoritmos e Estruturas de Dados. Ed. Livros Tcnicos e Cientficos. 6. GUIMARES, A. M. e LAGES, N. A. C. Introduo Cincia da Computao. Ed. Livros Tcnicos e Cientficos. 7. TREMBLAY, J. P. e BUNT, R. B. Cincia dos Computadores Uma Abordagem Algortmica. Ed. Mc Graw-Hill. 8.2 Revistas Todas as revistas e cadernos de jornais publicados no Brasil do nfase aos microcomputadores PC. A BYTE (tanto a edio brasileira quanto a americana) tem contedo mais tcnico. A PC Magazine apresenta muitos testes comparativos de produtos. Windows Computing apresenta muitos artigos sobre software relativo ao Windows. A PC World mais voltada para o usurio final (usurio no tcnico). A Info EXAME tem maior nfase em gerenciamento (o pblico tpico da EXAME). Existem ainda revistas com
Introduo Cincia da Computao - Prof. Bruno Clemente Guingo 101

cobertura especfica sobre Internet, que podem ser recomendadas aos interessados. No Brasil, Internet World e .Net so as principais; nos EUA, leiam a Wired. BYTE Brasil PCMagazine Brasil Windows Computing (Brasil) Info EXAME (Brasil) PCWorld (Brasil) ZDNet (Brasil) BYTE (USA) PCMagazine (USA) ZDNet (USA) 8.3 Cadernos O Globo - Informtica etc. - publicado s 2 feiras Jornal do Brasil - Caderno Informtica - publicado s 2 feiras 8.4 Dicionrio FOLDOC - The Free On-Line Dictionary Of Computing 8.5 Enciclopdia sobre computadores PC Webopaedia

8.6 Principais Fabricantes de Processadores e Sistemas


Operacionais IBM, Intel, AMD, AMD Brasil, Cyrix Sun, HP, Microsoft, Microsoft Brasil

Introduo Cincia da Computao - Prof. Bruno Clemente Guingo

102

S-ar putea să vă placă și