ci208 - programação de computadores aula 24: arrays · 2014-05-12 · um array é uma coleção /...

29
CI208 - Programação de Computadores Aula 24: Arrays Prof. MSc. Diego Roberto Antunes Universidade Federal do Paraná Setor de Ciências Exatas Departamento de Informática [email protected] www.inf.ufpr.br/diegor

Upload: nguyenmien

Post on 11-Feb-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

CI208 - Programação de Computadores���

Aula 24: Arrays

Prof. MSc. Diego Roberto Antunes

Universidade Federal do Paraná Setor de Ciências Exatas

Departamento de Informática

[email protected] www.inf.ufpr.br/diegor

Últimas aulas Arrays Unidimensionais

Nas últimas aulas, vimos o conceito de arrays, bem como uma série de exercícios e algoritmos para resolver problemas particulares sobre um���tipo de array: os vetores ou arrays unidimensionais.���

Durante esta prática, aprendemos como declarar um array, como inicializá-lo, como ler e escrever dados do vetor na tela, como utilizá-lo em parâmetros de funções e alguns algoritmos mais sofisticados (e.g. ordenação e busca).

Vale relembrar...

Arrays

Um array é uma coleção / conjunto de um ou mais objetos / dados ���(de mesmo tipo), armazenados em endereços adjacentes de memória; ���

Existem basicamente dois tipos de arrays: ���unidimensionais (vetores) e multidimensionais (duas ou mais dimensões).

•  Assim como as variáveis, precisamos declarar os arrays; •  Para cada array deve ser definido:

a)  o tipo dos dados; b)  um nome; c)  o tamanho (quantidade ou número de elementos) do array;

O que é um array?

•  E como a definição diz, é associado: a)  um bloco de endereços de memória adjacentes para o array;

•  Cada objeto / valor armazenado no array é chamado de elemento do array;���

•  Cada elemento do array é numerado, utilizando um inteiro chamado índice para identificá-lo; Então é correto dizer que cada elemento está em uma posição do array (onde cada posição está marcada por um índice);���

•  Os índices de um array em C++ iniciam em 0 e aumentam de forma incremental de um em um;���

•  Neste caso, o último índice será o tamanho do array – 1;

Elementos e Índices

Vamos lembrar, pela própria definição, que um array unidimensional (vetor) pode ser representado graficamente por um conjunto de blocos empilhados: ���

Arrays unidimensionais

notas!

[0]!

[1]!

[2]!

[3]!

[4]!

Ex: um array chamado notas que possui 5 elementos. Declaração:���int notas[5];

Vamos lembrar, pela própria definição, que um array unidimensional (vetor) pode ser representado graficamente por um conjunto de blocos empilhados: ���

Arrays unidimensionais

100!

notas!

45!

32!

97!

62!

[0]!

[1]!

[2]!

[3]!

[4]!

•  cada bloco representa uma posição possível para armazenar um elemento; •  o tamanho deste vetor é dado pela quantidade desses “blocos”: 5; •  o primeiro elemento é numerado com o índice 0;

•  o último elemento é numerado com o índice n – 1: 4;

Arrays Arrays Multidimensionais: Matrizes

Em C++ também é possível definir arrays com duas ou mais dimensões; Como veremos, de certa forma, arrays multidimensionais são considerados arrays de arrays;

Nas próximas aulas, vamos focar especificamente em problemas relacionados ao uso de array com duas dimensões, o qual pode ser imaginado / chamado como matriz (ou tabela);���

Arrays Multidimensionais

Como você deve imaginar, ao declarar uma matriz (array multidimensional) em C++ precisamos informar ao compilador o tamanho de cada dimensão: (assim como fazíamos com vetores, mas agora precisamos informar as dimensões extras)���

Exemplo: o professor de um curso com 50 alunos deseja criar um programa que contenha uma estrutura de dados em forma de tabela para armazenar p/ cada aluno o GRR(número) e as Notas da Prova 1, da Prova 2 e da Final.

Declaração

Como você deve imaginar, ao declarar uma matriz (array multidimensional) em C++ precisamos informar ao compilador o tamanho de cada dimensão: (assim como fazíamos com vetores, mas agora precisamos informar as dimensões extras)���

Exemplo: o professor de um curso com 50 alunos deseja criar um programa que contenha uma estrutura de dados em forma de tabela para armazenar p/ cada aluno o GRR(número) e as Notas da Prova 1, da Prova 2 e da Final.

Neste exemplo é adequado o uso de uma matriz (duas dimensões), a qual possui como dimensões 50 alunos x 4 Informações.���

Declaração

Exemplo: o professor de um curso com 50 alunos deseja criar um programa que contenha uma estrutura de dados em forma de tabela para armazenar p/ cada aluno o GRR(número) e as Notas da Prova 1, da Prova 2 e da Final.

Assim, a declaração de uma matriz para este problema em C++ seria utilizando mais colchetes [tamanho] para representar a segunda dimensão e seu tamanho. Portanto, para o exemplo, a declaração é:���

float notas[50][4];���

Ou seja, a matriz notas, armazena dados do tipo float, possui duas dimensões: 50 posições (uma para cada aluno) e 4 posições na segunda dimensão (para cada aluno: GRR, P1, P2, PF).���

Declaração

Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como

Declaração

Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como

Declaração

notas!

[0]!

[1]!

[2]!

...!

[49]!

Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como

Declaração

notas!

[0]!

[1]!

[2]!

...!

[49]!

[0]! [1]! [2]! [3]!

Neste exemplo, os índices da primeira dimensão vão de 0 até 49, enquanto da segunda dimensão vão de 0 a 3. Graficamente, temos float notas[50][4] como

Declaração

notas!

[0]!

[1]!

[2]!

...!

[49]!

[0]! [1]! [2]! [3]!

No exemplo, declaramos notas[50][4] informando ao compilador o tamanho das duas dimensões como altura x largura ou linhas x colunas

Declaração

Ocorre praticamente igual aos vetores: podemos inicializar diretamente na declaração ou pela definição de valores conhecidos atribuídos durante um comando de repetição. A diferença é que agora vamos inicializar os valores da segunda dimensão.���

Exemplo: um array bidimensional tabela com três linhas e duas colunas pode ser inicializado da seguinte forma:

Inicialização

double tabela[3][2] = { {1.0, 0.0}, //Linha 0 ! {7.8, 1.3}, //Linha 1 ! {6.5, 0.0} //Linha 2 ! };!

Programa Notas double notas[50][4] = { {20121, 100, 90, 95}, ! {20122, 55, 65, 60}, ! {20123, 100, 100, 100},

! ! ! ! ! ! ! !… ! ! ! ! ! ! {20139, 10, 70, 40} !

};!

20121![0]!

[1]!

[2]!

...!

[49]!

[0]!

100!

[1]!

90!

[2]!

95!

[3]!

20122! 55! 65! 60!

20123! 100! 100! 100!

...! ...! ...! ...!

20139! 10! 70! 40!

Acesso aos dados

20121![0]!

[1]!

[2]!

...!

[49]!

[0]!

100!

[1]!

90!

[2]!

95!

[3]!

20122! 55! 65! 60!

20123! 100! 100! 100!

...! ...! ...! ...!

20139! 10! 70! 40!

Para acessar / usar os dados da matriz, deve-se utilizar seu nome (identificador) e indicar entre colchetes a linha e a coluna que deseja usar:

-notas[0][0] acessa o GRR do primeiro aluno; -notas[1][3] acessa a nota final do segundo aluno; -notas[49][1] e notas[49][2] retornam o que?

A leitura e a escrita de dados com matriz trabalha da mesma forma que os algoritmos de vetor. Qual a diferença? Agora você precisa controlar mais uma dimensão.

Ou seja, você precisa utilizar uma estrutura de repetição para controlar cada linha (altura) da matriz. E para cada linha, ler um a um os dados de cada coluna (largura) que é controlada por uma segunda estrutura de repetição.

Leitura e Escrita de Dados

Algoritmo:���

para l de 0 até LINHA faça: !para c de 0 até COLUNA faça: ! !cin >> matriz[l][c]; ���

Neste caso, para cada linha l o algoritmo lerá todas as colunas c (elemento por elemento), enquanto c < quantidade de colunas. Assim, a linha l é incrementada e os passos se repetem até a condição de saída do primeiro laço

Para a escrita dos dados, basicamente utilizamos o comando de saída + os caracteres que nos ajudarem a formatar a saída conforme nossa escolha.

Leitura e Escrita de Dados

Prática���Vamos ver na prática o algoritmo em C++

Exemplos���Exercícios Práticos

Fazer um programa em C++, que utilize uma matriz 10 x 10 para calcular, armazenar e mostrar na tela a tabuada de 0 a 9.

Problema Tabuada

Dado uma matriz de dimensões N x M pelo usuário, faça um programa que busca nesta matriz o menor elemento e mostre-o na tela, bem como sua posição na matriz (linha e coluna).

Encontrar menor elemento

Dúvidas

Exercícios

1) Faça um programa que leia uma matriz de números inteiros de dimensões N x M, e então mostre na tela a matriz da seguinte forma: se o elemento for par então mostre-o na tela, senão mostre um asterisco (*) no lugar daquele número.

2) Faça um programa que solicite do usuário as dimensões de uma matriz N x M e, então, solicite e leia duas matrizes A e B (de mesma dimensão). Em seguida, seu programa deve calcular a soma das duas matrizes (i.e. a soma de cada elemento) e salvar em uma terceira matriz C. Ao final mostre a matriz C na tela.

3) Dado uma matriz A de dimensões N x M, e um vetor V de tamanho M, faça um programa que gere uma matriz B, onde cada linha da matriz é a multiplicação de cada linha da matriz A pelo vetor V (ou seja, cada elemento da linha, multiplicado pelo elemento do vetor). Ao final mostre a matriz resultante na tela.

4) Faça um programa que leia uma matriz e então mostre na tela a matriz de forma transposta, ou seja, imprimir a matriz com linhas e colunas invertidas. Exemplo:

Entrada Saída 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 9