Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Aula 8: Array Professores: Sandro Rigo Túlio Bender Roteiro Array bidimensional Funções Parâmetros Exercícios Array multidimensional Array bidimensional == matriz Duas dimensões: linha e coluna <tipo> <nome> [<linha>] [<coluna>] ; <tipo> <nome> [<linha>] [<coluna>] = { <valores> }; Exemplo: char P[3][4]; Coluna 0 Coluna 1 Coluna 2 Coluna 3 Linha 0 P[0][0] P[0][1] P[0][2] P[0][3] Linha 1 P[1][0] P[1][1] P[1][2] P[1][3] Linha 2 P[2][0] P[2][1] P[2][2] P[2][3] Array multidimensional C++: suporte Array unidimensional == vetor para no mínimo Array tridimensional == ? 12 níveis Exemplo: char P[2][3][4]; Coluna 0 Coluna 1 Coluna 2 Coluna 3 Linha 0 P[1][0][0] P[1] [0][1] P[1] [0][2] P[1] [0][3] Linha 1 P[1][0] Linha 2 P[2][0] Linha 0 P[1][1] Coluna 0 P[2][1] P[0][0][0] Linha 1 P[0] [1][0] P[0] [1][1] P[0] [1][2] P[0] [1][3] Linha 2 P[0] [2][0] P[0] [2][1] P[0] [2][2] P[0] [2][3] Nível 1 Nível 0 P[1][2] P[1][3] Coluna 1 Coluna 2 Coluna 3 P[2][2] P[2][3] P[0] [0][1] P[0] [0][2] P[0] [0][3] Array multidimensional Array bidimensional: Inicialização Identificação dos níveis com chaves <tipo> <nome> [<linha>] [<coluna>] = { {<valores>}, ... , {<valores>} }; Exemplo: char P[3][4] ={ {1, 2, 3, 0}, {4, 5, 6, 0}, {7} }; Coluna 0 Coluna 1 Coluna 2 Coluna 3 Linha 0 1 2 3 0 Linha 1 4 5 6 0 Linha 2 7 0 0 0 Array multidimensional Array bidimensional: Inicialização Identificação dos níveis com chaves <tipo> <nome> [<linha>] [<coluna>] = { {<valores>}, ... , {<valores>} }; Exemplo: char P[3][4] ={ {1, 2, 3, 0}, {4, 5, 6, 0}, {7} }; Coluna 0 Coluna 1 Coluna 2 Coluna 3 Linha 0 1 2 3 0 Linha 1 4 5 6 0 Linha 2 7 0 0 0 Array multidimensional Array bidimensional: Inicialização Identificação dos níveis com chaves <tipo> <nome> [<linha>] [<coluna>] = { {<valores>}, ... , {<valores>} }; <tipo> <nome> [<linha>] [<coluna>] = { <valor>, ... , <valor> }; Exemplos equivalentes: char P[3][4] ={ {1, 2, 3, 0}, {4, 5, 6, 0}, {7} }; char P2[3][4] ={ 1, 2, 3, 0, 4, 5, 6, 0, 7 }; Array multidimensional Array bidimensional: exemplo Problema: armazenar 4 notas, para 3 estudantes #define NRO_ESTUDANTES 3 #define NRO_NOTAS 4 ...... char dados[NRO_ESTUDANTES][NRO_NOTAS] ={ 0 }; int estudante, nota, valor; ....... for (estudante=0; estudante < NRO_ESTUDANTES; estudante++){ cout<<endl<<"Estudante número "<<estudante<<endl; for (nota=0; nota < NRO_NOTAS; nota++){ cout <<"Digite nota ["<<nota<<"] :"; cin>>valor; dados[estudante][nota]=valor; } } Array multidimensional Array bidimensional: exemplo Problema: armazenar 4 notas, para 3 estudantes #define NRO_ESTUDANTES 3 #define NRO_NOTAS 4 ...... char dados[NRO_ESTUDANTES][NRO_NOTAS] ={ 0 }; int estudante, nota, valor; ....... for (estudante=0; estudante < NRO_ESTUDANTES; estudante++){ cout<<endl<<"Estudante número "<<estudante<<endl; for (nota=0; nota < NRO_NOTAS; nota++){ cout <<"Digite nota ["<<nota<<"] :"; cin>>valor; dados[estudante][nota]=valor; } } Array multidimensional Array bidimensional: exemplo Problema: armazenar 4 notas, para 3 estudantes Continuação: calcular as médias de cada estudante cout<<endl<<"Médias:"<<endl; for (estudante=0; estudante < NRO_ESTUDANTES; estudante++){ cout<<endl<<"Estudante número "<<estudante<<endl; valor = 0; for (nota=0; nota < NRO_NOTAS; nota++){ valor = valor + dados[estudante][nota]; } valor = valor / NRO_NOTAS; cout<<"média = "<<valor; } Array multidimensional Array bidimensional: exemplo Problema: armazenar 4 notas, para 3 estudantes Continuação: calcular as médias de cada estudante cout<<endl<<"Médias:"<<endl; for (estudante=0; estudante < NRO_ESTUDANTES; estudante++){ cout<<endl<<"Estudante número "<<estudante<<endl; valor = 0; for (nota=0; nota < NRO_NOTAS; nota++){ valor = valor + dados[estudante][nota]; } valor = valor / NRO_NOTAS; cout<<"média = "<<valor; } Array multidimensional Array bidimensional: exemplo Novo Problema: armazenar 44 notas, para 300 estudantes e calcular as médias #define NRO_ESTUDANTES 300 #define NRO_NOTAS 44 ...... char dados[NRO_ESTUDANTES][NRO_NOTAS] ={ 0 }; int estudante, nota, valor; ....... for (estudante=0; estudante < NRO_ESTUDANTES; estudante++){ cout<<endl<<"Estudante número "<<estudante<<endl; for (nota=0; nota < NRO_NOTAS; nota++){ cout <<"Digite nota ["<<nota<<"] :"; cin>>valor; dados[estudante][nota]=valor; } } cout<<endl<<"Médias:"<<endl; for (estudante=0; estudante < NRO_ESTUDANTES; estudante++){ cout<<endl<<"Estudante número "<<estudante<<endl; valor = 0; for (nota=0; nota < NRO_NOTAS; nota++){ valor = valor + dados[estudante][nota]; } valor = valor / NRO_NOTAS; cout<<"média = "<<valor; } Exercícios Definir array para armazenar: idade de alunos (5 turmas de 30 alunos cada) dados para batalha naval 15 palavras de 40 caracteres temperatura por hora, para 7 dias Exercícios idade de alunos (5 turmas de 30 alunos cada) int idade[5][30]; dados para batalha naval char tabuleiro[30][30]; 15 palavras de 40 caracteres char palavras[15][40]; temperatura por hora, para 7 dias int temperatura[7][24]; Exercícios Implementação do jogo da velha, utilizando uma matriz para dados do desenho e outra matriz para dados de controle Etapas: (grupos de DUAS pessoas) 1 – elaboração do algoritmo e estrutura de dados (17/3) 2 – implementação do programa (17/3 e 19/3) 3 – Documentação e entrega (19/3) Código ASCII (American Standard Code for Information Interchange) http://www.asciitable.com char palavra[100] = { 32, 32, 32, 32, 32, 32, 13, 10, 32, 32, 201, 205, 187, 32, 13, 10, 32, 32, 186, 32, 32, 32, 13, 10, 32, 32, 186, 32, 32, 32, 13, 10, 32, 32, 186, 32, 32, 32, 13, 10, 32, 32, 186, 32, 32, 32, 13, 10, 32, 32, 186, 32, 32, 32, 13, 10, 32, 32, 186, 32, 32, 32, 13, 10, 205, 205, 202, 205, 205, 32, 13, 10}; ......... cout <<letra; resultado na tela: Jogo da Velha: Estrutura de dados a) Matriz para armazenar jogadas char jogadas [3] [3] = { 0, 0, 0, 0, 0, 0 0, 0, 0}; Legenda: 0 - Vazio 1 - Jogador 1 2 - Jogador 2 b) Matriz para armazenar Layout de tela char tela[5] [7] = { 32, 186, 32, 186, 32, 13, 10, 205, 216, 205, 216, 205, 13, 10, 32, 186, 32, 186, 32, 13, 10, 205, 216, 205, 216, 205, 13, 10, 32, 186, 32, 186, 32, 13, 10}; Jogo da Velha: Estrutura de dados a) Matriz para armazenar jogadas char jogadas [3] [3] = { 0, 0, 0, 0, 0, 0 0, 0, 0}; Legenda: 0 - Vazio 1 - Jogador 1 2 - Jogador 2 b) Matriz para armazenar Layout de tela char tela[5] [7] = { 32, 186, 32, 186, 32, 13, 10, 205, 216, 205, 216, 205, 13, 10, 32, 186, 32, 186, 32, 13, 10, 205, 216, 205, 216, 205, 13, 10, 32, 186, 32, 186, 32, 13, 10};