Você está na página 1de 45

C++ ARRAYS

PSI – Mód 4
2022/2023
 Considera as seguintes declarações:

int v [10];
int x [20];

 Pretende-se inicializar os vetores v e x com o valor ZERO em todas as posições,


usando uma função para realizar essa inicialização.
int v [10];
int x [20];
 v [10] 0 0 0 0 0 0 0 0 0 0
 x [20] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 Como os vetores têm dimensões diferentes, teremos que eventualmente definir duas
funções distintas (uma para vetores com 10 inteiros, outra para vetores com 20 inteiros).
 O código de cada uma destas funções seria

 void iniciar1 (int v[10]) {  void iniciar2 (int x[20]) {


 for (int i=0; i<10; i++)  for (int i=0; i<20; i++)
 v[i] = 0;  x[i] = 0;
 }  }
 A invocação destas funções na função principal int main() seria

 int main() {

 int v[10];

 int x[20];

 iniciar1(v); /*iniciar o vetor v

 iniciar2(x); /*iniciar o vetor x

 …

 return 0;
 Se é enviado um vetor com 10 inteiros à função iniciar1(), esta terá que ter um
parâmetro do mesmo tipo da variável:

 void iniciar1 (int v[10]) {


…
}
 int main() {
 int v[10];
…
 iniciar1(v);
…
}
 As duas funções de inicialização podem ser substituídas por uma única
que inicialize qualquer vetor de inteiros com o valor 0.
 Isto é possível, porque em C++, não interessa qual a dimensão do vetor
que é passado a uma função, mas sim qual o tipo dos seus elementos.

Em C++ e dentro de uma função, não é


possível saber
com quantos elementos foi declarado um
vetor que
É possível escrever uma função que foi passado como argumento para essa
inicialize qualquer vetor de inteiros. função.
No entanto é necessário indicar à função
qual o numero de elementos que o vetor
contém.
 Assim
 void iniciar (int s[], int n) {
 for (int i=0; i<n; i++)
 s[i] = 0;
}
 int main() {
 int v[10]; int x[20];
 iniciar(v, 10);
 iniciar(x, 20);
…
 return 0;
}
#include <iostream>
using namespace std;

//declarar função com matriz


void iniciar (int s[]) {
for (int i=0; i<10; i++)
s[i] = 0;
}
matrizcomfuncao.cpp

Devolve Devolve
int main() {
9 0 int v[10];
8 1 int i;
7 2 //funcao
6 3 iniciar (v);
5 4 for (i=0; i<10; i++)
4 5 v[i]=i;
3 6
2 7
//for (i=10-1; i>=0; i--)
1 8
0 9
for (i=0; i<10; i++)
cout << v[i]<< "\n";
return 0;
}
Diferenças entre:
const
#define
 A escrita de programas deve ser realizada de forma a que uma pequena alteração não
provoque grandes transformações no código dos mesmos.
 Constantes representam valores fixos inteiros ou carateres.

 Constantes Inteiras
 Algarismos decimais (0 – 9)

 Constantes de Ponto Flutuante


 Constante em precisão simples (float)
 Constante em precisão dupla (double)

 Constantes Alfanuméricas
 Caractere simples representado entre apóstrofes

 Constantes string
 Sequência de carateres entre aspas
 O programa funciona para um vetor de 10 elementos.

 E se fosse extremamente urgente a sua alteração de modo a possa ser utilizado não com 10
mas com 25 inteiros?
void iniciar (int s[]) {
for (int i=0; i<10; i++)
s[i] = 0;
A solução é }
alterar todas as
ocorrências do int main() {
número 10 pelo int v[10], i;
número 25. iniciar (v);

for (i=0; i<10; i++)


Se se tratar de um pequeno programa, o trabalho não v[i]=i;
será muito, mas se tivesse milhares de linhas de for (i=10-1; i>=0; i--)
código?!!!!
 Poderíamos utilizar um bom editor e alterar automaticamente todas as ocorrências de 10 por
25 sem muito trabalho 
 No entanto, alguns efeitos indesejados poderiam vir a acontecer

 O que aconteceria ao seguinte excerto de código?

 if (nota > =10)

 cout << “aluno aprovado”; Muito provavelmente passaria ao seguinte, o que viria a
aumentar, de forma significativa, o número de alunos que
 else
a reprovar
 cout << “aluno reprovado”;
if (nota > =25)
cout << “aluno aprovado”;
else
cout << “aluno reprovado”;
 Constante não é mais que um nome a que corresponde um valor fixo (não se pode alterar ao
longo da execução do programa).
 Devem estar declaradas fora de qualquer função de forma a serem visíveis ao longo de todo o
programa.
 Normalmente a sua declaração é realizada imediatamente a seguir às diretivas de pré-
processamento (#include <…>).
 A declaração de uma constante pode ser realizada de duas formas distintas:

 Através da palavra reservada const

 const tipo símbolo = valor;

 Através da diretiva de pré-processamento #define

 #define símbolo valor


#include <iostream> #include <iostream>
using namespace std; using namespace std;
const int num = 10; #define NUM 10

void iniciar (int s[]) { void iniciar (int s[]) {


for (int i=0; i<num; i++) for (int i=0; i<NUM; i++)
s[i] = 0; s[i] = 0;
} }

int main() { int main() {


int v[num], i; int v[NUM], i;
iniciar (v); iniciar (v);

for (i=0; i<num; i++) for (i=0; i<NUM; i++)


v[i]=i; v[i]=i;
for (i=num-1; i>=0; i--) for (i=NUM-1; i>=0; i--)

cout << v[i]<< "\n"; cout << v[i]<< "\n";


return 0; return 0;
} }
 Uma constante definida com const existe fisicamente numa determinada posição de memória.

 Uma constante definida com #define não existe fisicamente em memória, sendo o seu valor
substituído ao longo do programa na fase de pré-processamento (ainda antes da compilação).
 A palavra #define é uma diretiva que indica ao pré-processador que o símbolo que se lhe
segue, vai ficar com o valor que aparece a seguir ao símbolo. O pré-processador, antes de
compilar o programa, substitui todas as ocorrências do símbolo pelo valor com que este foi
definido.
 O tipo associado a uma constante definida com #define é o tipo que resulta da expressão que
aparece na componente valor.
 Uma vez que #define não faz parte da linguagem C++, esta linha não tem ponto e vírgula.
 #include <iostream>
 using namespace std;
 #define PI 3.1415
 int main() {
 float raio, area;
 cout << “Introduza o raio do círculo: ";
 cin >> raio;
 area = PI * (raio*raio);
 cout<<"Area = "<<area;
 cout<<endl;
 return 0;
 }
 String é uma sequência de carateres diversos.
 As strings na teoria de algoritmos estruturados são conhecidos por “literais”, sendo
representadas entre aspas.
 Alguns exemplos de strings:
 “Fulano da Silva”
 “Como estás? “
 “1,234”
 “0A”
 No C++, como era de se esperar, as strings são objetos,
 Podem ser criados facilmente através da biblioteca padrão referenciada pelo arquivo
de cabeçalho <string>.
 As strings são objetos com recursos que permitem manipular os seus caracteres com
as funcionalidades das funções da linguagem C e mais algumas características
próprias possibilitadas pela orientação a objetos.
 Na maioria das vezes, há a necessidade de atribuir à variável, o valor máximo ou
mínimo que aquele tipo de dado pode conter.
 O C++ possui macros para representar esses números, de modo que estes possam
ser atribuídos diretamente à variável sem realmente digitar o número inteiro.

 INT_MAX - macro que especifica que uma variável inteira não pode armazenar
nenhum valor além desse limite.
 INT_MIN - variável inteira que não pode armazenar nenhum valor abaixo desse
limite.
 Por outras palavras, em C++ pode-se empregar a palavra string para declarar uma string de tamanho
variável.
 No entanto, deve ser incluído o header string.
 A partir da declaração, a utilização de strings é simples.

 #include <iostream>
 #include <string>
 using namespace std;
 int main() {
 string nome1("Fulano"); // Inicializa nome1
 string nome2("Beltrano"); // Inicializa nome2
 string nome3, nome4; // Não inicializa nome3 nem nome4
 cout << "Os dois primeiros nomes são " << nome1 << " e " << nome2 << endl;
 nome3 = "Ciclano"; // Inicialização posterior de nome3
 nome4 = nome3;
 cout << "O terceiro e quarto nomes são " << nome3 << " e " << nome4 << endl;
 return 0;
 }
•length()
•compare()
•swap()
•append()
C++ trata uma string como uma matriz de caracteres terminada
em nulo. (\0)
•find()
Numa implementação padrão, as funções de string requerem a •push_back()
string do arquivo de cabeçalho para fornecer os seus protótipos.
Muitas funções internas foram criadas por programadores C++
•pop_back()
para executar tarefas relacionadas às strings do programa. •resize()
As mais usadas, ou aqueles que são amplamente usadas ​e
conhecidas. •replace()
Lista das funções integradas de cadeia de caracteres C++ mais
fundamentais e conhecidas:
length()
A função length() determina o comprimento da string dada.comprimentostring.cpp

#include<iostream>
using namespace std;
int main()
{
string comprimento = “quebrarcodigo";
cout << “comprimento= “ << comprimento.length();
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
compare() {
string um = " quebrarcodigo ";
A função compare() compara as duas string dois = " quebrarcodigo ";
strings. int x = um.compare(dois);
Se ambas as strings forem iguais, retorna 0 if(x==0)
cout<<“Iguais.";
compararstring.cpp else
cout<<“Nao sao iguais.";
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
swap() int main()
{
string str1 = “quebrar";
string str2 = “codigo";
A função swap() cout<<“Antes da troca:\n";
troca as strings
cout<<“primeirastring = "<<str1<<“segundastring = "<<str2;
trocarstring.cpp str1.swap(str2);
cout<<“Depois da troca:\n";
cout<<" primeirastring = "<<str1<<" segundastring = "<<str2;
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
append() int main()
{
string str1 = “quebrar";
string str2 = “código";
A função append() cout<<“Antes de anexar:\n";
adiciona um novo texto à string
cout<<"str1 = "<<str1;
anexarstring.cpp
str1.append(str2);
cout<<“Depois de anexar:\n";
cout<<"str1 = "<<str1;
cout<<endl;
return 0;
}
#include<iostream>
find() using namespace std;
int main()
{
A função find() localiza
o número de índice da string str = “Eu gosto de dançar";
palavra especificada
(substring) numa string.
string palavra = “gosto";
Retorna o número do cout<<“posição="<<str.find(palavra);
índice do primeiro
caractere da substring.
cout<<endl;
localizarstring.cpp
return 0;
}
#include<iostream>
using namespace std;
PUSH_BACK() int main() {
string str = “quebrarcodigo";
cout<<“Antes do push_back():\n";
A função push_back() adiciona um cout<<"str = "<<str;
novo caractere no final da string.
str.push_back(‘s');
cout<<“Depois push_back(‘s'):\n";
adicionarcaracter.cpp cout<<"str = "<<str;
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
pop_back() int main()
{
string str = “quebrarcodigos";
cout<<“Antes do pop_back():\n";
A função cout<<"str = "<<str;
pop_back() remove str.pop_back();
o último caractere
da string.
cout<<“Depois do pop_back():\n";
cout<<"str = "<<str;
removercaracter.cpp cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
resize() int main()
{
A função resize()
redimensiona o
string str = “quebrarcodigos.com";
comprimento da string. cout<<“Antes de redimensionar cinco:\n";
cout<<"str = "<<str;
str.resize(5);
cout<<" Depois de redimensionar cinco :\n";
cout<<"str = "<<str;
redimensionarstring.cpp
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
replace() {
string x = “Eu estou bem.";
string y = “não me sinto ";
Quando precisamos substituir
uma substring de uma string, cout<<“Antes de substituir():\n";
usamos a função replace(). cout<<"x = "<< x;
x.replace(3, 5, y);
replacestring.cpp cout<<“Depois de substituir():\n";
cout<<"x = "<<x;
cout<<endl;
return 0;
}
- É uma função de biblioteca padrão usada para ler
uma string ou uma linha de um fluxo de entrada
- getline.cpp
 #include <iostream>
 #include <string>
 using namespace std;
 int main() {
 string str;
 cout << “Por favor, escreva o seu nome:\n";
 getline(cin, str);
 cout << “Olá, " << str << " Bem-vindo à aula de PSI!\n";
 return 0;
}
 matrizdez.cpp
 Coloca os números 0, 1, 2, 3, ..., 9 numa natriz de 10 elementos e mostra-os no
formato
 Elemento 0 = 0
 Elemento 1 = 1
…
 ….Elemento 9 = 9
Coloque os números 0, 1, 2, 3, ..., 9 numa natriz de
10 elementos e mostre-os no formato Elemento 0 = 0
….Elemento 9 = 9

#include <iostream> Devolve:


using namespace std; Elemento 0 = 0
int main() …

{
int num[10], cont; Elemento 9 =9
for(cont=0 ; cont<10 ; cont++)
num[cont] = cont;

for(cont=0 ; cont<10 ; cont++)


cout << “Elemento ” <<cont << num[cont] <<endl;
return 0;
}
 A nossa variável auxiliar é 'cont', e ela recebe valores de 0 até 9.
A variável de índice 0 recebe o valor 0.
A variável de índice 1 recebe o valor 1.
...
A variável de índice 9 recebe o valor 9.

Isso é feito com a linha de comando: num[cont] = cont;


Com base no programa anterior, o resultado deverá
ser: Elemento 0 = 1 ….Elemento 9 = 10
matrizonze.cpp
#include <iostream> Devolve:
using namespace std; Elemento 0 = 1

int main() …
{
int num[10], cont; Elemento 9 = 10
for(cont=0 ; cont<10 ; cont++)
num[cont] =

for(cont=0 ; cont<10 ; cont++)


cout << “Elemento ” <<cont << num[cont] <<endl;
return 0;
}
 Agora fizemos com um detalhe de diferença:
A variável de índice 0 recebe o valor 1.
A variável de índice 1 recebe o valor 2.
...
A variável de índice 9 recebe o valor 10.

Isso é feito com a linha de comando: num[cont] = cont+1;

Veja bem, nós programadores, contamos a partir do 0. Mas as pessoas normais


(?????!), contam a partir do 1. Então, temos que exibir 'elemento 1' como o primeiro,
e não elemento 0. Por isso, adicionamos 1 à variável cont,
Cria um programa em C++ que
#include <iostream> peça a nota de 10 alunos e que
using namespace std; as armazene numa matriz.
int main() {
Depois deve mostrá-las e
double notas[10], sum=0; também mostrar a média
//aqui escrevemos as notas e guardamo-las na matriz
for(int contar=0 ; contar<10 ; contar++)
{
matriznotas.cpp
cout<<"Insira a nota "<<contar+1<<": ";
cin >>notas[contar];
sum += notas[contar];
}
//aqui lemos as notas da matriz e escrevemo-las no ecrã
for(int contar=0 ; contar<10 ; contar++)
{
cout << “Nota” << contar+1<<“:”<< notas[contar]<< endl;
}
//aqui calculamos a média e mandamos escrever no ecrã
sum = sum /10;
cout << “Media” << sum <<endl;
return 0;
}
Devolve:

Dobro de 1 = 2
Dobro de 2 = 4
….
Dobro de 100 = 200

 matrizdobro.cpp
 Crie um array de 101 #include <iostream>
elementos. Em cada using namespace std;
elemento do array, int main() {
armazene o valor do const int matriz= 101;
dobro do índice. Ou int num[matriz], cont;
seja, a variável num[x] for(cont=0 ; cont< matriz; cont++)
deve ter armazenado o num[cont] = 2*cont;
valor 2x. Depois, exibe a
lista dos 100 números for(cont=1 ; cont< matriz; cont++)
primeiros números cout<<"Dobro de "<<cont<<": "<<num[cont]<<endl;
pares. return 0;
}
Escreva um programa C++ para encontrar os três maiores elementos numa
matriz.
Se a matriz for menor que três o programa dá erro
Se
[]={5,78,97,3,41,63,44}
OUTPUT
Matriz original é
5,78,97,3,41,63,44
Os três elementos maiores são
78, 97, 63
tresmaiores.cpp
 #include <iostream>
 using namespace std;

 void tresmaiores(int matriz[], int tamanhomatriz) {


 int i, primeiro, segundo, terceiro;

 if (tamanhomatriz < 3)
 {
 cout <<“erro”;
 }
 terceiro = segundo = primeiro = INT_MIN;
 for (i=0; i<tamanho_matriz, i ++)
{
 if (matriz[i] > primeiro)
{
 terceiro = segundo;
 segundo = primeiro;
 primeiro = matriz[i];
}
 else if (matriz[i] > segundo)
{
 terceiro = segundo;
 segundo = matriz[i];
}
#include <iostream>
Achar o maior e o menor elemento de uma matriz using namespace std;
void show(int arr[][2], int row)
{
for (int i=0 ; i<row ; i++)
{
for(int j=0 ; j<2 ; j++)
cout<<arr[i][j]<<" ";
cout<<endl;
}
}
int main() {
int arr[][2]={ {1,2}, {3,4} };
show(arr, 2);
return 0;
}
 Cria um programa em C++ que peça a 6 funcionários de uma empresa para
escreverem os seus salários. De seguida, o programa deve dizer o imposto a pagar
por mês, sabendo que a taxa é de 15%.

#include <iostream>
using namespace std;
int main() {
const int ARRAY_SIZE = 6;
float func[ARRAY_SIZE];
int cont;
for(cont=0 ; cont<ARRAY_SIZE ; cont++)
{
cout<<"Funcionario "<<cont+1<<": ";
cin >> func[cont];
}
cout<<"Imposto a pagar: "<<endl;
for(cont=0 ; cont<ARRAY_SIZE ; cont++)
cout<<"Funcionario "<<cont+1<<": €"<<func[cont]*0.15<<endl;
}

Você também pode gostar