Algoritmo e Estrutura de Dados I Aulas 14 – Linguagem C Matriz Márcia Marra
2 Declaração de Matrizes A forma geral da declaração de uma matriz bidimensional é muito parecida com a declaração de um vetor: tipo nome_da_variável [altura][largura]; O índice da esquerda indexa as linhas e o da direita indexa as colunas; Quando vamos preencher ou ler uma matriz no C o índice mais à direita varia mais rapidamente que o índice à esquerda.
3 Exemplo 1 #include int main () { int mtrx [20][10]; int i,j,count; count=1; for (i=0;i<20;i++) for (j=0;j<10;j++) { mtrx[i][j]=count; count++; printf("\nLinha:%d Col:%d INT:%d",i,j,mtrx[i][j]); } printf("\n"); return(0); }
4 Execução do Exemplo 1
5 Matrizes de Strings Matrizes de strings são matrizes bidimensionais. Imagine uma string - ela é um vetor. Se fizermos um vetor de strings estaremos fazendo uma lista de vetores. Esta estrutura é uma matriz bidimensional de chars.
6 Matriz de Strings A forma geral de uma matriz de strings é: char nome_var[num_strings][compr_strings]; Aí surge a pergunta: como acessar uma string individual? Fácil. É só usar apenas o primeiro índice. Então, para acessar uma determinada string basta fazer: nome_da_variável [índice]
7 Exemplo de matriz de string #include int main () { char strings [5][100]; int count; for (count=0;count<5;count++){ printf ("\nDigite uma string: "); gets (strings[count]); } printf ("\n\nAs strings que voce digitou foram:\n\n"); for (count=0;count<5;count++) printf ("%s\n",strings[count]); return(0); }
8 Execução
9 Matriz de Strings O que estamos fazendo na verdade é utilizando um ponteiro para apontar para diversos endereços de strings. String 1 String 2 String 3 String 4 String 5 ppch pch ppch[0], ppch[1], ppch[2], ppch[3]
10 E qual a utilidade disto? Um dos usos mais comuns para matrizes de strings são os argumentos para linha de comandos. Dado um programa corretamente compilado, como fazer para passar argumentos para ele?./teste 2 3
11 Passagem de parâmetros para a função main Com o objetivo de passar parâmetros para a função main, você deve utilizar o seguinte protótipo: int main(int argc, char **argv) OU int main(int argc, char *argv[]) Onde: -argc: é o número de argumentos digitados, incluindo o nome do programa -argv: é uma matriz de strings que armazena cada argumento da linha de comando, incluindo o nome do programa.
12 Exemplo #include int main (int argc, char **argv) { int i; printf("argc = %d\n\n",argc); for (i=0;i<argc;++i) printf("argv[%d]: %s\n", i, argv[i]); return(0); }
13 Execução
14 Matrizes multidimensionais O uso de matrizes multidimensionais na linguagem C é simples. Sua forma geral é: tipo_da_variável nome_da_variável [tam1][tam2]... [tamN]; Uma matriz N-dimensional funciona basicamente como outros tipos de matrizes.
15 Inicialização de Matrizes Podemos inicializar matrizes, assim como podemos inicializar varíáveis. A forma geral de uma matriz como inicialização é: tipo nome_da_variável [tam1][tam2]... [tamN] = {lista_de_valores}; A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula.
16 Inicialização de Matrizes Os valores devem ser dados na ordem em que serão colocados na matriz. Alguns exemplos: float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, }; int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; char str [10] = { 'J', 'o', 'a', 'o', '\0' }; char str [10] = "Joao"; char str_vect [3][10] = { "Joao", "Maria", "Jose" };
17 Inicialização sem especificação de tamanho Podemos, em alguns casos, inicializar matrizes das quais não sabemos o tamanho a priori. O compilador C verifica o tamanho do que você declarou e considera este como sendo o tamanho da matriz. Exemplos: char mess [] = "Linguagem C: flexibilidade e poder."; int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 };
18 Pratique! # include int main() { int t, i, M[3][4]; for (t=0; t<3; ++t) for (i=0; i<4; ++i) M[t][i] = (t*4)+i+1; for (t=0; t<3; ++t) { for (i=0; i<4; ++i) printf ("%3d ", M[t][i]); printf ("\n"); } return(0); }
19 Solução
20 Teste Surpresa Escreva um trecho de código que imprima os caracteres da string s na ordem inversa, ou seja, de trás para frente, utilizando apenas as variáveis declaradas abaixo. char s[10] = "abcde"; char *cptr; // Escreva aqui o seu código