Baixe o app para aproveitar ainda mais
Prévia do material em texto
Resumo de Vetores e Matrizes Vetores: Até agora vimos como manipular variáveis simples que armazenam apenas um valor de um determinado tipo, porém se quisermos outro valor para a variável teremos que perder o valor anterior nela contido e salvar o novo. Para isso existem vetores que são variáveis que armazenam n elementos de um mesmo tipo. Declarando: Tipo NomedaVariavel[tamanho]; Cada elemento desse tipo será armazenado nos índices da variável, esse índices variam de 0 a tamanho-1. Por exemplo, se tamanho for 5 a variável salvará 5 elementos desse tipo sendo o primeiro em variável[0] e o ultimo em variável[4]. Obs.: Nunca confundam isso, sempre é do índice 0 a n-1 e não de 1 a n como alguns professores falaram em sala. Ex.: Recolhendo e mostrando os elementos de um vetor de inteiros de tamanho 5 int main() { int vetor[5], i ; for ( i = 0 ; i < 5 ; i++ ) { printf("Digite o valor de vetor[%d]:\n",i); scanf("%d",&vetor[i]); } printf("Mostrando o vetor:\n"); for ( i = 0 ; i < 5 ; i++ ) { printf("%d ",vetor[i]); } return 0 ; } Obs.: Nunca declarem o vetor com n posições sem especificar o valor de n. Por exemplo, int vetor [n] está errado, pois é necessário que o tamanho seja um numero e não uma variável vazia. Observem que nesse exemplo o for vai de i=0 ate i<5(i=4) Vetores e funções tipo NomedaFunção(int n, tipo vetor[]) { Declaração de variáveis; Lista de comandos; } Em C se quisermos passar um vetor como parâmetro de uma função nós especificamos o tipo dele, mas não informamos dentro dos colchetes o tamanho do vetor, por isso precisamos também passar como parâmetro um numero inteiro que representa o tamanho nesse vetor. Caso nossa função retorne algo precisaremos especificar o tipo da função e colocar o return alguma coisa daquele tipo no final da função. Normalmente quando queremos fazer apenas alterações em um vetor sem necessariamente retornar nenhum número, alterações do tipo preencher, multiplicar por constante, o tipo da função será void e não precisaremos do return. Obs.: Nunca o tipo de uma função será um vetor, o mais frequente será que vocês utilizem funções de retorno do tipo int ou float. Ex.: Funções para preencher e mostrar um vetor de inteiros de 5 elementos void Preencher(int n, int vet[]) { int i ; for ( i = 0 ; i < n ; i++ ) { printf("Digite o valor de vetor[%d]:\n",i); scanf("%d",&vet[i]); } } void Mostrar(int n, int vet[]) { int i; for ( i = 0 ; i < n ; i++ ) { printf("%d ",vet[i]); } } int main() { int vetor[5]; Preencher(5,vetor); printf("Mostrando o vetor:\n"); Mostrar(5,vetor); return 0 ; } Na hora de invocar as funções na função principal main, basta respeitar a ordem dos parâmetros nas funções, no exemplo acima jogando primeiro o tamanho do vetor e depois o nome da variável que utilizo como vetor, sem que haja a preocupação de colocar colchetes. Matrizes Se vetores são nada mais do que uma variável que armazena um conjunto de elementos do mesmo tipo, então um conjunto de vetores será uma matriz. Tipo NomedaVariavel[linhas][colunas]; As linhas representam a quantidade de vetores, as colunas a quantidade de elementos que cada vetor armazenará. Obedecem as mesmas regras de índice de um vetor comum de 0 a linhas-1 e de 0 a colunas-1. Será necessária uma estrutura de repetição para os elementos das linhas e dentro dela outra estrutura de repetição para os elementos da coluna tanto para recolher dados ou para mostrar. Ou seja, em uma linha qualquer primeiro acessamos os elementos das colunas para poder ir para a próxima linha. Ex.: Preenchendo uma matriz 4x4 e mostrando na forma matricial int main() { int matriz[4][4],i,j; for ( i = 0 ; i < 4 ; i++ ) { for ( j = 0 ; j < 4 ; j++ ) { printf("Digite o elemento[%d][%d]:\n",i,j); scanf("%d",&matriz[i][j]); } } printf("Mostrando a matriz na forma matricial:\n"); for ( i = 0 ; i < 4 ; i++ ) { for ( j = 0 ; j < 4 ; j++ ) { printf("%d ",matriz[i][j]); } printf("\n"); } return 0 ; } Matrizes e funções tipo NomedaFunção(int n, tipo matriz[][k]) { Declaração de variáveis; Lista de comandos; } Analogamente a passagem de parâmetros de matrizes obedece praticamente as condições de passagem de vetores comuns com uma única diferença nós não especificamos dentro do colchetes a quantidade de linhas, mas temos que especificar a quantidade de colunas, k tem que ser um numero positivo e o n será o parâmetro que diz a quantidade de linhas/quantidade de vetores. Obs.: Utilizei o k apenas por método didático, mas deve ser um numero positivo ao invés de k, ou seja k representa a quantidade de elementos de cada vetor pode armazenar e o n a quantidade de vetores. Ex.: Exercício adaptado que profº Leandro pediu em sala com menu e utilizando matrizes e funções utilizando uma matriz 3 x 3. void Menu() { printf("1-PREEENCHER MATRIZ\n"); printf("2-MOSTRAR MATRIZ\n"); printf("1-MULTIPLICAR MATRIZ POR ESCALAR\n"); printf("4-TRANSPOR MATRIZ\n"); printf("5-SAIR\n"); } void Preencher(int n, int mat[][3]) { int i,j ; for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < n ; j++ ) { printf("Digite o elemento[%d][%d]:\n",i,j); scanf("%d",&mat[i][j]); } } printf("A matriz foi prrenchida\n"); } void Mostrar(int n, int mat[][3]) { int i,j; for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < n ; j++ ) { printf("%d ",mat[i][j]); } printf("\n"); } } void Multiplicar(int n, int mat[][3], int escalar) { int i,j; for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < n ; j++ ) { mat[i][j] = escalar*mat[i][j]; } } printf("A matriz foi multiplicada por %d!\n",escalar); } void Transposta(int n, int mat[][3]) { int i,j,aux; for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < n ; j++ ) { if ( i < j ) { aux = mat[i][j]; mat[i][j] = mat[j][i]; mat[j][i] = aux; } } } printf("A matriz foi transposta!\n"); } int main() { int matriz[3][3],k,x; do { Menu(); do { scanf("%d",&x); if ( x < 1 || x > 5 ) { printf("Opção Invalida!Escolha entre 1 e 5\n"); } }while( x < 1 || x > 5 ); if ( x == 1 ) { Preencher(3,matriz); } else if ( x == 2 ) { Mostrar(3,matriz); } else if ( x == 3 ) { printf("Digite um valor para o escalar:\n"); scanf("%d",&k); Multiplicar(3,matriz,k); } else if ( x == 4 ) { Transposta(3,matriz); } else { printf("Fim de programa!\n"); } }while( x != 5 ); return 0 ; }
Compartilhar