Programação científica C++
NIELSEN CASTELO DAMASCENO
Slide 6
Exercício 1
Dados dois vetores com n (n <= 50) componentes cada
um, calcular e imprimir a soma deles.
Exercício 2
Leia um conjunto com n (n <= 20) números e informe se
existe algum elemento repetido no conjunto.
Exercício 3
Leia n (n <= 30) números quaisquer e imprima-os sem
repetições.
Exemplo:
Entrada: 1,1,3,4,3,5,-8
Saída: 1,3,4,5,-8
Exercício 4
Dadas duas seqüências com n (n <= 100) números inteiros entre 0 e 9,
interpretadas como dois números inteiros de n algarismos, calcular a seqüência de
números que representa a soma dos dois inteiros.
Exemplo:
n=8
1ª seqüência
2ª seqüência
8 2 4 3 4 2 5 1
+
3 3 7 5 2 3 3 7
= 1 1 6 1 8 6 5 8 8
Exercício 5
Faça um programa para imprimir as n (n <= 100) primeiras linhas do triângulo de
Pascal usando apenas um vetor, com o valor de n fornecido pelo usuário.
Triângulo de Pascal para n = 6:
1
1
1
1
2
1
1
3
3
1
1
4
6
4
1
1
5
10
10
5
1
Matrizes
• Em C++, as matrizes podem ser:
• Unidimensionais (vetores)
• Multidimensionais (duas ou mais dimensões)
• As matrizes são armazenadas de forma linear
int m[4][3];
Declaração de uma matriz
de duas dimensões
com 4 linhas e 3 colunas
Memória
Modelo abstrato
int
dados[3][3];
Armazenamento de uma matriz
Os índices em C++ SEMPRE começam
em 0, cuidado!!!
linhas
colunas
Endereço
Valor
100
...
104
5
108
10
112
15
116
20
120
25
124
30
128
35
132
40
136
45
140
50
5
10
15
20
25
30
35
40
45
144
55
50
55
60
148
60
152
...
m[0][0]
m[0][1]
m[0][2]
m[1][0]
m[1][1]
m[1][2]
m[2][0]
m[2][1]
m[2][2]
m[3][0]
m[3][1]
m[3][2]
Matrizes bidimensionais
• Matrizes de duas dimensões são vetores em que os
elementos são outros vetores.
• Os elementos de uma matriz bidimensional são acessados
com indexação dupla: o primeiro índice acessa a linha e o
segundo acessa a coluna.
m[0][0]
Acessa o elemento da primeira
linha e primeira coluna
m[1][2]
Acessa o elemento da segunda
linha e terceira coluna
Matrizes e estruturas de repetição
Vetores têm somente uma dimensão.
Vetores utilizavam uma estrutura de repetição para percorrê-los.
Matrizes bidimensionais têm duas dimensões (linha e coluna)... logo?
Matrizes e estruturas de repetição
Vetores têm somente uma dimensão.
Vetores utilizavam uma estrutura de repetição para percorrê-los.
Matrizes bidimensionais têm duas dimensões (linha e coluna)... logo?
Matrizes bidimensionais precisam de duas estruturas de repetição, uma
para a linha e outra para a coluna.
Matrizes e estruturas de repetição
Vetor
int i,dados[3];
for(i=0;i<3,i++){
cin >> dados[i];
}
Matrizes
int i,j,dados[3][5];
for(i=0; i<3 ;i++){
for(j=0; j<5 ; j++){
cin>>[i][j];
}
}
• O for mais externo
(onde
está
a
variável
i)
é
responsável pelas
linhas.
• O for mais interno
(onde
está
a
variável
j)
é
responsável pelas
colunas.
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
}
i=0
j=0
dados[0][0]
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
}
i=0
j=0
dados[0][0]
5
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
}
i=0
j=1
dados[0][1]
5
8
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
}
i=0
j=2
dados[0][2]
5
8
11
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
5
}
34
i=1
j=0
dados[1][0]
8
11
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
5
8
34
12
}
i=1
j=1
dados[1][1]
11
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
5
8
11
34
12
2
}
i=1
j=2
dados[1][2]
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
5
8
11
34
12
2
}
i=2
j=0
dados[2][0]
26
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
5
8
11
34
12
2
26
77
}
i=2
j=1
dados[2][1]
int i,j,dados[3][3];
for(i=0; i<3; i++){
for(j=0; j<3 ; j++){
cin>>dados[i][j];
}
5
8
11
34
12
2
26
77
54
}
i=2
j=2
dados[2][2]
int main(){
int m[3][4], i, j;
for(i=0; i<3; i++)
for(j=0; j<4; j++)
m[i][j] = (i*4)+j+1;
for(i=0; i<3; i++) {
for(j=0; j<4; j++)
cout << m[i][j] << “ ”;
cout << endl;
}
return 0;
}
O que imprime
o programa ao
lado?
int main(){
int m[3][4], i, j;
for(i=0; i<3; i++)
for(j=0; j<4; j++)
m[i][j] = (i*4)+j+1;
for(i=0; i<3; i++) {
for(j=0; j<4; j++)
cout << m[i][j] << “ ”;
cout << endl;
}
return 0;
}
O que imprime
o programa ao
lado?
Inicialização de matrizes
• As três formas a seguir podem ser usadas:
int m[4][3] = {{1,2,3},
{4,5,6},
{7,8,9},
{10,11,12}};
int m[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
int m[ ][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
O número de colunas deve ser
sempre fornecido.
Espaço ocupado por uma matriz
bidimensional
número de bytes =
tamanho da 1ª dimensão * tamanho da 2ª dimensão * sizeof(tipo)
int m[4][3];
A matriz m ocupa 48 bytes
na memória.
Matrizes multidimensionais
• O número máximo de dimensões depende do compilador.
• A forma geral da declaração é:
tipo nome[tamanho1][tamanho2]...[tamanhoN];
int m[4][3][6][5];
A matriz m ocupa 1440
bytes.
Usando matrizes de 3 dimensões
int tres[3][2][4] =
{
{ {1,2,3,4}, {5,6,7,8} },
{ {7,9,3,2}, {4,6,8,3} },
{ {7,2,6,3}, {0,1,9,4} }
};
Como acessar o único valor zero
armazenado na matriz acima?
Usando matrizes de 3 dimensões
int tres[3][2][4] =
{
{ {1,2,3,4}, {5,6,7,8} },
{ {7,9,3,2}, {4,6,8,3} },
{ {7,2,6,3}, {0,1,9,4} }
};
terceiro grupo (elemento)
tres[2][1][0]
primeiro dos 4 números
segundo elemento do terceiro grupo
Exercício
Mostre em uma matriz 3x3 os 9 primeiros números pares.
int i,j,matrix[3][3],cont=0;
for(i=0; i<3 ; i++){
for(j=0; j<3 ; j++){
matrix[i][j] = cont;
cont += 2;
}
}
for(i=0; i<3 ; i++){
for(j=0; j<3 ; j++){
cout << matrix[i][j]<<“ ”;
}
cout<<endl;
}
Exercício
Dado um número n (n<=30), o programa deverá criar uma matriz identidade
para a dimensão n.
int i,j,matrix[30][30],n;
Cout << “Digite o valor de n”;
Cin >> n;
for(i=0; i<n ; i++){
for(j=0; j<n ; j++){
if(i==j){matrix[i][j]=1;}
else {matrix[i][j]=0;}
}
}
for(i=0; i<n ; i++){
for(j=0; j<n ; j++){
cout << matrix[i][j]<<“ ”;
}
cout<<endl;
}
Para casa:
Em uma excursão de uma agência de viagem
existem quatro ônibus (1, 2 , 3 e 4) e cada
ônibus tem 16 cadeiras para passageiros. Faça
um programa que realize as reservas dos
passageiros baseados no número do ônibus e
no número da cadeira(Considere apenas que
números válidos serão inseridos). Caso o Local
esteja vazio, deve ser reservado, caso esteja
ocupado, exibir uma mensagem de “Cadeira
Ocupada”. A cada inserção (bem sucedida ou
não), o programa perguntará se usuário quer
realizar uma nova reserva ou se deseja finalizar
o programa.
Exercício 1
Dada uma matriz bidimensional de dimensão MxN, calcular
e imprimir a matriz transposta. O usuário deve fornecer
os tamanhos da matriz e, em seguida, os elementos da
matriz.
Observação:
M, N <= 30
M e N devem ser lidos.
Exercício 2
Determinar se uma matriz NxN é uma matriz de
permutação. Uma matriz quadrada é chamada de
matriz de permutação se seus elementos são apenas
0’s e 1’s e se em cada linha e coluna da matriz existe
apenas um único valor 1.
Exemplo: A matriz ao lado é uma matriz de 1 0 0 0
permutação.
0 0 0 1
Observação:
0 0 1 0
N <= 30
0 1 0 0
N deve ser lido.
Exercício 3
Dadas duas matrizes A (M x N) e B (K x L) reais, encontrar e
escrever uma matriz C (M x L) onde C é obtida pelo
produto de A por B (C = A x B).
Observação:
M <= 30, N <= 40, K <= 40, L <= 50
M, N, K, L devem ser lidos.
EX:
Exercício 4
Dizemos que uma matriz quadrada inteira é um
quadrado mágico se a soma dos elementos de cada
linha, a soma dos elementos de cada coluna e a
soma dos elementos das diagonais principal e
secundária são todas iguais. Dada uma matriz
quadrada Anxn , verificar se A é um quadrado mágico
é um quadrado mágico
Exercício 5
(POLI 94) Os elementos aij de uma matriz inteira Anxn
representam os custos de transporte da cidade i para
a cidade j. Dados uma matriz de custos Anxn e n (n <=
100) itinerários, cada um com k (k <= 30) cidades,
calcular o custo total para cada itinerário.
Exemplo:
O custo do itinerário
03133210é
a03+a31+a13+a33+a32+a21+a10=
3 + 1 + 400 + 5 + 2 + 1 + 5 = 417
Download

j - Nielsen Castelo Damasceno