Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
*
*
*
Arrays (continuação)
Aula nº 17
Arrays multidimensionais
Arrays (continuação)
*
*
* - 32
Arrays Multidimensionais
Arrays com vários subscritos
Representação de tabelas – linhas e colunas
Um elemento tem dois subscritos
a [ i ] [ j ]
linha
coluna
por convenção !!
*
*
* - 32
Exemplo de array bidimensional
*
*
* - 32
Exemplo de array bidimensional
a[1][2] = 9
9
*
*
* - 32
Inicialização
int b [ 3 ] [ 2 ] = { { 1, 2 }, { 3, 4 }, {5, 6} };
*
*
* - 32
Inicialização
int b [ 2 ] [ 2 ] = { { 1 }, { 3, 4 } };
*
*
* - 32
Inicialização
int b [ 2 ] [ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
*
*
* - 32
Inicialização
int b [ 2 ] [ 3 ] = { 1, 2, 3, 4, 5 };
*
*
* - 32
Inicialização
int b [ 2 ] [ 3 ] = { { 1, 2 }, { 4 } };
*
*
* - 32
Exemplo
Escreva um programa que armazene em um array bidimensional as notas alcançadas pelos 40 alunos de AP I, em 2011_1, nas três unidades. Considere que cada linha do array corresponde a um aluno e cada coluna a uma unidade.
*
*
* - 32
Exemplo
Neste programa, escreva as seguintes funções:
printArray: imprime todas as notas do array em forma de tabela;
minimo: imprime a menor nota de todas as existentes no array;
maximo: imprime a maior nota de todas as existentes no array;
media: imprime a média de todas as notas existentes no array.
*
*
* - 32
Tabela com as notas
*
*
* - 32
Função main()
Declarar constantes globais para as dimensões do array;
Declarar array de notas em main;
Armazenar as notas no array;
Chamar a função printArray;
Chamar a função minimo;
Chamar a função maximo;
Chamar a função media.
*
*
* - 32
#include <iostream.h>
#include <iomanip>
using namespace std;
// declarando constantes globais para //dimensoes do array:
const int numAlunos = 40, numUnidades = 3;
// arrays bidimensionais como argumentos:
void printArray (int[ ] [numUnidades]);
void minimo (int[ ] [numUnidades]);
void maximo (int[ ] [numUnidades]);
void media (int[ ] [numUnidades]);
int main( ) {
*
*
* - 32
int main( ) {
// declaração do array:
int notas[numAlunos][numUnidades];
// armazenamento das notas:
cout << "\nDigite as notas dos alunos nas três Unidades:";
for (int a=0; a<numAlunos; a++) {
cout << "\naluno " << a+1 << ":\n";
for (int u=0; u<numUnidades; u++)
cin >> notas[a][u];
}
aluno 1:
for (int a=0; a<numAlunos; a++) {
cout << "\naluno " << a+1 << ":\n";
for (int u=0; u<numUnidades; u++)
cin >> notas[a][u];
}
aluno 2:
0
0
1
2
0
1
2
1
notas[0][0]
notas[0][1]
notas[0][2]
notas[1][0]
notas[1][1]
notas[1][2]
Usuário digita:
... até o 40º aluno.
*
*
* - 32
// chamando as funções criadas:
printArray (notas);
minimo (notas);
maximo (notas);
media (notas);
return 0;
}
*
*
* - 32
Função printArray
... ... ... ... ...
*
*
* - 32
void printArray (int n[ ] [numUnidades]) {
cout<< setw(5)<<"Aluno"<<setw(11)<< "Unidade I"<< setw(12)<<"Unidade II"<<setw(13)<<" Unidade III \n";
for (int al=0; al < numAlunos; al++) {
cout << setw(4) << al+1;
for (int un=0; un < numUnidades; un++)
cout << setw(11)<< n[al][un];
cout << endl;
} }
*
*
* - 32
Aluno Unidade I Unidade II Unidade III
1 84 68 98
2 47 53 88
3 87 75 76
4 84 67 73
*
*
* - 32
*
*
* - 32
void minimo (int n[ ] [numUnidades]){
int min = n[0][0];
for (int al=0; al< numAlunos; al++)
for (int un=0; un<numUnidades; un++)
if (n[al][un] < min)
min = n[al][un];
cout<<"\nA menor nota foi: " <<min<<endl;
}
void minimo (int n[ ] [numUnidades]){
int min = n[0][0];
for (int al=0; al< numAlunos; al++)
for (int un=0; un<numUnidades; un++)
if (n[al][un] < min)
min = n[al][un];
cout<<"\nA menor nota foi: " <<min<<endl; }
*
*
* - 32
void maximo (int n[ ] [numUnidades]){
int max= n[0][0];
for (int al=0; al< numAlunos; al++)
for (int un=0; un< numUnidades; un++)
if (n[al][un] > max)
max = n[al][un];
cout << "\nA maior nota foi: "<<max<< endl;
}
*
*
* - 32
void media (int n[ ] [numUnidades]){
int med = 0;
for (int al=0; al < numAlunos; al++)
for (int un=0; un< numUnidades; un++)
med = med + n[al][un];
cout << "\nA media das notas foi: " << float(med) / (numAlunos*numUnidades) << endl;
}
void media (int n[ ] [numUnidades]){
int med = 0;
for (int al=0; al < numAlunos; al++)
for (int un=0; un< numUnidades; un++)
med = med + n[al][un];
cout << "\nA media das notas foi: " <<
float(med) / (numAlunos*numUnidades) << endl;
}
*
*
* - 32
Exercício 2
Altere as funções do exemplo anterior da seguinte forma:
minimo – ao invés de imprimir, deverá retornar:
a menor nota;
os respectivos índices, isto é, o aluno e a unidade correspondente.
*
*
* - 32
Exercício 2
maximo – ao invés de imprimir, deverá retornar:
a maior nota;
os respectivos índices, isto é, o aluno e a unidade correspondente.
media – ao invés de imprimir, deverá retornar a média das notas.
*
*
* - 32
Exercício 2
Nas funções maximo e minimo o “retorno” dos índices deverá ser feito através de argumentos passados por referência.
*
*
* - 32
int minimo (int n[ ][numUnidades],int& a, int& u){
int min=n[0][0];
int a=u=0;
for (int al=0; al<numAlunos; al++)
for (int un=0; un<numUnidades; un++)
if (n[al][un] < min){
min = n[al][un];
a = al;
u = un;
}
return min;
}
*
*
* - 32
int maximo (int n[ ][numUnidades],int& a, int& u){
int max=n[0][0];
int a=u=0;
for (int al=0; al<numAlunos; al++)
for (int un=0; un<numUnidades; un++)
if (n[al][un] > max) {
max = n[al][un];
a = al;
u = un;
}
return max;
}
*
*
* - 32
float media (int n[ ] [numUnidades]){
float med=0.0;
for (int al=0; al<numAlunos; al++)
for (int un=0; un<numUnidades; un++)
med = med + n[al][un];
return med / (numAlunos*numUnidades);
}
*
*
* - 32
main( ) também deve ser alterada:
...
//protótipos das funções alteradas:
int minimo (int [ ][numUnidades],int& , int& );
int maximo (int [ ][numUnidades],int& , int& );
float media (int[ ] [numUnidades]);
int main( ){
// variáveis que serão passadas por referência
int aluno, unidade;
*
*
* - 32
...
//chamando as funções criadas:
printArray(notas); // mantida
cout << "\nA menor nota foi: " << minimo(notas, aluno, unidade) << “ do aluno ” << aluno <<“ na unidade ” << unidade <<endl;
cout << "\nA maior nota foi: " << maximo(notas, aluno, unidade) << “ do aluno ” << aluno <<“ na unidade ” << unidade<< endl;
cout << "\nA media das notas foi: " << media(notas) << endl;
return 0;
}
*
*
* - 32
Tarefa
Fazer os exercícios 7.22 a 7.37 de C++ Como Programar.