apostila c++

Upload: sormany-dantas

Post on 18-Oct-2015

19 views

Category:

Documents


0 download

TRANSCRIPT

  • Trabalho de Formatura

    Apostila da Linguagem de Programao C++

    Autor: Enrique Camargo Trevelin

    Orientador: Carlos Antnio Alves

    Ilha Solteira Julho de 2007

    UNIVERSIDADE ESTADUAL PAULISTAJLIO DE MESQUITA FILHO

    Campus de Ilha solteira

  • UNESP Campus de Ilha Solteira 2007 Pgina 1

    SumrioMdulo 1 A Linguagem C++....................................................................... 4

    1.1 Histria da Linguagem C/C++.............................................................................. 4

    1.2 Caractersticas da Linguagem C++....................................................................... 4

    1.3 Exemplos de Aplicaes Escritas em C++ ........................................................... 5

    1.4 Comparao de C++ com outras linguagens ........................................................ 5

    1.5 Paradigmas de Programao: Programao Estruturada e Orientada a Objetos .. 6

    Mdulo 2 Compiladores .............................................................................. 8

    2.1 O que um Compilador........................................................................................ 8

    2.2 Compiladores de C++ ........................................................................................... 8

    2.3 DevC++................................................................................................................. 8

    2.3.1 - Instalao............................................................................................................ 9

    2.3.2 - Interface............................................................................................................ 10

    2.3.3 - Utilizao.......................................................................................................... 12

    2.3.4 Erros................................................................................................................. 13

    2.4 Estrutura Bsica de um Programa em C++......................................................... 15

    Mdulo 3 Caractersticas e Definies Gerais da Linguagem C++....... 17

    3.1 Nomes e Identificadores Usados na Linguagem C++ ........................................ 17

    3.2 Palavras Reservadas na Linguagem C++............................................................ 17

    3.3 Tipos e Dados ..................................................................................................... 18

    3.4 Definio de Variveis........................................................................................ 19

    3.5 Definio de Constantes ..................................................................................... 20

    3.6 Nmeros Hexadecimais e Octais ........................................................................ 20

    3.7 Valores Strings.................................................................................................... 21

    3.8 Cdigos de Barra Invertida ................................................................................. 21

    3.9 Operadores .......................................................................................................... 22

    3.10 Tabela de Operadores da Linguagem C............................................................ 25

    3.11 Expresses ........................................................................................................ 26

    3.12 Precedncia e Associatividade de Operadores.................................................. 26

    3.13 Converses de Tipos......................................................................................... 28

    3.14 Modeladores de Tipos....................................................................................... 29

    Mdulo 4 Funes na Linguagem C......................................................... 30

    4.1 Funes ............................................................................................................... 30

  • UNESP Campus de Ilha Solteira 2007 Pgina 2

    4.2 Declarando uma Funo ..................................................................................... 31

    4.3 Main como uma Funo ..................................................................................... 33

    4.4 Variveis dentro das Funes ............................................................................. 34

    4.4.1 Variveis Locais .............................................................................................. 34

    4.4.2 Variveis Globais.............................................................................................. 35

    4.5.1 Chamada por Valor.......................................................................................... 36

    4.5.2 - Chamada por Referncia .................................................................................. 37

    4.6 Biblioteca de Execuo....................................................................................... 37

    4.7 Funes Recursivas............................................................................................. 38

    4.8 - Sobrecarga da Funo.......................................................................................... 39

    4.9 Funes Inline..................................................................................................... 39

    4.10 Parmetros Padro ............................................................................................ 40

    Mdulo 5 Estudo dos comandos cout e cin .............................................. 42

    5.1 Utilizao de cout ............................................................................................... 42

    5.2 Overload do operador de insero ...................................................................... 43

    5.3 Formatao de exibio com cout ...................................................................... 44

    5.4 Utilizao de cin ................................................................................................. 46

    5.5 Mtodo de cin: cin.getline .................................................................................. 46

    Mdulo 6 - Estruturas de Controle de Fluxo.............................................. 48

    6.1 - Estruturas de Controle de Fluxo .......................................................................... 48

    6.2 A declarao if .................................................................................................... 48

    6.3 O Encadeamento If Else if ............................................................................... 50

    6.4 A Declarao Switch .......................................................................................... 51

    6.5 A declarao for.................................................................................................. 53

    6.6 A declarao while.............................................................................................. 55

    6.7 A Declarao Do While...................................................................................... 56

    6.8 Laos Aninhados................................................................................................. 57

    6.9 Break e Continue ................................................................................................ 58

    Mdulo 7 Matrizes ..................................................................................... 60

    7.1 Matrizes .............................................................................................................. 60

    7.2 Declarao de uma matriz................................................................................... 60

    7.3 Acessando Valores de uma Matriz ..................................................................... 61

    7.4 Utilizando Laos para Percorrer Matrizes .......................................................... 61

    7.5 Matrizes Multidimensionais ............................................................................... 63

    7.6 Matrizes em Funes .......................................................................................... 64

    7.7 Criando Matrizes Dinamicamente ...................................................................... 66

  • UNESP Campus de Ilha Solteira 2007 Pgina 3

    Mdulo 8 Strings ........................................................................................ 68

    8.1 Cabealho de um programa com strings............................................................. 68

    8.2 Declarando e Inicializando uma String............................................................... 68

    8.3 Leitura e Escrita de Strings na Tela .................................................................... 69

    8.4 Operaes com Strings ....................................................................................... 71

    8.5 Biblioteca cctype: operaes com caracteres...................................................... 73

    Mdulo 9 Ponteiros .................................................................................... 75

    9.1 - Endereos de Memria ........................................................................................ 75

    9.2 Ponteiros ............................................................................................................. 76

    9.3 Declarando Ponteiros.......................................................................................... 76

    9.4 Desreferenciando um Ponteiro............................................................................ 77

    9.5 Ponteiros em Funes: Chamada por Referncia ................................................ 78

    9.6 Ponteiros para Matrizes ...................................................................................... 80

    9.7 Funes que Retornam Ponteiros ....................................................................... 82

    9.8 Ponteiros para Funes ....................................................................................... 82

    9.9 Ponteiros para Ponteiros ..................................................................................... 83

    9.10 Operadores new e delete ................................................................................... 84

    Mdulo 10 - Entrada e Sada de Dados....................................................... 86

    10.1 A biblioteca fstream.......................................................................................... 86

    10.2 Os objetos de fstream........................................................................................ 86

    10.3 Escrevendo em um arquivo............................................................................... 87

    10.4 Checando se o arquivo abriu sem problemas.................................................... 88

    10.5 Fechando um Arquivo ...................................................................................... 89

    10.6 Lendo os dados de um arquivo ......................................................................... 89

    10.7 Modos de Arquivo ............................................................................................ 92

    Mdulo 11 Programao Orientada Objetos ....................................... 94

    11.1 Paradigmas de Programao............................................................................. 94

    11.1 Programao Orientada Objetos .................................................................... 94

    11.2 Conceitos Bsicos ............................................................................................. 95

    11.2 Herana e Polimorfismo ................................................................................... 96

    Referncias Bibliogrficas ............................................................................ 98

  • UNESP Campus de Ilha Solteira 2007 Pgina 4

    Mdulo 1 A Linguagem C++

    1.1 Histria da Linguagem C/C++

    O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a dcada de 1980 com o objetivo de melhorar a linguagem de programao C, mantendo a compatibilidade com esta linguagem. Stroustrup percebeu que a linguagem Simula possua caractersticas bastante teis para o desenvolvimento de software, mas era muito lenta para uso prtico. Por outro lado o BCPL era rpido, mas possua baixo nvel, dificultando sua utilizao em desenvolvimento de aplicaes. Durante seu perodo na Bell Labs, ele enfrentou o problema de analisar o kernel UNIX com respeito computao distribuda. A partir de sua experincia de doutorado, comeou a acrescentar elementos do Simula no C.

    C foi escolhido pois possua uma proposta de uso genrico, era rpido e tambm portvel para diversas plataformas. Algumas outras linguagens que tambm serviram de inspirao para o informtico foram ALGOL 68, Ada, CLU e ML. Novas caractersticas foram adicionadas, como funes virtuais, sobrecarga de operadores e funes, referncias, constantes, controle de memria pelo usurio, melhorias na checagem de tipo e estilo de comentrio de uma linha (//). A primeira verso comercial da linguagem C++ foi lanada em outubro de 1985.

    1.2 Caractersticas da Linguagem C++

    O principal desenvolvedor da linguagem C++, Bjarne Stroustrup, descreve no livro In The Design and Evolution of C++ quais seus principais objetivos ao desenvolver e expandir esta linguagem:

    Em proposta geral, C++ deve ser to eficiente e portvel quanto C, sendo desenvolvida para ser uma linguagem com tipos de dados estticos.

    C++ desenvolvido para ser o quanto mais compatvel com C possvel, fornecendo transies simples para cdigo C.

    C++ desenvolvido para suportar mltiplos paradigmas de programao, principalmente a programao estruturada e a programao orientada a objetos, possibilitando mltiplas maneiras de resolver um mesmo problema.

    C++ desenvolvido para fornecer ao programador mltiplas escolhas, mesmo que seja possvel ao programador escolher a opo errada.

  • UNESP Campus de Ilha Solteira 2007 Pgina 5

    1.3 Exemplos de Aplicaes Escritas em C++

    Abaixo temos alguns exemplos de aplicaes e programas comerciais desenvolvidos totalmente ou parcialmente em C++.

    Grande parte dos programas da Microsoft, incluindo Windows XP, Windows NT, Windows 9x, Pacote Office, Internet Explorer, Visual Studio e outros.

    Sistemas Operacionais como o j citado Windows, Apple OS X, BeOS, Solaris e Symbian (sistema operacional para celulares).

    Bancos de dados como SQL e MySQL.

    Aplicaes Web, como a mquina de busca Google e o sistema de comrcio virtual da Amazon.

    Aplicaes grficas como os programas da Adobe (Photoshop, Illustrator), Maya e AutoCAD.

    Jogos em geral, como o Doom III.

    A lista enorme e poderia se estender por muitas e muitas pginas. Atualmente C++ , juntamente com Java, a linguagem de programao comercial mais difundida no mundo.

    1.4 Comparao de C++ com outras linguagens

    Podemos dividir as linguagens de programao conforme o dialeto utilizado por elas. Quanto mais prximo da linguagem humana for a maneira com que passamos instrues para a mquina, mais alto ser seu nvel: por exemplo, Fortran e Basic so consideradas linguagens de alto nvel pois seus comandos parecem-se com frases humanas (em ingls, claro): Se x = y ento faa x = x+1 e imprima y. De maneira anloga, quanto mais prximo da linguagem da mquina for a linguagem de programao, mais baixo ser seu nvel: por exemplo, o Assembly considerada uma linguagem de nvel baixo, pois seus comandos so escritos em hexadecimal. Ambos os tipos possuem vantagens e desvantagens, mas de maneira geral podemos dizer que a vantagem das linguagens de nvel alto a simplicidade de programao, enquanto que a vantagem das linguagens de nvel baixo a alta velocidade que seus programas podem ter.

    Tanto C como C++ podem ser consideradas linguagens de nvel intermedirio, pois utilizam-se de um dialeto de nvel alto mas possibilita ao programador facilidades para se trabalhar em nvel baixo, como manipulao de bits, bytes e endereos de memria de maneira direta, sem recorrer a abstraes apresentadas por outras linguagens de alto nvel.

    A filosofia que existe por trs da linguagens C e C++ que o programador sabe realmente o que est fazendo. Estas linguagens quase nunca colocam-se no caminho do programador, deixando-o livre para us-la de qualquer forma que queira, mas arcando com

  • UNESP Campus de Ilha Solteira 2007 Pgina 6

    as consequncias de seu mau ou incorreto uso. O motivo para essa liberdade na programao permitir ao compilador criar cdigos muito rpidos e eficientes, deixando a responsabilidade da verificao de erros para o programador. O prprio criador de C++, Bjorne Stroustrup afirma que C faz com que dar um tiro no p seja fcil; C++ torna isso mais difcil, mas quando ns o fazemos arrebenta com a perna toda. A citao de Stroutrup trata com humor o fato de o C++, ao possibilitar a programao de alto nvel, ter facilitado a codificao de algoritmos e organizao de projetos em relao ao C, uma linguagem que requer constante ateno contra erros lgicos de programao devido sua alta flexibidade. Por outro lado, o C++ possui nuances da sintaxe e semntica da linguagem muito sutis, difceis de serem identificados, e que quando no percebidos podem levar a comportamentos indesejados no cdigo.

    As principais vantagens e desvantagens do C++ so listadas a seguir:

    Vantagens

    Possibilidade em programao de alto e baixo nvel. Alta flexibilidade, portabilidade e consistncia. Compatilidade com C, resultando em vasta base de cdigos. Adequado para grandes projetos. Ampla disponibilidade e suporte, devido principalmente grande base de

    desenvolvedores. No est sob o domnio de uma empresa (em contraste do Java - Sun ou Visual Basic

    Microsoft). Padronizao pela ISO. Grandes possibilidades para a metaprogramao e programao genrica.

    Desvantagens

    Compatilidade com o C herdou os problemas de entendimento de sintaxe do mesmo. Os compiladores atuais nem sempre produzem o cdigo mais otimizado, tanto em

    velocidade quando tamanho do cdigo. Grande perodo para o aprendizado. A biblioteca padro ainda no cobre reas importantes da programao, como threads,

    conexes TCP/IP e manipulao de sistemas de arquivos, o que implica na necessidade de criao de bibliotecas prprias para tal, que pecam em portabilidade.

    Devido grande flexibilidade no desenvolvimento, recomendado o uso de padres de programao mais amplamente que em outras linguagens.

    1.5 Paradigmas de Programao: Programao Estruturada e Orientada a Objetos

    Um paradigma de programao um conjunto de idias que fornecem ao programador uma viso sobre a estruturao e execuo de um programa. Assim como ao resolver um problema podemos adotar uma entre variadas metodologias para resolv-lo, ao criar um programa podemos adotar um determinado paradigma de programao para desenvolv-lo. Certas linguagens de programao so escritas especificamente para trabalhar com um tipo de paradigma: este o caso de Smalltalk e Java que suportam a

  • UNESP Campus de Ilha Solteira 2007 Pgina 7

    programao orientada a objetos. Outras linguagens suportam vrios paradigmas, ou seja, o programador pode escolher qual paradigma se adapta melhor ao problema que ele precisa resolver e trabalhar com ele, e at mesmo alternar entre paradigmas (desde que ele saiba o que est fazendo).

    A linguagem C utiliza o paradigma da programao estruturada. A base da programao estruturada trabalhar a lgica do programa como uma estrutura composta de similares sub-estruturas, reduzindo a compreenso do programa compreenso de cada sub-estrutura individualmente. Na prtica, este mtodo envolve a criao de vrias funes dentro de um programa, pequenas e simples o suficiente para serem entendidas individualmente, sendo o programa a sequncia de todas estas funes trabalhando em conjunto. A programao estruturada se ope ao uso de comandos de pulo como GOTO, preferindo a criao de estruturas e condies lgicas que substituam ou mesmo eliminem a necessidade de um comando de pulo. Este paradigma o mais utilizado no ensino e aprendizado de linguagens de programao, por ser mais facilmente entendido por estudantes e por criar hbitos de programao saudveis e teis mesmo em outros paradigmas.

    A linguagem C++ uma das linguagens que suportam vrios paradigmas. Inicialmente, sendo uma evoluo de C, ela suporta inteiramente o paradigma da programao estruturada. Alm disso, ela suporta outros paradigmas como a programao procedural, a programao genrica, abstrao de dados e a programao orientada a objetos. Dentre estes paradigmas, o mais utilizado atualmente a Programao Orientada a Objetos, ou mais comumente chamado de OOP (Object-Oriented Programming). Apesar de ter sido criada nos anos 60, este paradigma s comeou a ganhar aceitao maior aps os anos 90,com a exploso das linguagens C++, Java e Visual Basic. A idia bsica por trs da OOP criar um conjunto de objetos (unidades de software) para modelar um sistema. Estes objetos so independentes entre si, possuindo responsabilidades e funes distintas no programa como um todo, mas que se comunicam entre si atravs do envio e recebimento de mensagens. A OOP especialmente til para grandes programas que se beneficiam mais com a modularidade oferecida por este paradigma: dividindo o programa em vrios mdulos independentes, aumenta-se a flexibilidade e a facilidade para manuteno do programa como um todo.

    Nesta apostila, enfocaremos os aspectos de linguagem de programao estruturada da linguagem C++, deixando os aspectos de linguagem orientada a objetos para os ltimos captulos a ttulo de introduo ao assunto. Isto se deve a maior dificuldade de aprendizado e entendimento do paradigma da programao orientada a objetos, principalmente tratando-se de estudantes com pouco contato com linguagens de programao. Por isso, prefervel estabelecer uma base para o estudante com os conceitos da programao estruturada, que so mais facilmente compreendidos e trabalhados, para que depois este estudante possa progredir para o paradigma da OOP com maior facilidade.

  • UNESP Campus de Ilha Solteira 2007 Pgina 8

    Mdulo 2 Compiladores

    2.1 O que um Compilador

    Toda linguagem de programao possui um tradutor de cdigo. Este tradutor pode ser um compilador ou um interpretador, dependendo da linguagem. Interpretadores so programas que lem o cdigo-fonte e executam ele diretamente, sem a criao de um arquivo executvel. Chamamos de compilador o programa que traduz um arquivo escrito em cdigo de linguagem de programao (arquivo-fonte) para a linguagem do microprocessador, criando um arquivo capaz de executar as instrues pedidas (arquivo executvel).

    O primeiro passo de um compilador analisar o cdigo presente no arquivo-fonte, verificando se existem erros de sintaxe. Caso algum erro de sintaxe seja encontrado, a compilao interrompida para que o programador possa corrijir estes erros. Caso o cdigo no possua erros o prximo passo do compilador criar um arquivo de cdigo-objeto, que possui as instrues do programa j traduzidas para a linguagem da mquina e informaes sobre alocao de memria, smbolos do programa (variveis e funes) e informaes de debug. A partir deste arquivo de cdigo-objeto, o compilador finalmente cria um arquivo executvel com o programa compilado, que funciona independente do compilador e realiza as instrues criadas pelo programador.

    2.2 Compiladores de C++

    Existem muitos compiladores de C++ no mercado. Os mais famosos so os softwares da Borland e da Microsoft, que so realmente muito bons e oferecem muitos recursos. O problema que estes compiladores so caros e voltados principalmente para programadores experientes, que podem fazer uso dos recursos avanados destes programas. Para quem no est ainda aprendendo a linguagem e no quer ainda gastar dinheiro com compiladores, existem vrias opes de compiladores freeware (software livre, de graa). Nesta seo descreveremos a instalao e o uso do DevC++, um compilador freeware muito utilizado.

    2.3 DevC++

    O Dev-C++ um compilador freeware das linguagens C, C++ e C#. uma opo muito interessante, pois de fcil utilizao e aprendizado para usurios novos e possui muitos recursos avanados para usurios experientes. Alm de, claro, seu download ser gratuito.

  • UNESP Campus de Ilha Solteira 2007 Pgina 9

    2.3.1 - Instalao

    A verso mais recente do DevC++ pode ser baixada atravs da pgina http://www.bloodshed.net/dev/devcpp.html, no link Download. Utilizou-se, na elaborao desta apostila, a verso do DevC++ beta 9.2, disponvel diretamente atravs do link http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe. O arquivo de instalao possui aproximadamente 9 megas. Aps o fim do download, preciso clicar duas vezes neste arquivo para comear a instalao.

    A instalao do DevC++ bem simples. Utilizaremos nesta apostila a instalao completa, escolhendo o item full durante a etapa da instalao mostrada na figura 2.1.

    Figura 2.1 Escolha o tipo de instalao Full

    O prximo passo escolher o diretrio onde o programa ser instalado. Neste diretrio estaro todos os arquivos relacionados ao compilador, como bibliotecas, executveis, arquivos de ajuda e muitos outros. Alm disso, neste diretrio que o compilador salvar os cdigos e programas que fizermos. Normalmente os programas so instalados por definio em sua pasta prpria, geralmente c:/arquivos de programas/dev-cpp, mas podemos escolher outro diretrio qualquer que satisfaa nossas necessidades. Escolhemos para esta apostila instalar o compilador em C:/dev-cpp , como mostra a figura 1.b, por maior facilidade de acesso e referncia. So necessrios aproximadamente 60 megas de espao livre em disco.

  • UNESP Campus de Ilha Solteira 2007 Pgina 10

    Figura 2.2 Escolha o local onde sero instalados os arquivos do compilador.

    Aps isto, a instalao ser concluda com sucesso. Para acessar o programa, basta encontrar o atalho ao programa no menu iniciar sob o nome Bloodsheed Dev-C++ e clicar para execut-lo.

    2.3.2 - Interface

    Importante: Na primeira vez que iniciamos o Dev-C++, todos os seus menus esto em ingls. Porm, o programa traduzido para vrias lnguas, inclusive portugus. Para mudar os menus do programa para a nossa lngua (ou qualquer outra lngua que desejar), basta acessar o menu Tools -> Enviroment Options. Uma janela se abrir, com vrias opes referentes ao funcionamento do ambiente de trabalho. Na aba Interface encontra-se a opo Language com as vrias linguas em que o programa est disponvel. Basta procurar a opo portuguese (Brazil) e clicar OK, e o programa j estar traduzido para nossa lngua.

    A tela principal do programa mostrada na figura abaixo.

  • UNESP Campus de Ilha Solteira 2007 Pgina 11

    Figura 2.3 Interface do DevC++

    Os menus principais do programa so muito parecidos com os programas windows padro. Temos os menus:

    Arquivo: possui as funes bsicas de manuseio de arquivos (criar novo arquivo, abrir arquivo, fechar, imprimir, ver propriedades)

    Editar: aonde esto localizadas as funes de edio bsicas de edio (copiar, recortar, colar) e algumas funes teis para programao (como comentar e descomentar trechos do programa, e criar e acessar bookmarks, que so marcas de acesso rpido para partes do programa, especialmente teis para programas extensos)

    Localizar: possui os comandos de procurar e substituir partes do cdigo; o menu Exibir permite o controle de quais componentes da tela so exibidos

    Projeto: refere-se a projetos de programas que possuem vrios componentes e arquivos de cdigos separados e utilizado para adicionar e retirar componentes do projeto

    Executa: talvez o mais importante para ns, e nele esto localizadas as funes bsicas do compilador (como os comandos Compilar, Executar ) e algumas funes

  • UNESP Campus de Ilha Solteira 2007 Pgina 12

    teis como procurar por erros de sintaxe Debug: serve para controlar o debug de um programa, que a sua execuo passo-

    a-passo para melhor anlise e busca por erros Ferramentas: refere-se a vrias opes do compilador, do ambiente de trabalho e de

    edio, alm de configuraes diversas CVS: uma funo extra do compilador, e no nos tem serventia Janela: possui comandos teis para os casos em que temos vrios arquivos ou

    projetos abertos ao mesmo tempo e precisamos alternar entre eles. Ajuda: d acesso ajuda do programa, que possui uma listagem dos principais

    comandos do compilador e um breve tutorial da linguagem C.

    Logo abaixo dos menus, temos as barras de ferramenta com as principais funes e comandos do programa representados por cones para acesso rpido. Basta posicionar o mouse sobre qualquer um dos cones para saber sua funo.

    Abaixo das barras de ferramentas, esto as duas principais janelas do programa. A janela da esquerda chamada de Navegador de Classes e Projetos, e serve para acessar rapidamente os vrios arquivos de cdigo pertencentes um projeto ou ento acessar rapidamente as vrias classes existentes em um programa. A janela da direita nossa tela de trabalho, onde digitamos nossos cdigos. Note que caso exista mais de um arquivo sendo trabalhado ao mesmo tempo, podemos alternar entre eles atravs das pequenas abas que existem diretamente acima da tela de trabalho, cada uma identificada pelo nome de seu arquivo.

    Finalmente, a janela inferior do programa possui vrias informaes sobre o processo de compilao e debugagem de um programa. Ela particularmente til para encontrar erros de compilao, como veremos mais adiante.

    2.3.3 - Utilizao

    Para iniciarmos um novo arquivo de cdigo, preciso acessar o menu Arquivo -> Novo -> Arquivo Fonte (como mostra a figura 2.4) ou ento utilizar o atalho CTRL + N. O novo arquivo ser criado imediatamente e poderemos comear a trabalhar nele.

    Figura 2.4 Utilize o comando Arquivo Fonte para criar um novo arquivo em branco.

    As funes bsicas do compilador podem ser encontradas no menu Executar, como mostra a figura 2.5. Os comandos que utilizaremos so: Compilar (atalho: CTRL + F9), Executar ( CTRL + F10) e Compilar & Executar ( atalho: F9). Utilizamos o comando Compilar para compilar o arquivo cdigo do programa em que estamos trabalhando e gerar

  • UNESP Campus de Ilha Solteira 2007 Pgina 13

    um arquivo executvel deste programa. Em seguida, utilizamos o comando Executar para automaticamente executar o arquivo criado pela compilao. O comando Compilar & Executar a unio dos dois comandos: compila e executa o programa logo em seguida. Como j indicado antes, estes trs comandos possuem cones de acesso rpido na barra de ferramentas (veja a figura 2.6).

    Figura 2.5 O menu Executar possui todas os comandos necessrios para compilar e executar os programas que criaremos.

    Figura 2.6 Localizao dos comandos bsicos na barra de tarefas. Coloque o mouse sobre qualquer um dos cones para saber qual sua funo.

    2.3.4 Erros

    Quando compilamos um arquivo de cdigo no Dev-C++, a janela indicadora do progresso da compilao automaticamente aberta. Caso o arquivo de cdigo no contenha nenhum erro, a compilao terminar e a janela de progresso permanecer aberta para indicar que tudo correu bem (verifique o quadrado da janela chamado status: ele dever indicar Done aps o fim da compilao). Desta maneira, aps o fim da compilao

  • UNESP Campus de Ilha Solteira 2007 Pgina 14

    basta fechar a janela e executar o programa executvel que foi gerado.

    Figura 2.7 Janela que indica o progresso da compilao do arquivo de cdigo.

    Caso nosso arquivo de cdigo contenha uma ou mais linhas de cdigos com erro, a compilao interrompida para que estes erros (ou advertncias) sejam verificados pelo programador. A janela de progresso da compilao fechada, e a janela inferior do programa maximizada mostrando todos os erros que foram encontrados durante acompilao do programa.

    Figura 2.8 A janela que indica a posio e o tipo de erros encontrados durante a compilao do programa.

    A figura acima mostra que a janela possui trs colunas: linha, unidade e mensagem. A coluna linha indica a linha de cdigo onde o erro foi encontrado; a coluna unidade indica o arquivo onde foi encontrado o erro e a coluna mensagem relata o tipo de erro encontrado. Um duplo clique em qualquer uma das indicaes de erro nesta janela faz com que a linha de cdigo onde o erro foi encontrado seja sublinhada em vermelho na janela de edio de cdigo.

    Geralmente, os erros encontrados so erros de digitao do cdigo. Quando erramos o nome de uma varivel ou mesmo um comando, o Dev-C++ indica que o nome errado no foi declarado anteriormente (varivel_x undeclared(first use in this function)), pois ele age como se este nome desconhecido fosse uma varivel no declaradada e tenta continuar a compilao.

    Outro erro bastante comum a falta de ponto-e-vrgula no fim de uma linha decomando. Neste caso, a mensagem de erro geralmente ; expected before algum_comando, indicando que o compilador esperava o ponto-e-vrgula antes do prximo comando ou varivel. A mensagem de erro indica a prxima linha de cdigo, mas o ponto-e-vrgula ausente est na linha anterior. O compilador tambm indica quando utiliza-se o ponto-e-vrgula antes da hora, ou seja, quando o compilador espera por uma

  • UNESP Campus de Ilha Solteira 2007 Pgina 15

    expresso ou comando e encontra somente o ponto-e-vrgula. Por exemplo, uma declarao de varivel sem declarao de valor: varivel = ;. Neste caso, a mensagem de erro dada pelo programa expected primary-expression before ; token.

    2.4 Estrutura Bsica de um Programa em C++

    Temos abaixo a estrutura de um programa escrito na linguagem C++:

    #include using namespace std;

    int main(){

    //comandos do programa

    system(PAUSE > null);return 0;}

    As duas primeiras linhas so o cabealho do programa. Todo programa deve ter um cabealho desse tipo para definir quais as bibliotecas ele utilizar. Bibliotecas so arquivos que normalmente so instalados juntos com o compilador e que possuem os comandos e funes pertencentes linguagem.

    O cabealho #include serve para indicar ao compilador todas as bibliotecas que este programa utilizar. Na maioria dos programas que escreveremos durante esta apostila, s utilizaremos o #include , que serve para incluir a biblioteca iostream em nossos programas. Esta biblioteca contm as principais funes, comandos e classes de entrada e sada de C++, necessrias para realizar programas que, por exemplo, recebam dados via teclado e enviem dados via monitor.

    A segundal linha do cabealho, using namespace std; , um aviso ao compilador que estaremos utilizando os comandos e funes padro de C++. Ele necessrio porque em C++ podemos criar vrias bibliotecas para serem utilizveis em vrios programas. Cada uma dessas bibliotecas contm comandos, classes e funes prprias, e para evitar confuses e problemas com os nomes destes comandos, utilizamos o cabealho using namespace ...; para definir qual o campo de nomes que estamos utilizando. Num programa normal, que no utiliza outras bibliotecas alm da padro de C++, utilizamos o namespace std como nosso campo de nomes de comandos e funes. Assim, sempre que utilizamos um comando prprio de C++, o compilador reconhecer automaticamente este comando como sendo pertencente biblioteca padro de C++.

    Assim como em C, tudo o que acontece durante a execuo do programa est contido dentro de uma funo principal, chamada main. Declaramos a funo main com:

    int main ( )

    Todos os comandos executados pelo programa esto contidos entre as chaves { } da funo main. No mdulo 4 estudaremos as funes fundo e veremos que um programa pode ter mais de uma funo, mas indispensvel que todos os programas possuam a

  • UNESP Campus de Ilha Solteira 2007 Pgina 16

    funo main.Cada programa ter seus prprios comandos, logicamente. Entretanto, o

    encerramento de um programa geralmente feito da mesma maneira para todos eles. As duas ltimas linhas antes do fecha-chaves so dois comandos normalmente utilizados ao fim de um programa.

    A linha system(PAUSE > null) uma chamada de funo prpria de C++. A funo system( ) recebe argumentos como o PAUSE que na verdade so comandos para o sistema operacional. Neste caso, ela recebe o comando PAUSE > null para pausar a execuo do programa at que o usurio aperte uma tecla qualquer. Utilizamos este recurso para que a tela do programa no seja terminada automaticamente pelo sistema, impedindo que vejamos os resultados do programa.

    Finalmente, o comando return 0 a resposta da funo main para o sistema. Quase toda funo retorna um valor para o sistema ou programa que a chamou, por exemplo, uma funo pode retornar o resultado de uma operao matemtica executada por ela. No caso da funo main, ela retorna um valor para o sistema operacional que executou o programa. Esse valor interpretado pelo sistema como uma mensagem indicando se o programa foi executado corretamente ou no. Um valor de retorno 0 indica que o programa foi executado sem problemas; qualquer outro valor de retorno indica problemas. Quando o programa executado at o fim, ele retorna 0 ao sistema operacional, indicando que ele foi executado e terminado corretamente. Quando o programa encontra algum erro ou terminado antes da hora, ele retorna um valor qualquer ao sistema, indicando erro durante a execuo.

  • UNESP Campus de Ilha Solteira 2007 Pgina 17

    Mdulo 3 Caractersticas e Definies Gerais da Linguagem C++

    3.1 Nomes e Identificadores Usados na Linguagem C++

    Existem algumas regras para a escolha dos nomes (ou identificadores) de variveis em C++:

    Nomes de variveis s podem conter letras do alfabeto, nmeros e o caracter underscore _.

    No podem comear com um nmero. Nomes que comecem com um ou dois caracteres underscore (_ e __)

    so reservados para a implementao interna do programa e seu uso extremamente desaconselhado. O compilador no acusa erro quando criamos variveis desse jeito, mas o programa criado se comportar de forma inesperada.

    No possvel utilizar palavras reservadas da linguagem C++ (para mais detalhes, veja o item 2.2). Tambm no possvel criar uma varivel que tenha o mesmo nome de um funo, mesmo que essa funo tenha sido criada pelo programador ou seja uma funo de biblioteca.

    C++ diferencia letras maisculas e minsculas em nomes de variveis. Ou seja, count, Count e COUNT so trs nomes de variveis distintos.

    C++ no estabelece limites para o nmero de caracteres em um nome de varivel, e todos os caracteres so significantes.

    3.2 Palavras Reservadas na Linguagem C++Na linguagem C++ existem palavras que so de uso reservado, ou seja, que

    possuem funes especficas na linguagem de programao e no podem ser utilizadas para outro fim, como por exemplo, ser usada como nome de varivel. Por exemplo, a palavra reservada for serve para chamar um lao de repetio, e no pode ser utilizada como nome de uma varivel.

    A lista abaixo relaciona as palavras reservadas da linguagem C++:

    asm auto bool break case

    catch char class const const_cast

    Continue default delete do double

    Dynamic_cast else enum explicit export

  • UNESP Campus de Ilha Solteira 2007 Pgina 18

    extern false float for friend

    goto if inline int long

    mutable namespace new operator private

    protected public register reinterpret_cast return

    short signed sizeof static static_cast

    struct switch template this throw

    true try typedef typeid typename

    union unsigned using virtual void

    Volatile wchar_t while

    importante notar que a linguagem C++ diferencia letras maisculas e minsculas, ou seja, char uma palavra reservada de C++ mas CHAR ou ChAr no (entretanto, normalmente desaconselha-se o uso dessa diferenciao por atrapalhar a legibilidade do cdigo). Reforando o que j foi mencionado, as palavras reservadas s iro executar os comandos que lhes foram designados.

    3.3 Tipos e Dados

    Quando um programa escrito em qualquer linguagem de programao necessrio a definio de algumas variveis. Variveis so instncias em que sero armazenados valores utilizados durante a execuo de programas. Estas variveis podem ser modificadas para suportar diferentes tipos de dados. Os principais tipos de dados utilizados em C++ podem ser divididos em variveis inteiras e reais.

    Variveis inteiras servem para armazenar nmeros inteiros, sem partes fracionrias. O principal tipo de varivel inteira em C++ o int. Alm dele, existem os tipos char, short e long, cada um deles caracterizado por um tamanho em bits diferente. Estes tipos podem ser modificados pelo prefixo unsigned, que determina que a varivel em questo s ter valores positivos, liberando o bit de sinal e aumentando a capacidade de armazenamento da varivel (por default, todas as variveis inteiras e reais declaradas em C++ so signed, ou seja, possuem um bit de sinal e podem ser tanto positivas como negativas). A tabela abaixo mostra os principais tipos de inteiros, seus tamanhos em bits e seu intervalo de armazenamento.

    Tabela 3.1 Tipos de variveis inteiras em C++Tipo Tamanho (em bits) IntervaloChar 8 -128 a 127unsigned char 8 0 a 255Int 16 -32768 a 32767unsigned int 16 0 a 65535Short 16 -32768 a 32767unsigned short 16 0 a 65535Long 32 -2147483648 a 2147483647unsigned long 32 0 a 4294967295

    Variveis reais servem para armazenar nmeros que possuem partes fracionrias.

  • UNESP Campus de Ilha Solteira 2007 Pgina 19

    Existem duas maneiras de representar nmeros fracionrios em C++. A primeira, a mais simples, utilizar o ponto para separar as partes inteiras e fracionrias. Por exemplo:

    0.000981.21453.14618.0

    (Mesmo no caso de um nmero com parte fracionria igual a zero, a utilizao do ponto assegura que este nmero seja considerado um nmero de ponto flutuante por C++).

    A segunda maneira utilizar a notao cientfica E. Por exemplo : 3.45E7 significa 3.45 multiplicado por 10 elevado stima potncia (10.000.000). Essa notao bastante til para representar nmeros realmente grandes ou realmente pequenos. A notao E assegura que o nmero seja armazenado em formato de ponto flutuante. Alguns exemplos:

    2.52E8 = 2.52 x 100.000.000 = 252.000.000-3.2E3 = -3.2 x 1000 = -320023E-4 = 23 x 0.0001 = 0.0023

    Assim como os inteiros, os nmeros reais em C++ podem ser representados por 3 tipos de variveis com diferentes intervalos. So elas: float, double e long double. Float o tipo de varivel real natural, aquela com a qual o sistema trabalha com maior naturalidade. Double e long double so teis quando queremos trabalhar com intervalos de nmeros reais realmente grandes. Utilizamos nmeros reais geralmente para expressar preciso atravs do nmero de casas decimais, ento podemos dizer que uma varivel float menos precisa que uma varivel double, assim como uma varivel double menos precisa que long double. A tabela abaixo mostra os tipos de variveis reais, seu tamanho em bits e o intervalo de armazenagem.

    Tabela 3.2 Tipos de variveis reais em C++Tipo Tamanho (em bits) IntervaloFloat 32 3,4E-38 a 3,4E+38Double 64 1,7E-308 a 1,7E+308long double 80 3,4E-4932 a 1,1E+4932

    3.4 Definio de Variveis

    As variveis devem ser declaradas, ou seja, devem ser definidos nome, tipo e algumas vezes seu valor inicial. As variveis so classificadas em variveis locais e globais.

    Variveis globais so aquelas declaradas fora do escopo das funes.

    Variveis locais so aquelas declaradas no incio de um bloco e seus escopos esto restritos aos blocos em que foram declaradas. A declarao de variveis locais deve obrigatoriamente ser a primeira parte de um bloco, ou seja, deve vir logo aps um caractere de abre chaves, '{'; e no deve ser intercalada com instrues ou comandos.

  • UNESP Campus de Ilha Solteira 2007 Pgina 20

    Para declarar uma varivel somente obrigatrio declarar seu tipo e nome:

    ;

    Por exemplo:

    int exemplo;

    Alm disso, caso seja necessrio, podemos declarar um valor a esta varivel no momento de sua declarao, e tambm adicionar um prefixo a ela, da seguinte forma:

    = ;

    Por exemplo:

    unsigned int exemplo = 12;

    3.5 Definio de Constantes

    O conceito de constantes em linguagens de programao atribuir um certo valor constante a um nome, e quando este nome for referenciado dentro do cdigo do programa, ser utilizado nas operaes o valor atribudo a este nome. Ou seja, se for definida a constante PI com o valor 3,1415926536, quando for encontrado no cdigo o nome PI, ser utilizado em seu lugar o valor 3,1415926536.

    Em C++ , utilizamos o prefixo const associado a um tipo, um nome e um valor para definir uma constante. Assim:

    const = ;

    Por exemplo:

    const int eterna = 256;

    No exemplo acima, definimos uma constante inteira de nome eterna que possui o valor numrico 256. importante notar que devemos declarar a constante e lhe atribuir um valor na mesma linha de comando. No podemos criar uma constante e lhe atribuir um valor posteriormente, ou seja, as seguintes linhas de comando so invlidas:

    const int eterna;

    eterna = 256;

    A partir da primeira linha, eterna passa a ser uma constante e seu valor no pode ser mais mudado durante a execuo do programa. Como seu valor no foi declarado, esta constante pode ter qualquer valor que esteja na memria do computador naquele momento da declarao da varivel.

    3.6 Nmeros Hexadecimais e OctaisEm programao algumas vezes comum usar um sistema de numerao baseado

    em 8 ou 16 em vez de 10. O sistema numrico baseado em 8 chamado octal e usa os dgitos de 0 a 7. Em octal, o nmero 10 o mesmo que 8 em decimal. O sistema numrico de base 16 chamado hexadecimal e usa os dgitos de 0 a 9 mais as letras de A at F, que equivalem a 10, 11, 12, 13, 14 e 15. Por exemplo, o nmero hexadecimal 10 16 em decimal. Por causa da freqncia com que estes dois sistemas numricos so usados, a linguagem C++ permite que se especifique valores inteiros em hexadecimal ou octal para uma varivel ou constante em vez de decimal. Um valor hexadecimal deve comear com

  • UNESP Campus de Ilha Solteira 2007 Pgina 21

    0x (um zero seguido de um x), seguido pelo valor em formato hexadecimal. Um valor octal comea com um zero. Aqui esto alguns exemplos:

    hex = 0xFF; /* 255 em decimal */

    oct = 011; /* 9 em decimal */

    Outra base numrica muito utilizada na programao a base binria. Apesar de C++ no possuir uma forma especfica de se expressar valores de base binria, podemos utilizar a notao hexadecimal para esta funo. A tabela abaixo mostra como pode ser feita a converso de um valor binrio para um valor hexadecimal.

    Tabela 3.3 Converso de valor binrio para hexadecimalDgito Hexadecimal Equivalente Binrio Dgito Hexadecimal Equivalente Binrio 0 0000 8 1000

    1 0001 9 1001

    2 0010 A 1010

    3 0011 B 1011

    4 0100 C 1100

    5 0101 D 1101

    6 0110 E 1110

    7 0111 F 1111

    3.7 Valores Strings

    Outro tipo de valor suportado pela Linguagem C++ o tipo string. Uma string um conjunto de caracteres entre aspas. Por exemplo, voc um vencedor uma string, composta pelas vrias letras que formam a frase. No confunda strings com caractere. Uma constante caractere simples fica entre dois apstrofos, por exemplo a. Entretanto a uma string que contm somente uma letra.

    3.8 Cdigos de Barra Invertida

    A linguagem C++ fornece constantes caractere mais barra invertida especiais, teis para caracteres que no so facilmente inseridos atravs do teclado ou de strings (como por exemplo, o retorno de carro). Estes cdigos so mostrados na tabela a seguir:

    Tabela 3.4 Cdigos de barra invertida em C++Cdigo Significado Cdigo Significado\b Retrocesso \f Alimentao de formulrio\n Nova linha \r Retorno de carro\t Tabulao horizontal \ Aspas\ Apstrofo \0 Nulo\\ Barra invertida \v Tabulao vertical\a Sinal sonoro \N Constante octal\xN Constante hexadecimal

  • UNESP Campus de Ilha Solteira 2007 Pgina 22

    Usa-se um cdigo de barra invertida exatamente da mesma maneira como usa qualquer outro caractere. Por exemplo:

    ch = \t;

    printf(Este um teste\n);

    Esse fragmento de cdigo primeiro atribui uma tabulao a ch e, ento, imprime este um teste na tela, seguido de uma nova linha.

    3.9 Operadores

    Um operador um smbolo que diz ao compilador para realizar manipulaes matemticas e lgicas especficas. A linguagem C++ possui trs classes gerais de operadores: aritmticos, relacionais e lgicos e bit-a-bit.

    3.9.1 Operador de atribuio

    O operador = atribui um valor ou resultado de uma expresso contida a sua direita para a varivel especificada a sua esquerda. Exemplos:

    a = 10;

    b = c * valor + getval(x);

    a = b = c = 1;

    O ltimo exemplo interessante por mostrar que possvel associar vrios operadores de atribuio em sequncia, fazendo com que todas as variveis envolvidas tenham o mesmo valor especificado.

    3.9.2 Operadores Aritmticos

    So aqueles que operam sobre nmeros e expresses, resultando valores numricos. So eles:

    Tabela 3.5 Operadores Aritmticos em C++Operador Ao

    + Soma- subtrao* multiplicao/ diviso

    % mdulo da diviso (resto da diviso inteira)- sinal negativo (operador unrio)

  • UNESP Campus de Ilha Solteira 2007 Pgina 23

    3.9.3 Operadores Relacionais

    Operam sobre expresses, resultando valores lgicos de TRUE (verdadeiro) ou FALSE (falso). so eles:

    Tabela 3.6 Operadores Relacionais em C++Operador Ao

    > Maior>= maior ou igual< Menor

  • UNESP Campus de Ilha Solteira 2007 Pgina 24

    Tabela 3.8 Operadores para manipulao de bits em C++Operador Ao

    & bit and| bit or^ bit xor - exclusive or

    > Rotao a direita~ bit not (complemento)

    Observao: x var op = expr

    Onde tempos op como um dos seguintes operadores:

    Tabela 3.9 Operadores de Assinalamento em C++Operador Ao

    + Soma- Subtrao* Multiplicao/ Diviso

    % mdulo (resto da diviso)>> Rotao a direita>= 3; /* equivalente a: k = k >> 3;*/

    z &= flag; /* equivalente a: z = z & flag;*/

    3.9.7 Operadores de Pr e Ps-Incremento

    Operadores de pr e ps-incremento so aqueles usados quando necessrio incrementar ou decrementar um determinado valor.

  • UNESP Campus de Ilha Solteira 2007 Pgina 25

    As operaes abaixo podem ser representadas assim:

    i = i + 1; i = ++i; ++i;

    i = i 1; i = --i; --i;

    z = a; a = a + 1; z = a++;

    z = a; a = a 1; z = a--;

    a = a + 1; z = a; z = ++a;

    a = a - 1; z = a; z = --a;

    3.9.8 - Operadores de Endereo

    So operadores usados com ponteiros, para acesso a endereos de memria.

    Tabela 3.10 Operadores de endereamento em C++Operador Significado

    & endereo de uma varivel* contedo do endereo especificado

    Exemplos:

    int var, *x;

    x = &var;

    var = *x;

    3.10 Tabela de Operadores da Linguagem C

    A tabela abaixo mostra todos os operadores apresentados anteriormente:

    Tabela 3.11 Resumo dos operadores em C++Operador Funo Exemplo C

    - menos unrio a = -b; + mais unrio a = +b ; ! negao lgica ! flag~ bitwise not a = ~b ; & endereo de a = &b ; * referncia a ptr a = *ptr ; sizeof tamanho de var a = sizeof(b) ; ++ incremento ++a; ou a++;-- decremento --a; ou a--;* multiplicao a = b * c;/ diviso inteira a = b / c;/ diviso real a = b / c;

  • UNESP Campus de Ilha Solteira 2007 Pgina 26

    % resto da diviso a = b % c;+ soma a = b + c;- subtrao a = b c;>> shift right a = b >> n; b>= maior ou igual a a >= b< menor que a < b

  • UNESP Campus de Ilha Solteira 2007 Pgina 27

    de C++. O nmero na coluna de precedncia indica qual o nvel de precedncia dos operadores em questo, sendo 1 o nvel mais alto (operador a ser executado primeiro). Na coluna de precedncia, feito o uso dos termos unrio (para operadores que usam um s operando) e binrio (para operadores que necessitam de dois operandos) serve para diferenciar operadores que possuem smbolos iguais. Na coluna de associatividade, as siglas E-D e D-E indicam o tipo de associatividade dos operadores daquele nvel de precedncia: E-D significa associatividade esquerda-para-direita, e D-E significa associatividade direita-para-esquerda.

    Tabela 3.10 Precedncia e Associatividade de operadores em C++Precedncia Operador Associatividade Explicao1 (expresso) Agrupamento

    2 () E-D Chamada de funo ++ Operador de incremento, psfixado -- Operador de decremento, psfixado

    3 (todos unrios) ! D-E Negao lgica ~ Negao Bitwise + Mais unrio (sinal positivo) - Menos unrio (sinal negativo) ++ Operador de incremento, pr-fixado -- Operador de decremento, pr-fixado & Endereo * Contedo de endereo () Modelador de tipo (tipo) nomesizeof Tamanho em bytes new Dynamically allocate storage new [] Dynamically allocate array delete Dynamically free storage delete [] Dynamically free array

    4 (todos binrios) * E-D Multiplicao / Diviso% Resto de diviso

    5 (todos binrios) + E-D Adio - Subtrao

    6 > Shift para direita

    7 < E-D Menor que = Maior que ou igual a > Maior que

    8 == E-D Igual a != No igual a

    9 (binrio) & E-D Bitwise AND

  • UNESP Campus de Ilha Solteira 2007 Pgina 28

    10 ^ E-D Bitwise XOR (OR exclusivo)

    11 | E-D Bitwise OR

    12 && E-D AND Lgico

    13 || E-D OR Lgico

    14 = D-E Atribuio simples*= Multiplicao e atribuio /= Dividir e atribuio %= Achar resto da diviso e atribuio += Adio e atribuio -= Subtrao e atribuio&= Bitwise AND e atribuio^= Bitwise XOR e atribuio|= Bitwise OR e atribuio= Shift para direita e atribuio

    15 :? D-E Condicional

    16 , E-D Combine two expressions into one

    3.13 Converses de Tipos

    3.13.1 - Converses durante a Atribuio

    C++ permite que o programador atribua um valor de um certo tipo para uma varivel designada para armazenar outro tipo de valor, mas quando isto feito o valor automaticamente convertido para o tipo da varivel.

    Quando atribumos um certo valor para uma varivel cujo tamanho maior do que o valor atribudo, no h problemas. Porm, quando o tamanho da varivel menor do que o valor a ser atribudo ela, haver truncamento deste valor e consequente perda de informao e/ou preciso.

    Outro caso complicado a atribuio de valores reais em variveis inteiras. Quando armazenamos valores reais em variveis inteiras, a parte fracionria do valor descartada,resultando em truncamento do valor. Pode ocorrer tambm incompatibilidades de tamanho, por exemplo, um valor de tamanho float (64 bits) tentando ser armazenado em uma varivel int (16 bits), causando invariavelmente perda de informaes.

    Por isso, preciso tomar cuidado com os tipos e tamanhos de variveis envolvidos durante uma atribuio de valores, para termos certeza que o valor inserido pode ser armazenado por aquela varivel.

  • UNESP Campus de Ilha Solteira 2007 Pgina 29

    3.13.2 Converses durante Expresses

    Quando constantes e variveis de tipos diferentes so misturadas em uma expresso, elas so convertidas para o mesmo tipo. O compilador C++ converter todos os operandos para o tipo do operando maior. Isso feito na base de operao a operao, como descrito nestas regras de converso de tipos:

    1. Se algum dos operandos for do tipo long double, o outro operando convertido para long double tambm.

    2. Seno, se algum dos operando for double, o outro operando sera convertido para double.

    3. Seno, se algum dos operandos for float, o outro operando ser convertido para float.

    4. Seno, os operandos so inteiros e promoes inteiras sero feitas.5. Nesse caso, se algum dos operandos for do tipo unsigned long, o outro operando

    sera convertido para unsigned long.6. Seno, caso um dos operandos seja long int e o outro seja um unsigned int, a

    converso depender do tamanho relative entre os dois tipos. Se long conseguir expressar valores possveis de unsigned int, a varivel unsigne int ser convertida para long.

    7. Seno, ambos os operadores so convertidos para unsigned long. 8. Seno, se algum dos operadores for long, o outro ser convertido para long.9. Seno, se algum dos operadores for um unsigned int, o outro ser convertido para

    unsigned int. 10. Caso o compilador chegue a este ponto na lista, ambos operadores sero int.

    3.14 Modeladores de Tipos

    possvel tambm forar a converso de uma varivel ou expresso para um determinado tipo, usando o mecanismo dos modeladores de tipos, tambm chamado de type cast. possvel utilizar duas sintaxes diferentes para obter o mesmo resultado de modelamento. So elas:

    (tipo) varivel_ou_expresso; por exemplo:(int) modelos; (int) 19.99;

    etipo (varivel_ou_expresso); por exemplo:int (modelos); int (19.99);

    Ambos os comandos produzem o mesmo resultado: forar o valor presente na varivel (ou expresso) ser convertido no tipo desejado. Note que o valor da varivel no alterado; somente feita uma converso momentnea, cujo valor resultante deve ser armazenada em outra varivel ou trabalhado imediatamente em uma expresso.

  • UNESP Campus de Ilha Solteira 2007 Pgina 30

    Mdulo 4 Funes na Linguagem C

    4.1 Funes

    Funes so os blocos de construo da linguagem C++, com os quais podemos construir programas melhores e mais facilmente compreensveis. Quando os programas tornam-se maiores e mais complexos, pode-se melhorar a clareza e compreenso do trabalho dividindo-o em partes menores, que chamamos de funes. Todo programa possui ao menos uma funo: a funo main, a qual podemos chamar de corpo do programa, onde esto localizados todos os comandos e chamadas de outras funes que so executadas pelo programa. Alm da funo main, podemos utilizar e tambm criar vrias outras funes dentro do mesmo programa. Por exemplo, imagine um programa que organize o funcionamento de uma loja. Poderia haver uma funo para organizar o estoque, outra para relacionar os preos dos produtos, outra para acessar um banco de dados com os cadastros dos clientes, entre outras. Se fossem colocados todos os comandos do programa dentro da funo main, o programa ficaria muito grande e provavelmente incompreensvel. Dividindo o programa em funes separadas, deixando para a funo main somente a tarefa de organizar as chamadas das demais funes, podemos trabalhar mais facilmente com o programa, modificando e corrigindo funes individualmente. medida que o tamanho e a complexidade do programa aumentam, aumenta tambm a possibilidade de erros, j se o mesmo for dividido em blocos menores e organizados, fica mais fcil encontrar e evitar erros. Basicamente, uma funo funciona da seguinte forma: feita uma chamada para esta funo durante a execuo do programa; o programa interrompido temporariamente, e pula para esta funo executando seus comandos; quando a funo termina, ou seja, quando seus comandos acabam (ou quando o comando return encontrado), o programa volta ao ponto onde foi interrompido para continuar sua execuo normal. Uma funo pode receber dados do programa para executar seus comandos (estes dados so chamados de parmetros ou argumentos), e pode tambm retornar dados para o programa (o que chamamos de retorno de funo).

    Por exemplo, vamos observar a funo sqrt( ), que retorna o valor da raiz quadrada de um nmero. Esta funo foi criada e definida na biblioteca padro da linguagem C/C++, de modo que podemos nos preocupar somente com sua execuo neste momento. Voc pode usar a seguinte linha de comando em um programa qualquer:

    x = sqrt(6.25);

    A expresso sqrt(6.25) chama a funo sqrt( ). O nmero entre parnteses o valor que estamos enviando para a funo sqrt( ), e o chamamos de parmetro ou argumento. A funo calcular a raiz quadrada de 6.25, e enviar o valor calculado para o programa, o chamado retorno da funo. Nesta linha de comando, especificamos que o retorno da funo, ou seja, seu resultado, ser armazenado na varivel x. Resumindo, um valor enviado para a funo, e a funo retorna o valor resultante para o programa.

    Entretanto, antes de podermos utilizar a funo sqrt( ) ou qualquer outra funo em um programa preciso declar-la. Veremos isso em detalhes no prximo item.

  • UNESP Campus de Ilha Solteira 2007 Pgina 31

    4.2 Declarando uma Funo

    Antes de utilizar uma funo em um programa preciso declar-la, ou seja, especificar para o compilador exatamente o que faz esta funo e que tipo de dados ela recebe e retorna. Podemos dividir o processo de declarar uma funo em duas etapas distintas: o prottipo da funo e a definio da funo.

    4.2.1 Prottipo de uma Funo

    O prottipo de uma funo tem a mesma funo de uma declarao de variveis: dizer ao compilador quais tipos de variveis estaro envolvidos na funo. Isso permite que o compilador saiba trabalhar corretamente com os valores que entram e saem da funo, fazendo converses de tipos sempre que necessrio. A sintaxe da declarao de um prottipo de funo a seguinte:

    ( );

    O tipo da funo denominar qual ser o tipo de valor que esta funo retorna. Uma funo pode retornar qualquer tipo de valor, seja inteiro, fracionrio ou nenhum valor. Quando uma funo no retorna nenhum valor para o programa, seu tipo void. Esse tipo de funo executar seus comandos normalmente, mas no retornar nenhum valor para o programa quando terminar.

    J o tipo de parmetro serve para determinar o tipo de variveis que a funo receber como parmetros. Assim como o tipo da funo, qualquer tipo de varivel pode ser utilizado como parmetro. Uma funo que no recebe parmetros de entrada deve ter a palavra chave void entre parnteses. possvel ter vrios parmetros na mesma funo, separando-os com vrgulas. Alguns exemplos de prottipo de funo:

    int livro (unsigned int paginas);

    float divide (float dividendo, float divisor);

    void imprime ( void );

    float divide (float, float);

    O ltimo exemplo mostra que a escolha do nome do parmetro no prottipo opcional: basta inserir o tipo de parmetros que sero utilizados pela funo e o compilador alocar a memria necessria para eles. Porm a atribuio de nomes para parmetros aconselhvel, pois melhora a legibilidade do programa.

    Quando declaramos e definimos uma funo no incio do programa, isto , antes da funo main, podemos omitir o prottipo da funo, fazendo somente a definio da funo como veremos abaixo.

  • UNESP Campus de Ilha Solteira 2007 Pgina 32

    4.2.2 Definio de uma Funo

    O prottipo de uma funo diz para o compilador quais os tipos de variveis ela usar. J a definio de uma funo diz ao compilador exatamente o que a funo faz. A sintaxe da definio de uma funo a seguinte:

    ( ){

    comandos da funo;}

    A primeira linha da definio de uma funo idntica ao prottipo, com a exceo de que somos obrigados a declarar nomes para as variveis de parmetro e que a linha no termina em um ponto-e-vrgula, e sim em uma abre-chaves. Dentro das chaves estaro todos os comandos pertencentes a funo, inclusive declarao de variveis locais, chamadas para outras funes e chamadas de retorno. Por exemplo:

    int cubo ( int valor) {resultado = valor*valor*valor;return resultado;}

    A funo acima calcula o cubo de um valor inteiro. Note que podemos declarar variveis dentro de uma funo; entretanto, estas variveis s podero ser utilizadas dentro desta mesma funo. O comando return termina a funo e retorna um valor para o programa.

    4.2.3 Retorno de uma funo

    O comando return utilizado para terminar a execuo de uma funo e retornar um valor para o programa. Sua sintaxe a seguinte:

    return ;

    O comando return aceita qualquer constante, varivel ou expresso geral que o programador precise retornar para o programa principal, desde que este valor seja igual ou convertvel para o tipo da funo (j estabelecido no prottipo da funo). importante notar que o valor retornado no pode ser uma matriz; porm, possvel retornar uma matriz indiretamente, desde que ela faa parte de uma estrutura ou objeto (tipos de dados que sero estudados mais adiante).

    possvel tambm criar funes que contnham mltiplos comandos return, cada um dos quais retornando um valor para uma condio especfica. Por exemplo, considere a funo compara_valores, mostrada a seguir:

  • UNESP Campus de Ilha Solteira 2007 Pgina 33

    int compara_valores(int primeiro, int segundo){

    if (primeiro == segundo)return (0);else if (primeiro > segundo)return (1);else if (primeiro < segundo)return (2);

    }

    A funo compara_valores examina dois valores listados na tabela abaixo:

    Resultado Significado0 Os valores so iguais1 O primeiro valor maior que o segundo2 O segundo valor maior que o primeiro

    Como regra, deve-se tentar limitar as funes a usar somente um comando return. medida que as funes se tornarem maiores e mais complexas, ter muitos comandos return normalmente tornar as funes mais difceis de compreender. Na maioria dos casos, pode-se reescrever a funo para que ela use somente um comando return

    4.3 Main como uma Funo

    Como j dissemos anteriormente, todo programa possui uma funo principal que contm todos os comandos e chamadas para outras funes presentes no programa. A funo main funciona como uma funo normal: possui um prottipo e uma definio. Geralmente omitimos o prottipo, fazendo apenas a definio da funo main da seguinte forma:

    int main (void) {//corpo do programareturn 0;}

    Note que a funo main do tipo int, e retorna 0. Entretanto, no existe outra funo acima de main que a tenha chamado, para que ela possa retornar um valor de resposta. Para que serve este retorno ento? Simples: consideramos que a funo chamadora de main o prprio sistema operacional. Assim, utilizamos o retorno para indicar o funcionamento do programa. Caso o programa termine e retorne o valor 0 para o sistema operacional, sabemos que tudo correu bem e que o programa terminou normalmente. Um valor retornado diferente de 0 indica que o programa no rodou at o final (ou seja, at o ponto return 0;) e que aconteceu algum erro. Muitos sistemas operacionais e programas utilizam esse sistema simples para detectar erros durante a execuo de seus aplicativos.

  • UNESP Campus de Ilha Solteira 2007 Pgina 34

    4.4 Variveis dentro das Funes

    medida que as funes vo se tornando mais teis nos programas, muitas delas requerem que as variveis gerem resultados valiosos. Para usar uma varivel dentro de uma funo, precisa-se primeiro declarar a varivel, exatamente como feito na funo principal main. Quando se declara variveis dentro de uma funo, os nomes usados para essas variveis so exclusivos para a funo.

    Portanto, se o programa usa dez funes diferentes e cada funo usa uma varivel chamada contador, o compilador considerar a varivel de cada funo como distinta. Se uma funo requer muitas variveis, elas devero ser declaradas no incio da funo, exatamente como se faria dentro de main.

    4.4.1 Variveis Locais A Linguagem C++ permite declarar variveis dentro de suas funes. Essas

    variveis so chamadas de variveis locais, pois seus nomes e valores somente tm significado dentro da funo que contm a declarao da varivel.

    O programa a seguir ilustra o conceito de uma varivel local. A funo valores_locais declara 3 variveis a, b e c, e atribui s variveis os valores 1, 2 e 3, respectivamente. A funo main tenta imprimir o valor de cada varivel. No entanto, como os nomes dos valores so locais funo, o compilador gera erros, dizendo que os smbolos a, b, e c esto indefinidos.

    #include using namespace std;

    void valores_locais(void);void valores_locais(void) { int a=1, b=2, c=3; }int main (void) { cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 35

    void valores_locais(void) { int a=1, b=2, c=3; cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 36

    estiverem em conflito, a linguagem C++ usar sempre a varivel local.

    4.5.1 Chamada por Valor

    Os programas passam informaes para funes usando parmetros. Quando um parmetro passado a uma funo, a Linguagem C++ usa uma tcnica conhecida como chamada por valor para fornecer funo uma cpia dos valores dos parmetros. Usando a chamada por valor, quaisquer modificaes que a funo fizer nos parmetros existem apenas dentro da prpria funo. Quando a funo termina, o valor das variveis que a funo chamadora passou para a funo no modificada dentro da funo chamadora.

    Por exemplo, o programa a seguir passa trs parmetros (as variveis a, b e c) para a funo exibe_e_altera. A funo, por sua vez, exibir os valores, somar 100 aos valores e depois exibir o resultado. Quando a funo terminar, o programa exibir os valores das variveis. Como a Linguagem C usa chamada por valor, a funo no altera os valores das variveis dentro do chamador, como mostrado a seguir:

    #include using namespace std;

    void exibe_e_altera(int primeiro, int segundo, int terceiro) { cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 37

    4.5.2 - Chamada por Referncia

    Usando a chamada por valor, as funes no podem modificar o valor de uma varivel passada para uma funo. No entanto, na maioria dos programas, as funes modificaro as variveis de um modo ou de outro. Por exemplo, uma funo que l informaes de um arquivo precisa colocar as informaes em uma matriz de string de caracteres. Da mesma forma, uma funo tal como strupr precisa converter as letras em uma string de caractere para maisculas. Quando as funes alteram o valor de um parmetro, os programas precisam passar o parmetro para a funo usando chamada por referncia.

    A diferena entre chamada por valor e chamada por referncia que, usando a chamada por valor, as funes recebem uma cpia do valor de um parmetro. Por outro lado, com a chamada por referncia, as funes recebem o endereo de memria da varivel. Portanto, as funes podem alterar o valor armazenado na posio de memria especfica (em outras palavras, o valor da varivel); alteraes essas que permanecem aps a funo terminar.

    Para usar a chamada por referncia, seu programa precisar usar ponteiros. Por ora tudo o que precisamos saber que um ponteiro armazena um endereo de memria, assim como uma varivel armazena um valor. O mdulo 8 dedicado totalmente explicao de ponteiros e suas aplicaes em C++, incluindo o funcionamento de uma chamada de funo por referncia.

    4.6 Biblioteca de Execuo

    Muitas vezes, uma funo criada para um determinado programa atende as necessidades de um segundo programa. A capacidade de reutilizar as funes em mais de um programa pode poupar um tempo considervel de programao e teste. Para isto s copiar a funo de um para outro programa.

    A linguagem C++ possui uma biblioteca padro com muitas funes teis previamente implementadas para uso do programador, inclusive incluindo todas as funes da biblioteca padro de C. A biblioteca padro se divide em vrias bibliotecas ou arquivos menores, divididos pelos tipos de funo que cada um contm. Por exemplo, a biblioteca cmath contm as funes matemticas padro da linguagem C e a biblioteca string contm funes da biblioteca padro de C++ que tratam de strings. Para utilizar uma destas bibliotecas, preciso avisar ao compilador atravs da diretiva

    #include

    O comando #include copia o contedo da biblioteca para o programa que estamos compilando, para que as funes pertencentes ela possam ser utilizadas. Algumas das bibliotecas padro de C e seus cabealhos so mostrados abaixo:

  • UNESP Campus de Ilha Solteira 2007 Pgina 38

    Funes matemticas: #include

    Funes de string: #include

    Funes de string do C++: #include

    Funes de I/O: #include

    Funes de tempo: #include

    Uma descrio detalhada das funes presentes na biblioteca padro de C++ no cabe nesta apostila. Entretanto, muitos livros e websites contm listagens e explicaes das funes padres. Um bom exemplo o website http://www.cppreference.com/index.html , que contm uma vasta referncia sobre vrios aspectos da linguagem C++.

    No deixe de examinar as funes que seu compilador fornece. Muitos compiladores referenciam essas funes internas como biblioteca de execuo. A maioria dos compiladores fornece centenas de funes de biblioteca de execuo com propsito que vo de abertura e trabalho com arquivos para acessar informaes do disco ou de diretrio para determinar o tamanho de uma string de caracteres. As duas ou trs horas que sero gastas para ler a documentao da biblioteca de execuo pouparo muitas horas de programao.

    4.7 Funes Recursivas

    Em C++, as funes podem chamar a si prprias, com exceo da funo principal main. Uma funo recursiva se um comando no corpo da funo chama ela mesma. Algumas vezes chamada de definio circular, a recursividade o processo de definio de algo em termos de si mesmo.

    Exemplos de recursividade existem em grande nmero. Uma maneira de definir um nmero inteiro sem sinal por meio de recursividade utilizando-se os dgitos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 mais ou menos outro nmero inteiro. Por exemplo, o nmero 15 o nmero 7 mais o nmero 8; 21 9 mais 12 e 12 9 mais 3.

    Para uma linguagem ser recursiva, uma funo deve estar apta a chamar a si prpria. O exemplo clssico de recursividade mostrado na funo fatorial_recursivo(), que calcula o fatorial de um nmero inteiro. O fatorial de um nmero N o produto de todos os nmeros inteiros entre 1 e N. Por exemplo, o fatorial de 3 1 x 2 x 3, ou 6.

    #include #include using namespace std;

    unsigned long fatorial_recursivo (int n){unsigned long resposta;if ((n == 1) || (n == 0))return(1);resposta = n * fatorial_recursivo(n - 1);return(resposta);

  • UNESP Campus de Ilha Solteira 2007 Pgina 39

    }int main(){

    unsigned long f;int n;cout n;f = fatorial_recursivo(n);cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 40

    programa pular para outro ponto na memria do computador, executar a funo e depois retornar ao ponto onde parou.

    Criamos funes inline do mesmo jeito que criamos funes normais: declarando seu prottipo e sua definio, com parmetros e retorno. S preciso adicionar o prefixo inline antes do prottipo ou da definio da funo, como mostrado na funo abaixo:

    inline int quadrado (long x){ x = x * x;return x;}

    No podemos criar funes inline recursivas, pois logicamente uma funo recursiva tem um tamanho varivel de acordo com seu nmero de iteraes, que muitas vezes muda durante a execuo do programa.

    Ganha-se velocidade com as funes inline, mas perde-se em memria utilizada. Se um programa chama uma funo inline 10 vezes, criam-se 10 cpias da funo dentro do cdigo, aumentando seu tamanho durante a compilao. preciso escolher com cuidado quando utilizar funes normais e funes inline, tendo em mente o compromisso rapidez de execuo memria utilizada.

    4.10 Parmetros Padro

    Outra novidade introduzida por C++ no manuseio de funes a possibilidade de definir-se um valor padro para parmetros de uma funo. Isto , podemos definir um parmetro para uma funo e estabelecer um valor padro para ele, da seguinte forma:

    void mensagem (int x = 1);

    Quando chamamos a funo e enviamos um valor como parmetro para ela, a funo executada normalmente, utilizando o valor de x que enviamos. Porm, caso no envissemos um valor x como parmetro para esta funo, isto , fizssemos a seguinte declarao no programa:

    mensagem( );

    Automaticamente a funo substituiria x por 1, como especificamos no prottipo da funo. Caso no tivssemos definido um valor padro para o parmetro x, o compilador nos retornaria um erro de parmetros insuficientes para que a funo seja executada. Abaixo temos um exemplo de programa utilizando um parmetro padro.

    #include #include using namespace std;

    void mensagem (int x = 1) {

  • UNESP Campus de Ilha Solteira 2007 Pgina 41

    if (x != 1) cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 42

    Mdulo 5 Estudo dos comandos cout e cin

    A linguagem C++ possui uma tima biblioteca de classes relacionadas ao controle de entrada e sadas de dados. Desde o incio da apostila temos feito uso de algumas facilidades fornecidas por esta biblioteca, especificamente, os comandos cout e cin. Como voc deve ter percebido, a classe cout serve para exibir valores - seja o valor de uma varivel ou uma frase enquanto que cin serve para armazenar valores recebidos atravs do teclado em variveis. Tnhamos na linguagem C as funes printf e scanf para executar estas mesmas funes. Na verdade, printf e scanf tambm esto presentes em C++ (assim como todas as funes padres de C), e podemos utiliz-las caso desejemos. Porm, os comandos ou, utilizando um termo mais tecnicamente apropriado, classes cin e cout facilitam muito a vida do programador, por serem mais inteligentes que printf e scanf.

    5.1 Utilizao de cout

    Como j dissemos, cout exibe valores na tela. A sintaxe utilizada :

    cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 43

    double long double

    O operador de insero tambm fornece facilidades para a exibio de strings. Alm dos tipos bsicos mostrados acima, o operador de insero tambm reconhece os seguintes tipos de ponteiros:

    const signed char * const unsigned char * const char * void *

    Ponteiros sero explicados com maior propriedade no mdulo 8, mas precisamos saber que C e C++ representam strings utilizando ponteiros para o endereo de memria da string. Este ponteiro pode ser o nome de uma varivel matriz de tipo char, um ponteiro de tipo char ou ento uma frase entre aspas. O operador de insero reconhece cada um destes casos e exibe na tela a string de texto. Por exemplo:

    char nome[20] = Jose das Couves;char * nome2 = Jose das Galinhas;cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 44

    5.3 Formatao de exibio com cout

    A funo printf fornecia aos usurios de C mltiplas maneiras de formatar a exibio dos dados na tela do computador. A classe cout tambm fornece as mesmas facilidades para os usurios de C++. Nas subsees abaixo descreveremos como fazer vrios tipos de formatao de dados utilizando cout e o operador de insero.

    5.3.1 Escolhendo a Base Numrica

    Podemos escolher a base numrica que utilizaremos para representar nmeros inteiros. Para isto, devemos utilizar os comandos:

    cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 45

    O comando cout permite tambm escolher um nmero mnimo de caracteres para ser exibido na tela. Isto feito utilizando o mtodo:

    cout.width ( x );;

    Onde substitumos x pelo nmero mnino de caracteres a ser exibido na tela. Aps a utilizao deste mtodo, utilizamos o comando cout para exibir o valor desejado, como no exemplo abaixo:

    int variavel = 10;cout.width ( 5 );cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 46

    da preciso, este novo valor vale para todas as utilizaes futuras de cout.

    5.3.5 Alinhamento de Texto

    A escolha da direo de alinhamento de texto feita da seguinte forma utilizando cout:

    Alinhamento direita: cout ) para identificar o tipo de varivel onde o valor ser armazenado e encontrar o endereo de memria correto. Ao contrrio da funo scanf, utilizada na linguagem C, no preciso especificar qual o tipo de valor ser enviado pelo teclado pois o operador de extrao faz as converses necessrias. Podemos utilizar cin para ler valores inteiros, reais e strings de caracteres.

    Na maioria dos casos, o comando cin cobre nossas necessidades de entrada de dados via teclado. Entretanto, quando precisamos ler strings com mais de uma palavra, como por exemplo frases ou nomes, cin apresenta certos problemas. Isto acontece por causa da maneira que C++ trata os espaos em branco em uma entrada via teclado.

    Espaos em branco so considerados fim de entrada pelo comando cin; ao invs de descartar os caracteres que vierem aps o espao em branco, C++ os guarda em um buffer (uma espcie de reserva ou pilha de dados). Quando cin for chamado novamente, antes de ler a nova entrada do teclado, o programa primeiro utiliza os dados que esto nesse buffer. Assim, temos a impresso que a nova entrada de dados foi descartada pelo programa, mas na verdade ela foi jogada no buffer, esperando uma nova chamada de cin. Para solucionar este problema, utilizamos o mtdo de cin cin.getline.

    5.5 Mtodo de cin: cin.getline

    O mtodo cin.getline muito til para receber strings de caracteres com espaos, como frases. Este mtodo l uma linha inteira, marcando o fim da entrada de dados pelo uso da tecla indicando a entrada de uma nova linha. Abaixo temos a sintaxe do mtodo:

  • UNESP Campus de Ilha Solteira 2007 Pgina 47

    cin.getline ( , );

    O primeiro argumento a matriz de caracteres para onde sero enviados os dados recebidos. necessrio declarar uma matriz de caracteres previamente ao uso deste mtodo. O segundo argumento o nmero mximo de caracteres que ser lido pelo mtodo, menos o caractere \0 indicando o fim da string. Assim, se especificarmos um nmero mximo igual a 20, este comando ler 19 caracteres e descartar os prximos caracteres entrados pelo usurio, at que a tecla seja pressionada. Um espao ser sempre utilizado para marcar o fim da string atravs do caractere \0.

    Um exemplo da utilizao de cin.getline:

    char matriz[60];cin.getline ( matriz, 50 );cout >> matriz;

    Nesse caso, o mtodo cin.getline ler os prximos 49 caracteres (lembre-se do espao reservado para o caractere fim_de_string \0) que o usurio entrar atravs do teclado. A leitura ser feita at que ele aperte a tecla interrompendo o comando. Caso o usurio entre mais do que 50 caracteres , os prximos sero descartados pelo programa.

  • UNESP Campus de Ilha Solteira 2007 Pgina 48

    Mdulo 6 - Estruturas de Controle de Fluxo

    6.1 - Estruturas de Controle de Fluxo

    Estruturas de controle de fluxo so comandos utilizados em uma linguagem de programao para determinar qual a ordem e quais comandos devem ser executados pelo programa em uma dada condio. C++ oferece vrias opes de estrutura de controle de fluxo, todas elas herdadas da linguagem C. Neste mdulo iremos ver como funcionam cada uma destas estruturas em detalhe.

    Geralmente, as estruturas de controle utilizam expresses condicionais. Caso a expresso retorne 0, dizemos que ela falsa. Caso ela retorne qualquer outro valor, dizemos que ela verdadeira. Nesse contexto, qualquer expresso pode ser utilizada desde que retorne um valor zero ou no zero. Podemos utilizar operadores aritmticos, relacionais, lgicos, desde que no final a expresso nos retorne um valor que possa ser testado. Tambm possvel testar vrias condies ao mesmo tempo, unindo as expresses com o auxlio dos operadores AND e OR.

    6.2 A declarao if

    Utilizamos a declarao if quando desejamos que o programa teste uma ou mais condies e execute um ou outro comando de acordo com o resultado deste teste. A sintaxe de if a seguinte:

    if (condio){comandos;}

    else{

    comandos;}

    A declarao if testar a condio expressa entre parnteses. Caso a condio seja verdadeira, os comandos declarados entre as chaves sero executados.

    A declarao else opcional: podemos utiliz-la para determinar um conjunto de comandos que sero executados caso a condio testada seja falsa. Note que somente um dos conjuntos de comandos ser executado, nunca os dois: caso a condio seja verdadeira, o bloco pertencente a if ser executado; caso a condio falhe, o bloco pertencente a else ser executado.

    O programa abaixo ilustra de maneira simples o uso da declarao if-else, obtendo um nmero do usurio e verificando se este valor maior ou igual a 50.

    #include

  • UNESP Campus de Ilha Solteira 2007 Pgina 49

    using namespace std;

    int main() { int teste; cout teste; if (teste > 50) { cout 10){

    if ( x == 17){cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 50

    6.3 O Encadeamento If Else if

    Utilizamos a variao If Else If quando desejamos que o programa teste vrias condies em sequncia, at encontrar uma que seja verdadeira. Sua sintaxe muito parecida com a declarao if simples:

    if (condio){comandos;}else if (condio){

    comandos;}else if (condio){

    comandos;}else{

    comandos;}

    Cada bloco else if dever testar uma condio diferente. O programa testar todas as condies na sequncia, de cima para baixo, at encontrar uma condio verdadeira. Quando isto acontece, os comandos pertencentes ao bloco verdadeiro sero executados enquanto todos os outros blocos do encadeamento so ignorados. Caso nenhuma condio else if seja verdadeira, executa-se o bloco de comandos pertencente ao else final. Note que o else opcional: Se o else final no estiver presente e todas as outras condies forem falsas, ento nenhuma ao ser realizada.

    Utilizando este encadeamento, ampliaremos o programa anterior para que ele teste vrias condies sobre um nmero enviado pelo usurio, at encontrar uma condio verdadeira.

    #include using namespace std;

    int main() {int teste;cout teste;if (teste

  • UNESP Campus de Ilha Solteira 2007 Pgina 51

    cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 52

    case, cada um associado a um determinado valor. A declarao comparar o valor da varivel com o valor de cada um dos case: quando uma associao encontrada, os comandos pertencentes ao case relacionado so executados. Se nenhuma associao for encontrada, a declarao switch executar os comandos pertencentes ao bloco default (note que o bloco default opcional: caso ele no exista, caso nenhuma associao seja encontrada a declarao switch termina sem que nenhum comando seja executado). O exemplo abaixo demonstra uma utilizao da declarao switch.

    #include using namespace std;

    int main(){

    int option;cout

  • UNESP Campus de Ilha Solteira 2007 Pgina 53

    6.5 A declarao for

    Utiliza-se a declarao for para realizar tarefas repetitivas dentro de um programa, como somar todos os elementos de uma matriz ou exibir na tela uma sequncia grande de valores. A declarao for tem o seguinte formato:

    for ( valor_inicial; condio_testada; valor_incremento){comandos;}

    A declarao for o que chamamos de lao ou loop em programao: um conjunto de comandos que sero executados repetidamente at que uma determinada condio falhe e termine o lao. Em for, determinamos o nmero de repeties desejadas atravs de uma varivel de controle que ser modificada pelos argumentos da declarao for.

    valor_inicial refere-se atribuio de um valor inicial para a varivel de controle, por exemplo: controle = 0;

    condio_testada uma expresso qualquer contendo a varivel de controle, que ser testada continuamente. Enquanto a condio for verdadeira, os comandos dentro do lao for sero executados. Quando a condio falhar, o lao termina e o programa continua seu fluxo normal. Por exemplo, controle < 30; uma expresso vlida, que testa se a varivel controle menor do que 30.

    valor_incremento uma expresso que incrementar a varivel de controle sempre que a condio testada anteriormente for verdadeira. Por exemplo, controle = controle + 1 ou mais simplesmente controle++

    Como j dissemos, os comandos entre as chaves sero executados sempre que a condio testada for verdadeira, e se repetiro at que a condio se torne falsa e o lao termine.

    O exemplo de cdigo abaixo mostra uma declarao de lao for utilizando o exemplo dado anteriormente:

    #include using namespace std;

    int main(){int controle;for ( controle = 0; controle

  • UNESP Campus de Ilha Solteira 2007 Pgina 54

    A varivel controle comea com valor 0. O lao for testa o valor da varivel continuamente, sempre determinando se ele menor do que 30. Sempre que o valor da varivel for menor que 30 (condio verdadeira), a varivel de controle incrementada de 1 e os comandos entre as chaves so executados. Quando a varivel controle for maior do que 30 (condio falsa), o lao termina e o programa volta a ser executado normalmente.

    O comando for extremamente flexvel. Podemos atribuir qualquer valor que quisermos varivel de controle, e tambm podemos increment-la (ou decrement-la da forma que desejarmos). No exemplo abaixo, utilizamos o lao for de forma inversa ao exemplo anterior: a varivel de controle comea em 60 e vai sendo decrementada de 2 a cada repetio.

    #include using namespace std;

    int main(){int controle;for ( controle = 60; controle >= 0; controle = controle - 2)

    {cou