Aula prática 6 Vetores e Matrizes Monitoria de Introdução à Programação Roteiro Vetores Matrizes – Bidimensionais – N-dimensionais Uso em funções Dúvidas Exercícios Vetores Um vetor (também chamado de vector ou array) é uma sequência contínua na memória, de elementos de mesmo tipo. O acesso às posições individuais é feito pelo índice do elemento. Em C e em várias outras linguagens, o primeiro elemento é acessado pelo índice 0 (zero-based ordering). Em C, podem ser declarados nas formas: Tipo nome[tamanho]; // índices de 0 até tamanho -1 Tipo nome[] = {Elemento1,E2,...,En}; // tamanho = n Tipo nome[tamanho] = {E1,E2,...,En}; // n <= tamanho Vetores O operador “[]” dá acesso as elementos: Tentar acessar um elemento em uma posição menor que 0 ou maior que o tamanho do vetor, poderá resultar em erro de execução. Cuidado com lixo de memória: ao declarar um vetor sem uma lista de inicialização, o vetor estará preenchido por lixo de memória. O mesmo vale para posições além da lista de inicialização. Vetores Vetores são constantes! A variável que guarda um vetor é, em si, um endereço de memória constante, indicando onde aquele vetor começa. Tentar mudá-la após a declaração resultará em um erro de compilação. Uma consequência disso é que o seguinte não será possível: Tipo nome[tamanho]; nome = {E1,E2,...,En}; // ERRADO! Um vetor só guarda um tipo! Esse tipo é definido na sua declaração, e nunca muda. Tomar cuidado com o acesso aos elementos! Um acesso indevido não será avisado na compilação, o erro talvez aparecerá na execução enquanto estiver testando, ou pode só aparecer semanas depois da aplicação ser entregue ao cliente. Vetores Como percorrer um vetor: Uma forma prática de percorrer um vetor é usando um laço: Matrizes Bidimensionais Matrizes são vetores que guardam vetores. Dessa forma, podemos ter mais de uma dimensão de acesso. Em C: Tipo matriz[tamanho2][tamanho1]; Tipo matriz[tamanho2][tamanho] = {{E1,E2,...,Em},...,{Z1,Z2,...,Zn}} Tipo matriz[tamanho2][tamanho] = {E1,E2...Etamanho2*tamanho} Tipo matriz[][tamanho] = {{E1,E2,...,Em},...,{Z1,Z2,...,Zn}} O tamanho dos vetores internos não pode ser omitido, pois o compilador pode assumir o tamanho de um vetor, mas não o tipo dos seus elementos*. *: O tipo de um vetor é “vetor de tipo com tamanho X” ou tipo[x]. Para matrizes, o tipo é tipo[x][y]. Matrizes Bidimensionais O acesso à elementos da matriz é feito do mesmo modo que com vetores: Matrizes Bidimensionais Para percorrer uma matriz: Similar a percorrer um vetor, usando laços aninhados: Matrizes N-Dimensionais Se podemos ter vetores de vetores, segue que podemos ter vetores de vetores de vetores de vetores...: Para percorrer, a ideia é a mesma de vetores e matrizes bidimensionais, usando laços aninhados. Uso em Funções. Como vetores são endereços na memória, podemos acessar diretamente suas posições dentro de funções, e alterar seus valores: Dúvidas? Exercício 1 Escreva um programa em C que recebe 10 números inteiros positivos (entre 0 e 100000), e vai colocando esses números em um vetor de 10 posições. Logo após, seu programa deve verificar se cada valor desse vetor é perfeito ou não. Um valor é dito perfeito quando ele é igual a soma dos seus divisores excetuando ele próprio. (Ex: 6 é perfeito, 6 = 1 + 2 + 3, que são seus divisores). Exercício 2 Faça um programa que ordene um vetor de inteiro de 10 posições, onde os seus elementos serão dados pelo usuário e ordene seus elementos em ordem crescente. Para isso utilize algum algoritmo de ordenação, chamados como sorts. Ex, bubblesort, selection sort, quick sort... Exercício 3 Faça um programa que receba do usuário uma matriz 5x4, calcule sua transposta e multiplique a sua matriz original pela sua transposta (𝑴 ∗ 𝑴𝑻 ), exibindo para o usuario o seu valor final.