Variável Composta Homogênea Unidimensional e Multidimensional - ARRAY 1. Introdução Agora que já estudamos as estruturas de controle (sequencial, condicional e de repetição) estudaremos as variáveis compostas homogêneas unidimensional (Vetor) e multidimensional (Matriz) ARRAY. Um Array é uma estrutura de dados que consegue guardar vários elementos e ainda nos possibilita pegar (ler, acessar) esses elementos de maneira fácil! Quando nos referimos a um vetor ou a uma matriz, tratamos de um conjunto de variáveis de mesmo tipo e que possuem o mesmo nome (identificador). Estas variáveis são alocadas sequencialmente na memória. Como as variáveis possuem o mesmo nome, o que as distingue é o índice que referencia sua localização (posição sequencial) dentro da estrutura (do vetor ou da matriz). Representação gráfica de um vetor que guardará notas de 10 alunos: nota 0 1 2 3 4 5 6 7 8 9 Nome / Identificador do Vetor Índices do Vetor Este vetor é capaz de guardar 10 (dez) notas (não nove, mas sim 10). Quando é necessário utilizar variáveis compostas (ARRAY)? - Guardar as notas de todos os alunos de uma turma (conforme número de chamada); - Guardar a localização de todos os alunos na sala de aula (fila e ordem na fila); - Guardar a localização de todos os carros em um pátio de estacionamento (quadra, fila, ordem na fila); Para armazenar os dados de cada situação acima sem utilizar variáveis compostas, seria necessário criar tantas variáveis quanto os objetos a serem representados! Essa quantidade de variáveis poderia tornar inviável a elaboração do programa: Quantas variáveis criar para guardar as notas dos alunos? nota1, nota2,..., nota32 (para uma turma de 32 alunos), mas outra turma tem um número de alunos diferente de 32 Alterar o programa?! Péssimo. - 1 -
2. Criando um Vetor A figura anterior mostrou que: - Os elementos de um vetor têm ordinalidade, ou seja, podemos identificar o 1º, o 2º, até o último elemento pela sua posição. Exemplo: identificar o nome de um aluno pelo número da chamada. - Cada elemento do vetor é identificado por um número que representa sua posição dentro do vetor. Dizemos que esse acesso é indexado ou que os vetores possuem índice. Analogia com livros: acessar a página de cada capítulo pelo índice, evitando a busca folha a folha. Para criar um Vetor chamado idade de 5 posições que podem guardar números inteiros usamos a seguinte sintaxe: int[] idade = new int[5]; Obs.: Essa sintaxe pode ser utilizada em arrays de qualquer tipo. Representação Gráfica (memória): idade 0 1 2 3 4 0, 1, 2, 3 e 4 são os INDICES Para guardar elementos nessas posições do array, podemos fazer: idade[0] = 15; idade[1] = 16; idade[2] = 18; idade[3] = 14; idade[4] = 16; Representação Gráfica (memória): idade 15 16 18 14 16 0 1 2 3 4 Veja que a primeira posição de um array é 0 (zero). Logo, as posições de um array vão de 0 (zero) até (tamanho-1). - 2 -
Para facilitar nosso trabalho, o C# nos oferece um atalho para criar e inicializar o conteúdo do array. Esse array de inteiros com cinco posições, poderia utilizar o seguinte código: int[] idade = new int[] 15, 16, 18, 14, 16 ; 3. Exercícios básicos a) Qual das linhas a seguir instancia (cria) um array de 10 elementos? a) int[] numeros = new int[9]; b) int[] numeros = new int[10]; c) int[] numeros = new int["dez"]; d) int[10] numeros = new int[10]; b) Imagine o array abaixo: int[] numeros = new int[15] ; Como acessar o quinto elemento nessa lista? a) numeros[3] b) numeros[4] c) numeros["quinto"] d) numeros[5] 4. Preenchimento de um Vetor pelo usuário Para preencher um vetor em C#, devemos percorrer todos os elementos/índices, atribuindo-lhes (gravando) um valor: i de 0 a 4 ( i < 5 ): int[] idade = new int[5]; 0, 1, 2, 3, 4 indicando 5 posições preenchidas for (int i = 0; i < 5; i++) Console.WriteLine("Informe o valor da idade do aluno 0: ", i); idade[i] = Convert.ToInt32(Console.ReadLine()); Na tela: - 3 -
Para apresentar (imprimir) o conteúdo de um vetor em C# (percorrer o vetor e apresentar cada conteúdo): for (int i = 0; i < 5; i++) Console.WriteLine("Idade do aluno 0 é 1",i, idade[i]); Na tela: 5. Caracterizando a necessidade de uso de vetor através de um exemplo prático. a) Faça um programa para calcular a média das notas de uma turma de 10 alunos. Obs.: Este programa não necessita de vetor (array). double nota, soma = 0; Console.WriteLine("Informe a nota do aluno 0: ", i + 1); //i+1 é p/não ficar 0 nota = Convert.ToDouble(Console.ReadLine()); soma = soma + nota; Console.WriteLine("\nA média das notas dos dez alunos é 0", soma / 10); A variável nota guarda, TEMPORARIAMENTE, a nota de cada aluno, pois cada vez que o laço\repetição é executado e a nota de um aluno é informada pelo usuário, o valor da nota do aluno anterior é perdido (sobreposto pela nota do aluno atual). Variável nota na memória: um único espaço/local para guardar as informações. - 4 -
b) Faça um programa para calcular a média das notas de uma turma de 10 alunos e verificar se cada aluno teve nota acima ou abaixo da média calculada. Obs.: Este programa necessita de vetor (array). O uso de VETOR (em vez de uma simples variável) fará com que as notas individuais de cada aluno não sejam perdidas (fiquem guardadas/salvas). É necessário guardar as notas de todos os 10 alunos para que seja possível comparar, cada uma delas, com a média geral e saber se ficou abaixo ou acima. Array nota (vetor) na memória, espaço/local para guardar as notas dos 10 alunos. double[] nota = new double[10]; double soma = 0, media; Console.WriteLine("Informe a nota do aluno 0: ", i+1); //i+1 é para não ficar 0 nota[i] = Convert.ToDouble(Console.ReadLine()); soma = soma + nota[i]; media = soma/10; Console.WriteLine("\nA média das notas dos dez alunos é 0", media); if (nota[i] > media) Console.WriteLine("O aluno 0 teve nota acima da média", i+1); else if (nota[i] < media) Console.WriteLine("O aluno 0 teve nota abaixo da média", i+1); else Console.WriteLine("O aluno 0 teve nota igual a média", i+1); OBSERVE QUE, BASICAMENTE, A ALTERAÇÃO FOI A INCLUSÃO DO INDICE ( i ) SEMPRE QUE SE FEZ REFERÊNCIA AO VETOR NOTA (nota[i]). - 5 -