Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 PSA - Material de Apoio APOSTILA DE INTRODUÇÃO À CIÊNCIA DOS COMPUTADORES Versão 1.0 José Francisco de Magalhães Netto jnetto@dcc.fua.br Raimundo da Silva Barreto barreto@dcc.fua.br Última Atualização 26/01/99 por Ruiter Braga Caldas - ruiter@dcc.fua.br 2 SUMÁRIO INTRODUÇÃO...................................................................................................................................................3 1. NOÇÕES DE COMPUTADORES .............................................................................................................4 1.1 EVOLUÇÃO HISTÓRICA DA COMPUTAÇÃO....................................................................................4 1.2 GERAÇÕES DE COMPUTADORES .....................................................................................................5 1.3 ESTRUTURA BÁSICA DE UM COMPUTADOR..................................................................................6 1.4 SISTEMA OPERACIONAL E TRADUTORES .....................................................................................9 1.5 CONVERSÃO DE NÚMEROS DECIMAIS EM BINÁRIOS E VICE-VERSA ...................................10 1.5.1. CONVERSÃO DE NÚMEROS INTEIROS DECIMAIS EM NÚMEROS BINÁRIOS ..........10 1.5.2. CONVERSÃO DE NÚMEROS INTEIROS BINÁRIOS EM NÚMEROS DECIMAIS ................10 1.5.3. CONVERSÃO DE NÚMEROS FRACIONÁRIOS DECIMAIS EM NÚMEROS BINÁRIOS.....11 1.5.4. CONVERSÃO DE NÚMEROS FRACIONÁRIOS BINÁRIOS EM NÚMEROS DECIMAIS.....11 2. ALGORITMOS.............................................................................................................................................12 2.1. CONSTRUÇÃO DE ALGORITMOS....................................................................................................12 2.2. DEFINIÇÃO DE ALGORITMOS .........................................................................................................14 2.3. REFINAMENTOS SUCESSIVOS.........................................................................................................15 2.4. ALGORITMOS ESTRUTURADOS.....................................................................................................15 2.5. O PORTUGOL.......................................................................................................................................17 2.6. IDENTIFICADORES.............................................................................................................................17 2.7. CONSTANTES ......................................................................................................................................17 2.8. VARIÁVEIS...........................................................................................................................................18 2.9. COMENTÁRIOS ...................................................................................................................................18 2.10. EXPRESSÕES ARITMÉTICAS..........................................................................................................18 2.11. EXPRESSÕES LÓGICAS ...................................................................................................................19 2.12. EXPRESSÕES LITERAIS...................................................................................................................19 2.13. COMANDO DE ATRIBUIÇÃO..........................................................................................................19 2.14. COMANDOS DE ENTRADA E SAÍDA.............................................................................................20 2.15. ESTRUTURA SEQÜENCIAL............................................................................................................20 2.16. ESTRUTURA CONDICIONAL ..........................................................................................................21 2.17. ESTRUTURA DE REPETIÇÃO..........................................................................................................21 3. CODIFICAÇÃO PASCAL............................................................................................................................23 3.1 ESTRUTURA DE PROGRAMAS PASCAL..........................................................................................23 3.1.1 IDENTIFICADORES.......................................................................................................................23 3.1.2 CONSTANTES ................................................................................................................................23 3.1.3 VARIÁVEIS.....................................................................................................................................24 3.1.4 COMENTÁRIOS .............................................................................................................................24 3.1.5 EXPRESSÕES..................................................................................................................................24 3.1.6 COMANDO DE ATRIBUIÇÃO......................................................................................................27 3.1.7 COMANDOS DE ENTRADA E SAÍDA.........................................................................................27 3.1.8 ESTRUTURA CONDICIONAL ......................................................................................................27 3.1.9 ESTRUTURA DE REPETIÇÃO......................................................................................................28 3.1.10 REGRAS DE SINTAXE ................................................................................................................30 3.1.11 EXEMPLO DE CODIFICAÇÃO DE UM ALGORITMO EM PORTUGOL NA LINGUAGEM PASCAL....................................................................................................................................................32 4. LISTA DE EXERCÍCIOS.............................................................................................................................33 A. Noções de Computadores .........................................................................................................................33 B.Conversão de Números Decimais em Binários e Vice-Versa ....................................................................35 C. Introdução aos Algoritmos........................................................................................................................36 D. Algoritmos ................................................................................................................................................37 6 . EXERCÍCIOS RESOLVIDOS.....................................................................................................................44 3 INTRODUÇÃO O computador está cada vez mais presente no dia a dia de todos nós. Cada vez mais áreas são abrangidas pela sua atuação, mudando a forma com que as pessoas trabalham e também a maneira como as pessoas se relacionam entre si através da ampla disseminação das redes de computadores. Este texto é apenas uma pequena introdução neste vasto mundo da Informática. No âmbito da Universidade do Amazonas as disciplinas Introdução à Ciência dos Computadores- IEC081 e Introdução ao Processamento de Dados-IEC981, oferecidas pelo Departamento de Ciência da Computação da Universidade do Amazonas-DCC/UA, visam dar aos alunos provenientes de diversos cursos um primeiro contato com o computador. Este texto pretende servir de auxílio para atingir o objetivo de mostrar conceitos básicos sobre computadores. 4 1. NOÇÕES DE COMPUTADORES1.1 EVOLUÇÃO HISTÓRICA DA COMPUTAÇÃO A Tabela 1 mostra um histórico sucinto da maneira como o Homem calcula e dos meios que utilizou para facilitar este processo. Dedos (origem do sistema decimal) Seixos Ábaco 1617 John Napier Ossos de Napier. Régua de cálculo. 1633 Wilhelm Schickard Primeira calculadora mecânica 1642 Blaise Pascal Calculadora mecânica de rodas dentadas de 10 posições 1694 Gottfried Wilhelm von Leibnitz Máquina de multiplicar totalmente mecânica 1728 Basile Bouchon Tear com desenhos programados por folha giratória de papel perfurado 1859 Charles Babbage Máquina para computar tabelas matemáticas 1875 Frank Baldwin Máquina para somar, subtrair, multiplicar e dividir a partir de móveis acionados no painel. 1887 Dorr Feld Computômetro – máquina dirigida por chaves 1890 W. Burroughs Primeira máquina de somar e imprimir 1890 Herman Holerith Perfuradora de cartões – registrava e classificava números através de furos em cartões; a leitura era feita através de pinos que se encaixavam em localizações específicas. Criada para utilização no censo americano. Empresa origem da IBM (1924) 1920 Caixas registradoras elétricas e máquinas com teclado 1946 ENIAC (Eletronic Integrator and Calculator), primeiro computador digital eletrônico: 18000 válvulas, 1500 relés, resistores, capacitores, indutores, 200 kW de potência. Memória para até 20 números de 10 dígitos cada um. Programação através de fios e pinos (painel de telefonista). Apenas dados armazenados na memória. 1948 EDVAC (Electronic Discrete Variable Automatic Computer), baseado na proposta de J. Von Neumann de uma máquina que armazenava na memória dados e instruções. 1949 UNIVAC, primeiro computador em escala comercial, utilizado com sucesso no censo dos EUA em 1951. Tabela 1: Breve Histórico da Computação 5 1.2 GERAÇÕES DE COMPUTADORES É comum referenciar-se aos computadores com relação ao seu grau de evolução tecnológica em função de gerações. A Tabela 2 dá um resumo das gerações de computadores. Década Geração Características 1940 1a Circuitos eletromecânicos e válvulas (ENIAC, EDVAC, UNIVAC). 1950 2a Transistores (Bell Telephone Laboratories, 1948), dispositivos menores com menor consumo de potência, mais robustos e confiáveis. 1960 3a Circuitos integrados – integração de vários transistores em uma única embalagem (chip) com aproximadamente as mesmas dimensões de um transistor. 1970 4a Milhares de transistores em uma única pastilha VLSI (Very Large Scale Integration). Tabela 2: Gerações de Computadores A evolução tecnológica gera computadores cada vez mais baratos, potentes e rápidos. Com isso cada vez mais coisas podem ser realizadas pelos computadores. 1.3 FORMAS EM QUE SE APRESENTAM OS COMPUTADORES Os computadores apresentam-se em diversas formas e estão em evolução contínua. A Tabela 3 dá um breve resumo destas formas. Forma Características Supercomputador Mais potentes, em geral utilizam multiprocessadores. Usado para simulações científicas complexas (Ex.: previsão de clima). Fabricante: IBM, Cray. Mainframe Grandes de computadores com alta capacidade de processamento. Em geral são usados para aplicações comerciais e industriais. Fabricante: IBM. Minicomputador Intermediário entre mainframes e microcomputadores. Fabricantes: IBM, DEC, HP. Estação de Trabalho (Workstation) Mais poderosos que os microcomputadores. Rodam o sistema operacional Unix ou uma variação. Em geral usam a tecnologia RISC (Reduced Instruction Set Computer). Fabricantes: Sun, SiliconGraphics. Microcomputador Pequenos computadores com múltiplas finalidades. Fabricantes: IBM, Apple. Tabela 3: Formas dos Computadores 6 1.4 ESTRUTURA BÁSICA DE UM COMPUTADOR O computador é uma máquina programável capaz de processar informações com grande rapidez. A Figura 1 mostra a estrutura básica de um computador: unidades de entrada, unidade central de processamento, memória e unidades de saída. As unidades de entrada permitem ao computador acessar informações do mundo externo. As informações são traduzidas em códigos que possam ser entendidos pela Unidade Central de Processamento. Exemplos de dispositivos de entrada são: teclado, mouse, tela touchscreen, leitora de cartão magnético, joystick, caneta ótica, scanner de imagens, scanner de código de barras, driver de disquete, driver de CD-ROM (Compact Data - Read Only Memory), disco rígido (hard disk ou HD), leitora de fita magnética, leitora de cartão perfurado, câmera fotográfica digital, câmera de video, sensores, etc. As unidades de saída convertem impulsos elétricos, permitindo a saída de informações para meios externos e possibilitando sua visualização e armazenamento por diferentes periféricos ou, ainda, a utilização de dados por outro computador. Exemplos de dispositivos de saída são: impressora, plotadora, monitor ou vídeo, driver de disquete (31/2 e 51/4 pol), disco rígido (hard disk ou HD), gravadora de fita magnética, emissor de som, controladores, etc. A Unidade Central de Processamento (UCP) é formada pela Unidade de Controle e Unidade Lógico-Aritmética (ULA). A Unidade de Controle gerencia todos os recursos do computador e contém as instruções da UCP para executar comandos. A Unidade Lógico- Aritmética realiza operações aritméticas (adição, subtração, multiplicação, divisão) e operações lógicas (conjunção, disjunção e negação). A Unidade Central de Processamento também é conhecida pela sigla inglesa CPU (Central Processor Unit). A memória principal do computador é conhecida por RAM (Random Access Memory). Na memória principal estão as instruções que estão sendo executadas e os dados necessários a sua execução. A memória principal também chamada de memória de trabalho ou memória temporária, é uma memória de leitura e escrita (read/write). Suas características são: rápido acesso (da ordem de nanosegundos em computadores mais modernos), acesso aleatório (para acessar uma posição de memória o computador vai diretamente a esta posição através do endereço) e volatilidade (em caso de falta de energia elétrica ou desligamento do computador há perda de informações). 7 Figura 1: Estrutura básica de um computador O computador possui também uma memória chamada ROM (Read Only Memory) onde são guardadas informações para inicializar o computador, verificando a memória principal (seu tamanho e integridade) e os periféricos e, também, ativando o sistema operacional. Esta memória é não volátil (isto é, não se perde quando o computador é desligado ou há uma variação de tensão), e em geral é gravada pelo fabricante e com pequena capacidade de armazenamento. Depois de gravada a ROM não pode ser mais alterada pelo usuário. A memória secundária ou memória auxiliar é usada para armazenar grandes quantidades de informações. Um exemplo comum de memória secundária é o disco rígido. O hardware de um computador consiste dos componentes físicos, tais como a UCP (Unidade Central de Processamento), memória e os dispositivos de entrada/saída (comumente chamados de periféricos) que formam o sistema. O software refere-se aos programas usados para controlar a operação do hardware para solucionar problemas. A unidade básica de informação é o bit (binary digit). O bit pode ter valor 0 (zero - desligado) ou 1 (um - ligado). Esta representação não é usual para seres humanos por envolver grandes seqüências de dígitos binários para representar números decimais.Entretanto esta representação pode ser usada convenientemente por computadores usando circuitos eletrônicos pois os dois valores básicos (0 e 1) são representados de modo confiável e eficiente, pela presença ou ausência de correntes elétricas, cargas elétricas ou campos magnéticos nos circuitos. Chama-se byte um conjunto de 8 bits. Bytes são usados para representar informações tais como caracter, número e outros tipos de dados. É comum se referir aos seus múltiplos: kilobyte, megabyte, gigabyte e terabyte. Memória Unidade de Entrada Unidade de Controle Unidade de Saída Unidade Lógica e Aritmética Unidade Central de Processamento 8 1 Kilobyte = 210 bytes = 1024 bytes 1 Megabyte = 1024 kilobytes = 1048576 bytes 1 Gigabyte = 1024 Megabytes = 1048576 kilobytes = 1073741824 bytes 1 Terabyte = 1024 Gigabytes O ASCII (American Standard Code for Information Interchange), Figura 2, é o código normalmente usado para representar caracteres em computadores. Ele é constituído de 95 caracteres de impressão (gráficos) e 33 caracteres de controle, que são usados principalmente em transmissão de dados e para controle de equipamentos de impressão. Por exemplo os caracteres a maiúsculo e minúsculo são representados em ASCII pelas seqüência Binário Decimal A 01000001 65 a 01100001 97 A memória do computador está subdividida em palavras, que é a menor quantidade de informação endereçável. Uma palavra de computador é um conjunto de bytes. O tamanho da palavra do computador é uma escolha de arquitetura, variando de máquina para máquina. Por exemplo no microprocessador Pentium a palavra é de 32 bits (ou 4 bytes). BIT menos significativo BIT mais 0 1 2 3 4 5 6 7 significativo OOOO OOO1 OO1O OO11 O1OO O1O1 O11O O111 0 OOOO NUL DLE SP 0 @ P ` p 1 OOO1 SOH DC1 ! 1 A Q a q 2 OO1O STX DC2 " 2 B R b r 3 OO11 ETX DC3 # 3 C S c s 4 O1OO EOT DC4 $ 4 D T d t 5 O1O1 ENQ NAK % 5 E U e u 6 O11O ACK SYN & 6 F V f v 7 O111 BEL ETB ' 7 G W g w 8 1OOO BS CAN ( 8 H X h x 9 1OO1 HT EM ) 9 I Y i y A 1O1O LF SUB * : J Z j z B 1O11 VT ESC + ; K [ k { C 11OO FF FS , < L \ l | D 11O1 CR GS - = M ] m } E 111O SOH RS . > N ^ n ~ F 1111 SI US / ? O _ o DEL Figura 2: Código Padrão Americano para Intercâmbio de Informações (ASCII) 9 1.5 SISTEMA OPERACIONAL O sistema operacional (SO) gerencia os recursos (hardware e software) do computador, disponibilizando-os de maneira amigável ao usuário. O SO tem como objetivo colocar uma camada de software sobre o hardware para gerenciar todas as partes do sistema e apresentá- las ao usuário como uma interface, uma abstração, uma máquina mais fácil de entender e programar. Ex.: DOS, UNIX, Linux, Windows95, VM, VSE, etc. As funções do sistema operacional são: gerenciamento de memória, gerenciamento de processos, gerenciamento de E/S (entrada/saida) e gerenciamento de arquivos. 1.6 PROGRAMAS DE COMPUTADORES E TRADUTORES Um programa de computador é uma coleção de instruções que, quando executadas pela CPU de um computador, cumpre uma tarefa ou função específica. Nos primeiros computadores a programação era feita diretamente por iniciação direta de comandos ligando e desligando interruptores e por meio de ligação direta de fios em circuitos. Este processo oneroso e lento é atualmente substituido pela introdução dos tradutores. Os computadores trabalham internamente com instruções em linguagem de máquina. Estas linguagens são chamadas de baixo nível por serem entendidas facilmente apenas pelas máquinas. Tipicamente linguagens de máquinas são compostas de 50 a 300 instruções que fazem basicamente mover dados pela máquina e realizam comparações e operações aritméticas. Ex.: ADD A, B Os tradutores permitem que um programa escrito em uma linguagem de alto nível (Pascal, C, Fortran, etc) seja entendido e executado pelo computador. As linguagens são consideradas de alto nível quando apresentam algumas fortes semelhanças com a maneira pela qual o Homem se expressa. Os tradutores dividem-se em interpretadores e compiladores. No programa interpretador uma instrução é decodificada e executada, através de um ciclo repetitivo. A desvantagem é que isso leva um tempo de execução maior. No programa compilador o programa fonte é compilado através de diversas fases: Faz-se uma análise léxica do programa-fonte; depois uma análise sintática; gera-se um código intermediário; procura-se otimizar o código; finalmente é gerado o código objeto, que é chamado programa-objeto. O programa objeto está pronto para ser executado quando for carregado na memória principal e ativado pelo sistema operacional. 10 1.7 CONVERSÃO DE NÚMEROS DECIMAIS EM BINÁRIOS E VICE- VERSA O computador é uma máquina binária pois internamente trabalha com números na base 2 (base binária), reconhecendo apenas os dígitos 0 e 1, conhecidos como bits. O Homem comumente utiliza o sistema de numeração decimal, ou seja números formados por 10 dígitos que são o 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Nas seções subseqüentes aprenderemos a transformar números decimais em binários e vice- versa. 1.5.1. CONVERSÃO DE NÚMEROS INTEIROS DECIMAIS EM NÚMEROS BINÁRIOS O método utilizado é conhecido como “método das divisões sucessivas”. Tomaremos como exemplo o número decimal 12 e encontraremos seu equivalente em binário. Passos: 1.Realizam-se divisões inteiras sucessivas do número decimal original pela base 2 até que o quociente seja menor do que o divisor 2. 12 |_2_ 0 6 |_2_ 0 3 |_2_ 1 1 1 < 2 Verdadeiro 2.Ao encontrar a condição de parada, o número binário equivalente é dado tomando-se o último quociente e os demais restos na ordem inversa em que foram calculados. Logo o número binário equivalente é 1100 Dizemos então que: (12)10 = (1100)2 1.5.2. CONVERSÃO DE NÚMEROS INTEIROS BINÁRIOS EM NÚMEROS DECIMAIS Tomemos o caso do número inteiro binário 1100. Podemos colocá-lo na forma: (1100)2 = 1 X 23 + 1 X 22 + 0 X 21 + 0 X 20 = 1 X 8 + 1 x 4 + 0 X 2 + 0 X 1 = 8 + 4 = (12)10 11 1.5.3. CONVERSÃO DE NÚMEROS FRACIONÁRIOS DECIMAIS EM NÚMEROS BINÁRIOS O método utilizado é conhecido como “método das multiplicações sucessivas”. Tomaremos como exemplo o número decimal 0.625 e encontraremos seu equivalente em binário. Passos: 1.Realizam-se multiplicações sucessivas do número fracionário decimal original pela base 2 até que o quociente seja igual a 1. 0.625 X 2 = 1.250 2.Ao encontrar um resultado maior que 1, toma-se no próximo cálculo a parte fracionária. Caso contrário prossiga. 0.250 X 2 = 0.500 0.500 X 2 = 1.000 1.000 = 1 Verdadeiro 3. A condição de parada é encontrarmos um produto igual a 1. Os dígitos na ordem em que foram gerados correspondem à parte fracionária do número binário convertido. Logo o número binário equivalente é 0.101 Dizemos então que: (0.625)10 = (0.101)2 1.5.4. CONVERSÃO DE NÚMEROSFRACIONÁRIOS BINÁRIOS EM NÚMEROS DECIMAIS Tomemos o caso do número fracionário binário 0.101, podemos colocá-lo na forma: (0.101)2 = 1 X 2-1 + 0 X 2-2 + 1 X 2-3 = 1 + 0 + 1 21 22 23 = 0.5 + 0.125 = (0.625)10 12 2. ALGORITMOS O conceito de algoritmo é central tanto na programação de computadores quanto na própria ciência da computação. Quando se constrói algoritmos, geralmente este será executado por uma outra pessoa ou por uma máquina. Daí a necessidade de que estes sejam expressos da forma mais clara e objetiva possível a quem vai executá-lo. Niklaus Wirth, o inventor da linguagem de programação Pascal apresenta a programação estruturada como “a arte ou técnica de construir e formular algoritmos de forma sistemática”. A programação pode ser vista como formulações concretas de algoritmos abstratos, em outras palavras, existe uma máquina que pode executar um programa enquanto que algoritmos, no sentido mais amplo da palavra, não. 2.1. CONSTRUÇÃO DE ALGORITMOS Antes de ser apresentado a definição de algoritmos, é interessante que se resolva alguns exercícios, apresentação de conceitos e a partir destes pode-se construir uma definição. Exercício 1: A troca de conteúdos entre dois recipientes Supor a existência de dois recipientes tendo cada um líquido. Se os dois líquidos forem juntados uma explosão ocorrerá. Como transferir o conteúdo de um recipiente para o outro e vice-versa sem que ocorra uma explosão? Solução: As restrições deste exercício só apontam para o caso da explosão, caso os dois líquidos sejam juntados, e não fala nada sobre a forma de transferência entre os dois líquidos. Para fazermos esta transferência precisaremos de um terceiro recipiente. Chamaremos cada recipiente de A, B e C. A solução pode ser expressa da seguinte forma: 1) Colocar o conteúdo do recipiente A no recipiente C. 2) Colocar o conteúdo do recipiente B no recipiente A. 3) Colocar o conteúdo do recipiente C no recipiente B. Repare que a solução foi expressa em termos de uma seqüência de ações. A partir da ação inicial, cada ação sempre segue uma outra ação, caracterizando uma ordem de execução e, se esta ordem não for mantida, poderemos não chegar ao resultado esperado. A definição de uma ação, neste contexto, pode ser a de um acontecimento que ocorre num período de tempo finito e que produz algum efeito. Note que, nesta definição, só é interessante as ações que terminam em um tempo finito, as outras não interessam. Cada ação produz um efeito. Quando se tem uma seqüência de ações surge o conceito de efeito intermediário, que seria o efeito produzido por cada ação, e efeito total (ou acumulado), que seria a junção de todos os efeitos intermediários. 13 Exercício 2: O problema do homem e suas três cargas Um homem precisa atravessar um rio com um barco que possui capacidade de carregar apenas ele mesmo e mais uma de suas três cargas, que são: uma onça, uma paca e maço de alface. O que o homem deve fazer para conseguir atravessar o rio com suas três cargas e sem perdê-las? Solução: Mais uma vez, antes de começarmos a escrita do algoritmo é interessante analisarmos as restrições do exercício. O homem não deve deixar em uma mesma margem do rio: (a) a onça e a paca (senão a onça devorará a paca) e (b) a paca e o maço de alface (senão a paca devorará a alface). O resto tudo é possível. É importante notar que nada foi falado sobre quantas viagens o homem poderia fazer. Tendo em vista estas restrições já é possível buscar a solução. Inicialmente simplesmente não podemos levar nem a onça e nem a alface, senão uma restrição seria violada. E daí por diante continuaremos sempre tentado nunca violar as restrições. A solução pode ser através de um gráfico e/ou descrição textual. Vamos apresentar em sala de aula as duas formas. É importante notar que esta solução tem uma segunda alternativa e que também chega ao resultado final. O desenvolvimento desta alternativa fica como exercício. Mais uma vez, este algoritmo foi expresso como uma seqüência de ações e, antes que qualquer linha tivesse sido escrita, foi necessário fazer uma análise para identificar as restrições do exercício, ou seja, o que pode e o que não pode ser feito. Exercício 3: O problema da torre de hanoi A torre de hanoi consiste de três hastes (a, b e c), uma das quais serve de suporte para três discos de tamanhos diferentes (1, 2 e 3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, contanto que nunca seja colocado um disco maior sobre um disco menor. O objetivo é transferir os três discos para a outra haste. Solução: A única restrição é a de que um disco maior não pode ficar sobre um disco maior. A solução será dada somente de forma gráfica. A descrição textual ficará como exercício. Exercício 4: Dona de casa descascando batatas Como um observador relataria uma dona de casa descascando batatas para o jantar. 14 Solução: Dependendo do observador, o relato poderia ser de várias formas possíveis. Por exemplo: 1) Traz a cesta com batatas do porão 2) Traz a panela do armário 3) Descasca as batatas 4) Devolve a cesta ao porão Suponhamos que este seja o relato em um certo dia. No dia seguinte a dona de casa novamante descasca batatas para o jantar e o observador descreve um relato que é idêntico ao primeiro. Podemos dizer que este relato descreve o mesmo evento? Evidentemente não, pois trata-se de eventos distintos, ocorridos em dias diferentes, com batatas diferentes e até a mesma dona de casa não é a mesma (está um dia mais velha, por exemplo). Entretanto, estes dois eventos apresentam o mesmo padrão de comportamento. Considerando um outro exemplo: nas diferentes execuções de n2, para diferentes valores de n, podemos reconhecer o mesmo padrão de comportamento e o nome que damos a todos estes eventos é “elevar um número ao quadrado”. 2.2. DEFINIÇÃO DE ALGORITMOS Após estes exercícios de construção de algoritmos já estamos em condições de criarmos uma definição para algoritmos. Existem algumas definições para algoritmos. Pode-se dizer que algoritmo é uma seqüência de ações para chegar a um objetivo bem definido. Ou que, algoritmo é a descrição de um padrão de comportamento, expresso em termos de um repertório bem definido e finito de ações primitivas, das quais damos por certo que elas podem ser executadas. Uma terceira definição diz que, um algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações. Das definições acima vemos que as ações têm um caráter imperativo e por isso, muitas vezes, são chamadas de comandos. Para introduzirmos novos conceitos vamos voltar ao exercício da dona de casa descascando batatas. Algumas vezes as donas de casa colocam um avental. Vamos supor que a dona de casa usa um critério racional para saber se deve ou não usar o avental, e que este critério é se ela está usando ou não uma roupa branca. Neste caso podemos escrever um algoritmo que cubra estes dois eventos. Um outro detalhe sobre este algoritmo está no número de batatas a serem descascadas. Ora, em um dia podem ser descascadas cinco batatas, no dia seguinte sete batatas, no terceiro dia quatro batatas e assim sucessivamente, sendo que a cada dia a quantidade de batatas pode variar. Poderemos suprir estas duas situações se usarmos duas novas estruturas: a estrutura de seleção e a de repetição. O novo algoritmo pode ser modificado para: 15 1) Trazer o cesto com batatasdo porão 2) Trazer a panela do armário 3) Se a roupa é clara então colocar o avental 4) enquanto número de batatas é insuficiente faça 4.1) descasque uma batata 5) devolver a cesta ao porão A quarta ação poderia ser feita de uma outra forma, como em: 4) repetir até que número de batatas seja suficiente 4.1) descasque uma batata Acabamos de apresentar as três estruturas que compõem os algoritmos: seqüência, seleção e repetição. Todo e qualquer algoritmo é sempre desenvolvido através do uso de apenas estas três estruturas. Quando descrevemos algoritmos utilizando estas estruturas de controle os mesmos tornam-se mais claros e elegantes, além de serem mais gerais do que a simples descrição de ações. 2.3. REFINAMENTOS SUCESSIVOS Na vida quotidiana, os algoritmos são encontrados freqüentemente: instruções para se utilizar um aparelho eletrodoméstico, uma receita para o preparo de algum prato, o guia de preenchimento da declaração do imposto de renda, a regra para a determinação dos máximos e mínimos de funções por derivadas sucessivas, dentre várias outras. Um algoritmo é considerado completo se seus comandos forem do entendimento de seu destinatário. Um comando que não for do entendimento do destinatário tem que ser desdobrado em novos comandos, que constituirão um refinamento do comando original. Considere como exemplo o algoritmo para calcular a multiplicação de matrizes. Algoritmo: Multiplicação de Matrizes. Ler as matrizes A e B Calcular C = A x B Mostrar as matrizes Fim-algortimo Se algum destes comandos não for do entendimento do destinatário, este comando precisa ser refinado. 2.4. ALGORITMOS ESTRUTURADOS A flexibilidade da utilização de computadores exige que, para cada problema a ser levado ao computador, sejam planejadas as operações correspondentes. Este planejamento deve ser feito antes de se utilizar o computador. Desta forma, antes de se usar um computador para resolver problemas é necessário que se construa antes um algoritmo. Este algoritmo tem 16 que ser, de alguma forma, transmitido ao computador e armazenado em sua memória, para depois ser posto em execução e conduzir o computador para a solução do problema proposto. O algoritmo deve, portanto, prever antecipadamente todas as situações que possam vir a ocorrer quando for posto em execução. Se um problema for muito simples e pequeno, não há qualquer dificuldade em desenvolver um algoritmo. Entretanto, com o avanço da tecnologia de hardware, os computadores de hoje em dia têm grande poder de processamento e memória. Com esta evolução, os problemas que estão sendo levados aos computadores são maiores e mais complexos. Por esta razão, surgiram técnicas que permitem sistematizar e ajudar o desenvolvimento de algoritmos para a resolução de grandes e complexos problemas. Estas técnicas são chamadas de desenvolvimento estruturado de algoritmos. Os objetivos destas técnicas são: a. facilitar o desenvolvimento de algoritmos; b. facilitar o seu entendimento por humanos; c. antecipar a comprovação de sua correção; d. facilitar a sua manutenção (corretiva e/ou evolutiva); e. permitir que o seu desenvolvimento possa ser empreendido simultaneamente por uma equipe de pessoas. Para atingir estes objetivos o desenvolvimento estruturado preconiza que: (1) Os algoritmos sejam desenvolvidos por refinamentos sucessivos; (2) Os sucessivos refinamentos são módulos, que possuem poucas funções e são o mais independente possível dos outros módulos; (3) Nos módulos devem ser usados um número limitado de comandos e de estruturas de controle. O refinamento sucessivo permite que se aborde o problema de forma mais segura e objetiva. A integração dos módulos é mais perfeita porque o módulo é atacado quando já se estudou claramente o ambiente onde este deve atuar. A divisão por módulos permite contornar a complexidade e, ainda, permite que sejam desenvolvidos de forma independente, inclusive por pessoas diferentes. O uso limitado de diferentes estruturas e comandos, apesar de parecer muito restritiva, são úteis para manter a simplicidade e clareza, sendo estas inestimáveis quando se está fazendo alguma manutenção. Para se obter uma melhor clareza dos algoritmos, costuma-se desenvolvê-los e ilustrá-los com o auxílio de diagramas de blocos: algumas figuras geométricas e dizeres são usados para representar as várias operações do computador, sendo ligados por setas para indicar a seqüência de execução. Existem dois principais tipos de estruturas de blocos: o fluxograma e o diagrama de Chapin. O grande problema de utilizarmos estes diagramas é que quando o algoritmo é grande há uma confusão no entendimento dos diagramas. 17 2.5. O PORTUGOL A liberdade de expressão é essencial para o desenvolvimento da criatividade em praticamente todas as atividades humanas. Para tanto, o uso da linguagem natural é o que se tem de melhor para expressar os nossos pensamentos. Entretanto, as linguagens naturais vêm com a problemática das ambigüidades e, algumas vezes, de falta de concisão. Uma linguagem formal evita estes problemas, mas limita o poder de expressão. Estamos, portanto, diante de um impasse. A solução é a escolha de uma linguagem que ofereça estruturas adequadas, bem projetadas, com efeitos bem definidos e que, além disso, não restrinjam a criatividade do programador. Será utilizada a pseudo-linguagem PORTUGOL (simbiose do PORTUguês com alGOl e pascaL). A idéia é permitir que com um conjunto básico de primitivas seja possível ao projetista pensar no problema e não na máquina que vai executar o algoritmo e, por outro lado, não fique tão distante desta máquina. Em toda a linguagem, as frases construídas envolvem dois aspectos: a sintaxe e a semântica. A sintaxe tem a ver com a forma e a semântica com o conteúdo. Considerando o português como linguagem, tomemos uma frase sintaticamente correta (tem verbo, sujeito e objeto, e as palavras estão escritas corretamente): “Aqui vendem-se frangos abatidos” A semântica correta desta frase é a de que naquele estabelecimento existe uma venda de frangos já mortos, e não frangos deprimidos ou anêmicos. 2.6. IDENTIFICADORES Os identificadores são nomes dados à variáveis e constantes. Estes nomes devem ser o mais significativo possível, isto é, devem refletir o que está sendo armazenado naquela variável ou constante. Um identificador é formado por um ou mais caracteres, sendo que o primeiro caractere deve, obrigatoriamente, ser uma letra. O restante podem ser letras ou dígitos (não são permitidos símbolos especiais, exceto o underscore “_”). 2.7. CONSTANTES Uma constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa. Com o propósito de deixar mais claro o algoritmo, algumas vezes são dados nomes (ou identificadores) para as constantes. Esta pode ser um número, um valor lógico ou uma seqüência de caracteres (constante literal). 18 A constante numérica é expressa na notação decimal, com ou sem parte fracionária, podendo ser positiva ou negativa. A constante lógica só assume dois valores possíveis: verdadeiro ou falso. As constantes literais englobam qualquer seqüência de caracteres (letras, dígitos ou símbolos especiais). Estas constantes são representadas entre aspas para que não seja confundida com outro item qualquer. 2.8. VARIÁVEIS Na matemática, sabemos que uma variável é a representação simbólica dos elementos de um certo conjunto. Nos algoritmos uma variável corresponde a uma posição de memória, cujo conteúdo pode variar ao longo do tempo durante a execução de um programa. As variáveis só podem assumir um valor a cada instante. Toda variávelé identificada por um identificador. As variáveis só podem armazenar valores de um mesmo tipo, sendo estes também numéricos, lógicos ou literais. Para indicar o tipo das variáveis é usada a declaração de variáveis e constantes. Uma vez declarada uma variável, qualquer referência a seu identificador implica na referência ao conteúdo do local de memória representado pelo mesmo. As declarações de variáveis podem ter a seguinte forma: declare lista-de-identificadores nome-do-tipo 2.9. COMENTÁRIOS Os comentários têm a finalidade de deixar mais claro os algoritmos para as pessoas que o estarão lendo. Ele é um texto, ou simplesmente uma frase que aparece sempre delimitado por chaves. Os comentários podem ser postos em qualquer lugar onde se façam necessários. 2.10. EXPRESSÕES ARITMÉTICAS Denomina-se expressão aritmética aquela cujos operadores são aritméticos e cujos operandos são constantes e/ou variáveis do tipo numérico. O conjunto de operações básicas adotado é o que se conhece da matemática, que são: adição, subtração, multiplicação, divisão, potenciação e radiciação. Nas expressões aritméticas, tal como na matemática, as operações guardam entre si uma relação de prioridade. Primeiro a potenciação e radiciação, depois a multiplicação e divisão e por último a adição e subtração. Para se alterar essa ordem de prioridade pode-se usar os parênteses. Além das operações básicas, pode-se utilizar algumas funções muito comuns na matemática. Algumas funções podem ser: LOG(X), logaritmo na base 10 de X; LN(X), logaritmo neperiano de X; EXP(X), o número e (base do logaritmo neperiano) elevado a X; ABS(X), o valor absoluto de X; TRUNCA(X), a parte inteira do número fracionário X; 19 ARREDONDA(X), transforma por arredondamento um número fracionário em um número inteiro; SINAL(X), devolve o valor -1, +1 ou 0, caso X seja negativo, positivo ou igual a zero, respectivamente; QUOCIENTE(X, Y), devolve o quociente inteiro da divisão de X por Y; RESTO(X, Y), devolve o resto da divisão inteira de X por Y. 2.11. EXPRESSÕES LÓGICAS É comum nos algoritmos surgirem situações em que a execução de uma ação (ou seqüência de ações) está sujeita a uma certa condição. Esta condição é representada através de uma expressão lógica. Uma expressão relacional é uma comparação realizada entre dois valores de mesmo tipo básico. Os operadores relacionais, que são usados na expressão relacional, já são conhecidos da matemática e são: = (igual) ≠ (diferente) > (maior do que) < (menor do que) ≥ (maior ou igual) ≤ (menor ou igual) O resultado obtido de uma relação é sempre um valor lógico. Os operadores lógicos utilizados nas expressões relacionais são: E (para a conjunção), OU (para a disjunção) e NÃO (para a negação). 2.12. EXPRESSÕES LITERAIS Uma expressão literal é aquela formada por operadores literais e operandos que são constantes e/ou variáveis do tipo literal. As operações sobre valores literais são bastante diversificadas, e entre elas incluem: (a) concatenação de duas literais (b) comprimento da literal (c ) os n primeiros caracteres de uma literal (d) os n últimos caracteres de uma literal (e) a cópia de uma parte da literal a partir da posição i até a posição j. 2.13. COMANDO DE ATRIBUIÇÃO Este comando permite que se forneça um valor a uma variável, onde a natureza deste valor tem que ser compatível com o tipo da variável. O comando de atribuição tem a forma a seguir: identificador ← expressão 20 A expressão deve ser primeiramente avaliada e depois atribuída à variável. As constantes e variáveis são também formas de expressão mais simples. 2.14. COMANDOS DE ENTRADA E SAÍDA Sabemos que as unidades de entrada e saída são dispositivos que possibilitam a comunicação entre o usuário e o computador. Por exemplo, através do teclado, o usuário consegue dar entrada ao programa e os dados na memória do computador. Por outro lado, o computador pode emitir os resultados e outras mensagens para o usuário através de uma impressora ou do monitor de vídeo. Os comandos de entrada e saída têm a finalidade de fazer esta interação com o usuário. O comando de entrada é feito de acordo com a seguinte forma geral: Leia <lista de identificadores> Ex.: Leia codigo_aluno, nota O comando de saída tem a forma geral: Escreva <lista de identificadores> e/ou <constantes> Ex.: Escreva “Código do Aluno: “, codigo_aluno, “Nota: “, nota 2.15. ESTRUTURA SEQÜENCIAL Em um algoritmo aparecem em primeiro lugar as declarações seguidas por comandos que, se não houver indicação em contrário, deverão ser executados em uma seqüência. Os algoritmos são iniciados com a palavra Algoritmo e terminados com fim-algoritmo. Exemplo: Algoritmo declare A, B, C numérico leia A, B, C C ← (A + B) x C escreva A, B, C fim-algoritmo Neste exemplo, após serem definidos os tipos das variáveis A, B e C, os valores de A e B são lidos, o valor de C é calculado e os valores contidos nas variáveis A, B e C serão escritos. 21 2.16. ESTRUTURA CONDICIONAL A estrutura condicional permite a escolha do grupo de ações e estruturas a serem executados quando determinadas condições, representadas por operações lógicas, são ou não satisfeitas. Esta estrutura é delimitada pelo comando se e pela expressão fim-se. Esta estrutura pode se apresentar de duas formas: (a) estrutura condicional simples e; (b) estrutura condicional composta. A estrutura condicional simples tem a seguinte forma: se <condição> então <seqüência de comandos> fim-se A estrutura condicional composta tem a seguinte forma: se <condição> então <seqüência A de comandos> senão <seqüência B de comandos> fim-se 2.17. ESTRUTURA DE REPETIÇÃO A estrutura de repetição permite que uma seqüência de comandos seja executada repetidamente até que uma determinada condição de interrupção seja satisfeita. A estrutura será delimitada pelo comando repita e pela expressão fim-repita. A interrupção é feita através do comando interrompa. Esta estrutura pode se dar de três formas: interrupção no início, interrupção no interior e interrupção no fim. A interrupção no início tem a seguinte forma: repita se condição então interrompa fim-se <seqüencia de comandos> fim-repita A interrupção no interior tem a seguinte a forma: repita <seqüencia A de comandos> se condição então interrompa 22 fim-se <seqüencia B de comandos> fim-repita A interrupção no fim tem a seguinte a forma: repita <seqüencia A de comandos> se condição então interrompa fim-se fim-repita 23 3. CODIFICAÇÃO PASCAL A linguagem de programação Pascal foi criada na década de 70 por Niklaus Wirth e é de propósito geral, baseada em conceitos de programação estruturada. Nas versões mais atuais o Pascal suporta também o paradigma de Orientação a Objetos. Neste texto daremos uma breve introdução das regras de sintaxe dos principais comandos e exemplificamos traduzindo algoritmos do Portugol para o Turbo Pascal 7.0. 3.1 ESTRUTURA DE PROGRAMAS PASCAL Um programa Pascal consiste em um título e um corpo. O comando Program define o título: PROGRAM PesoIdeal; Program Somar; PROGRAM Soma_Dois_Números; O corpo do programa contém a seção de especificação de dados e a seção de operação. A seção de especificação de dados deve vir primeiro e define todos os dados a serem usados: ela começa com a palavra reservada Var. A seção de operaçõescontém comandos que lêem dados, executam ações e mostram resultados; ela começa com Begin e termina com End. O programa termina com um ponto final. Ex.: Program SomaDoisNumeros; var A, B, Soma : real; begin read(A,B); Soma := A + B; write(Soma); end. 3.1.1 IDENTIFICADORES Os identificadores são nomes dados às variáveis e constantes. Estes nomes devem ser o mais significativo possível, Os identificadores são formados de letras, digitos e o caracter underscore (_). Não há distinção entre caracteres maiúsculos e minúsculos. O primeiro caracter de um identificador deve ser ou uma letra ou caracter underscore; o caracter branco não dever ser usado em um identificador. O identificador pode ter qualquer tamanho contudo limitaremos seu tamanho no máximo a 15 caracteres. 3.1.2 CONSTANTES Os dados em Turbo Pascal podem ser classificados ou como constantes ou como variáveis. Se os valores não variam são constantes. A palavra reservada Const é usada para definir as constantes. Ex: 24 Const Pi = 3.14159; Total_Alunos = 50; Distancia = 152.34; Meu_Nome = 'Francisco' NomeArquivo = 'Arquivo01.dta'; Passou = True; 3.1.3 VARIÁVEIS As variáveis caracterizam os dados que podem mudar durante a execução do programa. A palavra reservada Var é usada para definir as variáveis. Ex: Var MeuPeso : integer; Altura : real; NomeAluno : string; Passou : boolean; 3.1.4 COMENTÁRIOS Os comentários são precedidos de “{“e terminados pelo caracter “}”. Exemplo: ( Programa: Somar_Dois_Números Objetivo: Este programa soma dois números reais Autor: José Francisco de Magalhães Netto Data: 98/07/28 Última Alteração: 98/07/29 } 3.1.5 EXPRESSÕES Constantes e variáveis são usadas em expressões. Uma expresssão controla a ordem das operações de processamento de dados. A expressão consiste de operandos, parênteses e operadores. Constantes, variáveis e chamadas de funções podem também ser operandos. Operadores definem as operações de processamento de operandos. Exemplo: (X + Y - 10) X Y operandos + - operadores 25 • Operadores Aritméticos Operador Operação Tipo de Operando Tipo do Resultado + adição inteiro inteiro real real - subtração inteiro inteiro real real * multiplicação inteiro inteiro real real / divisão inteiro real real real DIV divisão inteira inteiro inteiro MOD resto inteiro inteiro Exemplo: Expressão Resultado 12 + 5 7 + 8 12.6 - 12 -(5 + 2) +(5 - 7) 17 15 0.6 -7 -2 A divisão se apresenta de três formas: /, DIV e MOD. Para dividir dois números reais usa-se / : 125.77 / 54.92 = 2.2905 o resultado é um número real. Para dividir números inteiros use DIV ou MOD. O operador DIV retorna o quociente da divisão de operandos: 30 DIV 25 = 1 O operador MOD retorna o resto da divisão dos operandos: 30 MOD 25 = 5 Os resultados da divisão por MOD e DIV é um inteiro. 26 • Operadores Relacionais Operador Operação Expressão Tipo do Resultado = igual A = B Verdade, se A é igual a B <> não igual A <> B Verdade, se A não é igual a B > maior que A > B Verdade, se A é maior que B < menor que A < B Verdade, se A é menor que B >= maior ou igual que A >= B Verdade, se A é maior ou igual a B <= menor ou igual que A <= B Verdade, se A é menor ou igual a B Exemplo: Expressão Resultado 45 = 50 45 <> 50 60 > 60 60 >= 60 Falso Verdade Falso Verdade • Operadores Lógicos (ou Booleanos) Operador Operação Expressão A B Tipo do Resultado NOT Negação lógica NOT A V F F V AND E lógico (Conjunção) A AND B V V F F V F V F V F F F OR OU lógico (Disjunção) A OR B V V F F V F V F V V V F XOR OU Exclusivo lógico A XOR B V V F F V F V F F V V F Exemplo: Expressão Resultado NOT (45 = 50) (4 < 5) AND (10 > 7) Verdade OR Falso Falso XOR Verdade Verdade Verdade Verdade Verdade 27 3.1.6 COMANDO DE ATRIBUIÇÃO É denotada pelo símbolo := atribuindo o resultado de uma expressão a uma variável. Ex.: Ind := 5; Preco := 10 * Quantidade; Pais := ´Brasil´; Aprovado := True; 3.1.7 COMANDOS DE ENTRADA E SAÍDA Os comandos de entrada são Read e Readln que efetuam a operação de leitura. Ex. read(Nota); readln(Codigo, Nome, Nota, Freq); Os comandos de saída são o Write e o Writeln. Ex.: write(Nota); writeln(Codigo, Nome, Nota, Freq); writeln(`Codigo `, Codigo, `Nome do Aluno `, Nome, ` Media Final `, Media, ` Frequencia `, Freq); writeln; 3.1.8 ESTRUTURA CONDICIONAL Há dois comandos condicionais em Turbo Pascal: If e Case. O comando If é o comando condicional comum. Ele possui duas formas: If <condição> then <comando1> else <comando2>; e If <condição> then <comando>; Qualquer expressão relacional ou booleana pode ser usada como uma <condição>. No primeiro caso se a condição é Verdade, então o <comando1> é executado senão o <comando2> é executado. Exemplos: If temperatura > 37 then write(‘Gripe é possível`) else write(‘Tudo bem!’); 28 O comando Case possui duas formas: Case <seletor_de_-expressão> of <lista de constantes 1> : <comando_1>; <lista de constantes 2> : <comando_2>; <lista de constantes 3> : <comando_3>; ................................................................ <lista de constantes n> : <comando_n>; end; Case <seletor_de_-expressão> of <lista de constantes 1> : <comando_1>; <lista de constantes 2> : <comando_2>; <lista de constantes 3> : <comando_3>; ................................................................ <lista de constantes n> : <comando_n>; else <comando> end; O seletor pode ser qualquer tipo escalar, exceto real ou string. Exemplos: Case i of 1, 3, 5, 7, 9 : writeln(´Número ímpar´); 0, 2, 4, 6, 8 : writeln(´Número par´); end; Case i of `I´ : writeln(´Inclusão´); ´D´ : writeln(´Deleção´); ´E´ : writeln(´Exclusão´); else writeln(´Código Incorreto. Digite novamente a opção desejada´); end; 3.1.9 ESTRUTURA DE REPETIÇÃO Os comandos de repetição são Repeat, While e For. O comando Repeat tem a seguinte estrutura: Repeat <comando_1>; <comando_2>; ...................... <comando_n>; Until <condição>; 29 Exemplo: Repeat Read(Codigo,Nome,Media_Final,Freq); Writeln(Codigo, Nome, Media_Final, Freq) Alunos_Lidos := Alunos_Lidos + 1; If ((Media_Final >= 5.0) And (Freq >= 45))then Aprovados := Aprovados + 1 else Reprovados := Reprovados + 1; Until Alunos_Lidos = Total_Sala; O comando While tem a seguinte estrutura: While <condição> do begin <corpo do loop>; End; Exemplo: While Alunos_Lidos < Total_Alunos do begin Read(Codigo,Nome,Media_Final,Freq); Alunos_Lidos := Alunos_Lidos + 1; Writeln(Codigo, Nome, Media_Final, Freq) If ((Media_Final >= 5.0) and (Freq >= 45)) then Aprovados := Aprovados + 1 else Reprovados := Reprovados + 1 end; Se a <condição> é Falsa logo no início o corpo do While não será executado nunca. O comando For se apresenta das seguintes maneiras: For <variável de loop> := <S1> to <S2> do <comando>; ou For <variável de loop> := <S1> downto <S2> do <comando>; onde S1 e S2 definem o começo e o fim dos valores da <variável de loop>. 30 Exemplo: Soma dos inteiros de 1 até 10 Program SomarInteiro; Var I , Soma : integer; Begin Soma := 0; For I := 1 to 10 do Soma := Soma + I; Writeln(Soma); end. A variável do loop não pode ser mudada no corpo do loop. Caso isto ocorra ocasionará erro. For I := 1 to 10 do begin Soma := I * 2; Write(Soma); I := I + 2; { Erro : troca ilegal da variável de loop } end. 3.1.10 REGRAS DE SINTAXE Há algumas regras de sintaxe que devem ser observadas ao se escrever um programa em Turbo Pascal: a) O ponto-e-vírgula delimita comandos e sua ausência causa erros de compilação. X := A + B;;; { Correto } write(X) { Errado } X := X + 1; b) Um ponto-e-vírgula não é usado após as palavras reservadas Unit, Uses, Label, Type, Const e Var. Uses; { Errado } Var; { Errado } b) Um ponto-e-vírgula não é usado após Begin. Um ponto-e-vírgula antes de End é opcional. Begin; { Errado } Begin Writeln(`Alo`}; { (;) antes de End é legal } end; 31 d) Um ponto-e-vírgula não é usado após While, Repeat e Do. Um ponto-e-vírgula antes de Until é opcional. While True do; { Errado } X := 1; Repeat X := X + 1; writeln(X*X); { (;) legal } Until X <> 11; e) Um ponto-e-vírgula não é usado após Then e antes de Else; If X <> 5 then Y := Y + X; { Errado } else Y := Y + X; 32 3.1.11 EXEMPLO DE CODIFICAÇÃO DE UM ALGORITMO EM PORTUGOL NA LINGUAGEM PASCAL A figura abaixo na primeira coluna mostra um algoritmo em Portugol e na segunda coluna o programa equivalente em Pascal. Fatorial Início Escreva (Digite um numero) Leia(N) Se N<0 Então Escreva('Nao existe fatorial de numero negativo!) Senão Início f <- N; Para i de (N-1) até 1 faça f <- f * i Escreva (O fatorial de N é, f) Fim (Senão) Fim(Fatorial) Program Fatorial; Uses Crt; Var f,n,x,i :Integer; Begin ClrScr; Write('Digite um numero :'); Read(n); If n<0 Then Write('Nao existe fatorial de numero negativo!') Else begin f :=n; For i:=(n-1) downto 1 do f :=f*i; Write('O fatorial de ',n,' ‚ ',f); end;{Else} Repeat Until Keypressed; End. 33 4. LISTA DE EXERCÍCIOS A. Noções de Computadores 1. Discuta a afirmação abaixo: “O computador é uma máquina inteligente que soluciona novos problemas sem precisar de nenhuma interferência humana.” 2. Cite as gerações dos computadores e suas principais características. 3. Explique a organização básica de um computador, comentando e detalhando a função de cada uma de suas partes e exemplificando o hardware envolvido. 4. Defina dispositivos de entrada e dispositivos de saída. Dê 5 (cinco) exemplos para cada uma das definições. 5. Um prefeito deseja instalar um pequeno centro de computação em uma biblioteca que deverá ser ligado via Internet a outros centros, e que possa também gerar relatórios diários para acompanhamento. Especifique o hardware mínimo para que isso se realize. 6. O que é RAM? O que é ROM? Aponte quais as diferenças entre elas e defina as siglas. 7. O código ASCII (American Standard Code for Information Interchange) do caracter g maiúsculo é o número decimal 71. Mostre a transformação em binário gerando o byte correspondente a este caracter. 8. Defina programa-fonte e programa-objeto. 9. Uma nova geração de dispositivos de armazenamento está sendo criada. Um desses equipamentos são as fitas DLT (Digital Linear Tape), que têm alta capacidade e velocidade de acesso. São encontradas no mercado com várias capacidades de memória. Um valor típico é 5 Gigabytes. Para este caso específico, quantas páginas de texto este dispositivo pode armazenar? * Considere uma página de 40 linhas, tendo cada linha 30 caracteres. 10. Considere um livro que possui 200 páginas, sendo que cada página possui, em média, 50 linhas e cada linha, em média 50 caracteres. Quantos livros deste tamanho conseguiríamos armazenar em um dispositivo que contivesse 4 Gigabytes de armazenamento? 11. Seja um computador hipotético com um byte de 6 bits. Quantas informações distintas podem ser armazenadas por esse byte? 34 12. Um bit tem dois estados (0 – ligado e 1 – desligado). Quantos estados pode ter um byte? 13. Um computador tem palavras de 16 bits. Quantos estados diferentes podem ser acessados com uma palavra deste tamanho? 14. Um computador utiliza 3 bytes para armazenar números inteiros. O primeiro bit do primeiro byte é convencionado representar o sinal (0 – positivo e 1 – negativo) e os bits restantes do primeiro byte e dos demais bytes são usados para representar o módulo do número inteiro. Qual é, então, o maior número inteiro decimal positivo que pode ser representado nesta arquitetura? 15. Coloque V para verdadeiro e F para falso a assertiva: ( ) O scanner é um dispositivo que digitaliza imagens e é um dispositivo de saída do computador. ( ) Os disquetes de 5 ¼ “ tem capacidade de gravação maior do que os de 3 ½ “ pois tem área maior de gravação. ( ) O mouse é um típico dispositivo de saída de dados. ( ) O CD-ROM é o dispositivo mais usado para se dar backup diário dos arquivos do computador. ( ) O modem é um aparelho que possibilita conectar um computador a outro usando a linha telefônica. 16. Conforme a classificação do software, coloque a sigla apropriada: Software Básico (SB), Aplicação (AP) e Sistema Aplicativo (SA). ( ) Editor de texto Word 6.0 ( ) Sistema de Automatização de Biblioteca ( ) Compilador Pascal ( ) Editor de texto Wordstar ( ) Sistema Operacional DOS 17. Marque V caso seja verdadeiro e F caso seja falso a assertiva: ( ) O compilador traduz um programa de linguagem de alto nível para um programa executável. ( ) O compilador deve estar presente quandoda execução do programa. ( ) O compilador Pascal é igual ao compilador C, mudando apenas a linguagem objeto. ( ) Para cada linguagem de programação há um único compilador. ( ) A linguagem de máquina é o conjunto de instruções entendidas pelo hardware. 35 B.Conversão de Números Decimais em Binários e Vice-Versa 1. Converta os seguintes números decimais em números binários: a) 8 b) 17 c) 32 d) 64 e) 81 f) 93 2. Converta os seguintes números inteiros binários em números decimais: a) 10 b) 101 c) 1100 d) 11111 e) 101110 f) 1010101 3. Converta os seguintes números fracionários decimais em números binários: a) 0.5 b) 0.75 c) 0.1 d) 0.3 e) 0.01 f) 9.1 4. Converta os seguintes números binários em números decimais: a) 0.111 b) 0.1 c) 0.011 d) 0.1101 e) 1.011 f) 101.1101 5. . Faça as transformações de base pedidas: a) (21.1)10 = ( )2 b) (10011.011)2 = ( )10 c) (19.1)10 = ( )2 d) (10111,011) 2 = ( )10 6. Mover a vírgula decimal em um número binário n casas para a esquerda, ou para a direita é o mesmo que dividir (ou multiplicar, respectivamente) o número por 2n. Justifique esta afirmativa. 7. Mostre que qualquer número da forma 2-n, onde n é um número inteiro positivo, pode ser escrito como um número decimal com um número finito de algarismos. 8. Mostre que qualquer fração binária é também uma fração finita, se transformada em uma fração decimal. 36 C. Introdução aos Algoritmos 1. Suponha que você esteja se dirigindo ao Campus Universitário, conduzindo seu próprio carro e repentinamente o pneu fura. Faça um roteiro para efetuar a troca dos pneus e assim poder continuar o seu trajeto. 2. Resolva o exercício 1 supondo possibilidade de quando você abrir o porta- malas, para retirar o estepe, o mesmo não esteja lá (por exemplo: o estepe foi roubado). 3. Dados dois recipientes A e B, contendo líquidos que explodem quando misturados, como fazer para trocar o conteúdo dos recipientes A e B sem que haja explosão? 4. Você dispõe de um barco para atravessar um rio. O barco tem capacidade para você mais uma de suas três cargas que são: um tigre, uma ovelha e um maço de alface. Como atravessar as três cargas para o outro lado do rio, sabendo-se que a ovelha come a alface e o tigre devora a ovelha mas não come a alface? 5. Nove homens e dois meninos querem atravessar um rio, usando uma pequena canoa com capacidade para levar ou um homem ou os dois meninos. Quantas vezes o barco terá de atravessar o rio para atingir a meta? 6. Três missionários e três canibais encontram-se numa margem de um rio e todos precisam passar para a outra margem. Um barco com a capacidade máxima de dois passageiros está disponível na margem em que se encontram os missionários e os canibais. Os missionários desconfiam dos canibais de tal maneira que evitam em qualquer ponto (margens e na travessia) que o número de canibais seja maior que deles (missionários). Descubra uma estratégia (caso exista) para atravessar todos em segurança para a outra margem. 7. Você recebe dois vasilhames d´água, um de 4 litros e outro de 3 litros . Nenhum deles possui qualquer marcação de medida. Há uma bomba que pode ser utilizada para encher os vasilhames de água. Como você poderá colocar exatamente 2 litros d´água dentro do vasilhame de 4 litros? 8. A torre de Hanoi consiste de três hastes (a, b e c), uma das quais serve de suporte para três discos de tamanhos diferentes (1, 2 e 3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, contanto que nunca seja colocado um disco maior sobre um disco menor. O objetivo é transferir os três discos para a outra haste. 9. Qual o padrão de comportamento para gerarmos a seqüência: 1 5 9 13 17 21 25. 10. E para a seqüência: 1 7 13 19 25 31. O padrão de comportamento deste exercício é igual ao do exercício anterior? 37 D. Algoritmos 1 Imprima a mensagem "As coisas boas na vida são as coisas simples". 2 Leia e imprima um valor numérico. 3 Lidos dois números A e B, imprima a soma desses números. 4 Leia três valores numéricos e imprima o somatório dstes números. 5 Dado o raio de um círculo, calcular sua área e perímetro. 6 Considere um retângulo de lados L1 e L2. Calcular a área e o perímetro desse retângulo, lidos os lados. 7 Dados os dois catetos (A e B) de um triângulo retângulo, calcular a hipotenusa. 8 Leia três valores numéricos e imprima o produto entre estes números. 9 Dados três números X,Y e Z, calcular a média aritmética desses números. 10 Lidas três notas de um aluno nota1, nota2 e nota3, calcule a média do aluno. Imprima a média. 11 Lido um número A, se ele for maior ou igual a 5, então imprima "Aprovado"; se for menor que 5, então imprima "Reprovado". 12 Leia um número, caso este seja maior que 50 imprimir a mensagem “É maior que cinqüenta” caso contrário deve imprimir “É menor que cinqüenta”. 13 Leia o nome do aluno, sua respectiva nota final e o total de presenças. Sabendo- se que a freqüência necessária é de no mínimo 75% e o total de aulas ministradas foi de 60 aulas e que a nota mínima deve ser maior ou igual a cinco. Checar e imprimir se este aluno foi aprovado ou reprovado. 14 Lidas três notas de um aluno nota1, nota2 e nota3, calcule a média do aluno. Imprima a média. Se a média for maior ou igual a 5, então imprima "Aprovado"; se for menor que 5, então imprima "Reprovado". 15 Lidos dois números A e B, se A for maior que B, então imprima a diferença de A menos B; se A for menor ou igual a B, então imprima a diferença de B menos A. 16 Lidas as notas parciais de um aluno (em número de quatro) e sua freqüência, calcule sua média final e decida se o aluno está aprovado ou não. 38 17 Leia o nome do aluno, sua respectiva nota final, o total de presenças e o número total de aulas ministradas. Sabendo-se que a freqüência necessária é de no mínimo 70% das aulas ministradas e que a nota mínima deve ser maior ou igual a 7.0, checar e imprimir o nome do aluno, nota final, total de presenças e uma mensagem dizendo se este aluno foi aprovado ou reprovado. 18 Dados três valores X, Y e Z, verificar se eles podem ser os comprimentos dos lados de um triângulo e, se forem, verificar se é um triângulo equilátero, isósceles ou escaleno. Se eles não formarem um triângulo escrever uma mensagem de erro. 19 Lido um número inteiro n (n ≥ 0), verificar se êle é par ou ímpar. 20 Em um colégio ao final do ano o aluno estará aprovado se tiver obtido média final igual ou superior a 7.0 e freqüência superior ou igual a 200. Caso contrário se a média final for igual ou superior a 5.0 e menor que 7.0 estará em recuperação, desde que suas presenças sejam superiores a 150. Nos outros casos o aluno estará reprovado. 21 Leia três valores numéricos e imprima o maior deles. 22 Lidos dois números A e B, imprima o maior deles. 23 Dados dois números imprimí-los em ordem descendente. 24 Dados dois números imprimí-los em ordem ascendente. 25 Leia três valores numéricos e imprima o maior e o menor valor. 26 Lidos três números, imprimir o maior, o menor e a média aritmética. 27 Lidos um conjunto de 5 números, elimine o maior e o menor do conjunto e calcule e escreva média aritmética dos 3 números restantes. 28 Lido um número inteiro positivo entre 0 e 200, escreva-o por extenso. 29 Imprima 100 vezes a mensagem "As coisas boas na vida sãoas coisas simples". 30 Lido um conjunto de 40 números inteiros positivos, conte os números pares e os ímpares. 31 Leia um número indeterminado de linhas contendo cada uma a idade de um indivíduo. A última linha, que não deverá entrar nos cálculos, contém o valor da idade igual a zero. Calcule e imprima a idade média dos indivíduos. 39 32 Uma turma tem n alunos. Para cada aluno, calcule a média, lidas as três notas nota1, nota2 e nota3, imprima a média e "Aprovado" se a média for maior ou igual a 5 e "Reprovado" se a média for menor que 5. 33 Foi feita uma pesquisa de audiência de canal de TV em várias casas de uma certa cidade. Para cada casa visitada é fornecido o número do canal (4, 5, 7 e 12) e o número de pessoas que estavam assistindo naquela casa. Ler um número indeterminado de dados (o últimó dado possui canal igual a zero) e calcule e imprima para cada emissora a respectiva porcentagem de audiência. 34 Tem-se um conjunto de dados contendo a altura e o sexo de 50 pessoas. Calcule e escreva: (a) a maior e a menor altura do grupo; (b) a média de altura das mulheres; ( c) o número de homens. 35 Num frigorífico existem 90 bois. Cada boi traz preso em seu pescoço um cartão contendo seu número de identificação e seu peso. Escreva o número e o peso do boi mais gordo e do boi mais magro. 36 Pode-se aproximar a raiz quadrada de um número subtraindo-se sucessivamente números ímpares mais altos do número original até que o número original seja inferior ou igual a zero. O número de subtrações é igual à raiz quadrada aproximada do número original. Ex.: 23 - 1 = 22 22 - 3 = 19 19 - 5 = 14 14 – 7 = 7 raiz quadrada ≅ 4 7 – 9 = -2 37 A raiz quadrada de um número a pode ser calculada através da equação iterativa x i+1 = xi – xi 2 - a 2xi Sendo dado o valor inicial x0, calcule a raiz quadrada de 2. 38 Supondo que a população de um país A seja da ordem de 90.000.000 de habitantes com uma taxa anual de crescimento de 3% e que a população de um país B seja, aproximadamente, de 200.000.000 de habitantes com uma taxa de crescimento de 1,5%. Calcule e escreva o número de anos necessários para que a população do país A ultrapasse ou iguale a população do país B, mantidas estas taxas de crescimento. 39 Calcular a soma dos números pares desde 100 até 200, inclusive. 40 Calcule e escreva uma tabela de centígrados em função de graus Farenheit, que variam de 50 a 150 de 1 em 1. 40 41 Calcule e escreva o número de grãos de trigo que se pode colocar num tabuleiro de xadrez, colocando 1 no primeiro quadrado e nos seguintes o dobro do quadrado anterior. O tabuleiro de xadrez é composto de 64 quadrados. 42 O número 3025 possui a seguinte característica: 30 + 25 = 55 552 = 3025 Pesquise e imprima todos os números de quatro algarismos que apresentam tal característica. 43 Números perfeitos são números inteiros para os quais a soma dos seus divisores é igual ao produto dos mesmos. Ex.: 6 = 1 + 2 + 3 = 1 x 2 x 3. Verifique quantos números perfeitos existem entre 1 e 10.000. 44 Qual é o menor número inteiro que é igual a uma soma de quadrados e a uma soma de cubos? . 45 Calcular a soma dos números ímpares entre 0 e um numero inteiro positivo M qualquer. 46 Lidos dois números inteiros positivos M e N, escreva os números pares entre estes números. 47 Lidos dois números inteiros M e N, escreva os números pares entre M e N, inclusive. 48 Calcule o fatorial de n. 49 Verifique se um número n (n>0) é primo. 50 Lidos dois números inteiros positivos M e N, escreva os números primos entre estes números. 51 Gere os primeiros n números primos. 52 Lidos dois números inteiros positivos P e Q, calcule o mmc desses dois números. 53 Lidos dois números inteiros positivos P e Q, calcule o mdc desses dois números. 54 Calcule a soma dos n primeiros termos da série 41 A = 1 -3 5 -7 9 -11 13 -15 ... 55 Calcule a soma dos n primeiros termos da série H = 1 + ½ + 1/3 + ¼ + 1/5 + ... 56 A seqüência de Fibonacci se define como tendo o primeiro termo igual a 0 e o segundo termo igual a 1 e cada termo seguinte é igual a soma dos dois termos imediatamente anteriores. Escrever a seqüência de Fibonacci dos termos inferiores a um número inteiro L qualquer. 57 Escrever o termo que corresponda ao n-ésimo termo de uma seqüência de Fibonacci. 58 Aplique a função ex para um determinado valor usando a série ex = 1 + x + x2 + x3 + x4 + x5 - ... 2! 3! 4! 5! 59 Calcule e escreva o valor de S: S = 1/1 + 3/2 + 5/3 + 7/4 + ... + 99/50 60 Calcule o valor do seno de um ângulo usando a série sen x = x – x3 + x5 – x7 + x9 - ... 3! 5! 7! 9! 61 Calcule o valor do cosseno de um ângulo usando a série cos x = 1 – x2 + x4 – x6 + x8 - ... 2! 4! 6! 8! 62 Calcule e escreva o valor de pi, com precisão de 0.01, dado pela série: pi = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 ... Sugestão: para obter a precisão desejada, adicionar apenas os termos cujo valor absoluto seja maior ou igual a 0.01 63 Converta um número inteiro decimal em binário. 64 Lido um número inteiro positivo, escreva-o na ordem inversa. 65 Leia e escreva um array numérico de 5 elementos. 66 Leia e escreva um array numérico de n elementos. 67 Leia um array numérico de 5 elementos e calcule a soma destes números. 68 Leia um array numérico de n elementos e calcule a soma destes números. 42 69 Leia um array numérico de 5 elementos e calcule a média aritmética destes números. 70 Leia um array numérico de n elementos e calcule a média aritmética destes números. 71 Lido um string, escreva-o na ordem inversa (palíndromo). 72 Lidos dois vetores A, de tamanho m e B, de tamanho n, calcule o vetor C, soma de A e B. 73 Lido um string, conte quantas vogais existem. 74 Lido um string, escrever quantas e quais são as vogais. 75 O produto interno entre dois vetores A e B é o escalar obtido por ∑ ai bi, onde n é o tamanho dos dois vetores. 76 Lidos dois strings A e B, verifique se o string B está contido em A. 77 Lido um array numérico de n elementos, ache o maior. 78 Lido um conjunto de n elementos, ordená-lo crescentemente. 79 Leia uma matriz de dimensões 3x3. 80 Leia uma matriz de dimensões mxn. 81 Leia uma matriz A e calcule a soma de seus elementos. 82 Leia uma matriz A e calcule a média aritmética de seus elementos. 83 Leia uma matriz A e ache o maior elemento. 84 Lidas duas matrizes A, de dimensões mxn e B, de dimensões pxq, calcule a matriz C, soma de A e B. 85 Lida uma matriz, gere sua matriz transposta. 86 Lidas duas matrizes A, de dimensões mxn e B, de dimensões pxq, calcule a matriz C, produto de A e B. 87 Lida uma matriz quadrada, calcule a somatória dos elementos da diagonal principal. 43 88 Lida uma matriz, calcule a porcentagem de elementos nulos desta matriz. 89 Lidas duas matrizes verifique se uma é inversa da outra. 90 Lida uma matriz quadrada verifique se ela é triangular superior. 91 Gere o movimento do bispo no jogo de xadrez. 92 Gere o movimento
Compartilhar