C++ Orientado a Objetos
Prof. Flávio de Oliveira Silva, M.Sc.
[email protected]
fla iosil a@comp ter org
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 115
[email protected]
C++
C++ e C - Comparação
C
Linguagem compilada
ANSI C – Padrão e Portabilidade C Programação em Alto nível e baixo nível
Programação Estruturada
Utilização da memória: Ponteiros
C++
Criado por Stroustroup em 1980
Novos conceitos em procedimentos
Sobrecarga; Templates; exceções; converões de tipos
Conceitos Programação orientada a objetos
Utilizando o DevC++
Será utilizado o ambiente DevC+ + (Versão 4.9.9.2) Ambiente gráfico; Em português; Gratuito
Utiliza compiladores da família gcc
C i d P j t (
Criando um novo Projeto (Arquivo Novo Projeto...)
Um projeto contém todas as informações necessárias para compilar e criar programas.
Em um projeto são armazenados todos os arquivos necessários (arquivos .cpp; .h e .rc)
O projeto (hello.dev) deve ser salvo de preferência em uma pasta específica para o mesmo.
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 117
DevC++ - Novo Projeto
Salvando Arquivos
O DevC++ permite a criação de vários tipos de projetos
Um projeto "Console Application" consiste de um programa que será executado no terminal do S.O em modo texto.
Após criar o projeto automaticamente será criada a função main, necessária para a execução do mesmo
int main(int argc, char *argv[])
Além disso um arquivo main.cpp será criado.
Neste arquivo existe o código básico de uma "Console Application". Este arquivo deve ser salvo na pasta criada para o projeto.
Para salvar um arquivo:
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
q
Utilize a opção do menu Arquivo Salvar (Ctrl + s) ou então a barra de
ferramentas
DevC++ - Editando programas
O editor de programas possui recursos como: Navegador de classes
Diferentes cores para diferentes partes do código; complemento de código; entre outras
entre outras.
Cada parte do código possui uma cor específica : Palavras reservadas da linguagem – preto / negrito
Texto (Strings) –vermelho Números –roxo Pré-processador -verde Comentário –azul P d ã d D C 1 #include <cstdlib> 2 #include <iostream> 3 //Hello World! 4 using namespace std; 5
6 int main(int argc, char *argv[])
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
Padrão cores do DevC++
119
6 int main(int argc, char argv[]) 7 {
8 int i = 1; 9 system("PAUSE");
10 return EXIT_SUCCESS; 11 }
DevC++ - Compilando Programas
Para compilar os programas
Menu Executar Compilar
(Ctrl + F9)
Recompilar todas as
unidades de código
Executar Rebuild AllDevC++ - Configuração
Um problema muito comum é o compilador e o linker não encontrar os arquivos .h e as bibliotecas necessárias
Para Configurar o DevC+ + para utilização do código em C+ +
I i i l t d tili d F t O õ d
Inicialmente deve ser utilizado o menu: Ferramentas Opções do
Compilador
Em seguida deve-se clicar na aba DIRETÓRIOS
Aba BINÁRIOS
C:\Dev-Cpp\Bin
Esta é a pasta que contém os executáveis (compilador; linker; etc.)
Aba BIBLIOTECAS C \De Cpp\lib
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. C:\Dev-Cpp\lib
Esta é a pasta que contém as bibliotecas que serão utilizadas pelo linker
Aba C++ INCLUDES
Pastas que contém os arquivos .h de bibliotecas fornecidas com o DevC++
121
DevC++ - Configuração
C++ Includes
Estrutura de Dados
DevC++ - Depuração de Programas
Configuração
Um recurso importante do compilador é a possibilidade de
depurar (debug) o código.
Para isto inicialmente é necessário informar ao compilador
Para isto inicialmente é necessário informar ao compilador
que gere informações adicionais que serão utilizadas pelo
debugger.
Para configurar deve-se realizar o seguinte procedimento:
Projeto Opções do Projeto.
Aba "Geração de Código / Otimização"
Selecionar "LINKER" e marcar "YES" em "Gerar informação de
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
ç depuração", conforme mostrado a seguir
Aba "Compilador"
Adicionar a opção "-g" para forçar a para produção de informação de debug
123
DevC++ - Depuração de Programas
Configuração
Opções do Compilador
Aplicação Console
Código Básico - C
1. //Preprocessador inclui o arquivo stdio.h-definição da função printf
2. #include <stdio.h>
3. // Inclue funções básicas, neste caso a função system
4. #include <stdlib.h>
5. //Definição da função main. Uma aplicação console deve possuir uma
6. // função main
7. int main(int argc, char *argv[])
8. // Inicio do bloco da função main
9. {
10. // Imprime o texto - Hello World! – e duas quebras de linha
11. printf("Hello World!\n\n");
12. //Chama um comando do console do S.O., neste caso o comando PAUSE
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
12. //Chama um comando do console do S.O., neste caso o comando PAUSE
13. system("PAUSE");
14. //Finaliza o processamento da função main e retorna
15. return 0;
16.// fim do bloco da função main
17.}
125
Comandos e Expressões
Comando é a menor unidade de um programa C++ e pode conter uma ou mais linhas
Os comandos são finalizados por ;
Um bloco contém uma sequência de comandos que são executados
Um bloco contém uma sequência de comandos que são executados sequencialmente e é iniciado com o caractere { e termina com o caractere }
É possível a criação de blocos dentro de blocos de programa
Uma expressão representa uma operação executada pelo programa.
Ex: Definição de Variável; Expressão Aritmética ou lógica; Mensagem entre objetos 1. {
2. expr1;
3. expr2; {
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 4. { 5. exprI1; 6. exprI; 7. } 8. ... 9. expr3; 10.} 126
Tipos Básicos
Tipos de dados são abstrações utilizadas e manipuladas por uma linguagem.
Tipos fundamentais fazem parte da linguagem e estão sempre disponíveis para serem utilizados
Quando uma classe é criada um novo tipo fica disponível para o programa
Quando uma classe é criada um novo tipo fica disponível para o programa
A tabela abaixo mostras os tipos fundamentais (plataforma 32 bits)
TIPO SINÔNIMO CARACTERÍSTICA TAMANHO (Bytes) MÍNIMOVALOR MÁXIMOVALOR
bool booleano 1 0 1
char signed char caracteres 1 ‐128 127
unsigned char caracteres sem sinal 1 0 255
short short int; signed short int inteiro pequeno 2 ‐32768 32767 unsigned
short unsigned short int inteiro pequeno sem sinal 2 0 65535
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 127
int signed; signed int inteiros 4 ‐2.147.483.648 2.147.483.648 unsigned int unsigned inteiro sem sinal 4 0 4.294.967.295 long long int; signed long int inteiro grande 4 ‐2.147.483.648 2.147.483.648 unsigned long unsigned long int inteiro grande sem sinal 4 0 4.294.967.295
float ponto flutuante; precisão simples 4 ‐3.40E‐37 3.40E+38 double ponto flutuante; precisão dupla 8 ‐1.70E‐307 1.7e+308 long double ponto flutuante; precisão dupla 8 ‐1.70E‐307 1.7e+308
Declaração Básica de Variáveis
Toda variável deve ser declarada sendo necessário a definição do seu tipo
1. int iX;
2 dobule dX dY;
2. dobule dX, dY;
3. bool bValue;
Durante a declaração é possível inicializar a variável, definindo um valor inicial para a mesma
4. int iX = 200; //Sintaxe C padrão
5. int iX(200), iY(244) //Sintaxe C++
Uma variável declarada dentro um bloco é válida somente dentro daquele bloco. Neste caso ela possui um "escopo LOCAL"p p
Uma variável declarada fora de um bloco possui um "escopo" GLOBAL"
A keyword const especifica uma variável cujo valor não pode ser modificado
Operadores Aritméticos
Símbolos – "+" "-" "* " "/ " "%"
1. int iA = 13; //declara e inicializa
2. int iV(7); //declara e inicializa 3. float f1; //declara a variável 4. f1 = 13; //Inicializa variável 5. iA+iV //retorna 20 6. iA-iV //retorna 6 7. iA*iV //retorna 91 8. iA/iV //retorna 1 Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 9. f1/iV //retorna 1.8571428
10. f1%iV //operador módulo – retorna resto inteiro da
divisão de f1 por iV neste caso o valor é zero.
129
Operadores Aritméticos
INCREMENTO ("++") E DECREMENTO("--")
Funcionam como operadores unários
1. int iY, iX = 10 //iY indefinido e iX igual a 10
2. //Incremento prefixado – incrementa primeiro iX e depois Atribui a iY
iY = ++iX;
//Neste ponto iY = 11 e iX = 11;
//Incremento pós-fixado – Primeiro atribui iX a //iY e depois incrementa iX;
iY iX++
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 3. iY = iX++;
//Ao final iY = 11 e iX = 12;
Operadores Lógicos
Símbolos – "&&" (AND) "||" (OR) "!" (NOT)
int bX, bY;
bX
bY
bX && bY bX || bY
!bX
bX
bY
bX && bY bX || bY
!bX
true
true
true
true
false
true
false
false
true
false
true
false
true
true
false
false
false
false
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
Em C++ se uma expressão é false, o seu retorno equivale a
zero de tipo int - int false(0).
Uma expressão é true se retorna um valor diferente de zero
131
Operadores Relacionais
Símbolos
OPERAÇÃO SÍMBOLO OPERAÇÃO SÍMBOLO
IGUALDADE == MAIOR QUE >
Exemplos:
1. int iH = 4, iJ = 4, iK = 6; 2. iH == iJ //Retorna 1 3. iH == iK //Retorna 0 iK iK //R t 1 DESIGUALDADE != MENOR OU IGUAL QUE <= MENOR QUE < MAIOR OU IGUAL QUE >= 4. iK == iK //Retorna 1 5. iH < iK //Retorna 1 6. iH < iJ //Retorna 0 7. iH <= iJ //Retorna 1Operadores Binários
Símbolos
"AND" BINÁRIO & "OR INCLUSIVO" BINÁRIO |
"OR EXCLUSIVO" BINÁRIO ^ COMPLEMENTO BINÁRIO ~
Exemplos
int c = 4; //binário 00000100
int d = 6; //binário 00000110
int bytRes;
bytRes = c & d; //retorna 4 00000100 bytRes = c ^ d; //retorna 2 00000010
OR EXCLUSIVO BINÁRIO COMPLEMENTO BINÁRIO
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
bytRes = c d; //retorna 2 00000010 bytRes = c | d; //retorna 6 00000110 bytRes = ~c; //retorna -5 11111011 bytRes = d >> 2; //retorna 1 00000001 bytRes = d << 2; //retorna 24 00011000 133
Operador Condicional ( ? : )
Exemplo
a ? b : c //retorna o valor b se a é true, //caso contrário retorna o valor c
Estrutura de Dados
Operadores
Uso
Associatividade da esquerda para direita
Regras de Precedência
[] . e++ e---e !e ~e ++e -e---ee !e e ++e e
new * / % + -== != & ^ | && Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. Exemplos:
a/b*c interpretado como (a/b)*c a+b*c/d interpretado como a+((b*c)/d)
135 && || ? : = += *= /= %= >>= <<= &= ^= !=
Operações Importantes
ATRIBUIÇÃO DE VALORES(Operador =)
Variável (v e v1) à esquerda irá conter o valor E, especificado à direita.
v = E;
v = v1 = E; equivale a v = (v1 = E); //Evitar!!!
ATRIBUIÇÃO COM OPERADOR (op=)
Sendo op um operador
v op= f; equivale a v = v op f;
Exemplo
Operações Importantes
Acessar um método de um objeto
Utiliza-se o operador ponto "." ou então o operador "-> "
Exemplos:
Circle* pC = new Circle();
//No caso acima pC é um ponteiro para um circle pC->getName();
Circle c(3); //Neste caso Circle não é um ponteiro, c.getArea(); //mas sim uma variável estática!
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. 137
Estrutura de um Programa em C++
# include # define
Definições de Variáveis globais Protótipos de funções/classes
Funções criadas pelo programa / Métodos de classes int main() { ... return 0; } Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
}
Arquivos Include
A diretiva #includeinforma que um arquivo de cabeçalho (* .h) deverá ser incluído, pelo processador, no ponto indicado
Os arquivos de cabeçalho (header files) pode conter protótipos de funções; definições de constantes e definições de classes juntamente funções; definições de constantes e definições de classes juntamente com seus atributos e métodos
Para incluir um arquivo somente é necessário informar o nome do arquivo sem a necessidade de indicar sua localização
Para que a compilação ocorra corretamente é necessário que as pastas de arquivos INCLUDE esteja corretamente configurada no projeto ou então no ambiente de desenvolvimento.
P fi t d tã i d i l d
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
Para configurar as pastas onde estão os arquivos de includes no DEVC++ deve ser utilizado o menu:
FERRAMENTAS OPÇÕES DO COMPILADOR DIRETÓRIOS
139
Diretiva #define e Variáveis Globais
A diretiva
#define
é utilizada para dar um nome a um valor
constante que será utilizado em todo o programa.
Após a definição de uma constante através da diretiva
Após a definição de uma constante através da diretiva
#define, em todas as ocorrências subsequentes no código,
após a definição, o nome utilizado, será substituído pela
constante no momento da compilação
Com a diretiva #define é possível também criar macros que
são utilizados pelo programa
Exemplos:
Exemplos:
#define PI 3.141519
Estruturas de Controle
Estrutura de Seleção – if / if-else
Uma instrução (ou bloco de instruções) somente será executada caso uma condição (expressão condicional E) resultar em verdadeiro (true)
if (E) S; S;
Uma variação da estrutura acima é a estrutura if-else. Onde uma escolha é feita.
Se a expressão condicional (E) for verdadeira (true) então um o bloco de instruções logo após a expressão será executado. Caso contrário, sendo a expressão falsa (false) então o bloco que se encontra após a palavra else será executado.
if (E)
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. if (E)
S; else
R;
Um bloco de instruções pode conter uma única linha de código ou então mais de uma linha envolvidos pelos sinais { e }
141
Estruturas de Controle
Estrutura de Seleção – if / if-else
Exemplo – Bloco com um único comando
if (nota >= 60)
cout << "Aprovado" << endl; else
else
cout << "Reprovado" << endl;
Exemplo – Bloco com vários comandos
if (ii == 0){ ii = 1;
cout << "Valor de ii atualizado" << endl; }
else {
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
ii = 0;
cout << "Valor de ii inicializado em zero" << endl; }
Estruturas de Controle
Seleção Múltipla – switch
A estrutura if-else permite a seleção no máximo entre 2 blocos diferentes.
Caso seja necessário um número maior de opções então deve ser utilizado a estrutura switch. Exemplo:
it h (E) { switch (E) { case c1 : S1; break; case c2 : S2; break; ... default : Sd; Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. }
143
Estruturas de Controle
Seleção Múltipla – switch
Inicialmente a expressão E é avaliada. Caso a expressão E, resulte na constante c1, o bloco de instruções S1 será executado, até que a palavra break seja encontrada. O break indica que todos as linhas, relacionadas com o switch serão ignoradas
com o switch serão ignoradas
Neste caso o próxima instrução após o switch será executada. Da
mesma forma caso E, resulte na constante c2 o bloco S2 será executado. E assim, sucessivamente.
Caso a expressão E não resulte em nenhum valor constante presente no switch (c1, c2, ...) então o bloco padrão (default) Sd será executado
O bloco default (Sd) é opcional, não sendo necessário sua presença. O l t t tili d it h d d ti bt h t
Estruturas de Controle
Seleção Múltipla – switch- Exemplo
int a = 2;switch (a){
case 1 : { // este sinal é opcional, porém melhora a leitura do código cout << "A é igual a 1" << endl;
b k // d bl d fi li d b k
break; //cada bloco deve sempre ser finalizado com um break } //caso o bloco tenha sido aberto deve ser fechado
case 2 : {
cout << "A é igual a 2" << endl; break;
}
case 3 : {
cout << "A é igual a 3" << endl; break;
}
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. }
default : {
cout << "A é diferente de 1,2 e 3" << endl;
//Neste caso o break é opcional pois não existem outros bloco no switch }
} // final do comando switch
//continua a execução a partir deste ponto
145
Estruturas de Controle
Repetição – while
Esta estrutura indica que a instrução ou bloco de instruções (S) que se encontra logo após uma expressão condicional (E) será executado ENQUANTO tal expressão por verdadeira (true) ou seja diferente de zero.
while (E) S;
Quando a última instrução do bloco é executada a expressão (E) será novamente executada e caso continue verdadeira o bloco será executado mais uma vez, e assim, sucessivamente.
A fim de evitar que a execução do bloco de instruções (S) execute indefinidamente é necessário que dentro deste bloco o valor da expressão condicional seja em algum momento alterado para falso (false).
No caso da instrução while sempre é feito um teste antes da execução do
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
No caso da instrução while, sempre é feito um teste antes da execução do bloco. Dessa forma para que o bloco seja executado, pelo menos uma vez, o resultado da expressão inicialmente seja verdadeiro.
Ao terminar a repetição a primeira instrução após a instrução while é executada.
Estruturas de Controle
Repetição – while – Exemplo
int a;a = 0;
//A instrução abaixo fosse executada não permitiria a repetição //a = 10
//a = 10
while (a < 10) {
cout << "A ainda é menor que 10!" << endl;
//Sem a instrução abaixo a repetição nunca terminaria a++;
}
//Primeira instrução a ser executada após o while t << "A é i l 10!" << dl
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. cout << "Agora, a é igual a 10!" << endl;
147
Estruturas de Controle
Repetição – do/while
Esta estrutura é semelhante ao while, porém sempre o bloco de instruções (S) será executado pelo menos uma vez.
Em seguida a expressão condicional (E) é avaliada e o bloco de instruções será executado ENQUANTO seu valor for verdadeiro instruções será executado ENQUANTO seu valor for verdadeiro.
do { S;
} while (E);
Caso a expressão seja verdadeira a primeira instrução do bloco será executada novamente
Da mesma forma que o while, o bloco S deve alterar, em algum t lt d d li ã d ã E fi d
momento, o resultado da avaliação da expressão E a fim de que a mesma retorne o valor FALSE
Estruturas de Controle
Repetição – for
Neste caso a repetição é controlada por um contador da
seguinte forma:
for (C; E; I) S;
O bloco de instruções S, será executado enquanto a
expressão condicional E, for verdadeira
O contador é inicializado pela expressão C e a expressão I é
responsável por alterar o valor do contador
Em algum momento o retorno da expressão E deve ser falso
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
Em algum momento o retorno da expressão E deve ser falso
e normalmente a expressão utiliza o valor do contador I em
uma operação relacional
149
Estruturas de Controle
Repetição – for – exemplo
int i;for (i = 0; i < 10; i++){
cout << "O contador I ainda é menor que 10!" << endl; }
}
//proxima instrução após o for
No exemplo acima, o contador é um número inteiro i. A instrução será executada enquanto a expressão for verdadeira (i < 10) e i será incrementado de 1 em 1.
Dentro do bloco de instruções pode ser utilizada instrução break que finalizará a repetição desviando o controle para a próxima instrução após a instrução for independente do resultado da expressão E
A instrução continue desvia o controle para o início da instrução for, não
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
executando o restante das instruções do laço, porém realiza o incremento e o teste
A diferença entre continue e break, é que a instrução continue não finaliza a repetição.
breake continue podem ser utilizados também com while e do/while
Arrays (Vetores)
Declaração
O array é uma importante estrutura de dados e que normalmente existe de forma nativa na maioria da linguagens
Consiste em um grupo de “OBJETOS” do mesmo tipo, onde a cada objeto é associado um “ÍNDICE” único.
associado um ÍNDICE único.
Em um array é possível o acesso direto a um objeto utilizando este índice
Estes objetos estão armazenados em uma posição contígua da memória. O número de objetos contidos é definido como sendo o TAMANHO do vetor.
A seguir são mostrados exemplos de sintaxe para a criação de um array em C++
//O código abaixo declara um array de 50 posições int iNotas[50];
//Na declaração abaixo o tamanho é calculado pelo compilador
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. int iPrimos[] = {1, 3, 5, 7, 11};
//Cria um array de objetos da classe Circle Circle aCircle[10];
151
Arrays (Vetores)
Acesso
O acesso da cada elemento pode ser feito da seguinte forma: aNotas[0] = 15 //Primeiro elemento
...
aNotas[49] = 34 //Último elemento
Os vetores são estruturas “estáticas”, sendo que uma vez criados não podem ter o seu tamanho alterado. Porém sua criação é feita de forma dinâmica, durante a execução do código.
Para um array de comprimento n, seus índices variam de 0 a n-1.
Um índice equivale a um deslocamento a partir do início do vetor.
Em c+ + é possível deslocar após o final do vetor Isto deve ser sempre Em c+ + é possível deslocar após o final do vetor. Isto deve ser sempre
Arrays (Vetores)
Acesso com Expressões
É possível manipular em expressões tanto o índice do vetor, quanto cada elemento.
Também é possível utilizar variáveis inteiras para variar o índice
Exemplos
//Soma de elementos
int iSoma = aNotas[0] + aNotas[3] + aNotas[3+1]; int iPrimeiro, iSegundo, iTerceiro, iResultado ; iPrimeiro = 0;
iSegundo = 1; iTerceiro = 2;
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
//adiciona 7 a quarto elemento do vetor (0+1+2=3) aNotas[iPrimeiro + iSegundo + iTerceiro ] += 7; iResultado = aNotas[iPrimeiro]/2 + aNotas[3/3]*3
153
Arrays (Vetores)
Comprimento do Vetor
O comprimento de um vetor pode ser obtido utilizando-se o
operador sizeof.
O operador sizeof retorna o tamanho em bytes do operando
O operador sizeof retorna o tamanho em bytes do operando
int iSizeOfInt = sizeof(int);
int iSizeOfCircle = sizeof(Circle);
Para calcular o número de elementos do vetor, basta calcular
o tamanho em bytes do vetor e dividir pelo tamanho de um
elemento deste vetor da seguinte forma:
int iArraySize(0);
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc.
y ( );
iArraySize =(sizeof aNotas)/(sizeof aNotas[0]); iArraySize =(sizeof aCircle)/(sizeof aCircle[0]);
Arrays (Vetores)
Percorrendo os elementos
Para percorrer os elementos de um vetor deve ser utilizada alguma estrutura de repetição
A estrutura mais comum para esta atividade é o for, pois é limitado por um contador que deve ser no máximo igual ao tamanho do vetor
um contador que deve ser no máximo igual ao tamanho do vetor
A linguagem C++ permite o acesso fora dos limites do vetor e isto deve sempre ser evitado
Exemplo
int iArraySize(0);
iArraySize =(sizeof aNotas)/(sizeof aNotas[0]); for (int ii = 0; ii < iArraySize ; ii++){
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. if (aNotas[ii] >= 60)
cout << “Aprovado" << endl; else
cout << “Reprovado" << endl; }
155
Arrays (Vetores)
Multidimensionais
O vetores podem possui mais de uma dimensão
Neste caso cada elemento do vetor possui mais de um
índice associado ao mesmo.
índice associado ao mesmo.
Matriz
Uma matriz, por exemplo, é um vetor de duas dimensões
Neste caso pode ser dito que a informação está organizada em linhas e colunas.
Exemplo:
int aMatriz[2][3];
Vetor com três dimensões
Arrays (Vetores)
Multidimensionais - Elementos
A fim de percorrer todos todos os elementos de um vetor
multidimensional é necessário criar variáveis inteiras tantos quantos forem os índices associados ao vetor
Percorrendo os elementos de um vetor bidimensional(matriz)
Percorrendo os elementos de um vetor bidimensional(matriz)
for (int i = 0; i < iRowSize; i++){
cout << "Percorrendo linha " << i << "da matriz" << endl; for (int j = 0; j < iColSize; j++){
if (j == 0)
cout << "Percorrendo coluna " << j << endl;
cout<<"M[“<< i << "," << j <<"]"<< aMatriz[i,j] << endl; }
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. }
157
Arrays (Vetores)
Strings
Em c++, assim como em C, as sequências de caracteres (Strings) são tratadas como um vetor de caracteres, ou seja de elementos do tipo char
Inicializando um vetor de caracteres
h N [] "Fl i " C [4] "C " char sNome[]="Flavio", sCurso[4]= "C+ + "; char sLinhaDeTexto[256];
O tamanho do vetor equivale o número de bytes do mesmo, visto que cada elemento do tipo char, possui um byte.
Um vetor de caracteres sempre é finalizado pelo caracter NULL ('\0')
Ao percorrer um vetor de caracteres deve-se encerrar esta operação ao encontrar um caracter NULL POSIÇÃO
VALOR
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. Esta condição é normalmente utilizada nas
estruturas de repetição (while)
158 VETOR VALOR [0] 'C' [1] '+' [2] '+' [3] '\0' [4] '?'
Arrays (Vetores)
Strings – Percorrendo os elementos
Normalmente é utilizando uma estrutura de repetição while
A sequencia é percorrida enquanto um caracter NULL não é encontrado
Exemplo
...
char sNome[]="Flavio" int ii(0);
while (sNome[ii] != '\0'){ cout << sNome[ii] << endl; ii = ii++;
}
Estrutura de Dados
Prof. Flávio de Oliveira Silva, M.Sc. ...