You are on page 1of 38

Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao

(Linguagens & Tcnicas de Programao C++)

INFORMTICA II

dr Gabriel I. Salimo Agosto, 2011

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

ndice
1. LINGUAGENS DE PROGRAMAO ........................................................................................ 4 1.1. PRINCPIO DE FUNCIONAMENTO DO COMPUTADOR ................................................................................ 4 1.2. A PROGRAMAO DE COMPUTADOR .................................................................................................... 4 1.2.1. Assembly ................................................................................................................................ 6 1.2.2. Fortran ............................................................................................................................... 6 1.2.3. Pascal ................................................................................................................................. 6 1.2.4. Cobol ................................................................................................................................. 6 1.2.5. Linguagem C....................................................................................................................... 6 1.2.6. C++ ................................................................................................................................... 7 1.2.7. Java, C# ............................................................................................................................. 7 1.2.8. PHP.................................................................................................................................... 7 1.2.9. Perl, Python, Ruby .............................................................................................................. 7 2. RESOLUO DE PROBLEMAS ATRAVS DE COMPUTADOR ..................................................... 7

2.1. ALGORITMOS COMPUTACIONAIS .......................................................................................................... 8 2.1.1. Directrizes para a Elaborao de Algoritmos ............................................................................ 8 2.2. O PROCESSO DE PROGRAMAO .......................................................................................................... 9 2.3. T ECNICAS DE PROGRAMAO ............................................................................................................. 10 2.3.1. Programao Tradicional ................................................................................................... 10 2.3.2. Programao modular & Programao estruturada ..............................................................11 2.3.3. Programao Orientada para Objectos (OOP).................................................................... 12 2.3.4. Programao dirigida por eventos (Event-Driven)............................................................... 13 2.4. PARADIGMA DE PROGRAMAO .......................................................................................................... 13 3. 3.1. 3.2. 3.3. 3.4. LINGUAGEM C++ ................................................................................................................ 13 AMBIENTE DE D ESENVOLVIMENTO ....................................................................................................... 13 I NSTALAO DO DEVC++ .................................................................................................................. 13 EXPLORAO DO DEVC++................................................................................................................. 15 SINTAXE DO C++ ............................................................................................................................. 18 3.4.1. Tipo de Dados ................................................................................................................... 18 3.4.1.1. Definio de Dados ................................................................................................... 18 3.4.1.2. Definio de Variveis ............................................................................................... 18 3.4.1.3. Nome de Variveis .................................................................................................... 18 3.4.2. Palavras Reservadas ........................................................................................................... 18 3.4.3. Variveis do Tipo Bsico .................................................................................................... 18 3.4.3.1. Constantes Inteiras: ................................................................................................... 19 3.4.4. Declarao de Variveis ..................................................................................................... 19 3.4.5. Inicializao de Variveis.................................................................................................... 19 3.4.6. Declarao e Inicializao de Variveis ............................................................................... 19 3.4.7. Converso de Tipos de Dados ............................................................................................ 19 3.4.7.1. Converso Implcita................................................................................................... 19 3.4.7.2. Converso Explicita ................................................................................................... 19 3.4.8. Constantes ......................................................................................................................... 19 3.4.8.1. Declarao e Inicializao de Constantes ................................................................... 20 3.4.9. Operador de Atribuicao (=) ............................................................................................. 20 3.4.10. Operadores Aritmticos .................................................................................................... 20 3.4.10.1. Operadores Unrios (actuam sobre apenas um operando)......................................... 20 3.4.10.2. Operadores Binrios (actuam sobre dois operandos) ................................................. 20 3.4.10.3. Precedncia de Operadores Aritmticos ..................................................................... 21 3.4.11. Operadores de Atribuio Compostos ................................................................................ 21 3.4.12. Operadores Relacionais...................................................................................................... 21 3.4.12.1. Precedncia de Operadores Relacionais...................................................................... 21 3.4.13. Operadores Lgicos ........................................................................................................... 21 3.4.14. Exerccios (Variveis & Operadores) .................................................................................. 22 3.4.14.1. Resolvidos................................................................................................................ 22 3.4.14.2. No Resolvidos ........................................................................................................ 22
(dr Gabriel Salimo) Pagina 2 de 38

Informtica II

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

3.4.15. Estrutura de Programa em C++ ......................................................................................... 24 3.4.15.1. Estrutura Geral ......................................................................................................... 24 3.4.15.2. Programa Bsico em C++ ......................................................................................... 24 3.4.15.3. Instruo: CIN (Leitura no cran) ............................................................................. 25 3.4.15.4. Instruo: COUT (Sada no cran)............................................................................. 25 3.4.16. Controlo de Fluxo ............................................................................................................ 26 3.4.16.1. Instruo: IF ............................................................................................................. 26 3.4.16.2. Instruo: IFELSE ................................................................................................... 27 3.4.16.3. Instruo: SWITCH, CASE ......................................................................................... 28 3.4.16.4. Atribuio Condicional ............................................................................................. 30 3.4.17. Exerccios (C++: estruturas de sequencia e de controlo de fluxo)........................................ 30 3.4.17.1. Resolvidos................................................................................................................ 30 3.4.17.2. No Resolvidos ........................................................................................................ 34 3.4.18. Estruturas de Repetio (Ciclos/Laos) ............................................................................... 35 3.4.18.1. Instruo: While ....................................................................................................... 35 3.4.18.2. Instruo: do While .................................................................................................. 36 3.4.18.3. Instruo: For ........................................................................................................... 37 3.4.19. Exerccios (Estruturas de Repetio em C++ (Ciclos/Laos))................................................ 38 3.4.19.1. Resolvidos................................................................................................................ 38 3.4.19.2. No Resolvidos ........................................................................................................ 38

Informtica II

(dr Gabriel Salimo)

Pagina 3 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

1. 1.1.

Linguagens de Programao Princpio de Funcionamento do Computador O computador no uma mquina com inteligncia. Na verdade, uma mquina com uma grande capacidade para processamento de informaes, tanto em volume de dados quanto na velocidade das operaes que realiza sobre esses dados. Basicamente o computador organizado em trs grandes funes ou reas: entrada de dados, processamento de dados e sada de dados (Input-Processing-Output): Entrada (Input) Processamento (Processing) Sada (Output)

O computador armazena a informao e faz todo o seu tratamento baseado em fenmenos electromagnticos sobre sistemas biestveis com os smbolos 0 e 1. Os dgitos 0 e 1 so os elementos do sistema de numerao de base 2. Por isso o nome de dgitos binrios ("binary digit") ou, abreviadamente, bit, denominao de unidade mnima de posio de memria no computador.

A Unidade Central de Processamento (UCP) frequentemente designado por CPU (Central Processing Unit) ou simplesmente processador, o componente que recebe as instrues (ordens) de um programa, coordena as restantes partes do hardware a executar o que o programa exige. As instrues, os dados iniciais, os dados intermedirios e resultados finais referentes a um programa no acto do processamento so armazenadas em Memrias. Cada um dos elementos armazenados na memria do computador fica num "local" certo e sabido, com um endereo prprio; s assim se torna possvel a busca na memria, exactamente, do que se estiver querendo a cada momento. Assim, em termos lgicos, pode-se "ver" a memria como um conjunto de endereos.

1.2.

A Programao de Computador Podemos imaginar o computador como uma super calculadora, capaz de fazer clculos muito mais rpido que ns, mas para isso devemos dizer para o computador o que deve ser calculado e como deve ser calculado. A funo das linguagens de programao exactamente essa, ou seja, servir de um meio de comunicao entre computadores e humanos. Existem dois tipos de linguagens de programao: as de baixo nvel e as de alto nvel. Os computadores interpretam tudo como nmeros em base binria, ou seja, s entendem zero e um.

Informtica II

(dr Gabriel Salimo)

Pagina 4 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

As linguagens de baixo nvel so interpretadas directamente pelo computador, tendo um resultado rpido, porm muito difcil e incmodo se trabalhar com elas. Exemplos de linguagens de baixo nvel so a linguagem binria e a linguagem Assembly. Exemplo: (cdigo em Assembly) MOV r0, #0C ;load base address of string into r0 LOAD: MOV r1,(r0) ;load contents into r1 CALL PRINT ; call a print routine to print the character in r1 INC r0 ;point to next character JMP LOAD ;load next character Como pode-se notar, uma linguagem bastante complicada. J as linguagens de alto nvel so mais fceis de se trabalhar e de entender, as aces so representadas por palavras de ordem (exemplo faa, imprima, etc) geralmente em ingls, foram feitos assim para facilitar a memorizao e a lgica. Elas no so interpretadas directamente pelo computador, sendo necessrio traduzi-las para linguagem binria utilizando-se de um programa chamado compilador. Quando programamos em uma linguagem de programao de alto nvel primeiramente criamos um arquivo de texto comum contendo a lgica do programa, ou seja, onde falamos ao computador como deve ser feito o que queremos. Este arquivo de texto chamado de cdigofonte, cada palavra de ordem dentro do cdigo-fonte chamada de instruo. Aps criarmos o cdigo-fonte devemos traduzir este arquivo para linguagem binria usando o compilador correspondente com a linguagem na qual estamos programando. O compilador ir gerar um segundo arquivo que chamamos de executvel ou programa, este arquivo gerado interpretado directamente pelo computador. Existem algumas linguagens de programao que no necessitam de compiladores, como o PHP, uma linguagem dedicada produo de websites dinmicos, como o UniZambeze. As instrues em PHP so compiladas e executadas ao mesmo tempo. Exemplo: cdigo PHP (alto nvel) <?php print ("Bem vindos visitantes da UniZambeze!"); print (" Vamos contar at 50:"); for($x=1;$x<=50;$x++) { print $x; print " "; } if(4 == 2) { print ("Fim do mundo! 4 igual a 2!"); } else { print ("Ufa! 4 diferente de 2"); } ?> Cada linguagem de programao diferente da outra, contendo palavras-chave prprias. Exemplos de linguagens de alto nvel so C++, Java, C#, Delphi (Pascal), PHP, Visual Basic, etc. As linguagens de Programao se assemelham: na Lgica binrias, as instrues if, else, goto, switch, etc... entre outros processos; porm a sintaxe bsica dessas linguagens diferente

Informtica II

(dr Gabriel Salimo)

Pagina 5 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

O mais importante, hoje, na rea de Linguagens de Programao, o desenvolvimento de linguagens que aumentem a produtividade do programador: esta a razo do rpido crescimento de linguagens como Java, C# e Ruby 1.2.1. Assembly Criada na dcada de 50, o Assembly foi das primeiras linguagens de programao a aparecer. Ela usa uma sintaxe complicada e "exageradamente" difcil, isto porque, antes da dcada de 50 os programadores de mquinas tinham que escrever instrues em cdigo binrio, qualquer coisa como: 0110010110011011010110011010111010110101 ... Para escrever uma instruo. Na verdade, o Assembly foi criado para facilitar o uso dessa tarefa, mas considerado uma linguagem de baixo nvel, pois tudo o que o processador interpreta tem que ser descrito pelo programador. Assim o cdigo acima seria "add EAX" em Assembly. Bastava apenas, depois de estar concluda a escrita do cdigo, rodar o compilador e tnhamos o programa. Vantagens: programas extremamente rpidos e pequenos. Desvantagens: tempo de desenvolvimento lento e sujeito a erros; cdigo preso a uma arquitetura

1.2.2.

Fortran Esta linguagem Fortran (Formula Translator) uma linguagem de Alto nvel, que foi criada partindo do problema e da dificuldade apresentadas pelo Assembly. Apareceu tambm na dcada de 50 e foi considerada uma das melhores linguagens da poca. Aqui temos vrias funes e instrues pr-definidas que nos permite poupar tempo na dactilografia de instrues base do processador, ao contrrio da linguagem Assembly.

1.2.3.

Pascal Outra linguagem de Alto nvel dos anos 60, bem estruturada, mas com regras rgidas, o que a torna difcil de modelar, para se criar novas ideias. a tpica linguagem usada para iniciar os cursos de Programao. Actualmente ambientes de desenvolvimento (IDE) como o FreePascal, o Kylix e o Delphi so ptimas opes para se programar em Pascal. Vantagens: fortemente tipada (boa para iniciantes, os quais no tem muita familiaridade com a programao) Desvantagens: por ser fortemente tipada, prende programadores mais veteranos

1.2.4.

Cobol Foi uma linguagem usada para a criao e estruturao de bancos de dados financeiros nos anos 60 que ainda hoje usada por este tipo de servios. Comparada com o Pascal e o Assembly, esta linguagem bem amigvel e bastante acessvel e actualmente serve para vrias tarefas.

1.2.5.

Linguagem C Poder-se-ia dizer que o C uma das maravilhas das linguagens de programao. Muitos dos programas existentes hoje foram escritos nesta linguagem. O C foi desenvolvido nos laboratrios Bell na dcada de 70, e possui as seguintes caractersticas: Portabilidade entre mquinas e sistemas operacionais Dados compostos em forma estruturada Total interaco tanto com o SO como com a mquina Cdigo compacto e rpido.

Nos anos 80, C era a linguagem mais utilizada por programadores, por permitir a escrita intensiva de todas as caractersticas das linguagens anteriores. O Prprio UNIX e Linux foram escritos em C, assim como o front-end do MS-DOS, Windows e as aplicaes Office mais usadas no mundo (OpenOffice.org, Microsoft Office, embora cada uma delas inclusse suas prprias linguagens de

Informtica II

(dr Gabriel Salimo)

Pagina 6 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

script), sendo tambm utilizada em aplicaes grficas e criao de efeitos especiais nos filmes Strar Trek e Star Wars. 1.2.6. Vantagens: programas extremamente rpidos e pequenos. Desvantagens: tempo de desenvolvimento lento e sujeito a erros

C++ Uma linguagem que adiciona ao C um conjunto de recursos a mais, como o prprio nome sugere. O C++ o C orientado a objectos. Avanando nos 90, passou por diversas actualizaes e padronizaes nesta poca, o padro do C++ foi exaustivamente trabalhado pelos desenvolvedores durante oito anos, quando finalmente foi aprovado pelo ANSI. Vrios projectos como o KDE (front-end para UNIX, Linux, BSD e recentemente para Windows) so escritos em C++. Vantagens: programas extremamente rpidos e pequenos; proteco contra alguns erros comuns em C Desvantagens: tempo de desenvolvimento lento

1.2.7.

Java, C# As linguagens em ascenso no fim dos anos 90 e comeo do ano 2000, so linguagens de alto poder de abstraco e com boas capacidades de virtualizao, o que lhes conferem boas possibilidades de independncia de plataforma, embora estas caractersticas ainda esto sendo melhoradas. Vantagens: uma maior facilidade em C/C++ so os vnculos de patentes com as empresas que as desenvolveram.

1.2.8.

PHP O PHP apareceu em 1994 e pretendeu revolucionar o mercado de linguagens na criao de scripts para a internet. Realmente uma linguagem excepcional onde permitido fazer tudo o que os CGIs faziam inclusive mais coisas ainda. Para quem quer seguir programao para aplicaes web uma linguagem a estudar, assim como o Perl, usado tambm na criao de ferramentas em sites. Vantagens: facilidade de implementao e execuo. Desvantagens: certa lentido, que depende do ambiente onde foi instalado o servidor.

1.2.9.

Perl, Python, Ruby Ciclos de processamento e tempo de computador so cada vez mais baratos; tempo de programador e criatividade so cada vez mais caros. Por isso, a tendncia actual no mercado favorecer linguagens de alto nvel, menos optimizadas para a mquina, e mais optimizadas para o programador: linguagens como Perl, Python e Ruby, consideradas linguagens de programao de alto nvel, com um nvel de abstraco relativamente elevado, longe do cdigo de mquina e mais prximo linguagem humana. Vantagens: maior facilidade de implementao e execuo em relao ao Java e ao C# Desvantagens: programas mais lentos do que em C/C++

2.

Resoluo de Problemas atravs de Computador Define-se por Processamento de Dados qualquer actividade que, utilizando informaes (ou dados), efectua transformaes para obter novas informaes (ou dados) como resultado. Porm, a tarefa desempenhada pelos computadores apenas parte do processo de soluo de problemas.

Informtica II

(dr Gabriel Salimo)

Pagina 7 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

As etapas na soluo de problemas so: Entendimento do problema; Criao de uma sequncia de operaes (ou aces) que, quando executadas, produzem a soluo para o problema; Execuo desta sequncia de operaes; Verificao da adequao da soluo. As etapas de entendimento do problema, criao de sequncia de aces e verificao da adequao da soluo so tarefas desempenhadas por pessoas. A etapa de execuo das operaes pode ser desempenhada por computadores.

2.1.

Algoritmos Computacionais O algoritmo uma sequncia de instrues, onde cada instruo representa uma ACO que deve ser entendida e realizada para a soluo de um problema. A questo : Como saber se j temos detalhes suficientes num algoritmo para que a aco possa ser entendida e realizada? O computador utiliza dois conceitos bsicos para construir e interpretar algoritmos:

Estruturas de Dados - para manipulao das informaes Estruturas de Controlo - para manipulao das aces
2.1.1. Directrizes para a Elaborao de Algoritmos Estas directrizes so genricas e podem ser usadas ou adaptadas na organizao dos passos que comporo a soluo de um determinado problema (ou seja, na criao de um algoritmo para atingir um objectivo determinado):

1 Identificao do problema: determinar o que se quer resolver ou qual objectivo a ser atingido. 2 Identificao das entradas de dados: informaes fornecidas, a partir das quais se
desenvolvero os clculos

3 Identificao das sadas de dados: as informaes a serem geradas como resultado.


Informtica II (dr Gabriel Salimo) Pagina 8 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

4 Identificao das regras e limitaes do problema ou das limitaes do agente executante (ex:
se o agente fosse uma calculadora no cientfica, iriam existir limitaes no clculo de funes, por exemplo). 5 Determinao do que deve ser feito para transformar as entradas em sadas. Neste ponto deve ser determinada a sequncia de aces que leve soluo do problema. Para isto preciso: a). observar as regras e limitaes j identificadas; b). determinar aces possveis de serem realizadas pelo agente. 6 Construo do Algoritmo, utilizando uma das formas de representao de algoritmos 7 Teste da soluo - execuo de todas as aces do algoritmo, seguindo o fluxo estabelecido para verificar se ele est realmente gerando os resultados esperados ou detectar possveis erros em sua descrio Exemplo: Considere o problema: Calcular a mdia final de Estudantes que realizaro quatro provas: P1, P2, P3 e P4. A Mdia Final calculada por: MF = (P1 + P2 + P3 + P4) / 4 Para montar o algoritmo proposto, faremos trs perguntas: a). Quais so os dados de entrada? R: Os dados de entrada so P1, P2, P3 e P4 b). Qual ser o processamento a ser usado? R: O procedimento ser somar todos os dados de entrada e dividi-los por 4 (quatro) c). Quais so os dados de sada? R: O dado de sada ser a mdia final (MF) 2.2. O Processo de Programao A etapa desempenhada pelo computador depende essencialmente da programao. Programao implementao do planeamento ou projecto: a escrita e testes de instrues a serem executadas pelo computador Programa. Para criar programas, usa-se uma linguagem de programao, dita de alto nvel, como o C++, e especifica-se as instrues que o computador deve executar. Em seguida, por meio de um programa especial chamado compilador, converte-se as instrues de programao na linguagem de mquina (binria) que o computador compreende. O esquema completo apresenta-se na figura em seguida:

Informtica II

(dr Gabriel Salimo)

Pagina 9 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

Analise da situao / problema Formulao de um algoritmo (diagramas, fluxogramas, pseudocdigo) Traduo do algoritmo numa linguagem de programao ou escrita do programa fonte Traduo(compilao/interpretao) do programa fonte para cdigo-mquina e verificao dos erros de escrita Sim

Deteco de erros No

Testes de verificao lgica do programa

Erros lgicos

Sim

Programa terminado

A programao uma arte porque existem muitas maneiras de se realizar o trabalho de programao e tambm existe espao para uma considervel dose de criatividade, 2.3. Tecnicas de Programao As tcnicas de programao Os tipos ou so bastante variados, embora pode ser que haja muitos leitores que s conheam uma metodologia para realizar programas. Na maioria dos casos, as tcnicas centram-se em programao modular e programao estruturada, porm existem outros tipos de programao. Explicaremos isso melhor ao longo do artigo. 2.3.1. Programao Tradicional A forma tradicional de indicar/escrever essas aces (instrues) em sequncia, do princpio ao fim, de acordo com o pensamento linear dever ser (exemplo da chvena de caf): 1. 2. 3. 4. 5. 6.
Informtica II

Pegar numa cafeteira; Encher a cafeteira de gua; Pr a cafeteira numa boca do fogo; Pegar na caixa de fsforos; Acender um fsforo; Rodar o boto da boca do fogo;
(dr Gabriel Salimo) Pagina 10 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

7. 8. 9. 10. 11.

Acender essa boca com o fsforo; Pegar numa chvena; Coloc-la na mesa; Pegar na lata de caf; Colocar o caf na chvena; 11.1. Se quiser mais fraco, coloque uma colher; 11.2. Se quiser forte, coloque duas colheres; 12. Colocar acar na chvena; 13. Esperar que a gua ferva; 14. Coloque a gua na chvena; 15. Pegara numa colher; 16. Mexer o contedo na chvena. Obedecendo a esta sequncia, qualquer pessoa conseguir preparar um caf, todavia, esta, no condio necessria nem suficiente para obter os mesmos resultados. Por exemplo, nada impede que inicie a aco pelos passos 8 a 11, depois os passos 1 a 7, seguidos dos passos 12 a 16 pois o resultado ser o mesmo. Esta a forma considerada forma tradicional de escrever programas de computador, em que face ao problema a solucionar, definem-se um conjunto de instrues sequenciais, utilizando o vocabulrio e a sintaxe prprios da linguagem com que se trabalha. 2.3.2. Programao modular & Programao estruturada O problema subdividido em problemas menores ou sub-problemas que so designados por mdulos. Neste caso o programador se liberta da sequncia rgida imaginada por mim, assim como poderia constituir talvez com maior detalhe aces isoladas que poderia aplicar a outras situaes. Para o exemplo anterior, teramos: Mdulo : acender-fogo 1. Pegar na caixa de fsforos; 2. Acender um fsforo; 3. Rodar o boto da boca do fogo; 4. Acender essa boca com o fsforo; Mdulo : cafeteira-gua-fogo 1. Pegar numa cafeteira; 2. Encher a cafeteira de gua; 3. Pr a cafeteira numa boca do fogo; Mdulo : caf 1. Pegar na lata de caf; 2. Colocar o caf na chvena; 2.1. Se quiser mais fraco, coloque uma colher; 2.2. Se quiser forte, coloque duas colheres; 3. Colocar acar na chvena; 4. Esperar que a gua ferva; 5. Coloque a gua na chvena; 6. Pegara numa colher; 7. Mexer o contedo na chvena Como se pode ver as instrues so rigorosamente as mesmas, apenas, encontram-se divididas em blocos menores e o utilizador pode escolher a sequncia em quer utilizar esses blocos.

Informtica II

(dr Gabriel Salimo)

Pagina 11 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

Neste caso tem-se a vantagem adicional de, caso queira fazer um ch, por exemplo, possuir partida 2 dos 3 mdulos necessrios e o mdulo Ch ser idntico ao mdulo Caf, e s apenas substituir o produto. 2.3.3. Programao Orientada para Objectos (OOP) A programao orientada por objectos (OOP Object Oriented Programming) sucessora natural da programao estruturada continuando a utilizar mdulos s que de forma diferente. Em vez de dividir o problema em sub-problemas, o programador identifica os objectos envolvidos no problema: objectos com caractersticas prprias (propriedades) e com capacidades de realizar certas funes (mtodos). para cada objecto, existe uma lista de eventos possveis e nesses eventos que se escrevem as instrues necessrias para a aco respectiva Isto pressupe uma estratgia de programao diferente: 1 desenhar o ambiente (interface) determinar quais os objectos (botes de comandos, lables, molduras, ) necessrios e coloc-los numa base (forma); 2 atribuir, a cada um destes objectos, as caractersticas (propriedades) que se acha mais conveniente (tamanho, cor, ); 3 por fim, insere as instrues (cdigo) em cada um deles, ou em mdulos independentes para que, ao serem acedidos por uma aco do utilizador, por exemplo um click do rato, executese uma tarefa; Perceba-se agora porque se chama programao orientada por objectos: todas as instrues so escritas e todas as aces so executadas em funo de cada objecto. Vejamos como funciona esta programao no nosso exemplo de Caf: Identifiquemos os objectos a utilizar: cafeteira, fogo, chvena, caf e gua. Escolhemos cada um segundo as caractersticas ou propriedades (cafeteira grande ou pequena; fogo elctrico ou a gs; chvena de porcelana ou plstico, verde, amarelo, ). E escrevemos ento as instrues necessrias para obter o resultado que pretendemos de cada um deles: Objecto Resultado pretendido : cafeteira : gua quente

1. Pegar numa cafeteira; 2. Encher a cafeteira de gua; 3. Pr a cafeteira numa boca do fogo. Objecto Resultado pretendido : fogo : aquecer

1. Rodar o boto da boca do fogo; 2. Acender essa boca. Objecto Resultado pretendido : caf : bebida

1. Colocar numa chvena com gua quente; 2. Mexer o contedo na chvena. E assim por diante para todos outros objectos. No restam dvidas de que conseguiremos preparar o caf com muito mais de liberdade de aco, de escolha e de forma personalizada.
Informtica II (dr Gabriel Salimo) Pagina 12 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

Repare-se, por exemplo, no objecto - fogo e no resultado que se espera obter - aquecer, no s o objecto como o resultado so elementos que poderemos utilizar para o relacionar com um nmero variado de outros objectos (panela, frigideira, tacho) obtendo sempre o mesmo resultado, ainda que produtos diferentes (sopa, batatas fritas, pudim); isto, sem necessidade de estarmos a escrever novamente as instrues, cada vez que pretendemos utiliz-lo (o objecto) para o mesmo fim (aquecer). 2.3.4. Programao dirigida por eventos (Event-Driven) A programao dirigida por eventos (event driven) a programao aonde as sequncias de aces surgem como resposta a eventos ligados aos objectos. Exemplifiquemos, ainda, com a preparao da chvena de caf. Temos o objecto fogo, consideremos o evento rodar-o-boto da boca do fogo que pretendemos utilizar. Ao activarmos esse evento, comea a sair gs da boca do fogo; ou seja, h uma resposta do objecto... Poderemos, ento, dizer este sistema encontra-se programado de forma a funcionar a partir de um evento, o mesmo que dizer, que consiste na programao event driven. 2.4. Paradigma de Programao O paradigma de programao a viso que o programador possui sobre a estruturao e execuo do programa. Por exemplo, em programao orientada a objectos, programadores podem abstrair um programa como uma coleco de objectos que interagem entre si, enquanto em programao funcional os programadores abstraem o programa como uma sequncia de funes executadas de modo empilhado; assim diferentes linguagens de programao propem diferentes paradigmas de programao. Os paradigmas de programao so muitas vezes diferenciados pelas tcnicas de programao que probem ou permitem. O relacionamento entre paradigmas de programao e linguagens de programao pode ser complexo pelo fato de linguagens de programao poderem suportar mais de um paradigma. 3. 3.1. Linguagem C++ Ambiente de Desenvolvimento A primeira coisa a fazer antes de desenvolver programas usando a linguagem C instalar um compilador. Pode-se, adicionalmente, instalar um ambiente de desenvolvimento. Para as prticas ao longo desta disciplina, optamos pela utilizao do ambiente de programao DevC++. A opo por este ambiente foi feita pelas seguintes razes: o DevC++ um ambiente gratuito e livre, o que significa que toda e qualquer pessoa pode fazer o download e instal-lo em sua mquina livremente; o compilador utilizado pelo DevC++ o gcc, compilador padro distribudo com todas as distribuies Linux e sistemas operacionais Linux; o DevC++ tambm multi-plataforma. Quer dizer, voc pode utiliz-lo tanto em mquinas com sistema operacional Windows como Linux. Basta fazer o download da verso correcta (existe uma para cada sistema operacional).

3.2.

Instalao do DevC++ E agora vamos instalao: 1. Antes de tudo voc precisa fazer o download do ambiente.

Informtica II

(dr Gabriel Salimo)

Pagina 13 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

2. Feito isso, voc deve agora clicar duas vezes sobre o setup do DevC++. Trata-se de um programa instalador, que ir se encarregar de executar os procedimentos necessrios instalao do compilador e ambiente de trabalho. Se o arquivo tiver sido obtido correctamente, voc ver a seguinte tela: 1 2

Informtica II

(dr Gabriel Salimo)

Pagina 14 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

10

11

3.3.

Explorao do DevC++ 1. Ao entrar no ambiente, voc ver uma tela como essa. O primeiro passo criar um projecto: o DevC, sendo um compilador moderno, exige que voc crie seus programas dentro de projectos. Isso visa organizar melhor os seus arquivos e facilita configuraes diferentes. Clique no boto indicado para criar um novo projecto (ou v no menu "File-New project").

2. Aparecer uma janela, solicitando o tipo de projecto. Clique na opo "Console application" (como indicado na figura abaixo) e a seguir no boto "OK".

Informtica II

(dr Gabriel Salimo)

Pagina 15 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

3. A tela seguinte solicita o nome do projecto. Digite um nome adequado para ele e clique em "Salvar", como indicado na figura. Ateno: o nome do projecto no precisa ser igual ao nome do programa fonte (arquivo .cpp).

4. Repare que o sistema automaticamente criou um trecho de cdigo C para voc iniciar o seu trabalho. De preferncia, no modifique esse cdigo, s acrescente o seu no meio (a partir da { no main). A primeira coisa importante a fazer dar um nome ao programa fonte e salv-lo. Para isso, clique no boto indicado abaixo.

5. E nesta janela, digite o nome desejado (ex: raiz.cpp) e clique em "Salvar"

Informtica II

(dr Gabriel Salimo)

Pagina 16 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

6. A partir desse momento, basta digitar o restante do seu programa. Para compil-lo, clique no boto indicado abaixo (ou pressione a tecla F9).

7. Se houver erros na compilao, ser apresentada uma lista de erros na janela principal. Caso contrrio, para executar o programa clique no boto indicado abaixo (ou pressione as teclas Control e F9 simultaneamente)

A partir daqui, com voc. Lembre-se de salvar periodicamente o programa, para evitar surpresas desagradveis...
Informtica II (dr Gabriel Salimo) Pagina 17 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

3.4. 3.4.1.

Sintaxe do C++ Tipo de Dados

3.4.1.1. Definio de Dados So informaes, que podem ser nmeros ou caracteres, com os quais o programa opera. 3.4.1.2. Definio de Variveis Representam localizaes de memria onde so armazenados valores que podem ser modificados pelo programa. 3.4.1.3. Nome de Variveis Pode conter letras, nmeros e caracter e trao abaixo/sublinhado (underscore), porm: todo nome s pode conter letras e dgitos; os caracteres "_" e $ so contados como letras; todo o primeiro caractere deve ser sempre uma letra;

letras maisculas e minsculas so consideradas caracteres diferentes; 1 caractere NO pode ser nmero; no permitido o uso de palavras reservadas. Exemplos: uz_01 - permitido _uz01 - permitido 01_uz - NO permitido

letras maisculas diferente de letras minsculas - conveno: minsculas (case sensitive) A1 diferente de a1
3.4.2. Palavras Reservadas Numa linguagem de programao, palavras reservadas da sintaxe da prpria linguagem. Em C++ temos: auto else break enum case extern catch float char for class friend const goto continue if default inline delete int do long double new 3.4.3. Variveis do Tipo Bsico Tipo Char Short Long
Informtica II

so todas aquelas palavras que fazem parte operator private protected public register return short signed sizeof static struct switch template this typedef union unsigned virtual void volatile while

Tamanho (bytes) 1 2 4

Descrio apenas 1 alfanumrico ns inteiros ns inteiros

Limite de valores caracter

c/sinal: -128 a 127 s/sinal: 0 a 255 c/sinal: -32768 a 32767 s/sinal: 0 a 65635 c/sinal: -2147483648 a 2147483647
Pagina 18 de 38

(dr Gabriel Salimo)

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

Int Float Double

* 4 8

ns inteiros ns fraccionrios com preciso simples (real) ns fraccionrios com preciso dupla (real, vrgula flutuante) Valores lgicos booleanos n real longo, virgula flutuante e dupla preciso

s/sinal: 0 a 42949967295 ver short e long 3.4e38 1.7e308

Bool long double 3.4.3.1. Constantes Inteiras:

1 10

True e False 1.2e4932

Constantes inteiras so valores que uma varivel inteira pode armazenar (alguns exemplos de erros na escrita de constantes inteiras): 3.4.4. 1.0 -> No possvel usar ponto decimal - 345 -> No possvel colocar um espao entre o sinal e o valor numrico 23 -> No possvel usar notao de expoentes

Declarao de Variveis Sintaxe: tipo nome_varivel; Exemplos: int x, y; float f;

3.4.5.

Inicializao de Variveis Sintaxe: nome_varivel = valor; Exemplos: x = y = 10; f = 3.5;

3.4.6.

Declarao e Inicializao de Variveis Sintaxe: tipo nome_varivel = valor; Exemplos: int x =10, y =10; float f = 3.5;

3.4.7.

Converso de Tipos de Dados

3.4.7.1. Converso Implcita double x = 7; int i = 4.5; char a = 32; 3.4.7.2. Converso Explicita double x = (double) 7; -> ser x=7.0 (converso de int para double) int i = (int) 4.5; -> ser i=4 (converso de double para int - perde-se informao) 3.4.8. Constantes As constantes representam localizaes na memria, de dados que no podem ser alterados durante a execuo do programa.
Informtica II (dr Gabriel Salimo) Pagina 19 de 38

-> ser x=7.0 (converso de int para double) -> ser i=4 (converso de double para int - perde-se informao) -> ser a= (converso de int para char - perde-se informao)

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

por conveno, o nome das variveis que representam as constantes em C++ so sempre em MAISCULAS

3.4.8.1. Declarao e Inicializao de Constantes Sintaxe: #define NOME_CONSTANTE valor Exemplos: #define PI 3.14159 #define MAX 500 3.4.9. Operador de Atribuicao (=) Sintaxe: nome_varivel = expresso; Exemplos: y = 2; - atribui o valor 2 a y x = 4 * y + 3; - atribui o valor da expresso a x

CUIDADO - Converso de Tipos em Atribuies. Regra: O valor do lado direito de uma atribuio convertido no tipo do lado esquerdo.

Exemplos: int x; float f; x = f = 3.5; f = x = 3.5; 3.4.10. Operadores Aritmticos 3.4.10.1. Operadores Unrios (actuam sobre apenas um operando) - (menos unrio) ++ (incremento) -- (decremento) - multiplica o operando por (-1) - incrementa o operando em uma unidade - decrementa o operando em uma unidade

-> resulta em f = 3.5 e x = 3 -> resulta em f = 3.0 e x = 3

Exemplos: Seja x = 2, na expresso y = 4*(x) + 3; ao substituirmos (x) pelo operador abaixo, teremos: ++x x++ --x x-incrementa o valor de x antes de us-lo, portanto teremos x = 3, logo y = 15 incrementa o valor de x depois de us-lo, portanto teremos x = 2, logo y = 11 decrementa o valor de x antes de us-lo, portanto teremos x = 1, logo y = 7 decrementa o valor de .x depois de us-lo, portanto teremos x = 2, logo y = 11

3.4.10.2. Operadores Binrios (actuam sobre dois operandos) + * / % & | ! adio subtraco multiplicao diviso mod - fornece o resto da diviso de 2 ns inteiros E binrio OU binrio NO binrio

Exemplos: i = 10 % 2;
Informtica II

-> i=0 (resto da diviso)


(dr Gabriel Salimo) Pagina 20 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

z = 11 % 2; int x = 55 % 10.0; double x = 5 / 7; double y = 5 / 7.0;

-> z=1 (resto da diviso) -> erro: resto da diviso s para inteiros -> x=0 (diviso inteira) -> y=0.714286 (diviso real)

3.4.10.3. Precedncia de Operadores Aritmticos

1 . ++, -2 . *, /, % 3 . +, -

Para alterar a precedncia basta colocar a expresso entre parnteses; Quando dois operandos tm o mesmo nvel de precedncia, eles so avaliados da esquerda para a direita.

Exemplos: (x + y) / 2 x/y*2 - ser feito 1 a soma e depois a diviso - ser feito 1 a diviso e depois a multiplicao

3.4.11. Operadores de Atribuio Compostos Sintaxe: expresso_1 operador = expresso_2 equivalente a expresso_1 = expresso_1 operador expresso_2 Exemplos: x=x*5 a=a+1 x=x/b y=y1 x *= 5 a += 1 ou x /= b y -= 1 ou

++a --y

3.4.12. Operadores Relacionais So usados para comparar expresses. Resultam em falso ou verdadeiro. == > < >= <= != igual comparao: compara se 2 valores so iguais maior que menor que maior ou igual menor ou igual diferente

Exemplos: 4 == 3 3>2 - resulta em falso - resulta em verdadeiro

3.4.12.1. Precedncia de Operadores Relacionais

1 . <, <=, >, >= 2 . != , ==


3.4.13. Operadores Lgicos Permitem relacionar duas ou mais expresses. && || !
Informtica II

e - resulta em verdadeiro se ambas expresses forem verdadeiras ou - resulta em verdadeiro se pelo menos uma expresso for verdadeira no - resulta em verdadeiro se a expresso for falsa e falso se a expresso for verdadeira
(dr Gabriel Salimo) Pagina 21 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

V V F F

&& e e e e

V F V F

Resultado V F F F

Operadores Lgicos || Resultado V ou V V V ou F V F ou V V F ou F F

! no no

V F

Resultado F V

Exemplos: (5 > 2) && (3 != 2) (5 < 2) && (3 != 2) (5 < 2) && (3 == 2) (3 >= 2) | | (4 != 2) (3 >= 2) | | (4 == 2) (3 <= 2) | | (4 == 2) !(4 == 2) !(4 != 2) -> -> -> -> -> -> -> -> resulta em verdadeiro (ambos verdadeiros) resulta em falso (apenas 1 verdadeiro) resulta em falso (ambos falsos) resulta em verdadeiro (ambos verdadeiros) resulta em verdadeiro (pelo menos 1 verdadeiro) resulta em falso (ambos falsos) resulta em verdadeiro (pois a expresso falsa) resulta em falso (pois a expresso verdadeira)

3.4.14. Exerccios (Variveis & Operadores) 3.4.14.1. Resolvidos 1. Quais dos seguintes identificadores so vlidos em C++ e no caso de invlido justifique? a) 2_x Invlido (inicia com um numrico) b) X3 1L Invlido (contm um espao entre os caracteres) c) ZIM$ Vlido d) int Invlido (int palavra reservada) e) $USA Vlido Dos seguintes valores quais so vlidos em C++? Para os invlidos justifique e para os vlidos indique o respectivo tipo. a) 0,8 Invlido (tem a vrgula) b) 2.5E-1 Vlido (float) c) a Vlido (char) d) false Vlido (Booleano) e) 350655 Vlido (long int) Quais das seguintes declaraes de variveis esto correctas? Para as incorrectas justifique. a) int d; float r; double f; Correcta b) char x1=35; Correcta c) int i=10%5.3; Incorrecta (resto da diviso s para inteiros) d) char long; Incorrecta (long palavra reservada) e) char k; double y=7; Correcta Qual o resultado da execuo do cdigo/instrues/expresses que se seguem? a) int k=(2 * (11 % 5) 8 1 / 2) k=-6 b) float x = 4.5, float z=2.5; x+= z; y=7.0 c) (8 + 1) != (3 + 4) True (Verdadeiro) d) int x, i = 3; (++i == 4) True (verdadeiro) e) bool a= true, b=false; (!a || b) && (a || !b) False (falso)

2.

3.

4.

3.4.14.2. No Resolvidos 1. Indique os nomes de variveis que so vlidos. Justifique os nomes invlidos. a). Tempo b). nota final c). km/h d). zim$ e). nota_final f). char g). 2dias
(dr Gabriel Salimo) Pagina 22 de 38

Informtica II

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

2.

3.

4.

5.

h). teste 1 i). raio.do.circulo j). $ us k). char l). 2ab m). 3_eT n). !ops o). *meu p). ab2 q). a2b Quais das seguintes instrues so corretas? a). int a; b). float b; c). double float c; d). unsigned char let; e). long float eps; f). double y; g). long int dia; h). long double preco; i). long char m; Sendo: int soma, num, x; char nome, cor; float res, fx; Assinalar os comandos considerados invlidos: a). nome = 5; b). nome = 5; c). soma = num + 2 * x; d). fx = nome *res; e). cor = nome; f). x = nome >= cor; g). soma + 1 = sqrt( num); h). x = (nome >= cor); i). nome = oi; j). x = x + 1; k). nome = "oi"; l). soma = res % fx; m). soma = res % x; n). soma = num %x; o). x = srqt(cor) + 5++; Indique quais dos nmeros abaixo so constantes inteiras (longas ou no) vlidas. Justifique suas respostas a). 100 b). 2 345 123 c). 3.0 d). -35 e). - 234 f). 0L g). 2l Seja A = 127, B = 10, C = 5, D = falso e E = verdadeiro. Escreva as expresses correspondentes a expresses lgicas e diga qual o resultado produzido por cada uma das frases abaixo? a). no D; b). D e E; c). (D e E) ou (A = B); d). (D ou E) e (A < B); e). (A > B) ou (B < C); f). no (A < B); g). A + B < C e D ou E e no D; h). A + B * C / B = 3 e no (D ou E);
(dr Gabriel Salimo) Pagina 23 de 38

Informtica II

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

6. Considerando as variveis inteiras A e B, com os valores 3 e 16, respectivamente; as variveis NOME e PROFISSO, com os valores MIRIAM e ADVOGADO, respectivamente; e mais a varivel lgica TESTE, contendo o valor falso, avaliar as expresses a seguir: a). A + 1 >= raiz (B) ou NOME < > ANA b). A + 1 >= raiz (B) e PROFISSO = MDICO c). NOME < > ANA ou PROFISSO = MDICO e A + 1 >= raiz (B) d). PROFISSO = MDICO ou TESTE e). no TESTE e ( A + 1 >= raiz (B) ou no PROFISSO = MDICO ) f). no (A + 1 >= raiz (B) e TESTE ) 7. Qual o resultado da seguinte expresso: int a = 1, b = 2, c = 3; int result = ++a/a&&!b&&c||b--||-a+4*c>!!b; 3.4.15. Estrutura de Programa em C++ 3.4.15.1. Estrutura Geral < diretivas do pr-processador > < declaraes globais >; main() { < declaraes locais >; // comentrio < instrues >; } < outras funes > 3.4.15.2. Programa Bsico em C++ Exemplo 1 Programa fonte e seus resultados de execuo Cdigo // Programa : Estrutura bsica do C++ #include <iostream> //Esta uma biblioteca para activar Entradas/Sadas using namespace // Inicio do programa principal int main() { cout << Bem-vindos ao mundo do C++!!; return c } Resultado Bem-vindos a programao em C++

O cdigo fonte do programa acima (Programa : Estrutura bsica do C++), apresenta-nos as seguintes instrues/comandos: // comentrios (1). quando posicionados no incio da linha, a linha inteira se torna de comentrios (veja a 1linha do programa Programa : Estrutura bsica do C++ considerada toda ela comentrio); (2). e quando posicionados depois de uma instruo/comando, considerado comentrio da posio da at o final da linha (veja-se um exemplo na 2linha do programa #include <iostream> //Esta uma biblioteca para activar ; No programa (Exemplo 1) temos a 1, 2 e 5 linhas com comentrios: demonstrao da aplicao de comentrios no inicio ou meio da linha. muito importante que os programas sejam comentados de forma organizada. Isto permite que outras pessoas possam facilmente entender o cdigo fonte. Os comentrios no so interpretados pelo compilador, servindo apenas para a documentao e esclarecimento do programador.
Informtica II (dr Gabriel Salimo) Pagina 24 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

#include <iostream> Depois, segue-se com uma directiva para o pr-processador #include <iostream>, que permite ao utilizador usufruir de servios (comandos/instrues) disponveis nesta biblioteca. using namespace std; simplifica a utilizao dos comandos/instruo: permite ao utilizador escrever menos int main () a funo main(), indica o incio do programa principal: aonde comeam as instrues de execuo. A palavra int significa a funo retornar um valor do tipo inteiro ao final de sua execuo; poderia ser outro tipo qualquer e at void quando se pretende que no retorne nenhum valor. {} inicio e fim do corpo/bloco do programa Todo o corpo de uma funo em C++ inicializado e finalizado atravs das chavetas { e }. Estas chavetas definem o bloco de instrues a serem executados por esta funo. fim da instruo As instrues C++ so sempre encerradas por um ponto-e-vrgula (;). O ponto-e-vrgula parte da instruo e no um simples separador.

3.4.15.3. Instruo: CIN (Leitura no cran) cin o comando que permite a entrar de dados num programa C++; por default o Cin est associado entrada padro do computador (stdin), i.e, o teclado. Sintaxe: cin >> varivel; onde, >> -> o operador de extraco usado para direccionar a entrada de dados entrada padro (teclado); varivel -> o nome da varivel onde ser armazenado o(s) valor(es) lido(s). Variveis C++ int x; cin >> float f,g; cin >> double dou; char ch; fraccionrio) a armazenar Resultados x; leitura de um valor inteiro a armazenar em x f >> g; leitura simultnea de 2 valores fraccionrios a armazenar em f e g cin >> dou >> ch; leitura simultnea de 2 valores (inteiro e em dou e ch

3.4.15.4. Instruo: COUT (Sada no cran) Cout um comando para mostrar os dados num programa C++; por default cout est associada a uma sada padro (stdout), i.e., na terminal de vdeo (cran). Sintaxe: cout << expresso; onde, << -> o operador de insero usado a fim de direccionar a sada de dados para a sada padro (vdeo); expresso -> qualquer combinao de caracteres ou varivel.
Informtica II (dr Gabriel Salimo) Pagina 25 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

Exemplo: Variveis int x = 2; Float f = 1.2, g = 3; 3.00 Double dou = 2.14; 2.14 Char ch = F; C++ Cout << x = << x; Cout << f << << g; Resultado x=2 1.20 valor =

Cout << valor = << dou << \nsex = << ch; sex = F

NB: os caracteres especiais \n usados na ltima instruo indicam ao programa para mudana de linha (da que valor = 2.14 est numa linha e sex = F est na outra linha Outros Caracteres Especiais: '\n' Nova linha - posiciona o cursor no incio da nova linha. '\r' Carriage return - posiciona o cursor no incio da linha actual. '\t' Tabulao horizontal - move o cursor para a prxima parada de tabulao. '\a' Alerta - faz soar a campainha do sistema. '\0' Null - caractere que em C termina um conjunto de caracteres (espaamento). 3.4.16. Controlo de Fluxo Executa condicionalmente um grupo de instrues, dependendo do valor de uma expresso.

3.4.16.1. Instruo: IF O comando IF serve para alterar o fluxo de execuo de um programa em C baseado no valor, verdadeiro ou falso, de uma expresso lgica. Fluxograma: Sintaxes: if (condio) { [comandos] }

Informtica II

(dr Gabriel Salimo)

Pagina 26 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

Exemplo: if freq<0 { X=0 } 3.4.16.2. Instruo: IFELSE Fluxograma: Sintaxe: if (condio) { [comandos] } else { [comandos] }

Comentrios: Executando um bloco if, a condio testada. Se a condio for verdadeira, as instrues seguintes so executadas. Se a condio for falsa, a condio else (se houver) ser executada.

Exemplo: (1). IF if (expr_log) comando1; comando2; (2). IF (com Else) if (expr_log) comando1; else comando2; comando3; (3). IF (com BLOCOS) if (expr_log) { comando1; comando2; comando3; } else { comando4; comando5; comando6; } comando7; comando8;

// executado se "expr_log" for verdadeira // executado sempre independente da condio

// executado se "expr_log" for verdadeira // executado se "expr_log" for falsa // executado sempre, independente do resultado do teste

// executados se "expr_log" for verdadeira

// executado se "expr_log" for falsa

// executado sempre independente da condio // executado sempre independente da condio

(4). Aninhamento de IFs (sem blocos e sem ELSE) if (expr_log) if (expr_log2)

Informtica II

(dr Gabriel Salimo)

Pagina 27 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

comando2; comando3;

// executado se "expr_log" e "expr_log2" forem AMBAS verdadeiras // executado sempre

(5). Aninhamento de IFs (sem blocos, o ELSE sempre do IF anterior) if (expr_log) if (expr_log2) comando2; // executado se "expr_log" e "expr_log2" forem AMBAS verdadeiras else comando3; // executado se "expr_log" for VERDADEIRA e se "expr_log2" for FALSA comando4; // executado sempre (6). Aninhamento de IFs (o ELSE sempre do IF anterior dentro do BLOCO) if (expr_log) { if (expr_log2) comando2; } else comando3; // executado se "expr_log" for FALSO pertence ao primeiro IF comando4; // executado sempre (7). Aninhamento de IFs (com BlOCOS e ELSEs) if (expr_log) { comando1; // executado se expr_log for VERDADEIRA comando11; if (expr_log2) { comando2; // executado se expr_log e expr_log2 comando21; // forem ambas VERDADEIRAS } else { comando3; // executado se expr_log for VERDADEIRA comando31; // e expr_log2 for FALSA } comando4; // executado se expr_log for VERDADEIRA } else { comando5; // executado se expr_log for FALSA comando51; if (expr_log3) { comando6; // executado se expr_log for FALSA comando61; // e expr_log3 for VERDADEIRA } else { comando7; // executado se expr_log for FALSA comando71; // e expr_log3 for FALSA } comando8; // executado sempre que expr_log for FALSA } comando9; // executado sempre 3.4.16.3. Instruo: SWITCH, CASE O SWITCH uma estrutura selectiva que integra o CASE. O Switch apesar de ser uma estrutura de mltiplos IFs (IFs encadeados), comporta as seguintes diferenas:

os cases no aceitam operadores lgicos; portanto, no possvel fazer uma comparao, isso limita o case a apenas valores definidos; o switch executa seu bloco em cascata, ou seja, se a varivel indicar para o primeiro case e dentro do switch tiver mais cases, o switch executar todos os outros cases a no ser que se use o comando break para sair do switch.
(dr Gabriel Salimo) Pagina 28 de 38

Informtica II

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

ainda no SWITCH: (a) a varivel deve estar entre parnteses (na varivel est guardado o valor que ser avaliado pelo case); (b) o CASE seguido de um valor (constante inteira ou character(es)) e logo aps um valor terminando a linha com dois pontos (:); (c) o default funciona como o else (caso contrrio; i. no caso de no ser nenhum dos cases apresentados); a estrutura pode ou no conter o default. Sintaxe 1 (sem default): switch (varivel ) { case [valor 1] : [comandos] ... break; case [valor 2] : [comandos] ... break; case [valor n] : [comandos] ... break; }

Sintaxe 2 (com default): switch (varivel ) { case [valor 1] : [comandos] ... break; case [valor 2] : [comandos] ... break; case [valor n] : [comandos] ... break; default : [comandos] ... } Exemplos: (1). switch (sem default) int op; cout<<"Digite a sua opo\n"; cin>>op; switch (op) { case VALOR1: comando1; // executa estes comandos se
Informtica II (dr Gabriel Salimo) Pagina 29 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

comando11; // op for igual a VALOR1 break; case VALOR2: comando2; // executa estes comandos se comando22; // op for igual a VALOR2 break; } (2). switch (com default) int op; cout<<"Digite a sua opo\n"; cin>>op; switch (op) { case VALOR1: comando1; // executa estes comandos se comando11; // op for igual a VALOR1 break; case VALOR2: comando2; // executa estes comandos se comando22; // op for igual a VALOR2 break; default: comando3; // executa estes comandos se comando33; // op for diferente de VALOR1 e comando333; // de VALOR2 } 3.4.16.4. Atribuio Condicional a = (a>5)? 10 : 50; Este comando equivalente a if(a>5) a = 10; else a = 50; 3.4.17. Exerccios (C++: estruturas de sequencia e de controlo de fluxo) 3.4.17.1. Resolvidos 1. Diga o significado de cada linha que se segue: a). const float pi = 3.14; R: Declara e simultaneamente define e inicia, uma constante de nome pi do tipo float (virgula flutuante). b). float numero 1, numero 2; R: Declaram e definem as variveis numero1 e numero2 do tipo float. c). cout << Este o primeiro teste de Informtica II! ; R: Emite uma mensagem ao utilizador, dizendo que Este o teste de Informtica II!. d). cin >>numero 1; R: Fica a guardar que o utilizador introduza, atravs do teclado, o valor do nmero 1 desejado, seguido de um carcter terminador de nmero, ou seja, qualquer carcter que no possa fazer parte do nmero. 2. Identificar e corrigir os erros de cada uma das seguintes afirmaes: a). if (c < 7); cout << C menor a 7 \n; R: o ponto e virgula na condio if, termina a codicao e a instrucao seguinte sera sempre executada independentemente da condicao. b). if (c => 7) cout << C maior ou igual a 7 \n ; R: O operador lgico existente (=>) no verdadeiro, deveria ser (>=), para que ela seja correspondente ao que se pede na sada (C igual ou superior a 7). 3. Escrever em uma nica linha usando os conhecimentos adquiridos nas aulas. Declarao para realizar cada uma das seguintes linhas:

Informtica II

(dr Gabriel Salimo)

Pagina 30 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

a). Imprimir a mensagem Este o programa C + +, com cada palavra separada por uma tab; R: cout << Este \t e \t o \t programa \t C++ ; b). Imprimir a mensagem Este o programa C + +, com cada palavra separada em uma linha; R: cout << Este \n e \n o \n programa \n C++ ; c). Imprimir a mensagem Este o programa C + +, separada em duas linhas onde a primeira linha termina com Este; R: cout << Este \n\ e o programa C++ ; d). Imprimir a mensagem Este o programa C + +, separada em uma linha; R: cout << Este e o programa C++ \n ; e). Se a varivel numero no for igual a 7, imprima A varivel numero no e igual a 7 ; R: if (numero != 7) cout << A varivel numero no e igual a 7 ; 4. Escreva um programa em C++ que permita: a). Calcular os juros de conta bancria, dada a tabela abaixo Tipo de Conta Juros (%) Pessoal Bronze 2.3% Pessoal Prata 2.6% Pessoal Ouro 2.9% Pequeno Negcio 3.3% Grande Negcio 3.5% Negcio Ouro 3.8% R: Uma soluo designar as contas (tipo de Conta) com os nmeros: de 1 a 6; assim poderamos ter a seguinte resoluo: #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int TipoConta; // declarao da varivel que guarda o valor do tipo de conta float juro = 0.0; // declarao da varivel que guarda o valor da percentagem do juro cout<<" Qual o Tipo de Conta [1-7]: "; cin>>TipoConta; // leitura da conta if (TipoConta == 1){ // deciso da atribuio do juro em funo do tipo de conta (segundo a tabela) juro = 2.3; } else { if (TipoConta == 2) { juro = 2.6; } else { if (TipoConta == 3){ juro = 2.9; } else { if (TipoConta == 4){ juro = 3.3; } else { if (TipoConta == 5){ juro = 3.5; }
Informtica II (dr Gabriel Salimo) Pagina 31 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

else { if (TipoConta==6){ juro = 3.8; } else{ cout<<Conta: <<TipoConta<< invlida; } } } } } } system("PAUSE"); return EXIT_SUCCESS; } Ou #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int TipoConta; // declarao da varivel que guarda o valor do tipo de conta float juro = 0.0; // declarao da varivel que guarda o valor da percentagem do juro cout<<" Qual o Tipo de Conta [1-7]: "; cin>>TipoConta; // leitura da conta switch (account_value){ // deciso da atribuio do juro em funo do tipo de conta (segundo a tabela) case 1: juro = 2.3; break; case 2: juro = 2.6; break; case 3: juro = 2.9; break; case 4: juro = 3.3; break; case 5: juro = 3.5; break; case 6: juro = 3.8; break; default: cout<<Conta: <<TipoConta<< invlida; } system("PAUSE"); return EXIT_SUCCESS; } b). Determinar o estado civil do individuo partir da varivel com uma letra a ser introduzida na tela pelo utilizador, sabendo que: S- Solteiro; C- Casado; D- Divorciado e V- Vivo. #include <cstdlib>
Informtica II (dr Gabriel Salimo) Pagina 32 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

#include <iostream> using namespace std; int main(int argc, char *argv[]) { char est_civil; cout<<" Qual o estado civil: "; cin>>est_civil; switch (est_civil) { case 'C': cout<<" Casado \n "; break; case 'S': cout<<" Soletiro \n "; break; case 'D': cout<<" Divorciado \n"; break; case 'V': cout<<" Viuvo \n"; break; default: cout<<" Opcao errada \n "; } system("PAUSE"); return EXIT_SUCCESS; } c). Determinar o dia de semana partir da varivel com um nmero a ser introduzida na tela pelo utilizador, sabendo que: 1-segunda-feira; 2-tera-feira; 3-quarta-feira; 4-quinta-feira; 5-sexta-feira; 6-sbado; 7-domingo. #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int dia; //varivel para leitura do nmero do dia cout<<"Qual o numero do dia [1-7]: "; cin>>dia; switch (dia) { case 1: cout<<"segunda-feira \n "; break; case 2: cout<<"tera-feira \n "; break; case 3: cout<<"quarta-feira \n "; break; case 4: cout<<"quinta-feira \n "; break; case 5: cout<<"sexta-feira \n "; break; case 6: cout<<"sbado \n "; break; case 7: cout<<"domingo \n "; break; default: cout<<"Valor introduzido <<dia<<, invalido. Vlidos so 1-7 \n "; } system("PAUSE"); return EXIT_SUCCESS; } d). Determina o valor da operao, dado dois valores inteiros e o tipo da operao. #include <iostream> #include <cstdlib> using namespace std;
Informtica II (dr Gabriel Salimo) Pagina 33 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

int main (void){ int a, b, c, operacao; cout <<"Digite o 1o valor: "; cin >> a; cout <<"Digite o 2o valor: "; cin >> b; cout <<"Que operacao deseja realizar?\n \1. Adicao\t2.Subtracao\t3.Multiplicacao\t4.Divisao\n\n=>"; cin >> operacao; system ("cls"); switch (operacao){ case 1: c=a+b; cout <<a<<" + "<<b<<" = "<<c<<"\n\n"; break; case 2: c=a-b; cout <<a<<" - "<<b<<" = "<<c<<"\n\n"; break; case 3: c=a*b; cout <<a<<" * "<<b<<" = "<<c<<"\n\n"; break; case 4: c=a/b; cout <<a<<" / "<<b<<" = "<<c<<"\n\n"; break; } system ("pause"); return EXIT_SUCCESS; } e). Validar uma resposta. #include <iostream> #include <cstdlib> #include <ctype.h> using namespace std; int main (void){ char opcao; cout <<"Deseja reiniciar o programa? [S/N]\n"; cin >> opcao; opcao=toupper(opcao); // deixa a letra maiscula switch (opcao){ case 'S': //Entre aspas simples porque um caracter system ("cls"); return EXIT_SUCCESS; case 'N': //Entre aspas simples porque um caracter return EXIT_SUCCESS; default: cout <<"\aOpcao invalida!\n\n"; } } 3.4.17.2. No Resolvidos 1. Escreva um programa que determina a soma de dois nmeros quaisquer.

2. Escreva um programa que converte quilmetros em metros 3. Escreva programas, em C++, que calculam as reas de crculo, quadrado, tringulo e trapzio.
Informtica II (dr Gabriel Salimo) Pagina 34 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

4. Um nmero , por definio, primo se ele no tem divisores, excepto 1 e ele prprio. Escreva um programa para ler um nmero inteiro positivo e determinar se ele ou no um nmero primo. 5. Escreva um programa em C++ que leia um nmero inteiro positivo e informe se o nmero lido mltiplo de 5. 6. Escreva um programa que solicita ao usurio para digitar um nmero inteiro positivo, e mostre-o por extenso. Este nmero dever variar entre 1 e 10. Se o usurio introduzir um nmero que no pertena a este intervalo, mostre a frase nmero invlido. 7. Escreva um programa em C++ que leia as notas de um estudante, numa disciplina com 2 testes, calcule a mdia aritmtica destas duas notas e determine se o aluno est reprovado (mdia inferior a 4,0), aprovado (mdia igual ou superior a 7,0) ou se far prova final (mdia igual ou superior a 4,0 e inferior a 7,0). 3.4.18. Estruturas de Repetio (Ciclos/Laos) 3.4.18.1. Instruo: While O comando while permite que um certo trecho de programa seja executado ENQUANTO uma certa condio for verdadeira. A forma do comando while a seguinte: while (condio) { comando1; comando n; } comando m // comandos a serem repetidos // comandos a serem repetidos // comandos a serem executados aps o 'while'

O funcionamento o seguinte: 1 Testa a condio; 2 Se a condio for falsa ento pula todos os comandos do bloco subordinado ao while e passa a executar os comandos aps o bloco do while. 3 Se condio for verdadeira ento executa cada um dos comandos do bloco subordinado ao while. 4 Aps executar o ltimo comando do bloco do while volta ao passo 1. A instruo while deve ser usado sempre que: no soubermos exatamente quantas vezes o lao deve ser repetido; o teste deva ser feito antes de iniciar a execuo de um bloco de comandos; se houver casos em que o lao no deva ser repetido nenhuma vez. Tenha ateno especial com o teste do comando while. As variveis usadas no teste devem ter sido inicializadas antes do teste. Exemplos: (1). Repetir um nmero indeterminado de comandos char continua = 's'; int contador = 0; while (continua == 's') { // enquanto for igual a 's' cout>>"Repentindo....\n"; // comandos a serem repetidos contador = contador + 1; cout>>"Deseja Continuar [s-sim]: "; cin<<continua; }
Informtica II (dr Gabriel Salimo) Pagina 35 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

if (contador == 0) //comandos aps while: verificao de quantas vezes foi executado o ciclo cout>>"O bloco NAO foi repetido."; else cout>>"O bloco foi repetido: >>contador>> vezes"; (2). Calcular a idade mdia de um grupo de pessoas. // para finalizar usaremos a mesma varivel (idade) considerando o valor de -1 como o fim int soma=0, quantidade=0, idade=0; float media; while (idade != -1) { // comandos a serem repetidos count>>"Idade da >>quantidade+1>> pessoa da lista [digite -1 para terminar]: , cin<<idade; if (idade >=0) { soma = soma + idade; quantidade = quantidade + 1; } } // comandos aps o while: faz o clculo da mdia de idade if (quantidade >0) { media = soma / quantidade; cout>>"A media de idade das >>quantidade>> pessoas >>media; } else cout>>"Mdia no calculado: nenhum dado (idade) foi introduzido."; 3.4.18.2. Instruo: do While O comando do-while permite que um certo trecho de programa seja executado ENQUANTO uma certa condio for verdadeira. A forma do comando do-while a seguinte: do { comando1; comando n;

// comandos a serem repetidos // comandos a serem repetidos

} while (condio); comando m; // comandos aps o 'do-while' O funcionamento o seguinte: 1 Executa os comando dentro do bloco do-while; 2 Testa a condio; 3 Se a condio for falsa ento executa o comando que est logo aps o bloco subordinado ao do-while . 4 Se condio for verdadeira ento volta ao passo 1. O comando do-while deve ser usado sempre que: que no soubermos exatamente quantas vezes o lao deve ser repetido; o teste deva ser feito depois da execuo de um bloco de comandos; o bloco de comandos deve se executado pelo menos 1 vez; Exemplos: int soma = 0, a; do { cout<<"\nDigite um nmero inteiro para somar, ou zero para terminar a soma: "; cin>>a; soma = soma + a;
Informtica II (dr Gabriel Salimo) Pagina 36 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

} while ( a != 0 ); cin<<"\nA soma "<<soma; 3.4.18.3. Instruo: For O comando for permite que um certo trecho de programa seja executado um determinado nmero de vezes. A forma do comando for a seguinte: Fluxograma:

Condio?

Comando 1 Comando 2

Sintaxe: for ([inicializao]; [condio]; [incremento/decremento]) { comando1; // comandos a serem repetidos comando n; // comandos a serem repetidos } Comando m // comandos aps o 'for' O funcionamento o seguinte: 1 Executa os comandos de inicializao; 2 Testa a condio; 3 Se a condio for falsa ento executa o comando que est logo aps o bloco subordinado ao for . 4 Se condio for verdadeira ento executa os comandos que esto subordinados ao for; 5 Executa os comandos de incremento/decremento; 6 Volta ao passo 2. O comando for deve ser usado sempre que: soubermos exatamente quantas vezes o lao deve ser repetido; o teste deva ser feito antes da execuo de um bloco de comandos; houver casos em que o lao no deva ser repetido nenhuma vez.

Exemplos: (1). incremento int contador; for (contador = 0; contador < 10; contador = contador+1) { cout>>"Contador : ">>contador; } cout>>"Valor do Contador aps o lao: ">>contador; (2). decremento int contador;
Informtica II (dr Gabriel Salimo) Pagina 37 de 38

Linguagens & Tcnicas de Programao C++ (CEITIC - Centro de Estudos e Inovao em Tecnologias de Informao e Comunicao da UniZambeze)

for (contador = 10; contador > 0; contador = contador-1) { cout>>"Contador : ">>contador; } cout>>"Valor do Contador aps o lao: ">>contador; 3.4.19. Exerccios (Estruturas de Repetio em C++ (Ciclos/Laos)) 3.4.19.1. 1. Resolvidos Escreva um programa que coloque no ecr os primeiros dez nmeros inteiros.A sada que se pretende no ecr a seguinte: 1,2,3,4,5,6,7,8,9,10. #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int i; i=1; while (i<=10) { cout<<" i= \n "<< i; i=i+1; putchar ('\n'); } system ("PAUSE"); return EXIT_SUCCESS; } 3.4.19.2. No Resolvidos 1. Escreva um programa que leia 10 nmeros introduzidos pelo usurio e, depois, informe o menor, nmero, o maior nmero, a soma dos nmeros informados e a mdia aritmtica dos nmeros introduzidos.

2. Desenvolva um programa que leia um nmero inteiro positivo N e imprima a tabuada de multiplicar correspondente. Por exemplo, para n = 6, devemos obter: 1 X 6 = 6, 2 X 6 = 12,..., 10 X 6 = 60). 3. Escreva um programa que solicita um nmero inteiro positivo ao usurio e imprima a soma dos N primeiros nmeros pares maiores do que zero (Por exemplo, se for informado N = 4, o programa deve imprimir o valor 20, pois 2 + 4 + 6 + 8 = 20). 4. Um palndromo uma seqncia de caracteres que lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, cada um dos seguintes inteiros de 5 dgitos um palndromo: 12321, 55555, 45554 e 11611. Escreva um aplicativo que leia um inteiro de 5 dgitos e determine se ele ou no um palndromo. Se o nmero no for de 5 dgitos, exiba uma mensagem de erro e permita que o usurio insira um novo valor. (Dica: possvel resolver a questo utilizando somente os operadores %, / e as estruturas enquanto e se). 5. Desenvolva um programa que leia um nmero inteiro positivo N e imprima os N primeiros nmeros da Srie de Fibonacci, assim como a soma desses N primeiros nmeros. A Srie de Fibonacci dada pela seguinte sequncia de nmeros inteiros: 1, 3, 7, 15, 31, 63, 127... (Dica: Utilizar a estrutura de repetio enquanto e o operador de potenciao)

Informtica II

(dr Gabriel Salimo)

Pagina 38 de 38