Algoritmo e Estrutura de Dados I Aulas 14

  • Slides: 20
Download presentation
Algoritmo e Estrutura de Dados I Aulas 14 – Linguagem C Matriz Márcia Marra

Algoritmo e Estrutura de Dados I Aulas 14 – Linguagem C Matriz Márcia Marra marsha@dcc. ufmg. br

Declaração de Matrizes • A forma geral da declaração de uma matriz bidimensional é

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. 2

Exemplo 1 #include <stdio. h> int main () { int mtrx [20][10]; int i,

Exemplo 1 #include <stdio. h> 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("n. Linha: %d Col: %d INT: %d", i, j, mtrx[i][j]); } printf("n"); return(0); } 3

Execução do Exemplo 1 4

Execução do Exemplo 1 4

Matrizes de Strings • Matrizes de strings são matrizes bidimensionais. • Imagine uma string

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. 5

Matriz de Strings • A forma geral de uma matriz de strings é: char

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] 6

Exemplo de matriz de string #include <stdio. h> int main () { char strings

Exemplo de matriz de string #include <stdio. h> int main () { char strings [5][100]; int count; for (count=0; count<5; count++){ printf ("n. Digite uma string: "); gets (strings[count]); } printf ("nn. As strings que voce digitou foram: nn"); for (count=0; count<5; count++) printf ("%sn", strings[count]); return(0); } 7

Execução 8

Execução 8

Matriz de Strings • O que estamos fazendo na verdade é utilizando um ponteiro

Matriz de Strings • O que estamos fazendo na verdade é utilizando um ponteiro para apontar para diversos endereços de strings. String 1 ppch String 2 String 3 ppch[0], ppch[1], String 4 ppch[2], String 5 ppch[3] pch 9

E qual a utilidade disto? • Um dos usos mais comuns para matrizes de

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 10

Passagem de parâmetros para a função main • Com o objetivo de passar parâmetros

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. 11

Exemplo #include<stdio. h> int main (int argc, char **argv) { int i; printf("argc =

Exemplo #include<stdio. h> int main (int argc, char **argv) { int i; printf("argc = %dnn", argc); for (i=0; i<argc; ++i) printf("argv[%d]: %sn", i, argv[i]); return(0); } 12

Execução 13

Execução 13

Matrizes multidimensionais • O uso de matrizes multidimensionais na linguagem C é simples. •

Matrizes multidimensionais • O uso de matrizes multidimensionais na linguagem C é simples. • Sua forma geral é: tipo_da_variável nome_da_variável [tam 1][tam 2]. . . [tam. N]; • Uma matriz N-dimensional funciona basicamente como outros tipos de matrizes. 14

Inicialização de Matrizes • Podemos inicializar matrizes, assim como podemos inicializar varíáveis. • A

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 [tam 1][tam 2]. . . [tam. N] = {lista_de_valores}; • A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula. 15

Inicialização de Matrizes • Os valores devem ser dados na ordem em que serão

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, 100. 1 }; int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; char str [10] = { 'J', 'o', 'a', 'o', '' }; char str [10] = "Joao"; char str_vect [3][10] = { "Joao", "Maria", "Jose" }; 16

Inicialização sem especificação de tamanho • Podemos, em alguns casos, inicializar matrizes das quais

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 }; 17

Pratique! # include <stdio. h> int main() { int t, i, M[3][4]; for (t=0;

Pratique! # include <stdio. h> 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 ("%3 d ", M[t][i]); printf ("n"); } return(0); } 18

Solução 19

Solução 19

Teste Surpresa • Escreva um trecho de código que imprima os caracteres da string

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 20