PROGRAMAO II PARTE 6 Profa Maria Augusta Constante

  • Slides: 14
Download presentation
PROGRAMAÇÃO II – PARTE 6 Profa. Maria Augusta Constante Puget

PROGRAMAÇÃO II – PARTE 6 Profa. Maria Augusta Constante Puget

2 Matrizes Unidimensionais em C (1) • Uma matriz, ou array (arranjo em inglês)

2 Matrizes Unidimensionais em C (1) • Uma matriz, ou array (arranjo em inglês) é uma coleção de localizações contíguas na memória para o armazenamento de dados. • Em C, estes dados têm que ser todos do mesmo tipo, por isso uma matriz é chamada de estrutura de dados homogênea. • Estas localizações são todas identificadas pelo mesmo nome, sendo diferenciadas por um único índice inteiro, no caso das matrizes unidimensionais. Elementos da matriz Matriz Unidimensional notas: 2. 5 8. 5 7. 0 5. 5 8. 0 9. 5 0 1 Nome da matriz 2 3 4 5 Índices da matriz • Cada localização na matriz é chamado de elemento da matriz.

3 Declarando Matrizes (1) • Para declarar uma matriz, precisa-se especificar o tipo desejado

3 Declarando Matrizes (1) • Para declarar uma matriz, precisa-se especificar o tipo desejado (tal como int, float ou double), bem como o tamanho da matriz. • Para especificar o tamanho de uma matriz, coloca-se o número de valores que a matriz pode armazenar dentro de colchetes após o nome da matriz. Exemplos: 1. A declaração à seguir cria uma matriz chamada notas, que pode armazenar 100 notas de exame do tipo int (múltipla escolha): int notas[100]; 2. A seguinte declaração cria uma matriz do tipo float, que contém 50 salários: float salarios[50];

4 Elementos de Matrizes (1) • Quando uma matriz é declarada, a Linguagem C

4 Elementos de Matrizes (1) • Quando uma matriz é declarada, a Linguagem C aloca memória suficiente para conter todos os elementos. • O primeiro item está na posição 0, isto é, seu índice é igual a 0. Exemplo: 1. Nas matrizes notas e salarios, os comandos a seguir atribuem os valores 80 e 35000 aos primeiros elementos da matriz: notas[0] = 80; salarios[0] = 5000; • Como o primeiro elemento da matriz inicia no índice 0, o último elemento da matriz ocorre no índice dado pelo tamanho da matriz menos 1. Exemplo: 1. Dadas as matrizes anteriores, os comandos a seguir atribuem valores ao último elemento de cada matriz: notas[99] = 65; salarios[49] = 2500;

5 Inicializando Matrizes (1) • Quando se tem matrizes numéricas, pode-se inicializar as mesmas

5 Inicializando Matrizes (1) • Quando se tem matrizes numéricas, pode-se inicializar as mesmas na instrução de declaração. • Nesta sintaxe, é necessário delimitar os valores por um par de abre e fecha chaves ( { } ). Exemplos: 1. O comando a seguir inicializa a matriz de inteiros notas com os valores 80, 70, 90, 85 e 80: int notas[5] = {80, 70, 90, 85, 80}; Note-se que, neste exemplo, o tamanho da matriz é igual ao número de valores atribuidos. O comando a seguir, no entanto, atribui quatro valores de ponto flutuante a uma matriz que pode armazenar 64 valores: float salarios[64] = {5000. 0, 2000. 0; 4000. 0, 3000. 0}; Dependendo do compilador, ele pode atribuir 0 aos elementos aos quais o programa não atribui valores explícitos. No entanto, como regra, não se deve assumir que o compilador inicializará os outros elementos. 2.

6 Inicializando Matrizes (2) • Se não for especificado um tamanho de matriz, o

6 Inicializando Matrizes (2) • Se não for especificado um tamanho de matriz, o compilador alocará memória suficiente para conter somente os valores que forem especificados. Exemplos: A declaração seguinte cria uma matriz grande o suficiente para conter 12 valores do tipo int: int meses[ ] = {31, 28, 31, 30, 31};

7 Acessando Elementos de Matrizes (1) • Os valores armazenados numa matriz chamam-se elementos

7 Acessando Elementos de Matrizes (1) • Os valores armazenados numa matriz chamam-se elementos da matriz. • Para acessar um elemento da matriz, especifica-se o nome da matriz e o elemento que deseja, através de seu índice. Exemplo: O programa a seguir, inicializa a matriz notas e depois usa printf para exibir os valores dos elementos: #include <stdio. h> #include <stdlib. h> int main(){ int notas[5] = {80, 70, 90, 85, 80}; printf("Valores das notas: n"); printf(“Notas[0] = %in", notas[0]); printf(“Notas[1] = %in", notas[1]); printf(“Notas[2] = %in", notas[2]); printf(“Notas[3] = %in", notas[3]); printf(“Notas[4] = %in", notas[4]); system("pause"); return 0; }

8 Percorrendo em um Laço Elementos de Matrizes (1) • Quando se referencia muitos

8 Percorrendo em um Laço Elementos de Matrizes (1) • Quando se referencia muitos elementos de uma matriz, especificar o número de cada elemento individualmente é demorado e tedioso. • Como alternativa, os programas podem usar uma variável para referenciar os elementos da matriz. Exemplo: O programa a seguir usa a variável i e um laço for para exibir os elementos da matriz notas: #include <stdio. h> #include <stdlib. h> int main(){ int notas[5] = {80, 70, 90, 85, 80}; int i; printf("Valores das Notasn"); for (i = 0; i < 5; i++){ printf(“Notas[%i] = %in", i, notas[i]); } system("pause"); return 0; }

9 Usando Constantes para Definir Matrizes (1) • Quando os programas trabalham com matrizes,

9 Usando Constantes para Definir Matrizes (1) • Quando os programas trabalham com matrizes, é necessário especificar o tamanho da matriz. Exemplo: O programa das notas declara uma matriz de cinco valores e depois usa um laço for para exibir os valores da matriz: #include <stdio. h> #include <stdlib. h> int main(){ int notas[5] = {80, 70, 90, 85, 80}; int i; printf("Valores das Notasn"); for (i = 0; i < 5; i++){ printf("Notas[%i] = %in", i, notas[i]); } system("pause"); return 0; }

10 Usando Constantes para Definir Matrizes (2) • Suponha necessário alterar o código anterior

10 Usando Constantes para Definir Matrizes (2) • Suponha necessário alterar o código anterior para acomodar 10 notas. • Será preciso alterar não somente a declaração da matriz, mas também o laço for. • Quanto mais alterações forem feitas em um programa, maiores as chances de se errar. Exemplo: O programa a seguir declara a matriz de notas com base na constante TOTAL_ALUNOS. Ele não somente usa a constante para declarar a matriz, mas também a usa na condição do laço for: #include <stdio. h> #include <stdlib. h> #define TOTAL_ALUNOS 5 int main(){ int notas[TOTAL_ALUNOS] = {80, 70, 90, 85, 80}; int i; printf("Valores das Notasn"); for (i = 0; i < TOTAL_ALUNOS; i++){ printf("notas[%i] = %in", i, notas[i]); } system("pause"); return 0; }

11 Inicializando os Elementos com Entrada de Dados (1) • Como qualquer outra variável,

11 Inicializando os Elementos com Entrada de Dados (1) • Como qualquer outra variável, os elementos de uma matriz podem ser inicializados com valores obtidos a partir da entrada padrão. Exemplo: O programa a seguir faz a leitura das notas pelo teclado e calcula a média das mesmas: #include <stdio. h> #include <stdlib. h> #define TOTAL_ALUNOS 5 int main(){ int i, notas[TOTAL_ALUNOS]; float media = 0; printf("Valores das Notasn"); for (i = 0; i < TOTAL_ALUNOS; i++){ printf("Forneca a nota %i: n", i+1); scanf("%i", &notas[i]); printf("notas[%i] = %in", i, notas[i]); media += notas[i]; } media /= TOTAL_ALUNOS; printf("A media vale %. 2 f. n", media); system("pause"); return 0; }

12 Compreendendo as Matrizes Multidimensionais (1) • Conforme já dito, uma matriz é uma

12 Compreendendo as Matrizes Multidimensionais (1) • Conforme já dito, uma matriz é uma variável que pode armazenar múltiplos valores do mesmo tipo. • Em todos os exemplos apresentados, as matrizes consistiram de uma fileira de dados: matrizes unidimensionais, com um só índice. • No entanto, a Linguagem C permite matrizes bi, tri e multidimensionais com, respectivamente, 2, 3 ou mais índices. • O melhor modo de visualizar uma matriz bidimensional é como uma tabela com linhas e colunas.

13 Inicializando Elementos em Uma Matriz Bidimensional (1) • Como foi visto, para inicializar

13 Inicializando Elementos em Uma Matriz Bidimensional (1) • Como foi visto, para inicializar elementos de matriz, pode-se colocar os valores dos elementos dentro de um par de abre e fecha chaves após a declaração da matriz. • O comando do exemplo a seguir usa essa mesma sintaxe para inicializar uma matriz bidimensional. No entanto, neste caso, o comando especifica os valores para cada linha da matriz dentro de chaves aninhadas. Exemplo: int tabela [2] [3] = {{1, 2, 3}, {4, 5, 6}};

14 Inicializando Elementos em Uma Matriz Bidimensional (2) Exemplo: int tabela [2] [3] =

14 Inicializando Elementos em Uma Matriz Bidimensional (2) Exemplo: int tabela [2] [3] = {{1, 2, 3}, {4, 5, 6}}; No exemplo dado, o compilador inicializará os elementos da matriz como mostrado a seguir: Índices de coluna Índices de linha 0 1 2 3 1 4 5 6 Poderíamos também inicializar esta matriz, atribuindo valores a cada um de seus elementos individualmente: tabela[0][0] = 1; tabela[0][1] = 2; tabela[0][2] = 3; // E assim por diante. . .