You are on page 1of 406
Aprendendo a Programar com « Estruturas de Controle * FungGes, vetores e matrizes * Classes e Abstracao de Dados * Ponteiros * Arquivos » Modelagem de Dados com Classes * Heranga e Polimorfismo © Gabaritos de fungées * Projetos de Programas * Graficos Prof. Sdnel de Brito Alves, Dr. Centrocépia Ltda. - Itajuba / MG. auita: 2O/e4 ¢ 26/CH > Hulyectiom 5AM sub-theee Lista oa AposTiLA Cewreesae are a8/o4 4% 3¥%00) 4.8.4 2.6, 43 > tebele ce tetcuge BJS Be swans / fogs 39S 4 —® DO gtutures tH HE fees tf 3.4.S md tnquante (fog 4(- SIBH HE ese / sage LiST4 DE ExERctetos poe / fos 5 fee /tmsuente Go fogs / pent 2) pact / feagen 08/06 « gaifot dele, ldbsevtorie APRENDENDO A PROGRAMAMAR APLICACOES COM Copyright 2005, Sdnei de Brito Alves, Dr. Primeira Edigio. Todos os direitos reservados e protegidos pela Lei 5988 de 14/121973. Nenhuma Parte deste livro podera ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrénicos, mecanicos, fotogrificos, gravagto ou qualquer outro. Todo oesforgo foi feito para fornecer mais completa informagio. Contudo 0 autor nao assume responsabilidade alguma pelos resultados e uso da informagao fornecida. Itajubé — MG, Brasil Rapido e Facil Prof. Sdnei de Brito Alves, Dr. www brito.unifei.edu.br brito@unifei.edu.br Aprendendo a Programar com C++ Rapido e Facil Sdnei de Brito Alves é Professor Adjunto da Universidade Federal de lajubé ~ MG. Recebeu o titulo de Mestre em Engenharia de Sistemas Computacionais da Coordenacdo dos Programas de Pés- graduagdo em Engentaria de Sistemas da Universidade Federal do Rio de Janeiro. Recebeu o titulo de Doutor em Computacdo Aplicada do Instituto Nacional de Pesquisas Espaciais / Universidade de Campinas. INTRODUGAO Como software nao se desgasta no sentido fisico, sua confiabilidade é determinada por caracteristicas ldgicas como corregdo e tolerdncia 4 falhas. Construir software & sob muitos pontos de vista, uma atividade mais préxima de provar um teorema do que a de construir uma ponte. Mas como produto, software ¢ avaliado em fungao de sua utilidade no processo de solugdo de problemas ¢ nao a partir de critérios abstratos como corregio. Dessa forma, justifica-se qualificar o software como sendo, no desenvolvimento de um projeto de sistema computacional, 0 coragiio do problema. E possivel admitir alguma defasagem tecnolégica na rea de hardware mas, no software é indispensavel que se disponha da solugo adequada para © problema. Dessa forma, construir um software adequado para um determinado problema uma questo na fronteira do conhecimento, Alguns dos mais sérios problemas de desenvolvimento de software foram identificados anos atrés, mas continuaram a resistir a solugdes praticas. Em adigo, o enfoque convencional utilizado no desenvolvimento de software leva a geragio de aplicativos monoliticos, colaborando para o envelhecimento ripido de sistemas computacionais, com dificuldades de adaptagio A mudangas de ambientes. Neste contexto, 0 desenvolvimento de software orientado ao objeto vem sendo considerado a /uz no horizonte. Programar ¢ uma das experiéncias mais agradiveis. Nesta atividade adquire-se, rapidamente, grande capacidade de abstragdo e andlise. Aprende-se a ser preciso ¢ a selecionar, dentre as solugdes possiveis desenhadas para o equacionamento de uma questo, aquela que se apresenta como a melhor. Ao iniciar-se na arte da programagao, ¢ desejével que vocé faga uma reflexao sobre as diferentes atividades que realiza no seu dia a dia. Serd facil descobrir que elas estio repletas de agdes seqiienciais, de tomadas de decisdes ¢ de ages repetitivas. E considerando estes aspectos que se pretende leva-lo, rapidamente, a dominar os conceitos fundamentais da arte de programar. Dessa forma, para que vocé possa aprender a programar corretamente, é absolutamente necessério que aprenda antes a equacionar problemas, escrevendo verdadeiras receitas de bolos, usando termos de sua propria linguagem natural sem se preocupar com 0 rigor da sintaxe de uma linguagem oficial de programagdo. Isto significa que vocé aprenderd a desenvolver projetos de programas, antes de submeté-los a um ambiente formal de programagao instalado em seu computador. Vocé deve saber desde o inicio que ha muito o que aprender antes que possa realmente usar a linguagem de programagao C+, Assim, este livro parte do pressuposto de que voc8 nfo teve experiéncia de programagao, ou, se teve, ela foi incipiente; de que nfo conhece os principios basicos da programagao estruturada; de que desconhece o significado dos principais termos usados no desenvolvimento de um programa; e, finalmente, de que o aprendizado dos ensinamentos colocado ao longo deste texto precede o treinamento em técnicas de programago orientadas a0 objeto e de linguagens de programacdo que as suportam, como, por exemplo, Microsoft cH. Este livro est cheio de exercicios. Nao hi melhor maneira de aprender do que por bons exemplos, ¢ vocé ver muitos deles aqui. Eles esto dispostos em ordem crescente de : a dificuldades. Em muitos deles ha dicas de desenvolvimento, 0 que deve ajuda-lo na construgio dos correspondentes projetos de programas. E isto : voce esti pronto para comesar; libere sua capacidade de abstragaio e de criagao. Em sua construgo, os assuntos fortemente acoplados foram agrupados, naturalmente, ‘em 19 capitulos. Dessa forma, temos, por exemplo, um capitulo para as principais estruturas de controle da programago, um para arranjos unidimensionais ¢ multidimensionais, outro para arquivos, um para fungGes etc. Assim, um instrutor pode utilizar este material, estipulando a seqiiéncia de tépicos que considerar melhor, buscando, em cada capitulo, os assuntos que iro compor tais tépicos ou, simplesmente, seguir os capitulos, um a um. Entretanto, tomamos a liberdade de sugerir a seqiiéncia que consideramos mais apropriada ao estudo e aprendizado do material constante deste livro. O leitor deverd comegar estudando os assuntos que compéem os capitulos de 1 a 4. Neste capitulos so apresentados os conceitos basicos gerais, indispensaveis & construgdo de bons projetos de programas. Dessa forma, no Capitulo 1 sio apresentados os conceitos bisicos das partes que integram um programa de computador, bem como as fases necessarias a sua construgio, No capitulo 2 apresentamos os diferentes tipos de dados que podem ser manipulados por um sistema computacional, suas representagdes © suas restrigdes. No Capitulo 3 so apresentadas as partes componentes das instrugdes que compdem os programas computacionais. No Capitulo 4 ¢ feita uma ampla discussio sobre como programar com disciplina e eficdcia, a partir de varios exemplos de projetos de programas, desenvolvidos asso 2 passo, permitindo ao leitor sedimentar os conhecimentos apresentados nestes primeiros capitulos. E importante que o leitor experimente resolver todos os exercicios propostos, gerando, para cada um deles, um projeto de programa em pseudocédigo. Apés finalizar 0 estudo dos quatro primeiros capitulos, leia 0 Capitulo 11, acompanhando 0 desenvolvimento dos exercicios. Neste capitulo, ignore os exercicios propostos de niimeros 113.5 e 11.3.10. Capitulo 5 apresenta os primeiros recursos da linguagem C++. Com a experiéncia adquirida nos capitulos anteriores, os assuntos que compées este capitulo serao rapidamente veneidos pelo leitor. Aqui vocé tera a oportunidade de escrever seus primeiros programas em C+, de estruturas simples e ficeis de compreender. Alguns dos exercicios resolvidos utilizam os projetos de programas construidos anteriormente. No Capitulo 6 sto apresentadas as estruturas de controle basicas da programacdo, suportadas pela linguagem C, equivalentes Aquelas utilizadas nos projetos de programas. Varios dos projetos de programas construidos anteriormente sio codificados em C++, servirdo ao leitor como base para o entendimento e construgaio de seus proprios programas. Neste momento, o leitor sem experiéncia deve ignorar o item 6.10 deste capitulo. No Capitulo 7 vocé vai encontrar os fundamentos basicos do uso de Fungdes em C++, Estude estes t6picos. E apresentada uma ampla e rica discusso sobre o uso de varidveis simples como argumentos para fungdes. So mostradas passagens de parimetros por valor € por referéncia, a sobrecarga de fungdes ¢ gabaritos de fungdes. Varios exemplos de programas completos so apresentados. Aplique estes conhecimentos em alguns dos exercicios dos Capitulos 4, 5 e 6. Pronto, agora vocé jé sabe quase tudo sobre varidveis simples, fungdes sobrecarregadas e gabaritos. Apés finalizar o estudo dos capitulos 5, 6 ¢ 7 leia o Capitulo 11, acompanhando 0 desenvolvimento dos exercicios. No Capitulo 8 0 leitor encontraré 0s conceitos fundamentais sobre projetos de programas com arranjos (vetores e matrizes), e sua utilizagio. Varios projetos de programas so construidos em pseudocédigo, levando 0 leitor a ter boa compreensio para 0 uso adequado dessas estruturas de dados. £ de importancia fundamental que o leitor experimente resolver 0s exercicios propostos nestes dois capitulos, preferencialmente na ordem em que sio apresentados, para adquirir experiéncia. Dessa forma, vocé estar se preparando para a fase seguinte, que é a da codificago de programas em C+ que utilizam essas estruturas de dados. s Capitulos 9 € 10 mostram como vocé pode representar arranjos (vetores e matrizes) na linguagem C++. Vetores e Matrizes so passados como argumentos para funges. Fungdes sto sobrecarregas com Vetores e Matrizes e gabaritos de Fungées so" reapresentados. FungGes para tratamento de strings em C+ so também apresentadas. Varios dos projetos de programas elaborados no Capitulo 8 sto codificados em C+. Assim, é feito um paralelo entre a fase de elaborago do projeto em pseudocidigo e a fase de codificagiio, esta ultima bem mais simples. Minha expectativa & de que o leitor venga estes dois capitulos rapidamente. Apés finalizar 0 estudo dos capitulos 9 e 10 leia os Capitulos 11 e 12, acompanhando o desenvolvimento de todos os exercicios. Nos Capitulos 11 ¢ 12 apresentamos os fundamentos da Programagiio. Estruturada ¢ da Programagio Top Down, com exercicios explicativos. E importante que o leitor fagaa uso constante deste material. A Programagio Orientada a Objeto convive muito bem com estes conceitos. No Capitulo 13 apresentamos os fundamentos do enfoque orientado a objeto. Ele é importante para o entendimento da mudanga de paradigma entre 0 enfoque de programagio convencional este enfoque. Conceitos de Estruturas de dados, Classes, Objetos e Abstrago de Dados sio apresentados. O aluno é induzido a identificar os objetos existentes no mundo académico em que vive, ou do qual jé participou, Nos exemplos de programas é ilustrado como separar a interface da implementag3o dos programas orientados a objetos. Fungdes construtoras ¢ destruidoras também so apresentadas. Operagdes de atribuigao de objetos a objetos e transferéncia de objetos para fungdes membro também so exemplificadas. Capitulo 14 apresenta os conceitos basicos sobre a utilizagdo de ponteiros em C/C++, e sobre a reserva dinimica de meméria. Ponteiros para variéveis simples, para arranjos, para estruturas de dados, para objetos etc, so mostrados, incluindo ponteiros como argumentos para fungdes, ponteiros para strings e para fungdes. O ponteiro this, as estruturas de dados auto-referentes ¢ as classes auto-referentes sio discutidos e exemplificados. Estude todos os t6picos relacionados. No Capitulo .15 discutimos a manipulagdo de grandes volumes de dados como arranjos, estruturas etc. a impressio de grandes quantidades de informagies geradas por programas, considerada necesséria. Assim, é conveniente, desde ja, saber como criar os arquivos de dados que iréo ser utilizados nestas e em outras atividades. Dessa forma, sugerimos que vocé deva estudar os assuntos incluidos nos itens deste capitulo, que envolvem ‘operagdes com arquivos texto ¢ operagdes com arquivos bindrios seqiienciais ¢ aleatérios, : © tanto em C quanto em C++. Exemplos com 0 uso de vetores, matrizes, estruturas de dados & fungdes sio mostrados. No Capitulo 16 utilizamos toda a conceituagio basica apresentada até aqui para realizarmos a Modelagem de Sistema Orientado a Objeto. Um exemplo de Sistema de Informagées ¢ tomado como exemplo, ¢ sobre ele so aplicados os conceitos da orientagio a objeto, para a fase de modelagem. Assim, os tépicos relacionados a Modelagem de Dados, Identificagao de Objetos, Atributos de Objetos © 0 Modelo Relacional de Dados sio mostrados, utilizando como exemplo o mundo académico. Em adig&o, as entidades identificadas nesse sistema sfio modelas como Classes, ¢ para as Classes so definidos dados ¢ fungdes membros. Um tépico sobre Heranga também é apresentado e exemplificado. Neste capitulo utilizamos as classes modeladas para o exemplo de um pequeno Sistema Académico que esta implementado e amplamente discutidas. No Capitulo 17 € feito um bom estudo sobre Fungdes Virtuais e Polimorfismo e suas aplicagdes. Polimorfismo em tempo de execugio ¢ de compilagdo sdo mostrados e exemplificados. Um tépico sobre sobrecarga de operadores ¢ incluido, com exemplo. No Capitulo 18 apresentamos t6picos variados sobre a linguagem C++, liteis para 0 desenvolvimento de programas. Ampla discussdo sobre os aspectos mais importantes relacionados a manipulagdio de cadeias de caracteres é feita, e varias novas fungdes de tratamento de strings em C++ também so apresentadas. Em adig&o, as estruturas enum ¢ union também sao mostradas. No Capitulo 19 encontram-se alguns exemplos de utilizagdo de grificos em C. B muito simples. Experimente utilizar alguns dos exemplos de programas prontos. Altere-os, adicionando novos efeitos, a seu critério. Lembre-se de que a utilizagao de recursos grificos depende do hardware do seu computador. Com 0 direcionamento acima, o leitor cumpriu todos os passos necessarios ao estudo e compreenstio dos tépicos incluidos nos capitulos deste livro. Dessa forma, ¢ com os conhecimentos obtidos, programas com graus de dificuldades razodveis podem ser desenvolvidos. Com a experiéncia adquirida até agora, vocé pode dar uma olhada critica nos Capitulos 11 ¢ 12, se ainda nao o fez, onde vai consolidar seus conhecimentos a respeito das técnicas basicas da programagdo estruturada, exploradas neste texto. Uma tiltima informagao: Todos os programas deste livro foram implementados em Ambiente Borland C#+, versio 5.02. Dessa forma, eles deverdo executar suas fungdes, normalmente, nessa ou em outras versdes superiores. Portanto, nao garanto o desempenho dos programas em versdes que precederam a versio 5.02. © Ieitor que encontrar um erro de sintaxe ou de légica, nao documentado no préprio texto, em qualquer dos programas completos deste livro, escritos em C ou C+, terd direito a um bénus de RS5,00. Para obter este beneficio, faga contato por e-mail: brito@unifei.edu.br, fomecendo as informagées necessdrias & caracterizagao do problema encontrado. Este beneficio poderd ser atribuido, obviamente, somente ao primeiro leitor que se apresentar, reivindicando o bénus sobre certo item. A identificagdo do leitor eventualmente beneficiado sera divulgada, quando solicitado. SUMARIO Introducio Capitulo 1 Conceitos Ger 1, Conceitos gerais 1.1 Oque é um computador 1.2 Oqueé programagio 1.3 Como resolver um programa no Computador 1.4 Formas de representagdo de algoritmos 1.4.1 Linguagem natural 1.4.1.1 Ambighidades do e/ou 1.4.1.2 Maior que, menor que, mais de, menos de 1.4.1.3 Adjetivos indefinidos 1.4.2 Pseudocddigo: portugués estruturado 1.4.2.1 Instrugbes seqilenciais 1.4.2.2. Instrugdes de deciséo 1.4.2.3 Instrugdes de repetigaio Convengdes para o portugués estruturado 6 —_ Exercicios propostos -7— Conclusdes Capitulo 2. Tipos de Dados e Aplicagées 2. Tipos de dados 2.1 Ossimbolos utilizados por computadores 2.2 Dados numéricos 2.2.1 Dados numéricos representiveis em computadores 2.3, Dados ndo numéricos representaveis em computadores 2.4 Os dados logicos Exercicios propostos Simbolos de uma linguagem ¢ enderegos 1s ‘Armazenamento de dados na meméria ‘Armazenando de dados do tipo inteiro Armazenando dados do tipo real ‘Armazenando dados dos tipos caracteres e literais, Dados do programa e variaveis Exercicios propostos ‘Tabelas de eédigos ASCII 2.10 — Conclusdes Capitulo3 Como Dar Ordens ao Computador 3. Como dar ordens ao computador 3.1 Operadores aritméticos 3.2 ExpressOes aritméticas e comando de atribuigaio 3.3 Exercicios propostos 3.4 Operadores ldgicos 3.5 Expresses légicas 3.6 __Exercicios propostos 3.7 Operadores relacionais e de igualdade 3.8 Expressdes relacionais NUUAURRRERDAS 10 ul 12 12 12 13 14 14 14 16 16 16 7 18 19 2B 28 25 25 26 21 28 29 30 30 39 3.10 3. 3.12 3.13 3.14 3.15 3.16 Capitulo 4 4, 41 42 43 44 45 Capitulo 5 5. SA 52 53 54 55 56 57 58 59 5.10 Sa 5.12 5.13 5.14 SAS Capitulo 6 6. 61 62 63 63.1 64 64.1 65 66 67 68 69 6.10 6.10.1 6.10.2 6.10.3 6.10.4 6.10.5 Exercicios propostos ‘Como 0 computador nos informa os resultados dos célculos ‘Como informamos ao computador os valores das varidveis Enderegos acumuladores Exercicios propostos Fungdes Prontas para uso Exercicios propostos Conclusdes Organizando Projetos de Programas Organizando Projeios de Programas Definigdes de tipos Reviso de conceitos Exercicios resolvidos Exercfcios propostos Conclusdes Programando em C/C++: introdugio Introdugao a Linguagem C++ Estrutura simplificada de um programa Constantes numéricas e nfo numéricas Operadores aritméticos Algumas funges intemas do compilador Enderegos de memérias, varidveis, identificadores Entrada e sada de dados em formato livre, usando cin e cout Saida de dados formatada usando cout Entrada de dados formatada com a fungo scanf() de C Saida de dados formatada com a fungdo printf() de C Constantes simbélicas ‘Outras Fungdes das linguagens C/C++ Exercicios resolvidos Exercicios propostos Palavras chaves de C/C++ Conclusées Estruturas de Controle em C/C++ Estruturas de Controle em C/C++ Operadores de igualdade e relacionais, Operadores légicos Estrutura de selegao Se ... Entio ...Senio Exercicios propostos sobre i-else Estrutura de selegdo miltipla switch() Exercicios propostos Estrutura de repetigao Faca ... Enquanto Estrutura de repeti¢ao Enquanto ... Faga Estrutura de repeticao Para...Faga Entrada e Saida de dados formatada em C++ Exercicios propostos sobre estruturas de repetigio Operadores Bit a Bit Operadores AND, OR ¢ XOR Operador de negagaio Operadores de deslocamento Exereicios resolvidos sobre operagdes bit a bit Exercicios propostos sobre operacdes bit a bit 30 31 32 32 34 35 36 36 38 39 40 40 46 48 50 50 SI 52 52 53 55 37 59 61 61 62 64 66 or 67 68 68 68 69 a 1 3B 4 15 9 83 86 87 88 89 89 90 91 6.11 Capitulo 7 7, WM 72 73 14 15 16 17 78 19 Capitulo 8 8. 81 82 83 84 85 86 87 Capitulo 9 9. 91 9.2 93 94 95 9.6 97 98 Capitulo 10 10. 10.1 10.2 103 10.4 10.5 10.6 10.7 10.8 10.9 10.10 Capitulo 11 Conclusdes Fungdes em C/C++ Fungdes Conceitos basicos Definindo fungées Protétipos de fungdes Passagem de parmetros por valor Passagem de pardmetros por referencia Sobrecarga de fungdes Gabarito de fungées Exercicios propostos Conclusdes Projetos de Programas com Vetores e Matrizes Vetores e Matrizes Vetores: conceitos Exercicios resolvidos com vetores Exercicios propostos sobre vetores Exercicios resolvidos com matrizes Exercicios propostos sobre matrizes Conclusdes Vetores em C/CH+ Vetores em CiCH++ Declarando e utilizando vetores Exerefcios resolvidos com vetores Passando vetores para fungdes Exercicios resolvidos com vetores ¢ fungoes Sobrecarga de fungdes com vetores Gabarito de fungdes com vetores Exercicios propostos Conclusées Matrizes em C/C++ Matrizes em C/C++ Declarando e utilizando matrizes Exercicios resolvidos com matrizes Algumas fungdes para manipulagdo de strings Exercicios propostos sobre matrizes Passando matrizes para fungdes Exercicios resolvidos com matrizes e fungBes Sobrecarga de fungdes com matrizes Gabarito de fungdes com matrizes Exercicios propostos sobre matrizes ¢ fungoes Conclusées Introdugio a Programacio Estruturada Introdugdo a programagao estruturada Estruturas basicas da programagiio estruturada ‘Combinando as estruturas basicas Aninhando e concatenando estruturas de selegao ‘Aninhando e concatenando estruturas de selegio e estruturas de 93 95 7 98 101 104 106 108 109 110 110 113 116 119 123 127 129 131 131 134 139 143 148 150 152 134 155 155 159 165, 168 169 171 175 7 179 180 181 181 183 183 11.23 3 a4 Capitulo 12 12, 12.1 122 123 12.4 125 12.6 Capitulo 13, 13. 13.1 13.2 133 13.4 13.5 13.6 13.7 13.8 13.9 13.10 13.11 13.12 13.13 Capitulo 14 14, 141 142 143 143.1 143.2 1433 repetig&io Aninhando e concatenando estruturas de repetigzio Exereicios propostos Conclusdes Programacao Top Down, Programagao Top-Down ‘Transigao entre a linguagem natural e a linguagem de programagao (Os passos do desenvolvimento top down 192 Um exemplo completo A documentacdo do desenvolvimento Exercicios propostos Conclusées Estruturas, Classes e Abstracio de dados Introducdo O enfoque da orientagio a objetos Conceitos fundamentais sobre estruturas de dados Arranjos de estruturas Exercicios resolvidos com estruturas de dados Exercicios propostos sobre estruturas de dados Classes ¢ abstragio de dados Exercicios resolvidos com classes Separando a interface da implementagao Exercicios resolvidos, separando a interface da implementagao Controlando acesso a membros FungSes membros construtoras Fungdes membros destruidoras Conclusdes Ponteiros Introdugao Ponteiros em C/C++ : conceitos gerais Ponteiros como argumentos para fungdes, Ponteiros e arranjos sem C/C++ Ponteiros para vetores Ponteiros para matrizes Ponteiros para estruturas 14,3.3.1Ponteiros para estruturas simples 14,3.3.2Ponteiros para arranjos de estruturas 144 145 146 147 148 148.1 14.8.2 14.83 148.4 149 14.10 Exercicios propostos sobre ponteiros e arranjos Ponteiros ¢ cadeias de caracteres Arranjos de ponteiros Ponteiros de fungao Reserva dindmica de meméria Reserva de meméria para vetores Reserva de meméria para matrizes Reserva de meméria para estruturas simples Reserva de meméria para arranjo de estruturas Reservando meméria dinamica para objetos Exercicios propostos sobre reserva de memiéria para objetos 185 186 188 189 191 191 193 199 199 201 203 204 205 207 209 215 216 218 224 226 228 233 236 240 241 241 244 245 246 247 248 249 250 252 253 234 234 256 237 258 259 260 262 263 14.11 14.12 14.13, 14.14 14.15 Capitulo 15 115 Capitulo 18 18, 18.1 18.2 18.3 18.4 18.4.1 ponteiro this Estruturas de dados auto-referentes Classes auto-referentes Exercicios propostos sobre tipos auto-referentes Conclusdes Arquivos Introdugao Arquivos em disco Abertura e fechamento de arquivos Operagées com arquivos texto em C++ Operagées com arquivo binério seaiiencial em C++ ‘Acesso aleatério com arquivo binério em C++ Exereicios propostos sobre arquivos Operagées sobre arquivos usando C Arquivos textos em C ‘Arquivos binarios em C ‘Arquivos aleatérios em C Conclusdes Modelagem de Dados com Classe Introdugao Consideragdes iniciais ‘A modelagem de dados Identificando e definindo objetos Atributos de objetos O modelo relacional dos dados Exereicios Propostos Implementando fungSes membros Exercicios propostos Modelando classes derivadas: heranga Implementando classes scom renga Exercicios propotos sobre herangas de classes Construindo 0 modelo de informagao Conclusdes Fungées Virtuais e Polimorfismo Introdugao Polimorfismo em tempo de execugio Polimorfismo em tempo de compilagao Apresentando a versio completa do programa Sistema Académico Sobrecarga de operador Exercicios propostos sobre polimorfismo em tempo de execugzio compilagao Conclusées ‘Topicos Variados em C++ Introdugao ‘Abordagem da mensagem baseada, em C++ Strings em C++ Sub-strings em C++ Estrutura union e tipo enumerado Estrutura union 264 265 269 21 2 273 273, 215 217 219 281 287 288 289 290 293 297 288 288 288 301 302 302 310 313 316 317 318 324 325 325 327 327 335 341 345 347 349 350 350 351 354 355 355 18.4.2 18.5 18.6 Capitulo 19 19. 19.1 19.2 193 19.4 19.5 19.6 19.7 19.8 19.9 19.10 19.11 19.12 19.13, 19.14 19.15 19.16 19.17 19.18 19.19 Bibliografia Estrutura enum Exercicios propostos Conclusdes Recursos Graficos da Linguagem C Introdugio Sistemas de coordenadas Modos de video e janelas Plotando pontos (pixels) Tragando retas Tracando retangulos ‘Tragando circulos ‘Tragando uma elipse ‘Tragando um setor de um cfrculo ‘Tragando um setor de uma elipse Escothendo as cores de linhas Escolhendo os estilos de linhas Tragando linhas utilizando deslocamentos relativos Escrevendo texto no modo gréfico Estabelecendo 0 estilo do texto ¢ 0 tamanho dos caracteres Mudando as cores, a fonte do texto eo fundo da tela Desenhando gréficos de barras, Desenhando polfgonos com o uso de vetores de pontos Padrio de cores para preenchimento de poligonos Concludes 337 357 358 359 359 359 361 363 365 366 367 367 367 368 368 369 369 370 372 373 374 374 36 371 Conceitos Gerais Capitulo 1 1. Conceitos gerais Esta publicagtio € dirigida as pessoas que desejam aprender sobre programagao de computadores e esto se iniciando nesta area. Foi feita uma criteriosa selegao de informagdes a fim de que o texto possa ser usado para apresentar os fundamentos basicos da programagao de computadores aos que no os conhecem, ¢ tornar possivel que, em pouco tempo, tais pessoas possam utilizar, no dia a dia, essa incrivel ferramenta, 1.1 O que é um computador ? a Por muitos anos 0 homem criou ferramentas conhecidas como ea) Méquinas para que 0s auxiliassem a resolver scus problemas. Com 0 S passar do tempo, o homem aperfeigoou essas ferramentas para que operassem automaticamente, passando ele agora a supervisionar seu funcionamento. Em seguida, 0 homem aprendeu a construir instrumentos que ampliassem sua capacidade de raciocinio € 0 auxiliassem em muitas outras tarefas, as quais nés comumente associamos a idéia de pensar. Essas maquinas slo chamadas computadores, pois elas, originalmente, foram desenvolvidas para executar céleulos aritméticos. Todo computador tem uma linguagem propria. Essa linguagem & chamada linguagem de maquina, Entretanto, comunicar-se nessa linguagem com 0 computador nao é muito facil. Entio o homem criou linguagens mais faceis, mais naturais, que servissem para muitos tipos de computadores, entre elas duas linguagens chamadas C/C++ que sdo coerentes com os principios da Programagao Estruturada, definido por Edsger Dijkstra e C.A.R. Hoare. Algumas dessas linguagens, mais préximas das linguagens naturais, so especificas para determinados tipos de problemas. Por exemplo: para a solugio de problemas técnicos ou cientificos pode-se utilizar as Linguagens FORTRAN (FORmula TRANslation), Pascal, € C/C+; a Linguagem COBOL (Common Business Language), que por muitos anos, foi recomendada para a solugdo de problemas comerciais, existindo ainda muitas outras linguagens ‘A maneira mais usual de se comunicar com 0 computador é escrever 0 que se quer utilizando-se da sintaxe de uma linguagem (regras de linguagem) ¢ dar para 0 computador ler. Esse texto, escrito na linguagem escolhida, ¢ chamado de programa fonte. Todas essas linguagens sto traduzidas por um programa interno chamado compilador, que converte um programa escrito em C/C++, por exemplo, para uma linguagem interna que 0 computador utilizado entende. Essa linguagem interna é conhecida como Linguagem de Maquina (cada ‘computador tem a sua prépria linguagem de maquina). Capitulo 1: Conceitos Gerais Sdnei de Brito Alves, Dr. 2 1.2 O que é programagio? ei Programar é escrever uma seqiiéncia de instruges ou comandos para serem, numa certa fase, executados por um computador. Os comandos sto escritos numa linguagem de programagio: Linguagem de Maquina, FORTRAN, C/C++, Linguagem Natural, Pseudocédigo ou Portugués Estruturado ete. Vamos aprender a escrever programas em Linguagem Natural e em Portugués Estruturado, utilizando-se técnicas de programagio estruturadas ¢, posteriormente, nas Linguagens de Programagio C/C++. ‘Apés escrever as instrugdes do programa em Linguagem Natural ou em Portugués Estruturado, deve-se dar para o computador ler. Essas instrugdes iro para uma parte do computador chamada meméria e sero executadas. Se o programa foi convertido para C/C++, por exemplo, essas instrugdes, programa fonte, deverio ser primeiro traduzidas para uma Linguagem de Maquina, conforme mostra a Figura 1.1, pelo Compilador. Da compilacao resulta 0 programa objeto, o qual por estar em Linguagem de Maquina, poder ser executado. 1.3 Como resolver um programa no computador? Uma recomendagao fundamental a uma pessoa que queira usar um computador é que ela deve aprender a ser precisa. Um computador pode auxiliar a resolver um problema somente se for instruido precisamente para tal, de acordo com regras cuidadosamente estabelecidas. So os seguintes os passos necessérios para a resolugao de um problema qualquer, no computador: Passo 1. Ter o enunciado do problema e saber exatamente 0 que vai ser desejado como resposta, Nao basta ter uma idéia do que se quer. Uma vantagem do uso do computador para resolver problemas ¢ o treinamento em formular definigdes precisas dos problemas. Passo 2. Decidir 0 método para resolver o problema. Nessa parte, é ainda mais exigido o raciocinio humano. Para a maioria dos problemas existem varios métodos de solugio e a escolha dependerd de uma anilise criteriosa para determinar o melhor método a ser utilizado. Chamamos de algoritmo a descri¢do de um método, especificando a sequiéncia de instrugdes, € outras agées, a serem executados pela maquina. Passo 3. Passar do algoritmo para a linguagem de programagdo, codificagdo, observando que: (1) Os comandos da linguagem de programagao devem ser escritos corretamente, ou seja, devem obedecer ao conjunto de regras que constitui a sintaxe da linguagem; (2) Apés esse momento, tem-se um programa codificado em uma linguagem de programacao. Passo 4. Digitar os comandos, utilizando-se de um ambiente de programagio, como por exemplo 0 ambiente C+, e submeter o programa ao computador, dar 0 programa para 0 computador ler, através do ambiente de programagio utilizado ¢, em seguida, executar 0 programa, no mesmo ambiente. compilacdo e de execuedo. Passo 5. Interpretar os resultados. Verificar se as respostas do programa, ou os resultados, estilo certos ou errados. O que se deve fazer a seguir dependerd da natureza do erro. Os erros podem ocorrer nas fases de compilagao do programa fonte e de execucao do programa objeto. Os erros da fase de compilagao representam violagdes da sintaxe da linguagem. O compilador, ao detectar esses erros, provoca a impressao de mensagens de erros. Conforme a ilo 1: Conceitos Gerais ‘Sdnei de Brito Alves, Dr. 3 gravidade do erro, o compilador poderd, depois da impresstio da mensagem, impedir a execugao do programa. Os erros da fase de execugdo representam, geralmente, erros de légica: ou o algoritmo foi especificado incorretamente, com imprecisdo, ou no foi fielmente codificado. Denomina-se de depuragdo o trabalho de verificar ¢ corrigir os erros do programa, submetendo-o ao computador, sucessivamente, até obter-se resultado correto. Passo 6. Documentar o programa. E uma fase importante, quando se deve descrever 0 que se fez com a finalidade de que outras pessoas possam entender 0 programa facilmente, para poder modificé-lo se necessério, Isto deve ser feito dentro do proprio programa, através de comentirios, ¢ em documentagao a parte, ressaltando-se, principalmente, as formas de entrada e-saida de dados. ‘A Figura 1.1 ilustra a seqiiéncia para a submisséo de um programa em um sistema computacional, para sua compilacdo ¢ execucdo pelo computador. Dados do Programa Programa Fonte 1 Compilador I ‘Sistema Computacional y Programa Obieto Executivel t ‘Sistema Computacional i Resultados Figura 1.1 — Passos para compilacdo e execugdo de um programa por um computador 1.4 Formas de representacio de algoritmos A especificagio da seqiiéncia ordenada de passos que deve ser seguida para a realizagao de uma tarefa, garantindo a sua repetibilidade, dé-se 0 nome de algoritmo. Existem varias formas de representago do algoritmo, mas nao hé um consenso com relagdo & melhor delas, O conceito de algoritmo nao foi criado para satisfazer as necessidades da computagZo, sendo a programacdo de computadores apenas um dos campos de sua aplicagao. Dentre as formas de representacdo de algoritmo mais conhecidas, destacam-se: (1) A Linguagem Natural ou Descrigao Narrativa; (2) O Pseudocédigo ou Portugués Estruturado. 1.4.1 Linguagem natural Pode-se escrever algoritmo em Linguagem Natural. Nesta forma, as representagdes dos algoritmos so expressas diretamente, conforme mostra os exemplos abaixo, em blocos de instrugdes: Capitulo 1: Conceitos Gerais ‘Sanei de Brito Alves, Dr. 4 Programa Raiz 1. Obter um valor decimal positivo, ¢ armazena-lo em N; 2. Calcular a Raiz Quadrada do valor armazenado em N, e guardar em R; 3. Imprimir o resultado armazenado em R. Fim Programa Raiz © uso da Linguagem Natural € pouco utilizado na pritica, para elaboragio de algoritmos, porque muitas vezes dé oportunidade a interpretagdes erréneas, podendo provocat ambighidades ¢ imprecisdes. Por exemplo: (1) Somar A e B, mas se A for menor que B, subtrair A de B; (2) Somar A e B. Entretanto, se A for menor que B, a resposta sera a diferenga entre A e B; e (3) Somar A e B, mas subtrair A de B quando A for menor que B. Sbvio que n&o ha diferenga légica. As formas das trés frases narrativas em portugues obscurecem claramente a semelhanca, pois cada uma pode ser reduzida a uma declaragao no formato: ‘SE (A é menor que B) ENTAO subtrair A de B; SENAO somar A com B; 1.4.1.1 Ambigiidades do e/ou Considere a declarago a seguir, de uma politica de vendas: “Clientes que gerem mais de um milhéo de Reais em negécios, por més, e ossuem um bom historico de pagamentos, ou que estejam conosco hd mais de 12 meses devem receber prioridade no tratamento”. Algumas perguntas podem ser colocadas: (1) Sera suficiente gerar mais de um milho de cruzeiros por més para receber tratamento prioritério? E ébvio que no, por causa da frase € possuem um bom histérico de pagamentos; (2) Mas sera suficiente ser um cliente hé mais de 12 meses? Bem, tudo dependeré do tom de voz com que a politica for anunciada, e poderia ser anuneiada como: (mais de um milhdo de Reais por més) e (bom historico de pagamentos) ou (mais de 12 meses); ou poderia ser aberta como: (mais de um mithdo por més) e ((bom histérico de pagamento) ou (mais de 12 meses) ). Dependendo da interpretagao, tal politica, assim colocada, poderia trazer prejuizos a empresa. A moral da historia é que se no podemos evitar escrever declaragdes que misturem E com OU na mesma sentenga, deveremos Teescrever as combinagdes para expressar 0 verdadeiro significado, de forma que se possa saber, sem ambigilidades, 0 que se quer dizer. Por exemplo, poder-se-ia reescrever a politica anterior como: “Clientes que gerem mais de um milhio de Reais em negécios, por més e, em adicdo, ou possuem um bom histérico de pagamentos ou tenham estado conosco ha mais de12 meses, devem receber tratamento prioritirio”. 1.4.1.2 Maior que, menor que, mais de, menos de A lingua portuguesa muitas vezes nos causa problemas quando necessitamos expressar um dominio de valores como parte de uma condig&o. Vamos supor que alguém diga: A¢é 30 unidades, sem desconto. Mais de 30 unidades, 5% de desconto. O que poderia ser mais claro do que isto? Mas que desconto é dado para exatamente 30 unidades? Para tentar resolver tais questées poderia se utilizar de palavras como inclusive ou até e incluindo. Também poderia ser dito: quantidade menor que ou igual a 30, ¢ voltar-se-ia a0 problema de se ter muitas maneiras de se dizer a mesma coisa. Finalmente, tais questdes poderdo ser resolvidas com 0 uso de simbolos matematicos relacionais e de equivaléneia: Capitulo 1: Conceitos Gerais ‘Sdnei de Brito Alves, Dr. 5 > maior que >= maior ou igual a 0); Neste exemplo, pode acontecer que exista mais tinta que o necessdrio. Neste caso, 0 apartamento pode ja estar limpo ¢ continuar sendo pintado, Assim, a condigao de término “(Tinta > 0) E (Apartamento Sujo)” é mais adequada: Obter (Tinta); FACA { “Pinte o apartamento”; Tinta = Tinta —1; } ENQUANTO (Tinta > 0) E (Apartamento Sujo) ; ‘Nesta instrugao as palavras-chave FACA e ENQUANTO sio obrigatérias, ‘+ Exemplo com ENQUANTO ... FACA, Pode-se inverter a condigGo para evitar que se tente executar uma ago sem que as condigdes necessdrias ao seu inicio tenham sido antes providenciadas. Dessa forma, uma nova instrugdo de repeti¢ao devera ser utilizada. Veja que a condigao (houver tinta)?, utilizada nesta nova instrugio, evita que se tente executar a ago pinte 0 apartamento, caso a tinta nao tenha sido previamente providenciada: ENQUANTO (Houver Tinta E Apartamento Sujo) FAGA “pinte 0 apartamento”; FIM ENQUANTO Isto acontece porque o teste da condigio é realizado antes da execugdo da ago. No exemplo seguinte, um recipiente para o armazenamento da tinta é criado, e em adigdo, cada vez que a ago pinte o apartamento for executada, se gasta tinta, conforme exemplificado a seguir: Obter (Tinta); ENQUANTO ((Tinta > 0) E (Apartamento Sujo)) FACA “Pinte 0 apartamento”; Tinta = Tinta — 1; FIM ENQUANTO Os complementos FACA e FIM ENQUANTO sao opcionais, e portanto podem ser suprimidos. Podem também ser substituidos por um par de {..}, quando for necessério executar um bloco de instrugdes sob a condigio. Por exemplo: Obter (Tinta); ENQUANTO ((Tinta > 0) E (Apartamento Sujo)){ “Pinte 0 apartamento”: Tinta = Tinta — 1; Capitulo 1: Conceitos Gerais ‘Sdnei de Brito Alves, Dr. 9 ‘A instrugdo Tinta = Tinta - | ¢ interpretada como: “subtraia 1 do valor armazenado em Tinta e guarde 0 resultado em Tinta”. Dessa forma, num certo instante no tempo, ou 0 recipiente “Tinta” estaré zerado ou o “Apartamento estaré limpo”. Quando uma dessas condigdes ocorrer, ou ambas, a iteragdo é encerrada. Observe também que se a instrugdo Obter (Tinta) resultar num valor menor que 1, isto é, se inicialmente Tinta < 1 nenhuma instrugio do comando ENQUANTO .... FACA sera executada, jé que, neste caso, a condigo (Tinta > 0) E (Apartamento Sujo) produz resultado falso, interrompendo, conseqientemente, a execugaio deste comando. O mesmo ndo ocorre com o comando FAGA ... ENQUANTO, pois, neste caso, este 6 verificaria a condigao de parada da repetigo apés a execugdo da ago, ou ages, pelo menos uma vez. © Exemplo com PARA ... FACA. ‘Uma outra alternativa para executar procedimentos repetitivos é através da estrutura de controle PARA ... FAGA, conforme exemplificado a seguir. Nesta estrutura, a varidvel contadora Tinta, é iniciada com um valor, que depois ¢ subtraido de um valor até atingir 0 valor final, representando a condigio de parada. No exemplo seguinte, inicialmente Tinta recebe 0 valor 100 e executa a ago “Pinte o apartamento”; em seguida, subtrai 1 de Tinta e verifica se o novo valor de Tinta é maior que zero. Se for, executa novamente a agio “Pinte 0 apartamento”; caso contrario, a iteragdo é finalizada. Dessa forma, para cada novo valor de Tinta maior que zero, a ago “Pinte o apartamento” é executada. PARA (Tinta=100; Tinta>0; Tinta = Tinta —1) FAGA “Pinte o apartamento”’; FIM PARA Os complementos FACA e FIM PARA sio opcionais e podem ser suprimidos, conforme exemplificado a seguir: PARA (Tinta=100; Tinta>0; Tinta = Tinta -1) “Pinte o apartamento”; Também se pode utilizar a estrutura de controle PARA ... FACA no formato exemplificado abaixo, com a condigdo bem mais elaborada que a anterior, produzindo resultados semelhantes: 100; (Tinta >0) E (Apartamento Sujo); Tint “Pinte o apartamento"; inta-1) Dessa forma, para que a condigio (Tinta>0) E (Apartamento Sujo) seja verificada, inicia-se a contagem com o valor 100, decrementando o contador de um em um, até que atinja © valor 0, ou o “Apartamento jé esteja limpo”. E importante observar que para cada valor do contador Tinta, se o resultado da avaliag20 da expresso (Tinta >0) E (Apartamento Sujo) for verdadeiro, a agdo-"Pinte o apartamento” & executada. Conclui-se, portanto, que esta ago pode vir a ser executada no maximo 100 vezes. Observe que a estrutura PARA...FAGA possui trés instrugdes, separadas por “;”, representando a instrugdo inicial executada apenas uma vez, a condigo final de parada da repetigo, e o incremento ou decremento da varidvel de controle da repetigao. A rigor, pode-se suprimir qualquer delas, mesmo nao sendo aconselhavel. Capitulo 1: Conceitos Gerais Sdnei de BritoAlves, Dr. 10 Assim, pelo exemplo seguinte fica claro que as expresses que compiem a instrug’o PARA..FAGA podem ser compostas de varidveis, constantes ou expressdes, ¢ que 0 incremento pode ser positivo ou negativo. PARA (V = Valorlnicial; V <= ValorFinal; V = V + Delta) { R=Raiz(V); ESCREVA(“O Resultado =“, R ); } Deve-se usar esta estrutura, preferencialmente, quando se conhece a priori o numero de vezes que a aco, ou grupo de ages, vai ser executado. 1.5 ConvengSes para o portugués estruturado E possivel escrever programas, com qualquer grau de complexidade, utilizando-se apenas as trés estruturas bisicas que acabaram de ser apresentadas: Estrutura Seqitencial, Estrutura de Selegéo e Estrutura de Repeti¢do. Pode-se resumit as convengdes para 0 portugués estruturado como segue: 1. A légica de todos os passos considerados no item 1.4 € expressa como uma combinago de Instrugdes Seqiienciais, Instruges de Decisio e Instrugdes de Repetigio. 2. As regras de portugués sem ambigitidade devem ser observadas, como foi discutido no item 1.4. 3. As palavras-chaves SE, SENAO SE, FACA ... ENQUANTO, ENQUANTO .... FAGA. © PARA ... FACA podem ser escritas em destaque ¢ as ages subordinadas devem set deslocadas para a direita, mostrando a hierarquia entre as estruturas. Lembre-se de que o Portugués Estruturado apresenta muito da precisto de um programa de computador, mas nao é um programa de computador. 1.6 Exercicios propostos Pesquise neste material resolva ou responda as seguintes questdes: 1.6.1 Pode-se afirmar que programas que produzem bons resultados estio isentos de erros de qualquer natureza? Por qué? 1.6.2 O que se entende por Compilador? 1.6.3 Qual o papel de um algoritmo na elaboragio de um programa? 1.6.4 O uso do Portugués Estruturado (Pseudocédigo) disciplina o raciocinio do programador? Se sim, Por qué? 1.6.5 Quais as diferengas fundamentais entre as estruturas FACA...ENQUANTO, PARA... FAGA ¢ ENQUANTO...FACA? 1.6.6 Se alguém dissesse para voce: ‘o cliente X é habitual”, como interpretaria tal afirmacio? Capitulo 1: Conceitos Gerais ‘Sdnei de Brito Alves, Dr. u 1.6.7 Use uma das instrugdes de repetigtio para equacionar o seguinte problema: Sew carro ests muito sujo e deve ser lavado por vocé, imediatamente. Hoje, a Companhia de Agua de ‘sua cidade interrompeu o fornecimento por todo o dia e 0 volume d'égua armazenada na caixa d’dgua de sua casa pode néo ser suficiente. 1.6.8 Vocé foi convocado pela sua sogra para encher 100 baldes, soprando-os incansavelmente, para em seguida, penduri-los um a um, enfeitando a residéncia, para a realizagdo da festa de seu aniversétio. Usando as estruturas mais adequadas, equacione este procedimento. 1.6.9 Usando as estruturas mais adequadas, equacione a légica envolvida nos seguintes procedimentos: E necessdrio fazer duas coisas hoje & tarde: (1) ir ao baile com alguém, que yocé aguarda; (2) ler um livro; Deve-se esperar para “ir ao baile” lendo o livro. O livro tem 100 paginas. A prioridade, entretanto, é ir ao baile. 1.6.10 Desafio: Equacione, usando apenas instrugdes de deciséo, a seguinte politica de frete da empresa UAI, a partir de dados conhecidos, denominados TipoFrete e PesoMercadoria, fomnecidos pelo cliente: (1) Para frete via terrestre o prego € de RS5,00 por Kg, para até 20 Kg. Acima de 20 Kg 0 valor é de R$4,00 por Kg; (2) Para frete via aéreo, a tarifa € de RS10,00 por Kg, para até 20 Kg; e de RS7,00 por Kg, para volumes acima de 20 Kg. 1.7 Conclusées Neste capitulo foram apresentados os conceitos basicos ¢ fundamentais para aqueles que estéo se iniciando na arte da programagio, Considere seriamente os conhecimentos ensinados aqui. Faga sempre uma revisio deste material, sempre que tiver dificuldades na utilizagdo das estruturas de controle de seus projetos de programas. Resolva os exercicios propostos na ordem indicada. Observe as suas atividades didrias fe extraia procedimentos delas. Tente equacionar tais procedimentos utilizando-se dos conceitos aqui expostos. Tipos de Dados e Aplicacdes Capitulo 2 2. Tipos de dados Todo 0 trabalho realizado por um computador para a execugao de um programa é baseado na manipulacio de instrugdes ¢ dados contidos em sua meméria e que podem ser classificados como: (1) Insérugdes, que comandam 0 funcionamento do sistema computacional ¢ determinam a maneira como devem ser tratados os dados. Elas estiio inseridas nos programas que so submetidas a estas mAquinas; (2) Dados, que correspondem & porgo das informagdes a serem manipuladas ou processadas pelo sistema computacional. Teoricamente, um computador pode tratar nfo apenas dados numéricos, mas, também, varios outros tipos de dados. 2.1 Os simbolos utilizados por computadores Todos os computadores possuem um conjunto de simbolos basicos a partir dos quais sdo constituidas as informagdes, representéveis intemamente. A seguir so apresentados alguns simbolos encontrados na maioria dos computadores: © Letras: 8, b, 6, dan Z, A, B, C, Dy snp Z © Algarismos: 0,1, 2,3,..9 © Simbolosespeciais: + - * / () => <5; {},:27%1#@ $ * “ []& !~ | eoespago em branco 2.2 Dados numéricos Vale recordar alguns conceitos bisicos relacionados a teoria dos mimeros naturais, representado por: N = {1, 2, 3, ...}. Nessa seqliéncia encontramos o conjunto dos niimeros inteiros Z = {....-3, -2,-1, 0, 1, 2, 3, ..}. O conjunto Z contém todos os elementos de N, bem como alguns mimeros que nao pertencem a N (os mimeros negativos ¢ 0 zero). Portanto diz-se que N esta contido em Z ou que Z contém N. Na seqiiéncia abaixo encontramos 0 conjunto dos nimeros fraciondrios Q = {p / q| p, q pertencem a Z}. O conjunto Q, obviamente, inclui os mimeros inteiros e é dado pelo universo dos nimeros que podem ser expressos na forma de uma frago, isto é, um quociente onde o numerador p ¢ o denominador q so niimeros inteiros. Por iiltimo tem-se-o conjunto dos nimeros reais R, formado pela unitio do conjunto dos niimeros fracionérios Q com o conjunto dos mimeros que nao podem ser expressos na forma de uma fragio (nimeros irracionais), como Raiz(2) e o mimero Pi=3.141592. O conjunto dos ‘mimeros complexos sera estudado posteriormente. A figura a seguir mostra uma sintese das informagdes apresentadas até aqui: Capitulo 2: Tipos de Dados e Aplicagdes Sdnei de Brito Alves, Dr. 13 R Figura 2.1 - Representagao do universo dos conjuntos numéricos e as relagdes de pertinéncia entre eles. 2.2.1 Dados numéricos representaveis em computadores Os dados numéricos representaveis num computador so divididos em apenas duas classes: inteiros e reais. Os dados numéricos inteiros so aqueles que no possuem componentes decimais ou fracionarios, podendo ser positivos ¢ negativos. Os elementos pertencentes aos conjuntos N ¢ Z, apesar de serem representiveis na classe dos niimeros reais, Slo clasificados como dados do tipo inteiro, por ndo possuirem parte fraciondria (ponto flutuante). Esta possibilidade é interessante por permitir uma economia de espaco na meméria dos computadores. Os elementos dos conjuntos Q e R, por possuirem parte fracionéria, nfo podem ser representados na classe inteira, pertencendo necessariamente aos tipos de dados ditos reais (ponto flutuante). Alguns exemplos de dados inteiros ¢ reais so apresentados a seguir: Dados Inteiros Dados Reais 69 69.69 -32768 144.0 -12 -13.0 32767 13.487E+2 237845 -0.333E-3 2.3 Dados nao numéricos representiveis em computadores Existem dois tipos de dados nfo numéricos que podem ser representados em computadores: caractere ¢ literal. O dado definido como caractere é constituido por qualquer ‘um simbolo do conjunto de simbolo da linguagem. O dado definido como literal & constituido por uma seqiiéncia de dois ou mais simbolos. Em qualquer caso, 0 simbolo ou o conjunto de simbolos deve vir fechado entre aspas, ou apéstrofos. Este tipo de dado é também chamado de alfanumérico, cadeia de caracteres, ou ainda string (do inglés). Alguns exemplos de dados dos tipos caractere e literal so apresentados a seguir: Caracteres Literais (strings) 0 “Tire férias” x “Pinte 0 apartamento” “% 69.69" © dado “69.69” representa um literal (string) nao numérico de 5 caracteres e é constituido por “6”, “9”, “.”,"6", “9”. Observar que este literal difere do valor real 69.69. Em geral, os delimitadores “* ” caracterizam um dado como alfanumérico. Da mesma forma, constitui-se erro grave confundir 0 caractere ‘0" com o valor 0. Utilizando estes conceitos podemos imprimir textos ¢ resultados de célculos usando 0s novos comandos IMPRIMA() ou ESCREVA(, que séo equivalentes, expressos na forma abaixo: Capitulo 2: Tipos de Dados e Aplicagdes ‘Sdnei de Brito Alves, Dr. 14 IMPRIMA “Digite um valor para N: ESCREVA “O valor da expressaio 2.4 Os dados légicos Os dados légicos, também chamados booleanos devido & significativa contribuigao de BOOLE 4 area da légica matematica, refletem a maneira como os computadores funcionam, em resposta a questdes como: - SE (Vocé necesita de férias) Imprima “Tire férias”; A condig&o a ser avaliada (Vocé necessita de férias)? produz um de dois resultados: verdadeiro ou falso. Algumas convengdes utilizadas em linguagem natural para a representagdo de dados Igicos so apresentadas a seguir: Valor légico Verdadeiro Valor logico Falso Verdade Falso Ligado Desligado Aberto Fechado g 0 1 Tal conceito permite que instrugdes, como a abaixo, possam ser executadas: SE (x> 1) IMPRIMA “O Resultado=“, a +b -c; Finalmente, a arvore abaixo resume a classificagiio dos dados, com relago aos tipos apresentados: Tipos de Dados Numérico Literal] — [Légico Inteiro ‘Real Figura 2.2 - Representagdo dos tipos de dados em computadores. 2.5 Exercicios propostos Resolva os exercicios abaixo e tire suas diividas. Prepare-se! Nao deixe as diividas acumularem-se: 2.5.1 Classifique os dados abaixo de acordo com os tipos: inteiro, real, literal e légico: (inteiro) 33333 (Real) -0.003 (48767 (+) +0.05 (00 () 3200 ( ) -1M ( ) +37500 ( #360" ( )*0.05" (__) Verdade CF (=) Falso «jw (_) “Escola” ( "37500" ( ( aw ) “40.05” Capitulo 2: Tipos de Dados e Aplicagdes ‘Sdnei de Brito Alves, Dr. 15 2.5.2 Quais as diferengas entre instrugdes e dados, no contexto de um programa de computador? 2.5.3 Descubra que tarefa deve ser calculada nos sete passos do programa Mistério: PROGRAMA Mistério 1. Leia um numero inteiro N, entre 10 e 100; 2. Pense em um mimero inteiro M entre 1 ¢ 20; 3. Adicione M a N e memorize o resultado em K; 4, Multiplique K por 4 ¢ memorize o resultado em W; 5. Divida W por 2 ¢ memorize o resultado em K; 6. Subtraia N de K e memorize o resultado em W; ‘ubtraia o dobro de M de W e memorize o resultado em W; FIM Mistério Preencha a tabela abaixo com o resultado da execugo de cada paso do programa! Desempenhe o papel do computador na execugao das ages acima, MEMORIAS PAsso [NIM |K_ [W. Faye PpSpP| omoaaqnAaz™= Resposta: N é igual a W ?:(Verdade) (Falso) ; 2.6 Simbolos de uma linguagem ¢ enderecos No desenvolvimento dos exercicios do item 2.5 observou-se a necessidade do uso de simbolos, tais como N, M, K e W, para o armazenamento de dados numéricos. Lembre-se agora, "Para que ndo perca as informacdes, 0 computador precisa guardé-las em sua ‘meméria". De uma maneira simples, a meméria de um computador pode ser vista como um conjunto de células, cada uma delas identificada unicamente por um niimero inteiro distinto, conhecido por endereco. Cada célula de meméria é mais conhecida como byte, isto é, um conjunto de 8 bits, numerados em ordem decrescente de 7 até 0. Cada bit, por sua vez, 6 capaz de armazenar uma informagac bindria (0 ou 1). Como um bit possui dois estados possiveis (base 2), ¢ como um byte é formado por 8 bits, entio se conclui que um byte possui 28 = 256 combinagdes de estados possiveis. Como cada estado representa um mimero inteiro, entio se conclui que se pode armazenar em certo byte de meméria qualquer dos valores de 0 a 255, obviamente, um valor de cada vez. Veja a Figura 2.3. Capitulo 2: Tipos de Dados e Aplicagdes Sdnei de Brito Anes, Dr. 16 Enderegos Conteudo dos De Meméria___|Enderegos 10000 18 10001 255 10002 0 10003 3 10004 3) Figura 2.3 - Representacdo das células de meméria de um computador (enderecos) e respectivos contetidos (dados). Apesar dos bytes serem subdivididos em bits, a menor porgo acessivel da meméria & © byte. Isto significa, na pratica, que s6 podemos escrever, ou ler algum dado da meméria do computador, byte a byte. Entretanto, 0 programador néo precisa se preocupar com esta particularidade dos sistemas computacionais. Veja a Figura 2.4, Bt 7 6 5 4 3 Valor 0 0 1 0 1 0 1 1 Figura 2.4 - Representagao esquemética de um byte. Valor armazenado equivale ao decimal 43. 2.6.1 Armazenamento de dados na meméria Cada tipo de dado necessita de certa quantidade de meméria para armazenar a informagdo que cle representa. A quantidade de memoria utilizada depende, fundamentalmente, da arquitetura do computador utilizado. 2.6.1.1 Armazenando dados do tipo inteiro Considere que so necessérios dois bytes de oito bits para 0 armazenamento de um dado do tipo inteiro. Logo, o mimero de estados possiveis cresce para 2° x 2° = 65536 estados. O conjunto dos mimeros representéveis nessas condigdes (dois bytes de 8 bits cada) ¢ listado a seguir: Zp = {-32768, -32767,,... -2, -1, 0, 1, 2, .. 32766, 32767}. Observe que se fosse utilizado apenas um byte de 8 bits, a combinagao de estados possiveis seria 2° = 256: Z» = {- 128, -127, 25-2, 1, 0, 1, 2, nny 126, 127}. Os computadores também trabalham com mtimeros inteiros de dupla precisio, utilizando para o seu armazenamento quatro bytes de meméria, ampliando a faixa dos mimeros inteiros representéveis no computador. Supondo que o computador utilize quatro bytes de oito bits para o armazenamento de um inteiro duplo, terfamos 2° x 2° x 2° x 28 estados possiveis, ¢ uma faixa de valores entre -2147483648 4 2147483647. A conclusao é¢ que 0 computador ¢ uma maquina finita, com restrigdes em relagfo a sua capacidade para armazenar informagées. Caso contrério poderia ser armazenado em sua meméria qualquer quantidade de informagées, inclusive os valores inteiros do conjunto Z de nimeros inteitos: Z= sy -2y-L, 0, 1,2 os} 2.6.1.2 Armazenando dados do tipo real © conjunto dos nimeros reais R é representado pelo conjunto dos nimeros fracionarios Q com o conjunto dos mimeros irracionais. Observou-se, no caso do conjunto dos mimeros inteiros, que existem limitagdes para o armazenamento em memeéria. Estas Capitulo 2: Tipos de Dados e Aplicagdes ‘Sdnei de Brito Alves, Dr. 17 limitagBes sfo extensivas também ao conjunto dos nimeros reais. Considere agora que sio necessérios quatro bytes para o armazenamento de um niimero real simples. Este nimero de bytes esta, obrigatoriamente, associado a precisdo (niimero de casas decimais) de céleulo que se quer obter. Conclui-se, portanto, que quanto maior for o mimero de bytes utilizado para armazenar um mimero real, maior seré a precisio dos resultados obtidos. Isto também significa que 0s dados reais, recebem tratamento diferenciado, sendo armazenados de uma maneira diferente dos inteiros. ‘A maioria das linguagens utiliza 0 dado real de preciso dupla, isto é, utiliza oito ou dezesseis bytes para armazenar, na meméria do computador, um niimero real, com mais casas decimais, Para ilustrar, pode-se afirmar que um numero real simples é armazenado com no maximo sete casas decimais, se forem utilizados quatro bytes de oito bits; dezesseis a dezessete casas decimais se forem utilizados oito bytes de oito bits cada; ¢ cerca de 25 casas decimais se forem utilizados 16 bytes de oito bits. 2.6.1.3 Armazenando dados dos tipos caractere ¢ literal Informag&es dos tipos caractere ¢ literal podem ser representadas por um tinico caractere, ou por um conjunto de simbolos, tais como letras, algarismos e caracteres especiais, conforme apresentado anteriormente, Deve-se ter em mente que um byte de oito bits pode armazenar 2* = 256 combinagdes possiveis, onde cada combinagio representa uma informago distinta, A questio agora é a seguinte: Como os computadores conseguem diferenciar um simbolo do outro? Ora, a resposta é simples, cada simbolo ¢ representado, internamente, por um valor entre 0 ¢ 255, pertencente a um dos 2° = 256 estados possiveis. E exatamente por isto que 0 conjunto de simbolos dos computadores ¢ limitado, usualmente, pela quantidade de bits do byte. Assim, por exemplo, o caractere “A’ vale, internamente, 65, enquanto que o caractere ‘a’, vale 97. Dessa forma, para cada simbolo de seu conjunto de simbolos, 0 sistema computacional associa um valor, para que seja possivel distinguir um simbolo do outro. A tabela a seguir exemplifica essas associagbes: A Vale 65 a Vale 97 B Vale 66 b Vale 98 Vale 67 c Vale 99 Z_ Vale 90 z_Vale122 O literal “COPA”, armazenado na meméria, ocupa quatro bytes continuos. Iniciando, por exemplo, pela posigtio de meméria 10000, tem-se o resultado apresentado na Figura 2.5. Veja a tabela de Cédigos ASCII (American Standard Code for Information Interchange) no final deste capitulo. Enderegos | Conteiido dos De Meméria |Enderegos 10000 67 c 10001 79 ° 10002 80 . 10003 65 A Figura 2.5 - Armazenamento do literal “COPA” na memria de um computador, iniciado 0 ‘armazenamento no byte de enderego 10000, utilizando-se cédigo ASCII. Capitulo 2: Tipos de Dados e Aplicagbes Sdnei de Brito Alves, Dr. 18 Veja a tabela de Cédigos ASCII (American Standard Code for Information Interchange) no final deste capitulo. 2.7 Dados do programa e varidveis Referenciar valores absolutos de meméria, tais como imprima o contetido do endereco 10000, nao é pratico e nem funcional. Lembrem-se, estamos caminhando pata o uso pleno das Linguagens Naturais. A ago Adicione M a N e memorize o resultado em K considera trés simbolos M, N ¢ K e, em adigao, admite, para que a ago possa ser executada , que dados numéricos foram memorizados em M e N. Os simbolos M, N ¢ K nao s&o literais; so varidveis representando enderegos de meméria, onde, certamente, deverdo estar armazenados dados numéricos. Dessa forma, a0 invés de escrevermos: 1, Leia um niimero inteiro maior ou igual a 10 ¢ menor ou igual a 100, armazenando-o no enderego de meméria 10000; 2. Pense em um miimero inteiro que seja maior ou igual a 1 e menor ou igual a 20, armazenando-o no enderego de meméria 10001; 3. Adicione 0 conteiido do endereco de meméria 10000 ao contetido do enderego de meméria 10001, ¢ guarde o resultado no enderego de meméria 20000, Podemos escrever estas instruges como abaixo, em pseudocddigo (Portugués Estruturado). Observe que continuamos utilizando palavras (verbos fortes) da Lingua Portuguesa para representar instrugdes, como nos casos de LEIA(), IMPRIMAQ) ou ESCREVA(). O projeto de programa abaixo 1é um primeiro valor para N; se N for maior que zero, a raiz quadrada de N é calculada, armazenada em R e, em seguida, os valores de N e de R sio impressos. Apés a impressio, um novo valor de N é lido e novamente testado, Esta iteragdo s6 é interrompida quando N PROGRAMA Raiz ESCREVA “Digite 0 Primeiro Valor: 1 ==1) { R = RaizQuadrada(N); ESCREVA “Para N=", N, “Raiz=", R; ESCREVA “Digite 0 Préximo Valor: 1 ==1) { Multiplique F por N e guarde o resultado no préprio F; Subtraia 1 de N ¢ guarde 0 resultado no préprio N; } Faga 0 papel do computador, executando as ages enumeradas e preenchendo a tabela abaixo, para cada passo executado, e em seguida responda as seguintes questdes: 1. O que em sua opiniao as instrugdes do trecho de programa acima calculam? 2. O que aconteceu com o valor guardado no enderego N? 3. O que voce faria para preservar o valor inicial guardado em N? MEMORIAS Passos [N F N>=1? 1 5 - = 5 i = 5 1 Verdade * 2.8.11 As instrugdes do Programa SérieA, listadas abaixo, executam uma misteriosa série, O nosso objetivo ¢ tentar descobrir os termos da série que est sendo executada. Vamos la! PROGRAMA SérieA. Armazene o niimero 6 no enderego N; Armazene o niimero 1 no enderego D; Armazene o valor zero no endereso S; ENQUANTO (N >= 1) { Multiplique valor em N por (N + 1) e divida o resultado por D, Adicione a S 0 resultado deste célculo; Adicione um a D e Subtraia 1 de N; } ESCREVA “O valor de S:”, FIM Série Para descobrir 0 que os procedimentos dos passos acima executam complemente o sPreenchimento da tabela abaixo. Observe atentamente N (de Numerador) e D (de Capitulo 2: Tipos de Dados e Aplicagdes Sdnei de BritoAlves,Dr. 21 Denominador). Liste todos os termos da série que os procedimentos acima calculam. Analise 0s valores finais armazenados nos enderegos representados por N, De S. MEMORIAS, , |passos_[N [D [8 |N>=12 ave LL 6 2 2 - 1 a - 0 E sim 2.8.12 Vamos agora descobrir os termos de outra série misteriosa, executada pelas instrugdes abaixo. Avalie o seu faro fino. Fique de olho em T (de Termo): PROGRAMA SérieB Leia um valor real para X, que seja maior que zero; ‘Armazene o valor zero no enderego E; Armazene o valor 1 no enderego F; ‘Armazene o valor zero no enderego N; ENQUANTO (N<=6) { Divida o valor de X elevado a N pelo valor em F ¢ guarde 0 resultado emT; Adicione a E, o valor guardado em T; Adicione 1 aN; ‘Multiplique F por N e guarde o resultado do calculo no préprio F; } ESCREVA “O resultado =", B; FIM SérieB Complemente 0 preenchimento da tabela abaixo, passo a passo, fazendo o papel do computador. Liste todos os termos da série. Analise os resultados: MEMORIAS N<= passos [X_[E 2.0 |? 0 =P SRRRIZ =3)3/3)3]4 me]= OS Dica: Esta série calcula o mimero de €*. 2.8.13 Descobrir 0 que um conjunto de instrugdes executa ¢ um bom exercicio para aguear seus neurénios. Aumentaremos, agora, 0 grau de dificuldade. O conjunto de agées abaixo desafia vocé a descobrir qual a série que, se executada corretamente, produz 0 resultado do co-seno de um Angulo X, dado em radianos. Quais os termos dessa série calculados pelo programa Co-seno, escrito em pseudocédi igo? Capitulo 2: Tipos de Dados e Aplicagdes Sdnei de Brito Alves, Dr. 22 PROGRAMA Co-seno Leia (X); N=2; S=-1; CosX=1; F=2; ENQUANTO (N <= 8) { T=X/F*S; CosX = CosX + N=N+2; F=F*(N-1)*N; } IMPRIMA “Para dngulo =", X, “Coseno =”, CosX; FIM Programa Co-seno Complemente o preenchimento da tabela abaixo ¢ liste os termos da série. Fique de colho no valor guardado em T (de Termo): Memoria PASSOS|X_|N |S _|CosX |F_|T_|N<=8? 1 3.1? |? |? 7 - + - 2 2 2 2, = 3 2 2 : 4 2 = 5 2 : 6 sim 61 62 Analise os resultados. Tire suas proprias conclusdes! Capitulo 2: Tipos de Dados e Aplicagbes ‘Sdnei de Brito Alves, Dr. 23 2,9 Tabela de cédigos ASCII - (American Standard Code for Information Interchange) Cédigo ASCIT Cédigo ASCH Caractere: Caracteres Decimal | Hexa Decima ]Hexa 1 (aul) [0 0 [cut [2 Je Cirl-A [1 1__[CrieM [13 d CriB [2 2 _|CwN [14 Te CHl-c__[3 3 [cro [is [fF CoD [4 4__[Ceiep |16 10 Crile [5 3 [Cw-Q = [17 im CulF (6 6 |Cu-R [18 12 Cri-G [7 7 [Cris [19 13 CotH_ [8 8 [cut [20 14 Crit [9 9 [cru [21 15 Cris__|10 a |Cukv [22 16 Cr-K [1 b [Crew [23 17 Cri-x [24 is. Cry [25 197 Curi-Z__ [26 1a_ [0 ESC [27 ib [1 Cui [28 1c_[2 Crt [29 id [3 Crri-6 [30 le [4 Crie__([31 if [5 Espago [32 20__|6 1 33 217 e 34 28 # 35 2319 Ss 36 24: % 37 25 & 38 26 |< : 39) 27 |= ( 40 28> ) a 29 |? * 42 2a_|@ + 43 2b A : 44 2c B = 45 24_[C D 68 44 [z E 3) 45 IL F 70 46 |\ G 7 a7 H 72 4s_ |" I B 49. J 74 4a__|* K 75 4b [a L 76 4c [b Capitulo 2: Tipos de Dados e Aplicagoes Sdnei de Brito Alves, Dr. 24 M. 77 4c [ec 99) 63 iN 78 afd 100_[64 0 79, 30 [e 1o1__[65 P 80, st [ft 102 [66 IQ’ 81 52_ Ig 103 [67 R 82 52h 104 [68 Ss 83 33 i 105 [69 i 84 34 [i 106 | 6a U 85. 55__|k 107 6b. Vv 86 56__[I 108 [6c W 87 37__|m 109 [6d x 88 38 |n 110 [6e Y 89 59 [o i [6f P 112__[70_ |x 120 [78 4 113, 7 121_(|79 rt 4 [72 (2 122 |7a s us (73 II 123 [7b t 16 (74 124 [7c w 7 [7s fh 125 [74 v. 1s [76 |- 126 |7e Ww 9177 2.10 Conelusdes Neste capitulo foram apresentados os conceitos bisicos sobre dados manipuliveis pelos computadores, que sao fundamentais para aqueles que estio se iniciando na arte da programagao. Considere seriamente os conhecimentos ensinados aqui. Faga sempre uma revisio deste material, sempre que tiver dificuldades relacionadas a ‘manipulagdo de dados, conversio e preciso em resultados. Tente fazer todos os exercicios do item 2.8, na ordem indicada, Executar os programas prontos, preenchendo as tabelas com os valores obtidos ¢ uma boa maneira de entender a dindmica das estruturas bisicas da programago. Obtenha algumas séries simples da literatura que utiliza e experimente criar programas para equacioné-las. Como Dar Ordens Ao Computador Capitulo 3 3. Como dar ordens ao computador Dar ordens a computadores ainda é uma tarefa muito exaustiva, por enquanto. Como jé foi dito antes, € necessério ser preciso e formal se quiser ter sucesso nessa atividade. Por exemplo, como expressar em linguagem natural, as operagées XY¥ ? Como dar uma ordem ao computador para armazenar 0 resultado deste céleulo no enderego R? Uma ordem poderia ser: Memorize em R o resultado da multiplicagao de X pela raiz quadrada de Y. A ago acima admite que nos enderegos X © Y foram previamente armazenados dados numéricos antes de se submeter a ago ao computador. Uma outra ordem, j& em pseudocddigo, seria simplesmente escrever: R = X * RaizQuadrada(Y), onde o simbolo * foi utilizado para indicar a operago de multiplicago. £ importante observar também que 0 simbolo = na expresso indica atribui¢do de valor (atribua a R 0 resultado do célculo da expresso). Jé 0 simbolo == deve ser utilizado para questionar, como por exemplo: D )) Imprima “Assista televisdo na casa da sogra”; SENAO Imprima “Va ao cinema com a namorada”; Dessa forma, nao haverd confusio no uso dos simbolos = ¢ == nos dois enfoques: ago a ser executada e expressio condicional a ser avaliada. No exemplo acima se esté dando uma cordem ao computador para verificar se o resultado da avaliagio da condigao (DINHEIRO == 0)? é verdadeira e, se for, executar a ago Imprima “Assista televisdo na casa da sogra”; ou Imprima “Vd ao cinema com a namorada”, se 0 resultado for falso. 3.1 Operadores aritméticos Alguns operadores aritméticos mais usuais das linguagens de programagéo so apresentados na tabela da Figura 3.1. ‘Adicio. Subt Multiplicago Divisio Figura 3.1 - Operadores Aritméticos 3.2 Expressdes aritméticas ¢ comando de atribuigio A expressiio pode aparecer num comando de atribuig&o como uma constante simples, uma varidvel, ou ima expresso aritmética completa. Por exemplo, as instrugdes abaixo esto corretas: Capitulo 3: Como Dar Ordens ao Computador Sdneide Brito Alves, Dr. 26 X = 428; Y= 2% R = ZETA20; — P= 3.141592 * Raio; R=Raiz (¥); W = Seno(a) + Coseno(b); Uma expresso poderd incluir operadores aritméticos, parénteses e fungées internas da méquina, utilizadas para determinar, por exemplo, Raiz Quadrada, Seno, Coseno, Valor Absoluto etc. Em geral, as Linguagens de computadores possuem um conjunto de fungdes intermas muito maiores do que aquele encontrado nas calculadoras cientificas. Observar que 0 dado fornecido a fungo deve vir entre paréntese, como em R = Raiz(¥), onde Y é 0 argumento passado para a fungo Raiz(). Para forgar a prioridade na execugdio da seqdéncia de operagdes deve-se usar paréntese. Por exemplo: (5+3)/(7-2) poténcia(S, X +2) +9 poténcid(X +9), 1.0/3.0) (a+b) / poténcia(c — d, 2) Observar que os parénteses na expresso (5 + 3) / (7 - 2) sio essenciais, caso contrério, se a expresstio fosse escrita como 5 + 3/7 - 2, 0 computador, naturalmente, avaliaria esta expresso como 5+3-2, Em adigao, € necessério compreender que 0 computador utiliza os seguintes critérios para transformagao de dados numéricos: Regra 1: Divisio de inteiros produz resultado inteiro. Por exemplo: 10/3 resulta em 3; 10/15 resulta em 0. Regra 2: Divisio de reais produz resultado real. Por exemplo: 10.0/3.0 resulta em 3.333333; 10.0/15.0 resulta em 0.666666. Regra 3: Mistura de tipos inteiros e reais produzem resultados reais. Por exemplo: 10.0/3 resulta em 3.333333; 10/15.0 resulta em 0.666666; 5.8 + 3 resulta em 8.8. 3.3 Exercicios propostos Considerando que A = 1, B = 2, C = 3, X = 2.0, Y = 100, Z = -1.0, escreva corretamente as seguintes expressdes, em pseudocédigo, apresentando os resultados de suas avaliagdes: oat; d)-x?; Capitulo 3: Como Dar Ordens ao Computador ‘Sdnei de Brito Alves, Dr. 27 3.4 Operadores ligicos Uma expressio légica ¢ aquela que quando executada produz como resultado de sua avaliagio um valor légico dito verdadeiro ou falso, conforme discutido nos capitulos anteriores. Observe as Figuras 3.2 e 3.3. Elas ilustram, graficamente, a necessidade da existéncia de operadores légicos. Ao® & B oO Bateria Lampada Figura 3.2 - Representagdo da operagdo légica OU. Circuito elétrico com interruptores paralelos. A 0B | Bateria Lifipada Figura 3.3 - Representagao da operacdo légica E. Circuito elétrico com interruptores em série. Como avaliar 0 resultado da operagio do circuito representado na figura 3.2? A finalidade € obter as ages (ampada ligada ou lampada desligada. Considere, portanto, as varidveis l6gicas abaixo e seus significados: IAF: _Interruptor A “fechado”. IAA: Interruptor A “aberto’ IBF: __Interruptor B “fechado”. IBA: _Interruptor B “aberto”. As operagdes possiveis para a figura 3.2 so: SE (IAA E IBA) Imprima “Os interruptores A e B estado abertos e a lampada esté desligada”; SENAO Imprima “Existe passagem de corrente elétrica pelo interruptor A ou B ow ambos, e a ldmpada, portanto, esté ligada”’; Para que a lampada ligue (Figura 3.2), basta que um dos operandos IAA ou IBA tenha valor falso, Por outro lado, para que a /émpada esteja desligada ¢ obrigatério que ambos IAA e IBA tenham valores verdadeiros. Pode-se construir o teste (Figura 3.2) com 0 uso das varidveis IAF e IBF, como mostra os dois exemplos a seguir: Capitulo 3: Como Dar Ordens ao Computador Sdneide Brito Alves, Dr. 28, SE (NAO (IAF OU IBF) __ Imprima “Os interruptores A ¢ B estito abertos e a ldmpada estdé desligada”; SENAO Imprima “Existe passagem de corrente elétrica pelo interruptor A ou B ou ambos, e a ldmpada esté ligada”; ouainda, SE (IAF OU IBF) Imprima “Existe passagem de corrente elétrica pelo interruptor A ou B ou ambos, e a lampada esta ligadé SENAO Imprima “Os interruptores A e B estdo abertos e a lampada esta desligada”; A expresso (NAO (IAF OU IBF) ), para a Figura 3.2, produz resultado verdadeiro se somente se ambos, IAF e IBF, contiverem valor falso. Neste caso, a ago lampada desligada ocorre. Considere agora a Figura 3.3. Os interruptores esto em série, logo, pode-se construir 0 testes com 0 uso das varidveis IAF, IAA IBF, IBA, conforme exemplos a seguir: SE (IAF E IBF) Imprima “Existe passagem de corrente elétrica pelos interruptores Ae B ea lémpada, portanto, esté ligada”’ SENAO Imprima “Pelo menos um dos interruptores esté aberto e, portanto, a Iampada esté desligada”, © computador recebe uma ordem para verificar se a expresso légica (AF E IBF) resultard em verdadeiro ou falso e, em fungo disso, executar uma das ages ligar ou no a lampada. A lampada seré ligada se e somente se ambos os operadores IAF e IBF contiverem valor verdadeiro; caso contrario, isto &, se IAF ou IBF, ou ambos, contiverem valor falso, a lampada nao ser ligada. Para a mesma Figura 3.3, pode-se construir o teste usando-se a seguinte estrutura: SE (NAO (IAA OU IBA)) “A lémpada esté ligada”; SENAO “A ldémpada estd desligada”; Outras combinagdes de condigdes que levem aos mesmos resultados podem ser criadas para ambos os casos representados pelas Figuras 3.2 e 3.3. A tabela verdade da Figura 3.4 ilustra 0 uso dos operadores légicos NAO, OU e E: AUB NAOATNAOB | AOUB TATED viv oF F Vv Vv vir Fr Vv Vv i F[v[v F Vv F FlF[v Vv F F Figura 3.4 - Tabela verdade para os operadores légicos utilizados em pseudocédigo ¢ em linguagem natural. Capitulo 3: Como Dar Ordens ao Computador ‘Sdnei de Brito Alves, Dr. 29 3.5 Expresses logicas Suponha que nos enderegos A, B, C e D sejam armazenados os valores verdadeiro ¢ falso, por exemplo, A=verdade, B=falso, C=verdade D-falso. Logo, pode-se dar ordem ao computador para calcular os resultados das seguintes expresses: 1, (A OU B) E (C OU D) 2. NAO (A E B) 3. (A OU B) E (CE D) Neste exemplo, a primeira expresso seré avaliada como falso; a segunda como verdade ¢ a terceira como falso. Obviamente, cada uma dessas expresses ldgicas 6 produz um de desses resultados: verdadeiro ou falso. E natural fazer uso de expressdes légicas para tomadas de decisées, como em: SE (Tempo Bom) E. (Feriado) Imprima “Vou viajar com a namorada”’; SENAO Imprima “Vou passar as férias na casa da sogra”; ou ENQUANTO (Tempo Ruim E Bom. Atendimento) Imprima “Esperar Tempo Bom na casa da sogra”: 3.6 Exercicios propostos g ir 3.6.1 Considerando A verdadeiro, B falso, C nfo falso e D nfo iw); verdadeiro, construa_uma tabela verdade com 0 uso dos operadores légicos NAO, OU ¢ E. 3.6.2 Determine os resultados das expresses légicas seguintes, tomando como base os valores de A, B, C, e D do item 3.6.1: 1, R1=A ou Benfio C ouD; 2. R2= No A eniio C ou B e nio D; R3= A eniio Bou nfo De C; 3.6.3 Escreva os seguintes trechos de programas, em pseudocédigo: 1. Deve-se colocar gasolina no carro, fazer revistio de viagem e preparar as malas se a varidvel saldo contiver valor verdadeiro, e se 0 valor da varidvel Tempo Bom for verdadei 2. O Brasil disputara a proxima Copa do mundo com possibilidades de sucesso se 0 valor da variével Time Ruim for falso ¢ se o valor da variével Jogadores Bons for verdadeiro. 3. Voe8 seré um bom programador se o valor da variével Bom Aluno for verdadeiro seo valor da varidvel Freqiiéneia for verdadeiro. Capitulo 3: Como Dar Ordens ao Computador Sdneide Brito Aves, Dr. 30 3.7 Operadores relacionais e de igualdade Como foi discutido no Capitulo 1 € necessério fazer uso dos operadores relacionais ¢ de igualdade para evitar ambigiidades no processo de avaliagéo das expressdes l6gicas. Os operadores relacionais ¢ de igualdade s4o apresentados na Figura 3.5. mais que ou igual a Figura 3.5 - Operadores relacionais e de igualdade ‘As expresses l6gicas, obviamente, podem ser construidas com a combinagdo de operadores relacionais e operadores l6gicos. 3.8 Expressdes relacionais Com os operadores relacionais ¢ os operadores légicos so construidas expresses légicas compostas. Considere as varidveis reais ¢ inteiras abaixo, e seus respectivos valores: LIMITE: LIMITE2= 30.5; VALOR =15.7; BASE = 100. ALTURA = 180.0, DELTA=108; Podemos construir expresses Idgicas, simples e compostas, tais como: (AREA > 0.5 * BASE * ALTURA)? (DELTA <0)? (VALOR >= LIMI (BASE # ALTURA)? ((LIMITE1 0) )? (BASE> ALTURA)? ) E (VALOR <= LIMITE2)? ayvaeNe Neste exemplo, as expresses produzem os seguintes resultados: (1) produz falso; (2) produz falso; (3) produz falso; (4) produz verdade; (5) produz. verdade; e (6) produz falso. 3.9 Exercieios propostos 3.9.1 Supondo X = 5.1, Y = 8.8, W = 3.14,N=SeM=6, preencha a tabela abaixo com o resultado Verdadeiro ou Falso: PRESSAO. _]RESUETADO. XS ¥) E (N/M) > 0. a (M7 N=0) OU (W< X< ¥) OU (Y>X) +¥* W)>(N+M)/20 Capitulo 3: Como Dar Ordens ao Computador Sdneide Brito Alves, Dr. 34 3.9.2 Escreva em pseudocédigo, express6es equivalentes as frases expressas em linguagem natural, abaixo: 1. 0 valor em A no é maior que o valor em B, nem igual ao valor em D e nem igual a0 valor em E. 2. O valor em X é diferente do valor em Y e menor ou igual ao valor em Z ¢, em adig&o, é menor que o valor em W. 3. 0 valor do inverso de A é diferente do valor em B. 3.9.3 Expresse, em portugués estruturado, usando PARA..FACA, os procedimentos necessérios para o equacionamento da seguinte questio: para n = 1, 2, 3,.., Limite, onde Limite deve representar um valor inteiro lido, maior ou igual a 20, calcule e imprima, para cada valor de n, a sua correspondente raiz.quadrada. 3.9.4 Expresse em portugués estruturado, usando a strutura de repetigaio ENQUANTO..FACA, a seguinte questio: Obter(Ler) um valor real ¢ memorizar no enderego R. Se 0 valor em R for inferior ou igual a 10.5 ou superior ou igual a 20.5, repetir a operagio de Leitura de R, até que se obtenha um valor em R dentro do intervalo considerado. 3.9.5 Expresse em portugués estruturado, usando a strutura de repetigao FAGA...ENQUANTO, os seguintes problemas: 1. Leia valores para A e B. Repetir a leitura dos valores de A ¢ B enquanto o valor de A for diferente do valor de B. 2, Leia um valor para X. Se o valor em 0 =< X <= 10, leia um valor para Y. Sendo, antes de ler Y, continue lendo um valor para X até que se obtenha um valor para X dentro do intervalo considerado. 3.10 Como 0 computador nos informa os resultados dos edleulos Considere a seguinte expresstio, em portugués estruturado: R = Raiz (N). Observando esta expresso, nota-se a auséncia de um aspecto fundamental - apés a execugo da expresso, computador saberé o resultado da Raiz do valor armazenado em N, mas o programador no saber. Ora ! O valor resultante do céleulo da expresso foi armazenado pelo sistema na varidvel R, que corresponde a um enderego na meméria da maquina. ‘Assim, precisamos ordenar ao computador que nos mostre 0 contetido do enderego R. Com a finalidade de ver os resultados computados, apresentados numa forma acessivel, utilizamos as instrugdes Imprima ou Escreva: IMPRIMA R; ou ESCREVA R; ‘A ordem aicima, dada ao computador, faz com que ele busque o valor armazenado no enderego de meméria R (contetido do enderego R) e mostre este valor na tela do terminal, ou numa folha de papel de uma impressora. Pode-se ordenar a0 computador para escrever junto com 0 contetido de um enderego um texto ou uma cadeia de caracteres com a finalidade de documentar, ou identificar, o valor impresso, conforme mostra o exemplo abaixo: ESCREVA “A raiz de “,N, “¢ igual a“, R; IMPRIMA “A raiz de ”, N, “é igual a”, R; Capitulo 3: Como Dar Ordens ao Computador Sdnei de Brito Alves, Dr. 32 Atengio! Nao confundir um caracter, por exemplo, ‘R? com a variével R. R, conforme {jf discutido exaustivamente, representa um enderego na meméria do computador, em cujo local existe, obrigatoriamente, um dado. J4 ‘R? representa apenas um caracter alfanumérico. 3.11 Como informamos ao computador os valores das variiveis. Na expressdio R = Raiz (N), ¢ obrigatério fornecer um valor numérico para N antes que seja submetido ao computador o célculo da Raiz Quadrada do valor N. Para se fornecer um valor, via teclado, para ser armazenado numa variavel, pode-se utilizar dois modos: (1) Atribuigdo direta de valor a variével, como em N = 81; ¢ (2) Leitura de dados, utilizando-se instrugdes de entrada de dados, como por exemplo, a instrugio LEIA N. A. instrugio LEIA N, obriga o computador a obter um valor e armazena-lo no enderego de meméria representado por N. Quando o comando LEIA N for executado e alguém apertar a tecla 9 do teclado da maquina, o computador ird ler o valor 9 ¢ guardar no endereco de meméria N. Uma pergunta poderia ser colocada neste momento: como saberemos que o comando LEIA N foi executado pela méquina, e a hora exata de digitar o valor desejado? Uma solugdo amigavel & combinar 0s dois comandos ESCREVA e LEIA, como por exemplo: ESCREVA “Entre com um valor para N > 0: "; LEIA N; Dessa forma, ao executar as instrugdes acima 0 seguinte didlogo seri exibido pelo computador: Entre com um valor para N > 0: 81 Finalmente, o cdlculo da expressio R = /N pode, agora, ser expressa, em portugués estruturado, pela seqtiéncia: ESCREVA “Entre com um valor para N > 0: "; LEIA N: FACA R = Raiz (N); ESCREVA “A raiz de”, N, “ ¢ igual a”, R; € 0 resultado do didlogo apareceria na tela do terminal do computador como: Entre com um valor para N> 0: 81 Araiz de 81 6 igual a9 3.12 Enderegos acumuladores E comum, em muitos célculos, 0 uso de somatérios, incrementos ou decrementos de valores armazenados nas varidveis. Esta questo envolve importante conceito: enderegos ou varidveis acumuladoras. Considere a expresso abaixo: S=S+1; Ora! Sabe-se que $ representa um endereco na meméria do computador. Mas o que se quer é ENDERECO | CONTEUDO Ss 2 Capitulo 3: Como Dar Ordens ao Computador Sdnei de Brito Alves, Dr. 33 adicionar ao contetido do enderego S o valor 1. Uma questo deve ser colocada: Qual o valor inicial do conteiddo do enderego S, a0 qual se deseja somar 1? Resposta: A maioria das miquinas nfo zera as varidveis antes de sua efetiva utilizagao; outras utilizam alguma convengo, usualmente desconhecida do usuério, para idealizé-las. Logo, recomenda-se inicializar as variveis utilizadas em expressbes do tipo exemplificado, antes de seu uso como enderegos acumuladores. Por exemplo: ENDERECO | CONTEUDO Ss 0 Agora, o conteiido do enderego S é igual a zero, Assim, a ordem dada ao computador para a execugdo do comando $= S +1 seré realizada pela maquina, em trés etapas: 1. O computador olha para a expresso S + 1 ¢ busca, na meméria, 0 contetido do endereco S, que agora é zero; 2. Determina o resultado da expressio, adicionando | a zero (1+0), e guarda em uma meméria auxiliar chamada registro; 3. O computador ofha para a esquerda do sinal de atribuig&o =, ¢ verifica que 0 resultado deve ser armazenado no préprio enderego S, onde memoriza o resultado do cilculo da expressio. ENDEREGO | CONTEUDO s 1 ‘Apés os passos acima, tem-se 0 valor 1 no enderego S. Esta seqiiéncia é repetida toda ‘vez que se submete ao computador o célculo de expressdes do tipo S = S + expresso, sendo que a varidvel da esquerda do sinal de atribuigdo “=" também aparece na expresso da direita. ‘As instrugées abaixo calculam e imprime a soma dos 100 primeiros numeros inteiros, utilizando o enderego acumulador de nome SOMA. Observe que a notagao (N = 1; n<=100; N=N+1) é usada para indicar ao computador que valor de N deve comegar com 0 valor 1, ser incrementado de 1 em 1, até atingir o valor 100. Para cada valor de N, a expresso SOMA=SOMAGN € calculada: SOMA = 0; PARA (N = 1; N<=100; N=N+1) SOMA = SOMA +N; ESCREVA “Resultado da Somatoria: “, SOMA; Ao ser executado, este trecho de programa produz o seguinte resultado: Resultado da Somatéria: 5050 Finalmente;-para somarmos separadamente os mimeros pares ¢ os niimeros impares existentes entre 1 ¢ 100, é necessario escrever o trecho de programa ao seguinte: 0; somalmpa m= 0 ;N<=100; PARA (N SE ((N modulo 2) == 0) ) somaPar = somaPar + N; +1) { Capitulo 3: Como Dar Ordens ao Computador ‘Sdnei de Brito Alves, Dr. 34 SENAO somalmpar = somalmpar + N; t ESCREVA “Somatéria dos mimeros pares: “, somaPar; ESCREVA “Somatéria dos nimeros impares: “, somalmpar; Apés executado este novo trecho de programa produz os resultados mostrados a seguir: Somatéria dos mimeros pares: 2550; Somatéria dos mimeros impares: 2500 3.13 Exercieios propostos le Resolva os exercicios propostos abaixo, usando portugués estruturado ou pseudocédigo. Vocé est comecando uma fase importante do aprendizado. Esforce-se! 3.13.1 Leia um valor para N de quatro algarismos, ¢ verifique se o valor lido tem a mesma propriedade do mimero 3025, usando a estrutura SE ... SENAO. Em seguida, teste 0 seu programa, preenchendo a tabela seguinte: 30 + 25 = 55 e 55’ = 3025. MEMORIAS UOC RESTO, 3.13.2 Calcule a raiz quadrada dos niimeros reais de 1 até 50, com incrementos de 0.5 em 0.5, imprimindo cada mimero com seu respectivo resultado. Use a estrutura FACA ... ENQUANTO. Apés, preencha a tabela abaixo e teste seu programa: MEMORIAS PASSOS, NUMERO RAIZ 3.13.3 Tabule a fungao y = x° + x? + x, onde 1,0==100). Use a estrutura ENQUANTO...FAGA, para garantir que o valor final de Nesteja no intervalo considerado, isto é, (0=

You might also like