\documentclass[apostila.tex]{subfiles} \begin{document} \chapter{Matrizes} Uma matriz é uma coleção de localizações para armazenamento de dados, todas contendo o mesmo tipo de dados e acessadas pelo mesmo nome. Cada localização de armazenamento da matriz é chamada de elemento da matriz. \section{Matrizes Unidimensionais} Uma matriz unidimensional é uma matriz que possui um único subscrito. Um subscrito é um número entre colchetes colocado após o nome da matriz. Esse número é usado para identificar os elementos individuais de uma matriz. Quando uma matriz é declarada, o compilador reserva um bloco de memória com tamanho suficiente para conter todos os seus elementos. Os elementos individuais da matriz são armazenados sequencialmente na memória. Matrizes unidimensionais são também chamadas de vetores. \section{Matrizes Multidimensionais} Uma matriz multidimensional tem mais de um subscrito. Uma matriz bidimensional tem dois subscritos, uma matriz tridimensional tem três subscritos e assim por diante. Não há qualquer limite ao número de dimensões que uma matriz pode ter em C. \section{Inicialização de Matrizes} Uma matriz pode ser total ou parcialmente inicializada no momento em que é declarada. Para fazer isto, basta colocar um sinal de igualdade após a declaração da matriz e acrescentar uma lista de valores entre chaves, separados por vírgulas. Estes valores serão atribuídos pela ordem aos elementos da matriz. exemplos: \begin{lstlisting} int matriz[4] = { 100, 200, 300, 400 } //// equivale a: // matriz[0] = 100; // matriz[1] = 200; // matriz[2] = 300, // matriz[3] = 400; int matriz[ ] = { 100, 200, 300, 400 } //// equivale a: // matriz[0] = 100; // matriz[1] = 200; // matriz[2] = 300, // matriz[3] = 400; int matriz[3][2] = { 1, 2, 3, 4, 5, 6 } //// equivale a: // matriz[0][0] = 1; // matriz[0][1] = 2; // // matriz[1][0] = 3; // matriz[1][1] = 4; // // matriz[2][0] = 5; // matriz[2][1] = 6; // O que também seria equivalente a: int matriz[3][2] = { {1, 2}, {3, 4}, {5, 6} } \end{lstlisting} \section{Referenciando um elemento na matriz} Quando referenciamos um elemento da matriz, o subscrito (número que colocamos entre colchetes seguindo o nome da matriz) irá especificar a posição do elemento na mesma. Os elementos da matriz são sempre numerados por índices iniciados em 0 (zero). Então, o elemento referenciado pelo número 2 não será o segundo elemento da matriz, mas sim o terceiro. Assim, o último elemento de uma matriz de tamanho N é referenciado por N-1. \section{Lendo um número desconhecido de elementos} Quando não sabemos de antemão quantos itens entrarão em nossa matriz, podemos usar uma constante simbólica para definir o tamanho da matriz na declaração. Assim o tamanho da matriz poderá ser facilmente modificado. exemplo: \lstinputlisting{exemplos/matriz_com_define.c} \section{Exercício} 1. Crie uma função que receba como parâmetros um vetor e o seu tamanho, e que ordene esse vetor. A função não deverá retornar nenhum valor. 2. Crie uma função que recebe como parâmetros um vetor, o seu tamanho e um valor X e que retorne a primeira posição do vetor cujo valor é igual ao de X. Se a função não encontrar o elemento procurado, ela deve retornar -1. 3. Escreva um programa em C para gerar cartões de loteria. Ele recebe como entrada o número de cartões e a quantidade de números por cartão, além do limite inferior e superior destes números. Ao final, o programa deve imprimir estes cartões. (DICA: para gerar números aleatórios, utilize a função random() da biblioteca stdlib.h). 4. Escreva um programa em C que calcula a determinante de uma matriz 3x3. 5. Escreva um programa em C que calcula a multiplicação entre duas matrizes $R$ e $S$, sendo $R$ de dimensão $i \times j$, e $S$ de dimensão $j \times k$. \end{document}