• Nenhum resultado encontrado

Programação C

N/A
N/A
Protected

Academic year: 2019

Share "Programação C"

Copied!
64
0
0

Texto

(1)

Programação

C++

(2)

Índice

1 Introdução ... 1

2 Histórico da Linguagem ... 1

3 Ambiente de Desenvolvimento: Dev-C++ ... 3

3.1 Download e Instalação ... 3

3.2 Principais Conceitos ... 3

4 A Estrutura Principal dos Programas C++ ... 4

4.1 O Primeiro Programa - HelloWorld ... 4

4.2 Diretivas de pré-processamento ... 5

4.3 Definições de tipos de variáveis ... 5

4.4 Funções ... 6

4.5 Palavras Reservadas ... 6

4.6 Case Sensitive ... 6

4.7 Comentários ... 7

5 Comandos de Entrada e Saída ... 8

5.1 Printf ... 8

5.2 Geração da saída usando o namespace std ... 9

5.3 Scanf ... 9

5.4 Capturando entrada usando o namespace std ... 10

5.5 Complementando o uso de printf e scanf ... 10

5.6 Limpeza de Tela ... 11

6 Variáveis e Constantes ... 12

6.1 Tipos de Dados ... 12

6.2 Variáveis ... 13

6.3 Constantes ... 13

6.3.1 Usando #define ... 14

6.3.2 Usando const ... 14

6.4 Alterando o valor de uma variável ... 14

6.5 Sequências de Caracteres – Vetor de char ou C-String ... 15

6.6 Sequências de Caracteres – Tipo String ... 18

6.7 Conversões de Tipos ... 20

6.8 Conversões de Maiúsculas e Minúsculas ... 23

6.9 Struct – Agrupamento de Dados em uma Estrutura ... 24

7 Operações ... 26

7.1 Operadores Aritméticos ... 26

(3)

7.3 Precedências ... 29

8 Funções ... 31

8.1 Escopo de uma variável ou constante – Local e Global ... 32

8.2 Templates ou Gabaritos de Função ... 33

9 Instruções de Decisão ... 35

9.1 Operadores Lógicos ... 35

9.2 IF e ELSE ... 35

9.3 Operador Ternário ... 36

9.4 SWITCH ... 36

10 Instruções de Repetição(Loop) ... 38

10.1 While ... 38

10.2 Do ... 38

10.3 For ... 39

11 Vetores e Matrizes ... 40

11.1 Vetores ou Arrays ... 40

11.2 Matrizes ou Arrays Multidimensionais ... 40

12 Ponteiros ... 43

12.1 Conceito ... 43

12.2 Ponteiros utilizados com Vetores ou Matrizes ... 45

12.3 Alocação Dinâmica de Vetores ou Matrizes ... 45

13 Gravação e Leitura em Arquivos Texto e Binário ... 49

13.1 Conceitos ... 49

13.2 Exemplos ... 51

(4)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 1

1 Introdução

Este material tem o objetivo de servir como guia para acompanhamento de aulas, mostrando os tópicos iniciais da linguagem C++, com exemplos práticos e seus resultados. Não tem a pretensão de ensinar a Linguagem C++ em sua completude. Foi desenvolvido com base nas referências citadas na última seção e experiência do autor. Referências mais detalhadas podem ser encontradas em bibliografia específica e diversos sites disponíveis na Internet.

Para o desenvolvimento de aplicativos, qualquer que seja a linguagem de programação, é recomendado que a solução computacional seja elaborada inicialmente através de algoritmos. Através dos quais será possível ter uma visão geral da solução e testá-la conceitualmente. Essa prática tornará o “momento” da programação e teste do aplicativo mais eficiente. Estando em acordo com os preceitos pregados nas disciplinas introdutórias do curso.

2 Histórico da Linguagem

Durante os anos 60, enquanto os computadores ainda estavam em um estágio inicial de desenvolvimento, muitas linguagens de programação novas apareceram. Entre elas, ALGOL 60, desenvolvida como uma alternativa ao FORTRAN, mas tirando dela conceitos de programação estruturada que inspirariam a maioria das linguagens procedurais, como CPL e seus sucessores (como a C++). ALGOL 68 também influenciou diretamente o desenvolvimento de tipos de dados em C. No entanto, ALGOL foi uma linguagem não-específica e sua abstração tornou impraticável para resolver tarefas mais comerciais.

Em 1963, o CPL (Combined Programming Language) apareceu com a ideia de ser mais específica para tarefas de programação concreta de que ALGOL ou FORTRAN. No entanto, esta mesma especificidade a tornou uma linguagem grande e, portanto, difícil de aprender e programar.

Em 1967, Martin Richards desenvolveu a BCPL (Basic Combined Programming Language), que significou uma simplificação do CPL, mas manteve as características mais importantes. Embora também tenha sido uma linguagem abstrata e um tanto extensa.

(5)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 2 resultado final foi uma simplificação ainda maior da CPL, embora dependente do sistema operacional. Ela tinha grandes limitações, como não compilar para código executável, o que o deixava mais lento em execução, e, portanto, era inadequado para o desenvolvimento de outros sistemas operacionais. Portanto, a partir de 1971, Dennis Ritchie, da equipe Bell Labs, começou o desenvolvimento de um compilador B que, entre outras coisas, foi capaz de gerar código executável diretamente. Este "B New", finalmente chamada de C, introduziu, além disso, alguns outros conceitos novos para a linguagem, como tipos de dados (char).

Em 1973, Dennis Ritchie, tinha desenvolvido a base da linguagem C. A inclusão de tipos, a sua manipulação, bem como a melhoria das matrizes e ponteiros, juntamente com a capacidade demonstrada depois de portabilidade, sem se tornar uma linguagem de alto nível, contribuíram para a expansão da linguagem C. Foi escrito o livro "A Linguagem de Programação C" de Brian Kernighan e Dennis Ritchie, conhecido como o Livro Branco, e que serviu como padrão de fato até a publicação formal de padrão ANSI (ANSI X3J11) em 1989.

Em 1980, Bjarne Stroustrup, da Bell Labs, começou o desenvolvimento da linguagem C++, que receberia formalmente esse nome no final de 1983, quando o seu primeiro manual foi publicado. Em outubro de 1985, a primeira versão comercial da linguagem apareceu, assim como a primeira edição do livro "A Linguagem de Programação C++", por Bjarne Stroustrup.

Durante os anos 80, a linguagem C++ estava sendo refinada até se tornar uma linguagem com a sua própria personalidade. Tudo isso com muito poucas perdas de compatibilidade com o código C, e sem renunciar às suas características mais importantes. Na verdade, o padrão ANSI para a linguagem C publicado em 1989 levou boa parte das contribuições de C++ para programação estruturada.

A partir de 1990, ANSI comitê X3J16 começou o desenvolvimento de uma norma específica para C++. No período decorrido até a publicação da norma em 1998, C++ viveu uma grande expansão no seu uso e hoje é a linguagem bastante utilizada para desenvolver aplicações profissionais em diversas plataformas.

(6)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 3

3 Ambiente de Desenvolvimento: Dev-C++

3.1 Download e Instalação

Um dos ambientes de desenvolvimento e teste para C++ é o Dev-C++. Foi desenvolvido sob licença GNU e pode ser obtido através do Sourceforge pelo endereço: http://sourceforge.net/projects/dev-cpp/. Sua instalação é bastante simples, seguindo-se as opções do programa instalador. Após isso, a tela inicial é apresentada como a seguir:

3.2 Principais Conceitos

Projeto: Estrutura de arquivos referentes a criação de um produto de software. Estarão gravados no mesmo diretório e deve ter um nome específico que corresponderá ao produto final desse projeto;

Arquivo CPP: São os arquivos de programa C++;

(7)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 4

4 A Estrutura Principal dos Programas C++

A estrutura genérica de um programa em C é composta, principalmente dos elementos a seguir, que serão detalhadas em seções mais adiante:

• Diretivas de pré-processamento

• Definições de tipos de variáveis

• Funções

4.1 O Primeiro Programa - HelloWorld

Em geral, o primeiro teste de qualquer linguagem é executar a exibição de uma mensagem em um dispositivo de saída. No nosso caso, uma janela do console de comando, ou janela do DOS:

#include <iostream> main()

{

printf("Hello World \n"); system("pause");

}

Isso é em geral, o que de mais simples pode ser feito na linguagem C++ para testar seu funcionamento. Analisaremos cada elemento:

#include <iostream>: Diretiva de pré-processamento para inclusão de biblioteca iostream, que permite o uso de comandos para interação com a janela DOS;

o Observação: Se o nome do arquivo a ser incluído está entre os sinais de “<” e “>”, o

compilador o procura nos diretórios de include especificados na configuração do ambiente C. Se o nome do arquivo está entre aspas ("arquivo"), o compilador o procura antes no diretório atual;

(8)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 5

{ : Caracter de marcação de início de bloco, ou seja, marca o início do conteúdo da função;

printf("Hello World \n"); : Executa a função printf da biblioteca iostream, que recebe como argumento de entrada o texto Hello World \n e gera como saída, sua exibição na janela do DOS;

system("pause"); : Executa a função system com o parâmetro “pause”, que interrompe o programa e exibe mensagem solicitando o pressionamento de alguma tecla para prosseguir a execução. Sem essa função, a execução do programa seria tão rápida, que a janela seria fechada antes que se pudesse observar o resultado;

} : Caracter de marcação de final de bloco, ou seja, marca o final do conteúdo da função e final do código a ser executado nesse programa.

4.2 Diretivas de pré-processamento

São comandos ao processador do que deve ser executado antes do início das tarefas do programa em si. Em geral, são inserções de bibliotecas de funções que estarão disponíveis para serem chamadas pelo programa. Cada biblioteca corresponde a um ou mais arquivos no filesystem do computador. Há várias bibliotecas fornecidas no pacote da linguagem. Além de bibliotecas que podem ser construídas para um projeto específico e serem reaproveitadas em outros. As bibliotecas só devem ser incluídas se forem utilizadas, ou seja, o objetivo do programa determina quais bibliotecas serão inseridas.

A seguir alguns exemplos de bibliotecas que acompanham a linguagem e estão disponíveis na pasta “Dev-Cpp\include” do DEV-C++:

cstdlib ou stdlib.h: C Standard General Utilities Library - Define várias funções de uso geral, incluindo a gestão de memória dinâmica, geração de números aleatórios, a comunicação com o ambiente, aritmética com inteiros, pesquisa, classificação e conversão;

ctime (time.h): Define funções para manipulação de informações sobre tempo e datas;

fstream: Define funções de manipulação de entrada e saída

4.3 Definições de tipos de variáveis

(9)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 6 (variáveis) ou não (constantes). Mais detalhes sobre os tipos, características e abrangência serão abordadas em seção mais adiante.

4.4 Funções

São blocos de comando agrupados que serão executados sequencialmente. Tem seu início e fim delimitados por chaves. Mais detalhes sobre o uso de funções serão abordados em seção mais adiante.

4.5 Palavras Reservadas

Mais adiante será abordada a criação de constantes e variáveis, cujos nomes seguem algumas regras, mas podem ser criados de acordo com a necessidade do programa. Uma das regras é não serem iguais as palavras reservadas à linguagem. São elas:

auto double if static

break else int struct

case entry long switch

char extern register typedef

continue float return union

default for sizeof unsigned

do goto short while

4.6 Case Sensitive

Todo conteúdo dos programas em C++ são sensíveis a caixa alta ou baixa, ou seja, caracteres maiúsculos ou minúsculos. Em geral, os comandos da linguagem são termos em minúsculas. Se forem escritas com um ou mais caracteres em maiúsculas, será gerado um erro de compilação, o que impede o programa de ser executado. Exemplo:

#include <iostream> main()

{

Printf("Hello World \n"); SYSTEM("pause");

(10)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 7 O programa acima gerará dois erros de compilação, por conta dos comandos: Printf e SYSTEM. A escrita correta, nesse caso é: printf e system.

Variáveis e constantes criadas pelo desenvolvedor podem ter maiúsculas ou minúsculas, mas devem seguir esse padrão ao longo de todo o programa.

4.7 Comentários

Apesar de não serem obrigatórios pela linguagem. É uma boa prática de programação, o uso de comentários nos programas. Isso facilita o entendimento posterior e documentação do código. No C++ são feitos com:

// - Comenta uma linha

/* */ - Comenta um bloco de código

Exemplo:

/*

Nome: teste.cpp

Descrição: Teste de exibição de saída Autor: Fulano de Tal

Data: 03/05/2009 */

#include <iostream> main()

{

// Exibe a string do parâmetro printf("Hello World \n");

(11)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 8

5 Comandos de Entrada e Saída

5.1 Printf

Sintaxe: printf(“string”[, lista de argumentos]);

Objetivo: Exibe a string no dispositivo de saída; \n : Gera uma quebra de linha na saída.

Principais Códigos de Formatação da função printf

Código Tipo de dado

%c Caractere. Se utilizado com número, é exibido o código ASCII %d Números inteiros

%10d Números inteiros com brancos a esquerda até 10 caracteres %08d Números inteiros com zeros a esquerda até 8 caracteres

%f Números reais (float)

%5.2f Números reais com 5 posições e 2 decimais %s Sequência de caracteres

Exemplo:

/* Exemplo printf */ #include <iostream> main()

{

printf ("Caracter: %c \n", 'c');

printf ("Caracteres: %c %c \n", 'c', 'a'); printf ("Caracteres: %c %c \n", 'a', 65); printf ("Decimal: %d \n", 123);

printf ("Decimal com brancos: %5d \n", 123);

printf ("Decimal com zeros a esquerda: %05d \n", 123); printf ("Real: %f \n", 3.1416);

printf ("Real 4.2: %4.2f \n", 3.1416);

printf ("Sequencia de caracteres: %s \n", "Hello Word"); system("pause");

}

Resultado:

Caracter: c Caracteres: c a Caracteres: a A Decimal: 123

(12)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 9 Decimal com zeros a esquerda: 00123

Real: 3.141600 Real 4.2: 3.14

Sequencia de caracteres: Hello Word

Pressione qualquer tecla para continuar. . .

5.2 Geração da saída usando o namespace std

Uma alternativa ao uso do printf é a declaração do namespace std da biblioteca iostream, conforme ilustrado a seguir:

/* Exemplo std */ #include <iostream> using namespace std; main()

{

cout << "c \n" << "c a \n" << "3.14 \n" << "1" << endl; cout << "Hello world" << endl;

system("pause"); }

Resultado:

c c a 3.14 1

Hello world

Pressione qualquer tecla para continuar. . .

5.3 Scanf

Sintaxe: scanf(“string”, argumento);

Objetivo: Captura a string no dispositivo de saída;

Argumento : Nome da variável que receberá a informação digitada na tela;

Códigos de Formatação da função scanf: Os mesmos da função printf;

Exemplo:

/* Exemplo do scanf */ #include <iostream> main()

{

int idade; char nome[6];

(13)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 10 scanf("%d",&idade);

printf("Seu Nome: ");

scanf("%s",nome); // Não se utiliza '&' na leitura de strings printf("%s Sua idade e' %d anos. \n", nome, idade);

system("pause"); }

Resultado:

Digite sua Idade: 20 Seu Nome: Fulano

Fulano Sua idade e' 20 anos.

Pressione qualquer tecla para continuar. . .

Esse exemplo mostra o trabalho com sequência de caracteres (char nome[6]), para a captura de um nome. Esse tópico será abordado com mais detalhes mais adiante.

5.4 Capturando entrada usando o namespace std

Assim como há a alternativa ao uso do printf com namespace std, também há alternativa para o scanf, conforme ilustrado a seguir:

/* Exemplo */ #include <iostream> using namespace std; main()

{

int idade; char nome[6];

cout << "Digite sua Idade: "; cin >> idade;

cout << "Seu Nome: "; cin >> nome;

cout << nome << " sua idade e' " << idade << endl; system("pause");

}

Resultado:

Digite sua Idade: 20 Seu Nome: Fulano

Fulano sua idade e' 20

Pressione qualquer tecla para continuar. . .

5.5 Complementando o uso de printf e scanf

(14)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 11

Código Significado Observações

%i lê/escreve inteiro decimal

%e lê/escreve número com ponto flutuante Notação Científica %h lê/escreve um inteiro curto

%o lê/escreve um número octal

%x lê/escreve um número hexadecimal %p lê/escreve um ponteiro

%n receber um valor inteiro igual ao número de caracteres lidos até o momento

Número especifica o total de caracteres a serem lidos para um campo qualquer

%g Usa %e ou %f, aquele que for menor Somente printf

%% Imprime % Somente printf

%u Decimal sem Sinal Somente printf

H Modificador short L Modificador long

5.6 Limpeza de Tela

Função system(“cls”); Exemplo:

/* Exemplo do scanf */ #include <iostream> main()

{

int idade; char nome[6];

printf("Digite sua Idade: "); scanf("%d",&idade);

printf("Seu Nome: ");

scanf("%s",nome); // Não se utiliza '&' na leitura de strings printf("%s Sua idade e' %d anos. \n", nome, idade);

system("pause"); system("cls");

printf("Encerramento dos calculos \n"); system("pause");

}

Resultado primeira tela:

Digite sua Idade: 20 Seu Nome: Fulano

Fulano Sua idade e' 20 anos.

(15)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 12 Resultado segunda tela:

Encerramento dos calculos

Pressione qualquer tecla para continuar. . .

6 Variáveis e Constantes

6.1 Tipos de Dados

Tipo Típico Tamanho

em bits Típico Tamanho da Faixa

char 1byte -127 to 127 or 0 to 255

unsigned char 1byte 0 to 255

signed char 1byte -127 to 127

int 4bytes -2147483648 to 2147483647

unsigned int 4bytes 0 to 4294967295

signed int 4bytes -2147483648 to 2147483647

short int 2bytes -32768 to 32767

unsigned short int Range 0 to 65,535

signed short int Range -32768 to 32767

long int 4bytes -2,147,483,647 to 2,147,483,647

signed long int 4bytes -2,147,483,647 to 2,147,483,647

unsigned long int 4bytes 0 to 4,294,967,295

float 4bytes +/- 3.4e +/- 38 (~7 digits)

double 8bytes +/- 1.7e +/- 308 (~15 digits)

long double 8bytes +/- 1.7e +/- 308 (~15 digits)

wchar_t 2 or 4 bytes 1 wide character

Observações:

• O tamanho das variáveis pode variar um pouco dependendo do compilador e/ou plataforma;

• Para os tipos float e double, a vírgula que separa a parte decimal da parte inteira equivale a um ponto. Ex: 3,14 na linguagem C++ corresponde a 3.14;

(16)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 13

• O tipo char é aplicado para uso de apenas um caractere. Para sequências de caracteres(nomes ou frases), é possível utilizar um vetor de char, como demonstrado em exemplos anteriores ( char nome[30] ). Entretanto, mais adiante será abordado o uso de sequências de string, o que é mais aplicado para essa tarefa.

6.2 Variáveis

Uma variável armazena na memória do computador um valor que pode variar conforme a necessidade. Variáveis são declaradas o tempo todo durante a atividade de programação pela necessidade de armazenar valores temporários. A declaração de uma variável em C++ segue a sintaxe básica: [tipo] [nome] [opcional: [= valor inicial]];

Exemplo:

/* Declaração de variáveis */ #include <iostream>

main() {

int inteiro = 45; // variável tipo inteiro.

float pontoflutuante = 3.14; // variável tipo ponto flutuante com precisão simples. double pontoflutuante2 = 3.1415; // variável tipo ponto flutuante com precisão dupla. char caracter = 'a'; // variável tipo caracter.

bool logico = true; // variável tipo lógico. bool logico2 = false; // variável tipo lógico. printf("Inteiro: %d\n",inteiro);

printf("Ponto flutuante simples: %f\n",pontoflutuante); printf("Ponto flutuante duplo: %f\n",pontoflutuante2); printf("Caracter: %c\n",caracter);

printf("Logico: %d\n",logico); printf("Logico2: %d\n",logico2); system("pause");

}

Resultado:

Inteiro: 45

Ponto flutuante simples: 3.140000 Ponto flutuante duplo: 3.141500 Caracter: a

Logico: 1 Logico2: 0

Pressione qualquer tecla para continuar. . .

(17)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 14 Assim como uma variável, uma constante também armazena um valor na memória do computador. Entretanto, esse valor não pode ser alterado: é constante. Para constantes é obrigatória a atribuição do valor. Existem duas formas para declarar uma constante em C++:

6.3.1 Usando #define

Você deverá incluir a diretiva de pré-processador #define antes de início do código. Sintaxe: #define [nome da constante] [valor] (sem ponto-e-vírgula no final).

#include <iostream> #define PI 3.1415

6.3.2 Usando const

Usando const, a declaração não precisa estar no início do código. Sintaxe: const [tipo] [nome] = [valor];

const int i = 500; // uma constante inteira com o número 500. const double pi = 3.1415; // uma constante real com o valor de pi.

6.4 Alterando o valor de uma variável

O conteúdo das variáveis podem ser modificados ao longo do programa. Exemplo:

/* Declaração de variáveis */ #include <iostream>

main() {

int idade = 20;

printf("Idade: %d \n", idade);

idade = 33; // Modificação do conteúdo da idade printf("Idade: %d \n", idade);

system("pause"); }

Resultado:

Idade: 20 Idade: 33

(18)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 15

6.5 Sequências de Caracteres – Vetor de char ou C-String

Conforme mencionado anteriormente, para o trabalho com sequências de caracteres (nomes ou frases), é possível utilizar um vetor de char. O tópico vetores será abordado com detalhes mais adiante. Por hora, entendamos que um vetor é um tipo de variável indexada, podendo ter um tamanho fixo ou não. Exemplo do uso de char para exibição de strings:

/* Exemplo char */ #include <iostream>

main() {

char frase1[] = "abcd"; // Sem tamanho fixo, somente se valor atribuido char *frase2 = "abcd"; // Sem tamanho fixo, somente se valor atribuido char frase3[5] = "abcd"; // 4 posições

printf ("Frase1: %s \n", frase1); printf ("Frase2: %s \n", frase2); printf ("Frase3: %s \n", frase3);

// Alteração do conteúdo de frase3, posição a posição frase3[0] = 'e';

frase3[1] = 'f'; frase3[2] = 'g'; frase3[3] = 'h';

printf ("Frase3: %s \n", frase3);

system ("pause"); }

Resultado:

Frase1: abcd Frase2: abcd Frase3: abcd Frase3: efgh

Pressione qualquer tecla para continuar. . .

Todo vetor de char tem sua última posição com o valor fixo 0. Se o objetivo é atribuir uma sequência de caracteres de 10 posições, deve-se criar o vetor de char com 11 posições. Observe que o vetor de char frase3 tem 5 posições e recebe um valor com 4 posições. Se for atribuído um conteúdo de 5 ou mais posições, haverá erro de compilação.

(19)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 16 /* Entrada e saída de strings */

#include <iostream> using namespace std;

main() {

char nome[16]; // Cria o vetor nome, com 15 posições int idade;

cout << "Informe o nome: ";

cin >> nome; // Lê o vetor nome a partir do teclado

cout << "Informe a idade : "; cin >> idade;

cout << "O " << nome << " tem " << idade << " anos de idade." << endl;

system("pause"); }

Resultado:

Informe o nome: Fulano Informe a idade : 10

O Fulano tem 10 anos de idade. Press any key to continue . . .

Mesmo assim, embora a variável nome possa receber 15 posições, o cin >> finaliza a captura ao receber um caractere de espaço. Nesse caso, o nome “Jose Luis” não seria capturado por completo, apenas “Jose”. Para resolver essa situação, nesse exemplo, deve-se substituir o cin >> por cin.getline(nome, quantidade), ficando: cin.getline(nome, 15).

Além das possibilidades apresentadas para exibição e captura de sequências de caracteres, podem ser utilizadas também as funções a seguir:

Funções Descrição Biblioteca

getchar() Lê um caractere do teclado, aguarda Enter e exibe iostream getche() Lê um caractere do teclado, exibe e prossegue conio.h getch() Lê um caractere do teclado, não exibe e prossegue conio.h

putchar() Escreve um caractere na tela Iostream

gets() Lê uma sequência de caracteres (array de char) do teclado

cstdio

puts() Escreve uma sequência de caracteres (array de char) cstdio

(20)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 17 /* Exemplo para caractere */

#include <iostream> #include <stdio.h> #include <conio.h> #include <cstdio>

main () {

char val1;

printf("Informe o primeiro caractere: "); val1=getchar();

putchar(val1); printf("\n");

printf("Informe o segundo caractere: "); val1=getche();

putchar(val1); printf("\n");

printf("Informe o terceiro caractere: "); val1=getch();

putchar(val1); printf("\n");

system("pause");

}

Resultado:

Informe o primeiro caractere: x x

Informe o segundo caractere: yy Informe o terceiro caractere: z

Pressione qualquer tecla para continuar. . .

gets e puts:

/* Exemplo para sequência de caracteres - strings */ #include <iostream>

#include <cstdio>

main () {

char val2[20];

printf("Informe a sequencia de caracteres: "); gets(val2);

puts(val2);

system("pause"); }

(21)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 18 Informe a sequencia de caracteres: teste de dados

teste de dados

Pressione qualquer tecla para continuar. . .

6.6 Sequências de Caracteres – Tipo String

Além das sequências de caracteres como vetor de char, é possível trabalhar com o tipo de dado string. O que permite utilizar strings de uma forma mais independente, conforme demonstrado a seguir:

// Exemplo do uso de strings #include <iostream>

#include <string> using namespace std;

main () {

// Várias formas de se criar uma string:

string s0 ("String inicial"); // s0 com "Initial string" string s1; // s1 com valor nulo

string s2 (s0); // s2 com o conteúdo de s0

string s3 (s0, 3, 4); // s3 com o conteúdo de s0 da posição 3 com 4 posições string s4 ("Sequencia", 6); // s4 com o 6 posições do conteúdo entre aspas string s5 (10, 'x'); // s5 com o 10 repetições do conteúdo entre aspas

string s6 (10, 65); // s6 com o 10 repetições do caracter ASCII de código 65 string s7 (s0.begin(), s0.begin()+7); // s7 com s0, entre a posição 0 e 7

cout << "s0: " << s0 << "\ns1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3; cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6: " << s6;

cout << "\ns7: " << s7 << endl; system("pause");

}

Resultado:

s0: String inicial s1:

s2: String inicial s3: ing

s4: Sequen s5: xxxxxxxxxx s6: AAAAAAAAAA s7: String

Pressione qualquer tecla para continuar. . .

Exemplo de captura e algumas manipulações com uma string:

/* Strings */

(22)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 19 main()

{

string nome; // ("Teste de string"); cout << "Informe o nome: ";

cin.sync(); // Limpa o buffer do cin, garantindo que o próximo getline // não obtenha dados incorretos desse buffer.

getline(cin,nome); // Captura string do teclado

// Exibe o conteúdo da nome

cout << "nome: " << nome << endl; // Exibe o tamanho preenchido

cout << "nome.size(): " << nome.size() << endl; // Exibe 0 se vazia e 1 se preenchida

cout << "nome.empty(): " << nome.empty() << endl;

// Exibe a primeira posição de qq dos caracteres entre aspas (e ou r), // o parâmetro 0 determina que a pesquisa será em toda a String

cout << "nome.find_first_of(): " << nome.find_first_of("er",0) << endl; int posicao=2;

// Exibe a primeira posição do caractere "e" a partir da "posicao"

cout << "nome.find_first_of(): " << nome.find_first_of("e",posicao) << endl; // Exibe a última posição do caractere "e"

cout << "nome.find_last_of(): " << nome.find_last_of("e") << endl; // Exibe a posição do primeiro "de"

cout << "nome.find(): " << nome.find("de") << endl; // Exibe o conteúdo das 2 posições a partir da posição 6 cout << "nome.substr(): " << nome.substr(6,2) << endl; // Insere "nova " na posição 9

cout << "nome.insert(): " << nome.insert(9,"nova ") << endl; // Exibe o conteúdo da nome

cout << "nome: " << nome << endl;

// Substitui "na" nas 2 posições a partir da posição 6

cout << "nome.replace(): " << nome.replace(6,2,"na") << endl; // Exibe o conteúdo de nome

cout << "nome: " << nome << endl;

system("pause");

}

Resultado:

Informe o nome: Teste de String nome: Teste de String

nome.size(): 15 nome.empty(): 0 nome.find_first_of(): 1 nome.find_first_of(): 4 nome.find_last_of(): 7 nome.find(): 6 nome.substr(): de

nome.insert(): Teste de nova String nome: Teste de nova String

nome.replace(): Teste na nova String nome: Teste na nova String

(23)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 20

6.7 Conversões de Tipos

Conversão implícita é aquela realizada pela linguagem sem que o programador tenha explicitamente solicitado. C++ converte implicitamente a maioria dos tipos de dados. Os principais são:

• De inteiro para caractere e ponto flutuante.

• De ponto flutuante para inteiro e caractere.

• De caractere para inteiro e ponto flutuante. Exemplo:

char c = 'a'; int i;

float f; double d;

i = c; // conversão implícita. i recebe o valor 97 (código de 'a'); f = c; // f recebe 97;

d = c; // d recebe 97;

Quando é convertido ponto flutuante para inteiro e caractere, a parte fracionária é desprezada:

float a; int b;

a = 10.02; b = a;

printf("%f \n",a); printf("%d \n",b);

Resultado:

10.020000 10

A conversão explicita significa solicitar que a linguagem realize a conversão, de forma explícita, fazendo o que se chama de cast, conforme o exemplo a seguir:

char c = 'a';

cout << "Conversão explícita de caractere para inteiro: " << (int) c << endl;

float f = (float) c; // conversão explícita para ponto flutuante.

(24)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 21 Para converter tipos numéricos (int, float e double) para strings do tipo C-String (char de strings), utiliza-se conforme o exemplo:

/* Conversão de C-String para numéricos e vice-versa*/ #include <iostream>

#include <sstream> #include <string> using namespace std;

main(){

// C-String para numéricos char str1[3] = "10";

int n1 = atoi(str1); // Conversão para int float n2 = atof(str1); // Conversão para float double n3 = atof(str1); // Conversão para double

printf("Conversao de C-String para numericos: \n"); printf("C-String: %s \n",str1);

printf("Integer: %d \n",n1); printf("Float : %f \n",n2); printf("Double : %f \n\n",n3);

// Numéricos para C-String char str2[3], str3[3], str4[3]; int n4 = 40;

float n5 = 50; double n6 = 60;

sprintf(str2, "%d", n4 ); // Conversão de int sprintf(str3, "%f", n5 ); // Conversão de float sprintf(str4, "%f", n6 ); // Conversão de double

printf("Conversao de Numericos para C-String: \n"); printf("C-String de n4(int): %s \n",str2);

printf("C-String de n5(float): %s \n",str3); printf("C-String de n6(double): %s \n\n",str4);

system("pause"); }

Resultados:

Conversao de C-String para numericos: C-String: 10

Integer: 10

Float : 10.000000 Double : 10.000000

Conversao de Numericos para C-String: C-String de n4(int): 40

(25)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 22 Pressione qualquer tecla para continuar. . .

Para converter tipos numéricos (int, float e double) para strings do tipo String e vice-versa, o procedimento envolve a classe stringstream. Não abordaremos nesse material, o conceito de classes. Entenda que as classes são como funções, que podem ser acionadas para execução de alguma tarefa. Exemplo do uso da stringstream para conversão:

/* Conversão de String para numéricos e vice-versa*/ #include <iostream>

#include <sstream> #include <string> using namespace std;

main(){

// String para numéricos string str ("10");

int n1; float n2; double n3;

stringstream ss1(str); stringstream ss2(str); stringstream ss3(str);

ss1 >> n1; // Conversão para int ss2 >> n2; // Conversão para float ss3 >> n3; // Conversão para double

printf("Conversao de String para numericos: \n"); printf("Integer: %d \n",n1);

printf("Float : %f \n",n2); printf("Double : %f \n\n",n3);

// Numéricos para String string str1, str2, str3; stringstream ss4;

stringstream ss5; stringstream ss6;

ss4 << n1; // Conversão de int ss5 << n2; // Conversão de float ss6 << n3; // Conversão de double

printf("Conversao de Numericos para String: \n"); cout << "ss4: " << ss4.str() << "\n";

cout << "ss5: " << ss5.str() << "\n"; cout << "ss6: " << ss6.str() << "\n\n";

system("pause"); }

(26)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 23 Conversao de String para numericos:

Integer: 10

Float : 10.000000 Double : 10.000000

Conversao de Numericos para String: ss4: 10

ss5: 10 ss6: 10

Pressione qualquer tecla para continuar. . .

6.8 Conversões de Maiúsculas e Minúsculas

#include <iostream> #include <string> using namespace std;

main (){

// Maiúsculas e minúsculas com C-String char caractere = 'a';

printf("\nCaractere original: %c", caractere); printf("\n\nMaiuscula: %c", toupper(caractere)); printf("\nMinuscula: %c", tolower(caractere)); printf("\n\n=0 -> false, !=0 -> true");

printf("\nTeste maiuscula: %d", isupper(caractere)); printf("\nTeste minuscula: %d", islower(caractere));

printf("\n\n---");

// Maiúsculas e minúsculas com String string nome1 ("a frase informada");

cout << "\n\nString original: " << nome1; for (int i=0; i<nome1.length(); i++){ nome1[i] = toupper(nome1[i]); }

cout << "\nString em maiusculas: " << nome1;

string nome2 ("OUTRA FRASE informada"); cout << "\n\nString original: " << nome2; for (int i=0; i<nome2.length(); i++){ nome2[i] = tolower(nome2[i]); }

cout << "\nString em minusculas: " << nome2;

cout << "\n\n"; system("pause");

}

(27)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 24 Caractere original: a

Maiuscula: A Minuscula: a

=0 -> false, !=0 -> true Teste maiuscula: 0

Teste minuscula: 2

---

String original: a frase informada String em maiusculas: A FRASE INFORMADA

String original: OUTRA FRASE informada String em minusculas: outra frase informada

Pressione qualquer tecla para continuar. . .

6.9 Struct – Agrupamento de Dados em uma Estrutura

É possível agrupar um conjunto de variáveis em uma estrutura de dados chamada struct, identificando o conteúdo e acessando após a inicialização e atribuição de valores.

Exemplo:

#include <iostream> #include <cstring> using namespace std;

struct tipo_registro { int codigo;

string nome; double valor; };

main(){

tipo_registro registro;

registro.codigo = 10; registro.nome = "Cliente"; registro.valor = 12.32;

cout << registro.codigo << endl; cout << registro.nome << endl; cout << registro.valor << endl;

}

(28)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 25 10

Cliente 12.32

(29)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 26

7 Operações

7.1 Operadores Aritméticos

Operador Ação

+ Adição

- Subtração * Multiplicação

/ Divisão

% Resto de Divisão Inteira -- Decremento

++ Incremento

Exemplo:

/* Operadores */ #include <iostream> using namespace std;

main() {

int soma = 5 + 5;

double subtracao = soma - 2; float multiplicacao = 5 * 2.5; char divisao = 100 / 2;

int resto = 51 % 5;

cout << "Resultados: " << "\n" << "soma: " << soma << "\n"

<< "subtracao: " << subtracao << "\n"

<< "multiplicacao: " << multiplicacao << "\n" << "divisao: " << divisao << "\n"

<< "resto: " << resto << "\n" << endl;

system("pause"); }

Resultado:

Resultados: soma: 10 subtracao: 8

multiplicacao: 12.5 divisao: 2

(30)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 27 Pressione qualquer tecla para continuar. . .

Operadores de incremento e decremento:

/* Operadores */ #include <iostream>

main() {

int valor = 10;

printf("%d \n", valor); valor++;

printf("%d \n", valor); valor++;

printf("%d \n", valor); valor--;

printf("%d \n", valor);

system("pause"); }

Resultado:

10 11 12 11

Pressione qualquer tecla para continuar. . .

Raíz e exponenciação(x^y):

/* Raíz e exponenciação */ #include <iostream>

#include <math.h>

main () {

double val1, val2; val1 = 4;

val2 = 2;

printf ("%4.2f ^ %4.2f: %4.2f \n", val1, val2, pow(val1, val2)); printf ("Raiz quadrada de %4.2f = %4.2f \n", val1, sqrt(val1));

printf ("Raiz quadrada de %4.2f = %4.2f \n", val1, pow(val1, (double) 1/2)); printf ("Raiz cubica de %4.2f = %4.2f \n", val2, pow(val2, (double) 1/3)); printf ("Raiz quarta de %4.2f = %4.2f \n", val2, pow(val2, (double) 1/4));

system("pause"); }

(31)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 28 4.00 ^ 2.00: 16.00

Raiz quadrada de 4.00 = 2.00 Raiz quadrada de 4.00 = 2.00 Raiz cubica de 2.00 = 1.26 Raiz quarta de 2.00 = 1.19 Press any key to continue . . .

7.2 Operadores Relacionais

Operador Ação

== Igual a

!= Diferente de

> Maior que

< Menor que

>= Maior ou igual que

<= Menor ou igual que

&& Condição “E”

|| Condição “OU”

! Não

Observação: As operações relacionais retornam um tipo bool(boleano), onde true equivale ao inteiro 1 e false equivale ao inteiro 0. Exemplo:

/* Operadores Relacionais */ #include <iostream>

using namespace std;

main() {

int valor1 = 10; int valor2 = 5;

bool r1, r2, r3, r4, r5, r6;

r1 = valor1 == valor2; r2 = valor1 != valor2; r3 = valor1 > valor2; r4 = valor1 < valor2; r5 = valor1 >= valor2; r6 = valor1 <= valor2;

cout << "Comparacao entre valor1 e valor2: " << "\n" << "==: " << r1 << "\n"

<< "!=: " << r2 << "\n"

<< "> : " << r3 << "\n" << "< : " << r4 << "\n"

<< ">=: " << r5 << "\n"

(32)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 29 << endl;

system("pause"); }

Resultado:

Comparacao entre valor1 e valor2: ==: 0

!=: 1 > : 1 < : 0 >=: 1 <=: 0

Pressione qualquer tecla para continuar. . .

Atenção quanto à diferença entre = e ==. O = é o símbolo de atribuição de valor e o == é o símbolo de comparação. Serão vistos exemplos de ambos mais adiante.

7.3 Precedências

Os operadores do C++ têm níveis de precedência. Os operadores de nível

mais elevado são executados antes dos operadores de nível mais baixo. Por

exemplo, a expressão a + b * c é executada como a + (b * c) porque o operador

* tem maior precedência do que o operador +. Os operadores do mesmo nível de

precedência são geralmente executados da esquerda para a direita. Assim, a - b

- c é executado como (a - b) - c.

Na tabela seguinte podem ver-se todos os operadores do C pela ordem

decrescente do nível de prioridade, e também a sua associatividade.

Operadores Associatividade

() [] -> . esquerda para a direita

! - ++ -- * & (cast) sizeof direita para a esquerda

* / % esquerda para a direita

+ - esquerda para a direita

<< >> esquerda para a direita

< <= > >= esquerda para a direita

== != esquerda para a direita

(33)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 30

^ esquerda para a direita

| esquerda para a direita

&& esquerda para a direita

|| esquerda para a direita

?: direita para a esquerda

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

, esquerda para a direita

Assim, a expressão a < 41 && 7 * b < c é executada como (a < 41) && ((7

* b) < c). Da mesma forma a expressão a = b = fahr / celsius + limit é

executada como a = (b = ((fahr / celsius) + limit)).

Mesmo havendo a precedência implícita pela linguagem, é uma boa prática de programação, sempre colocar a separação pelos parênteses em expressões mais complexas ou que possam gerar dúvida.

(34)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 31

8 Funções

As funções têm o objetivo de isolar trechos de código, para organização e/ou reaproveitamento de código.

Sintaxe: tipoDeRetorno nome ( parametro1, parametro2, ...) { comandos } , onde:

tipoDeRetorno : As funções podem gerar um retorno de sua execução, assim, deve ser

informado o tipo do retorno. Se a função não tiver que retornar nenhum valor, utiliza-se o tipo void. Apesar da função main ser uma exceção, podendo ser declarada sem tipo de retorno, algumas ferramentas ou compiladores podem exigir essa declaração. Como é o exemplo do Aplicativos CodeBlocks, mais utilizado no MAC OS X;

nome : Descrição através da qual a função será chamada;

( : Início dos parâmetros de entrada da função;

parametro1, parametro2, ...: Lista de parâmetros;

) : Final dos parâmetros de entrada da função;

{ : Início do bloco de comandos da função;

Comandos : Lista de comandos da função. O valor a ser retornado deve ser colocado

no bloco de comandos, com a sintaxe: return valor;

} : Final do bloco de comandos da função.

Exemplo:

/* Função interna */ #include <iostream>

// Função de soma entre v1 e v2 int soma (int v1, int v2)

{

return v1 + v2; }

main() {

int valor1 = 10; int valor2 = 5;

printf("Soma de %d e %d = %d \n", valor1, valor2, soma(valor1, valor2));

system("pause"); }

(35)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 32 Soma de 10 e 5 = 15

Pressione qualquer tecla para continuar. . .

As funções podem estar dentro do programa, como o exemplo anterior, ou serem importadas no mesmo formato das diretivas de pré-processamento, como ilustrado a seguir:

Arquivo C:\projeto\biblioteca.h:

/* Biblioteca de funções do projeto teste */

// Função de soma entre v1 e v2 int soma (int v1, int v2)

{

return v1 + v2; }

Arquivo C:\projeto\teste.cpp:

/* Função interna */ #include <iostream>

#include <C:\projeto\biblioteca.h>

main() {

int valor1 = 10; int valor2 = 5;

printf("Soma de %d e %d = %d \n", valor1, valor2, soma(valor1, valor2));

system("pause"); }

O resultado é idêntico ao exemplo anterior. Se o arquivo C:\projeto\biblioteca.h não existir, haverá erro de compilação.

8.1 Escopo de uma variável ou constante – Local e Global

Existem variáveis e constantes que podem ser usadas em todo o programa, chamadas globais, e as que só podem ser utilizadas dentro de um bloco de código, chamadas locais.

No exemplo a seguir, vamos observar que há outra função antes da main, a função imprime, que será executada dentro da main. Ou seja, a main chama a execução da imprime, como se os comandos da imprime estivesse exatamente no local da chamada, dentro da main.

(36)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 33 valor global (10), quando acessada a partir da imprime, terá o valor local da função imprime (20).

/* Exemplo de variável global e local */ #include <iostream>

int valor1 = 10; // Variável global

void imprime() { valor1 = 20;

printf("Valor1 da imprime: %d \n",valor1); }

main() {

printf("Valor1 da main : %d \n",valor1); imprime();

system("pause"); }

Resultado:

Valor1 da main : 10 Valor1 da imprime: 20

Pressione qualquer tecla para continuar. . .

Observe o programa a seguir:

/* Exemplo de variável global e local */ #include <iostream>

int valor1 = 10; // Variável global

void imprime() { valor1 = 20;

printf("Valor1 da imprime: %d \n",valor1); printf("Valor2 da imprime: %d \n",valor2); }

main() {

int valor2 = 30;

printf("Valor1 da main : %d \n",valor1); printf("Valor2 da main : %d \n",valor2); imprime();

system("pause"); }

Esse programa apresentará erro de compilação na linha printf("Valor2 da imprime: %d \n",valor2);, pois não há valor atribuído para a variável valor2 dentro da função imprime. Ela é uma variável local na função main.

(37)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 34 Ao passar parâmetros para uma função, esta é executada e trata o tipo específico de dado determinado. Os templates ou gabaritos de função possibilitam a criação de funções que podem receber diferentes tipos de dados.

// Exemplo de template #include <iostream> using namespace std;

// Criação da função template template <typename tipo>

tipo maximo (tipo valor1, tipo valor2, tipo valor3){ tipo valorMaximo = valor1;

if (valor2 > valorMaximo) valorMaximo = valor2;

if (valor3 > valorMaximo) valorMaximo = valor3;

return valorMaximo; }

main(){

// Uso da função template com variaveis do tipo inteiro int i1=10;

int i2=20; int i3=30;

cout << "O maior valor inteiro foi: " << maximo(i1, i2, i3) << endl;

// Uso da função template com variaveis do tipo double double d1=12.34;

double d2=56.78; double d3=34.56;

cout << "O maior valor double foi: " << maximo(d1, d2, d3) << endl; }

Resultado:

O maior valor inteiro foi: 30 O maior valor double foi: 56.78

(38)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 35

9 Instruções de Decisão

9.1 Operadores Lógicos

Operador Ação

&& Condição “E”

|| Condição “OU”

! Não

As instruções de decisão e repetição se baseiam em geral no resultado de uma operação lógica, que utiliza os operadores lógicos acima relacionados.

9.2 IF e ELSE

Sintaxe: if (condição) comando [else comando]; , onde:

if : Comando que informa a análise de uma condição para execução de uma ação;

( : Início da condição a ser analisada;

condição : condição a ser analisada;

) : Final da condição a ser analisada;

comando : comando a ser executado;

else : Direciona para a ação a ser executada se a condição do if for falsa. Exemplo:

/* Comando if */ #include <iostream>

main() { int val;

val = 10; if (val > 5)

printf("Valor maior que 5\n"); else

printf("Valor menor que 5\n");

val = 3; if (val > 5)

printf("Valor maior que 5\n"); else

printf("Valor menor que 5\n");

(39)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 36 }

Resultado:

Valor maior que 5 Valor menor que 5

Pressione qualquer tecla para continuar. . .

Lembrando que quando houver mais de um comando, estes devem ser colocados dentro de um bloco de comandos, delimitados por chaves ( { } ) e separados por ponto-e-vírgula (; ).

9.3 Operador Ternário

Sintaxe: (condição) ? (se verdadeiro) : (se falso); , onde:

Exemplo:

/* Operador ternário */ #include <iostream>

main() { int val;

val = 10;

(val > 5) ? (printf("Valor maior que 5\n")) : (printf("Valor menor que 5\n"));

val = 3;

(val > 5) ? (printf("Valor maior que 5\n")) : (printf("Valor menor que 5\n"));

system("pause"); }

9.4 SWITCH

Sintaxe:

switch (expressão) {

case constante1:

primeiro grupo de comandos; break;

case constante2:

segundo grupo de comandos; break;

(40)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 37 default:

grupo de comandos default, executado se nenhum dos anteriores for acionado }

Atenção: O tipo de expressão deve ser um inteiro ou char.

Exemplo:

/* Switch */

#include <iostream>

main() { int val;

val = 10;

switch (val) {

case 1:

printf("---\n"); printf("Valor igual a 1\n"); printf("---\n"); break;

case 2:

printf("---\n"); printf("Valor igual a 2\n"); printf("---\n"); break;

case 3:

printf("---\n"); printf("Valor igual a 3\n"); printf("---\n"); break;

default:

printf("---\n"); printf("Valor diferente de 1, 2 e 3\n"); printf("---\n"); }

system("pause"); }

(41)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 38

10 Instruções de Repetição(

Loop

)

10.1 While

Sintaxe: while (expressão) comandos;

/* While */

#include <iostream>

main() { int n = 1;

while (n<=10) {

printf("%d ", n); n++;

}

printf("\n"); system("pause"); }

Resultado:

1 2 3 4 5 6 7 8 9 10

Pressione qualquer tecla para continuar. . .

10.2 Do

Sintaxe: do comandos while (expressão);

Exemplo:

/* Do */

#include <iostream>

main() { int n = 1;

do {

printf("%d ", n); n++;

}

while (n<=10);

(42)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 39 O resultado é o mesmo do exemplo do while. A diferença entre eles é que no while a condição é testada antes de executar os comandos e no do, os commandos são sempre executados pelo menos uma vez e são repetidos até a condição se tornar falsa.

10.3 For

Sintaxe: for (inicialização, condição, incremento) comandos;

Exemplo:

/* For */

#include <iostream>

main() {

for (int i=1; i<=10; i++) {

printf("%d ", i); }

(43)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 40

11 Vetores e Matrizes

11.1 Vetores ou Arrays

São séries de elementos acessíveis por índice. O índice inicia-se pela posição 0. Sintaxe: tipo nome [número de elementos];

Exemplo:

Nome valoresSemestrais Posição 0 1 2 3 4 5 Conteúdo 10 20 30 32 25 12

/* Arrays */

#include <iostream>

main() {

int valoresSemestrais [6] = {10, 20, 30, 32, 25, 12};

for (int i=0; i<=5; i++) {

printf("Mes %d : %d \n", i+1, valoresSemestrais[i]); }

printf("\n"); system("pause"); }

Resultado:

Mes 1 : 10 Mes 2 : 20 Mes 3 : 30 Mes 4 : 32 Mes 5 : 25 Mes 6 : 12

Pressione qualquer tecla para continuar. . .

11.2 Matrizes ou Arrays Multidimensionais

Podem ser descritas como vetor de vetores. São séries de elementos acessíveis por índice com duas dimensões.

(44)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 41 Exemplo:

controle Despesas Meses 0 1 2 0 10 20 30 1 40 50 60

/* Arrays */

#include <iostream>

main() {

// Matriz de despesas do trimestre int controle[2][3];

// Vetor de meses controle[0][0]=10; controle[0][1]=20; controle[0][2]=30;

// Vetor de despesas controle[1][0]=40; controle[1][1]=50; controle[1][2]=60;

for (int i=0; i<=1; i++) // Vetor de meses {

for (int j=0; j<=2; j++) // Vetor de despesas {

printf("Mes %d - Despesa %d: %d \n", i+1, j+1, controle[i][j]); }

}

printf("\n"); system("pause"); }

Resultado:

Mes 1 - Despesa 1: 10 Mes 1 - Despesa 2: 20 Mes 1 - Despesa 3: 30 Mes 2 - Despesa 1: 40 Mes 2 - Despesa 2: 50 Mes 2 - Despesa 3: 60

Pressione qualquer tecla para continuar. . .

Para obter o resultado “formatado” como na tabela exemplo:

(45)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 42 #include <iostream>

main() {

// Matriz de despesas do trimestre //

int controle[2][3];

// Vetor de meses controle[0][0]=10; controle[0][1]=20; controle[0][2]=30;

// Vetor de despesas controle[1][0]=40; controle[1][1]=50; controle[1][2]=60;

printf(" Despesas\n"); printf("Meses ");

for (int j=0; j<=2; j++) printf("%d ", j);// Vetor de meses printf("\n");

for (int i=0; i<=1; i++) // Vetor de meses {

printf("%d ", i);

for (int j=0; j<=2; j++) // Vetor de despesas {

printf("%d ", controle[i][j]); }

printf("\n"); }

printf("\n"); system("pause"); }

Resultado:

Despesas Meses 0 1 2 0 10 20 30 1 40 50 60

(46)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 43

12 Ponteiros

12.1 Conceito

São variáveis que contém o endereço de memória, que normalmente é a localização de outra variável. Na figura a seguir, é ilustrada a memória, onde existem as variáveis p e a. Sendo p um ponteiro que aponta para o endereço de a, que por sua vez contém o valor 10.

Sintaxe: tipo *nome;

Exemplo: int *pointer; // Um ponteiro do tipo inteiro, chamado pointer.

Operadores:

* : Retorna o conteúdo da variável apontada pelo ender. de memória ó “no endereço”. & : Retorna o endereço de memória de uma variável ó “o endereço de”.

Exemplo:

#include <iostream> using namespace std; main() {

int val; // Criação da variável inteira val

int *p1; // Criação do ponteiro p1 do tipo inteiro

val = 10; // Atribuição do conteúdo 10 para val

p1 = &val; // Atribuição do endereço de val para o ponteiro p1

cout << "Endereco de val, armazenado em p1: " << p1 << endl;

cout << "Conteudo de val, cujo endereco esta em p1: " << *p1 << endl;

}

Resultado:

Endereco de val, armazenado em p1: 0x22fe34 Conteudo de val, cujo endereco esta em p1: 10

---

(47)

Programação C++ professorgilbertoquirgodesouza@gmail.com Pág. 44 No exemplo anterior, um ponteiro armazena um endereço de uma variável do tipo inteiro, ou seja, um ponteiro para inteiro. É também possível, armazenar uma hierarquia de ponteiros. Ou seja, ter um ponteiro que aponta pra outro ponteiro e assim por diante. Bastando para isso, acrescentar o operador asterisco, sendo que cada um indica um ponteiro. Conforme o exemplo a seguir:

#include <iostream> using namespace std; main() {

int val; // Criação da variável inteira val

int *p1; // Criação do ponteiro p1 do tipo inteiro

val = 10; // Atribuição do conteúdo 10 para val

p1 = &val; // Atribuição do endereço de val para o ponteiro p1

cout << "Endereco de val, armazenado em p1: " << p1 << endl;

cout << "Conteudo de val, cujo endereco esta em p1: " << *p1 << endl;

int **p2; // Criação do ponteiro p2 do tipo inteiro, ou seja, // um ponteiro que aponta para outro ponteiro

p2 = &p1; // Atribuição do endereço de p1 para p2, ou seja, // p2 aponta para p1 que aponta para val

cout << "Endereco de p1, armazenado em p2: " << p2 << endl;

cout << "Conteudo de p2, ou seja, o endereco de p1: " << *p2 << endl;

}

Resultado:

Endereco de val, armazenado em p1: 0x22fe34 Conteudo de val, cujo endereco esta em p1: 10 Endereco de p1, armazenado em p2: 0x22fe28

Conteudo de p2, ou seja, o endereco de p1: 0x22fe34

---

Pressione qualquer tecla para continuar. . .

Variável val p1 p2

Endereço 0x22fe34 0x22fe28 --

Conteúdo 10 0x22fe34 0x22fe28

Observação: Em se tratando de endereços de memória, a execução em outro computador,

Referências

Outline

Documentos relacionados

simplesmente WPA, e uma versão doméstica mais simples, chamada WPA- PSK. Utilize a versão WPA-PSK, uma vez que a versão empresarial requer um servidor de autenticação especial na

Apenas a paixão de Frey re pela descrição e pelo detalhe, colocada a serv iço de uma empresa tão árdua quanto apresentar um painel da formação da família e da sociedade

/ diffuse pulmonary haemorrhage, Goodpasture syndrome, chronic eosinophilic pneumonia, usual interstitial pneumonia (UIP) with superimposed diffuse alveolar damage, pulmonary

Pacientes em hemodiálise (clearance de creatinina menor que 7 mL/min), após a administração de uma dose oral única de 10 mg de cetirizina, tiveram um aumento de 3 vezes na meia vida

O método stepwise diz respeito à forma como as possíveis variáveis explicativas são testadas na modelagem pesquisada pela análise de regressão linear, isto é, ele

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

Portanto, este artigo teve por objetivo analisar a área de gestão da qualidade, para elaborar uma fundamentação teórica e descobrir os trabalhos mais citados e

• Maior satisfação do cliente.. Engenharia de Software Testes de Software Indicadores para Governança Frameworks Assuntos escolhidos.. Abordagem utilizada Montagem do