Você está na página 1de 53

C++ ARRAYS

PSI – Mód 4
2022/2023
NOVIDADE
#include <locale>

setlocale(LC_ALL,
"pt_PT.utf8");
 Imagina que foste contratado para criar um programa para o Clube de Saúde da
escola, com a finalidade de calcular e armazenar o IMC (índice de massa corporal)
de todos os alunos.
 Que dados a tratar?

 Quantos alunos?

 Como armazenar os dados?


 Quantas variáveis a usar?
 Estruturas de Dados (ED):
 Na ciência da computação, uma ED é um modo particular de armazenamento e de
organização de dados num computador de modo que possam ser usados
eficientemente, facilitando a sua pesquisa e modificação.

 Permitem estudar, manipular, organizar, guardar e extrair informações de um


conjunto de dados.
 Também ajudam a automatizar o processo para que não seja preciso declarar,
inicializar e fazer outras operações nas variáveis de um modo manual
Vetores (Arrays)
 Em muitas aplicações queremos trabalhar com conjuntos de dados que são
semelhantes em tipo.
 Exemplos:
 o conjunto das alturas dos alunos de uma turma, ou um conjunto dos seus nomes.
 ou ainda, o conjunto de temperaturas registadas por um sensor.
 Nestes casos, seria conveniente poder colocar estas informações sob um mesmo
conjunto, e, poder referenciar cada dado individual do conjunto por um
número índice.
 Em programação, este tipo de estrutura de dados é designada vetor (ou array, em
inglês) ou, de maneira mais formal por estruturas de dados estáticas.
 Um vetor (array) contém um
conjunto de dados, todos do
mesmo tipo.
 Os arrays, ou vetores unidimensionais, são um conjunto de elementos do mesmo
tipo, agrupados com o mesmo nome, e diferenciados através de um índice entre
parênteses retos.
 Os dados podem estar organizado sob forma de tabelas.
 Neste caso, cada dado é referenciado por dois índices e dizemos que é um vetor
bidimensional (ou matriz).
 A linguagem de programação C++ fornece uma estrutura de dados, que armazena
uma coleção sequencial de elementos do mesmo tipo, ou seja, de tamanho fixo.
 Um array é utilizado para armazenar uma coleção de dados, mas é muitas vezes
mais útil pensar num array como uma coleção de variáveis do mesmo tipo.
 Em vez de declarar variáveis individuais, tais como número 0, número 1, ..., e
número 99, declara-se uma variável de matriz como números e usa números[0],
números[1], e ..., números[99] para representar variáveis individuais.
 Para aceder a um elemento específico de um array usa-se um índice.
 Todas as matrizes são
locais de memória
contíguos.
 O endereço mais baixo
corresponde ao primeiro
elemento e o endereço
mais alto ao último
elemento.
Arrays em C++
 Para declarar uma matriz em C++, especifica-se o tipo de elementos e o número de
elementos requeridos pela matriz da seguinte forma:

 tipo nome_do_vetor [número_de_elementos];


 O tipo corresponde ao tipo de dados de cada um dos elementos do vetor.
 O nome_do_vetor indica o nome da variável pelo qual este vetor vai ser conhecido.
 O número_de_elementos é um valor constante que indica quantos elementos tem o
vetor.

 tipo arrayNome [ arrayTamanho ];


 tipo arrayNome [ arrayTamanho ]; é uma matriz unidimensional.
 O arrayTamanho deve ser uma constante inteira maior que zero e o tipo pode ser
qualquer tipo de dado C++ válido.
 Por exemplo, vamos declarar um array de 10 elementos chamado balance do tipo
double,

 double balance[10];
 Os vetores em C++ são indexados a partir da posição 0, até à posição n-1,
sendo n o número de elementos.
 Pode-se inicializar os elementos da matriz C++, um a um ou usando uma única
declaração em que se declara e inicializa ao mesmo tempo

 double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; /*declara e inicializa */

 Se tentar inicializar um vetor com mais elementos do que ele admite, irá ser produzido
um erro de compilação
 No caso de não se inicializarem todos os elementos de um vetor, as posições não
inicializadas contêm 0
 Os vetores podem ser inicializados na instrução de definição.

 No caso de não se indicar o número de elementos do vetor, o compilador determina o tamanho


a partir da lista de elementos da inicialização.
 Cada elemento do vetor é referenciado pelo nome do vetor seguido de um índice inteiro entre
parêntesis retos (exemplo: valor[2]).
 O primeiro elemento do vetor tem índice 0 e o último tem índice n-1, em que n é o tamanho (ou
dimensão) do vetor.
 O índice de um vetor deve ser sempre um valor inteiro.
 Crie um programa em C++ que:
 Declare uma matriz de 6 elementos;
 Inicialize a matriz com 6 marcas de carros diferentes a seu gosto;
 Mostre no ecrã a posição 2
 #include <iostream>
 #include <string>
 using namespace std;

 int main() {
 string carros[6] = {"Volvo", "BMW", "Ford", "Mazda", "Mercedes", “Jaguar"};
 cout << carros[2];
 return 0;
}
 carroalteracao.cpp

 A partir do programa anterior:


 Altere um valor específico da matriz anterior
 (pode ser alterado o elemento da posição 3 para Land Rover
 #include <iostream>
 #include <string>
 using namespace std;

 int main() {
 string carros[6] = {"Volvo", "BMW", "Ford", "Mazda", "Mercedes", “Jaguar"};
 carros[3]=“Land Rover”;
 cout << carros[3];
 return 0;
}
 Para percorrer os elementos da matriz usa-se um ciclo: for
 Exercício:
 carrosloop.cpp

 A partir do programa anterior, criar um programa que mostre todas as marcas de


carros no ecrã
 #include <iostream>
 #include <string>
 using namespace std;
 int main()
 {
 string carros[6] = {"Volvo", "BMW", "Ford", "Mazda", "Mercedes", “Jaguar"};
 for (int i = 0; i < 6; i++) {
 cout << carros[i] << "\n";
 }
 return 0;
 }
 Vamos agora acrescentar um índice ao exercício anterior
 #include <iostream>
 #include <string>
 using namespace std;

 int main() {
 string cars[5] = {"Volvo", "BMW", "Ford", "Mazda", "Tesla"};
 for (int i = 0; i < 5; i++) {
 cout << i << " = " << cars[i] << "\n";
 }
 return 0;
 }
 #include <iostream>
 using namespace std;

 int main() {
 int numeros[5] = {10, 20, 30, 40, 50};
 for (int i = 0; i < 5; i++) {
 cout << numeros[i] << "\n";
 }
 return 0;
}
 Utilização de vetores para cálculo da temperatura média diária acumulada (durante 24 horas
do dia) recolhida por um sensor numa instalação de Smart House.
 double temperaturas [24] = {16.0, 17.0, 18.0, 19.0, 19.5, 20.0, 20.5, 20.5,
 20.5, 21.0, 21.5, 21.5, 22.0, 22.0, 23.0, 24.0,
 24.0, 25.0, 26.0, 27.0, 27.5, 28.0, 26.5, 22.0};
 #include <iostream>
 using namespace std;

int main() {
 int soma =0;
 int temp[24] = {10,10,12,12,16,20,28,24,12,12,12,12,
10,10,12,12,16,20,28,24,12,12,12,12};

 for (int i = 0; i < 24; i++) {


 soma = soma + temp[i];
 cout << soma/24 << "\n";
 }
 return 0;
}
 O" loop for-each " é usado exclusivamente para percorrer elementos em
um matriz

 Sintaxe
 for (tipo variavel: nomematriz) {
// Código a ser executado
}
 #include <iostream>
 using namespace std;

 int main() {
 int numeros[5] = {10, 20, 30, 40, 50};
 for (int i : numeros) {
 cout << i << "\n";
 }
 return 0;
}
 Na linguagem de programação C++, não é preciso especificar o
tamanho do array.
 O compilador é inteligente o suficiente para determinar o tamanho
da matriz com base no número de valores inseridos:

 String carros[] = {"Volvo", "BMW", "Ford"}; // três elementos


 ou
 string carros[3] = {"Volvo", "BMW", "Ford"}; // também trÊs elementos

"boa prática"
 #include <iostream>
 #include <string>

Também é possível declarar um matriz sem especificar  using namespace std;


os elementos na declaração e mais tarde
 int main() {
 string carros[5];
 carros[0] = "Volvo";
 carros[1] = "BMW";
 carros[2] = "Ford";
 carros[3] = "Mazda";
 carros[4] = "Tesla";
 for(int i = 0; i < 5; i++) {
 cout << carros[i] << "\n";
 }
 return 0;
 }
Para saber o tamanho de uma matriz, você pode usar o operador sizeof()
sizeof.cpp

#include <iostream> Devolve:


using namespace std;
20

int main() { Porquê?


int numeros[5] = {10, 20, 30, 40, 50};
cout << sizeof(numeros);
return 0;
}
Por que é que o resultado foi 20 e não 5?
Afinal a matriz apenas contém 5 elementos, certo?

O operador sizeof() retorna o tamanho de um tipo mas em bytes.

Vejamos
Tipos de dados

Tipos de Dados Tamanho Descrição


Booleana 1byte Armazena valores verdadeiros ou falsos
Char 1byte Armazena um único caractere/letra/número ou valores
ASCII
Int 2 ou 4 bytes Armazena números inteiros, sem decimais
Float 4bytes Armazena números inteiros, sem decimais
Double 8bytes Armazena números fracionários, contendo um ou mais
decimais. Suficiente para armazenar 15 dígitos decimais
 Na declaração de um vetor estamos a reservar espaço de memória para os
elementos de um vetor.

Sintaxe:
Quantidade_de_memória = tamanho_do_tipo * tamanho_do_vetor

Como o tipo int geralmente tem 4 bytes teremos, no exemplo acima:

4 x 5 (4 bytes x 5 elementos) = 20 bytes


 comprimentomatriz.cpp
 comprimentomatriz.cpp

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

 int main() {
 int main() {
 int numeros[7] = {10, 20, 30, 40, 50, 60, 70};
 int numeros[7] = {10, 20, 30, 40, 50, 60, 70};
 int comprimentomatriz = sizeof(numeros) /  cout << sizeof(numeros) / sizeof(int);
sizeof(int);  return 0;
 cout << comprimentomatriz; }
 return 0;
}
Anteriormente, escrevemos o tamanho da matriz usando um loop
( i < 5)

Mas, dessa forma, apenas irá funcionar para matrizes de um tamanho


específico.

Ao usar o sizeof() na abordagem anterior, podemos fazer loops que


funcionam para matrizes de qualquer tamanho, o que é mais sustentável.
 Em vez de escrever

 int numeros[5] = {10, 20, 30, 40, 50};


for (int i = 0; i < 5; i++) {
cout << numeros[i] << "\n";
}

 Experimenta

 int numeros[5] = {10, 20, 30, 40, 50};


for (int i = 0; i < sizeof(numeros) / sizeof(int); i++) {
cout << numeros[i] << "\n";
}
 sizeforeach.cpp
 #include <iostream>
 using namespace std;

 int main() {
 int numeros[5] = {10, 20, 30, 40, 50};
 for (int i : numeros ){
 cout << i << "\n";
 }
 cout << “Este e o tamanho da matriz: “ << sizeof(numeros)/sizeof(int) << “\n\n”;
 return 0;
}
 Uma matriz multidimensional é uma matriz de matrizes.
 Para declarar um array multidimensional, define-se o tipo de variável, especifica-
se o nome do array seguido de parêntesis retos que especificam quantos
elementos o array principal possui, seguido por outro conjunto de parêntesis retos
que indica quantos elementos os sub-arrays possuem:

 tipo nome_da_matriz [num_linhas][num_colunas];


 string palavras[2][4]; /*declarar matriz multidimensional de 2 linhas por 4
colunas*/
 Assim como nos arrays comuns, podemos inserir valores com um array literal - uma
lista separada por vírgulas dentro de chavetas. Numa matriz multidimensional, cada
elemento num literal de matriz é outro literal de matriz.

 char letters[2][4] = {
{ ’A’, ’B’ , ‘C’, ‘D’},
{ ’E’, ’F’, ’G’, ’H’ } letters Coluna 0 Coluna 1 Coluna 2 Coluna 3
}; Linha 0 A B C D
Linha 1 E F G H

 string letters[2][4] = {
{ "A", "B“, “C”, “D”},
{ "E", "F", "G", "H" }
};

 Se cout << letters[0][2];


 Devolve C
 Criar programa c++ recorrendo a matriz bidimensional de [3] [4]

 com nomes de carros

 O output deverá ser a devolução de todos os nomes dos carros

 bidimensional.cpp

 #include<iostream>

 using namespace std;


int main(){

string carros [3][4] = {
 {"BMW", "Audi", "Honda","Suzuki"},

 { "Mercedes", "DS", "Toyota", "Tesla"},

 { "Land Rover", "Opel", "Mazda", "Citroen"}

 };


for (int i=0; i<3; i++) {
carros Coluna 0 Coluna 1 Coluna 2 Coluna 3
 for (int j=0; j<4; j++) { Linha 0 BMW Audi Honda Suzuki
 cout << carros[i][j] << "\n"; Linha 1 Mercedes DS Toyota Tesla
 }}
Linha 2 Land Rover Opel Mazd Citroen
 return 0;

}
 Para aceder a um elemento de uma #include <iostream>
matriz multidimensional, using namespace std;
especifique um número de índice
em cada uma das dimensões da int main() {
matriz. string letras[2][4] = {
{ "A", "B", "C", "D" },
 Esta instrução acede a um valor do { "E", "F", "G", "H" }
elemento na primeira linha (0) e };
na terceira coluna (2) do array
de letras. cout << letras[0][2];
return 0;
}
 Lembra-te de que:
 Índices de array começam com 0:
 [0] é o primeiro elemento
 [1] é o segundo elemento, etc.
 Cada conjunto de parêntesis retos numa declaração de array adiciona
outra dimensão a um array. Diz-se que um array como o acima tem duas
dimensões.
 Arrays podem ter qualquer número de dimensões. Quanto mais dimensões um
array tiver, mais complexo o código se torna.
 A matriz a seguir tem três dimensões:
 string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
#include <iostream>
using namespace std;
 Para percorrer um array
multidimensional, você precisa de int main() {
um loop para cada uma das
dimensões do array. char LETRAS[2][4] = {
 O exemplo a seguir gera todos os
{ ‘A’, ‘B’ , ‘G’, ‘H’},
elementos na matriz de letras: { ‘c’, ‘d’, ‘e’, ‘f’ }
};
 bidimensional.cpp
 Alterar a letra B para L for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
cout << LETRAS[i][j] << "\n";
}
 bidimensionalalteracao.cpp int main() {
char LETRAS[2][4] = {
 Para alterar o valor de um { ‘A’, ‘B’ , ‘G’, ‘H’},
elemento, consulte o número { ‘c’, ‘d’, ‘e’, ‘f’ }
de índice do elemento em };
cada uma das dimensões: LETRAS[0][0] = ‘L’;
LETRAS[1][0] =‘i’;

 Alterar a letra A para L for (int e = 0; e < 2; e++) {


 Alterar a letra c para i for (int j = 0; j < 4; j++) {
cout << LETRAS[e][j] << "\n";
}
}
[2] [2]
Olá AC
Bom dia CCNA
SO
[2] RC
10 ano
TGPSI - PSI
tridimensional.cpp
for (int i=0; i<2; i++) {
#include<iostream> for (int j=0; j<2; j++) {
using namespace std; for (int k=0; k<2; k++) {
cout << palavras[i][j][k] << "\n";
int main(){ }}};
return 0;
string palavras [2][2][2] = {
{ }
{"Ola", "Bom dia"},
{"10ano", "TGPSI - PSI"}
},
{
{ "AC", "CCNA1"},
{ "SO", "RC"}
}
};

Você também pode gostar