O que são Vetores e Matrizes (arrays)

O que são Vetores e Matrizes (arrays)

Vetores e Matrizes são estruturas de dados muito simples que podem nos ajudar muito quando temos muitas variáveis do mesmo tipo em um algoritmo. Imagine o seguinte problema: Você precisa criar um algoritmo que lê o nome e as 4 notas de 50 alunos, calcular a média de cada aluno e informar quais foram aprovados e quais foram reprovados. Conseguiu imaginar quantas variáveis você vai precisar? Muitas né? Vamos fazer uma conta rápida: 50 variáveis para armazenar os nomes dos alunos, (4 * 50 = ) 200 variáveis para armazenar as 4 notas de cada aluno e por fim, 50 variáveis para armazenar as médias de cada aluno. 300 variáveis no total, sem contar a quantidade de linhas de código que você vai precisar para ler todos os dados do usuário, calcular as médias e apresentar os resultados. Mas eu tenho uma boa notícia pra você. Nós não precisamos criar 300 variáveis! Podemos utilizar Vetores e Matrizes (também conhecidos como ARRAYs)!

O que são Vetores e Matrizes?

Vetor (array uni-dimensional) é uma variável que armazena várias variáveis do mesmo tipo. No problema apresentado anteriormente, nós podemos utilizar um vetor de 50 posições para armazenar os nomes dos 50 alunos.

 

Olá Algoritmizeiros, estamos chegando nos últimos posts da série, Aprenda a Programar, e hoje, iremos falar de vetores.

Até então, aprendemos o que é uma variável e como declarar variáveis em portugol, e fizemos isso inúmeras vezes em nossos algoritmos.

O nosso problema começa, quando temos que declarar inúmeras variáveis para atender a um fim.

Imagine que você tem que receber o nome e a nota de 50 alunos de uma escola, e depois listar o nome de cada um e a média final de cada aluno e a média da turma.

Agora imagine você na declaração de variáveis, declarando uma a uma, as 50 variáveis para o nome, depois as 50 variáveis para as notas…

1

2

3

var

aluno1, aluno2, aluno3, ........., aluno50: caractere

nota1, nota2, nota3, ............, nota50: real

Cansativo não? Acho que se fosse realmente assim, não haveria tantos programadores quanto há hoje em dia…

É em casos como esse que entra o assunto desse post. Vetores.

Vamos imaginar um vetor como sendo uma “caixa” com vários lugares separados para guardar seus documentos, ou seja, uma variável onde se pode armazenar mais de um dado.

https://algoritmizando.com/wp-content/uploads/2010/07/tabela1.jpg

Vetor de 8 posições

No exemplo abaixo, temos um vetor com dados armazenados nas 5 primeiras posições.

https://algoritmizando.com/wp-content/uploads/2010/07/vetor.jpg

Para poder acessar o conteúdo desse vetor, vamos utilizar a sintaxe: nome[posição].

Ex: meuvetor[2]
- O retorno será a letra B.

Interessante, mas como eu posso usar vetores nos algoritmos?

Para usar os vetores, primeiro temos que declará-lo na seção de variáveis. Sim, vetor também é uma variável!

A sintaxe para declaração do vetor é a seguinte:

1

2

var

  nome-do-vetor: vetor[<posições>] de <tipo>

Exemplo:

1

2

var

  MeuVetor: vetor[1..5] de caractere

Primeiro vem o nome do vetor, então onde antes colocávamos apenas o tipo, que era caractere, real, inteiro, etc., agora vamos especificar que é um vetor, colocar quantas posições ele terá, e finalmente o tipo.

E não se confundam, no campo das posições, são apenas 2 (dois) pontos mesmo. Se colocar mais que isso seu vetor não irá funcionar. E as lendas urbanas dizem que se seu vetor estiver errado seu visualg trava. Não fiz todos os testes para confirmar isso.

Agora, um exemplo simples para facilitar a vida de vocês:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

algoritmo "vetores by algoritmizando"

 

var

  x: vetor[1..2] de inteiro

 

inicio

 

escreval("Digite um número:  ")

leia(x[1])

escreval("Digite mais um número =D ")

leia(x[2])

escreval("Seus números digitados foram: ",x[1]," e ",x[2])

 

fimalgoritmo

E que tal, utilizar vetores junto com tudo o que aprendemos até aqui?

Atendendo ao pedido da leitora Fernanda no último post, dei início a um algoritmo que recebe 10 números, indica quais são os números ímpares maiores que 1 e menor que 726, qual a maior diferença entre dois números consecutivos informados pelo usuário e quais são múltiplos de 3.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

algoritmo "Aprenda a Programar 12"

 

var

 

numeros, impar, multiplo3: vetor[0..10] de inteiro

maiordif: vetor[1..3] de inteiro

x, y: inteiro

 

inicio

 

escreval("============ APRENDA A PROGRAMAR #12 BY ALGORITMIZANDO ============")

 

// Variável para calcular maior diferença entre dois números consecutivos. Serão usados mais tarde

maiordif[3] <- 0

 

para x de 1 ate 10 faca

 

     // Instrução para digitar o numero e guardá-lo numa variável

 

     escreval("Digite o ",x,"º número: ")

     leia(numeros[x])

 

     // Verificação se o número é ímpar maior que 2 e menor que 726

 

    se ((numeros[x] mod 2) <> 0) entao

        se numeros[x] > 1 entao

            se numeros[x] < 726 entao

                impar[x] <- numeros[x]

            fimse

        fimse

    fimse

 

     // Verificação se o número é múltiplo de 3

 

    se ((numeros[x] mod 3) = 0) entao

    multiplo3[x] <- numeros[x]

    fimse

 

    // Maior diferença entre dois números consecutivos.

 

    y <- x - 1

    se ((numeros[x] - numeros[y]) > maiordif[3]) entao

        maiordif[3] <- numeros[x] - numeros[y]

        maiordif[1] <- numeros[x]

        maiordif[2] <- numeros[y]

    fimse

 

    limpatela

    escreval("============ APRENDA A PROGRAMAR #12 BY ALGORITMIZANDO ============")

fimpara

 

limpatela

escreval("============ APRENDA A PROGRAMAR #12 BY ALGORITMIZANDO ============")

escreval("")

escreval("==== NÚMEROS ÍMPARES MAIOR QUE 2 E MENOR QUE 726 ====")

para x de 1 ate 10 faca

   escreval(x,"º Número ímpar: ",impar[x])

fimpara

escreval("")

escreval("==== NÚMEROS MÚLTIPLOS DE 3 ====")

para x de 1 ate 10 faca

    escreval(x,"º Número múltiplo de 3: ",multiplo3[x])

fimpara

escreval("")

escreval("==== MAIOR DIFERENÇA ENTRE NÚMEROS CONSECUTIVOS ====")

escreval("A maior diferença está entre os números: ",maiordif[2]," e",maiordif[1])

escreval("Diferença de: ",maiordif[3])

 

fimalgoritmo

Agora é com vocês… aproveitem o exemplo acima e façam seus testes, crie novas funções e nos diga sobre suas experiências com vetores nos comentários.

 

Matriz (array multi-dimensional) é um vetor de vetores. No nosso problema, imagine uma matriz para armazenar as 4 notas de cada um dos 50 alunos. Ou seja, um vetor de 50 posições, e em cada posição do vetor, há outro vetor com 4 posições. Isso é uma matriz.

Cada item do vetor (ou matriz) é acessado por um número chamado de índice.

Vamos representar os vetores e matrizes graficamente para facilitar o entendimento do conceito.

Podemos ver na imagem acima que cada posição do vetor é identificado por um número (chamado de índice), no caso da matriz são dois números (um na vertical e um na horizontal).

Vetores e Matrizes na prática!

Tomando o exemplo apresentado no início deste artigo, vamos implementar o algoritmo utilizando o Visualg. Nele, vamos usar algumas estruturas básicas já apresentadas aqui, tais como A estrutura de repetição PARA e a estrutura de decisão SE-ENTÃO-SENÃO. (Neste algoritmo vamos reduzir o número de alunos de 50 para 5, para facilitar a visualização do resultado.)

Saiba o que é o Visualg, como instalar e criar os seus primeiros algoritmos!

Preste muita atenção no modo como é criado o Vetor e a Matriz e também a forma como é acessada cada posição.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

algoritmo "MediaDe5Alunos"

// Função : Calcular a média das notas de 10 alunos e apresentar quem foi aprovado ou reprovado

// Autor : Gustavo

// Seção de Declarações

var

 

   nomes: vetor [1..5] de caractere

   notas: vetor [1..5,1..4] de real

   medias: vetor [1..5] de real

   contadorLoop1, contadorLoop2: inteiro

 

inicio

 

      //Leitura dos nomes e as notas de cada aluno

      PARA contadorLoop1 DE 1 ATE 5 FACA

           ESCREVA("Digite o nome do aluno(a) número ", contadorLoop1, " de 5: ")

           LEIA(nomes[contadorLoop1])

           PARA contadorLoop2 DE 1 ATE 4 FACA

                ESCREVA("Digite a nota ", contadorLoop2, " do aluno(a) ",     nomes[contadorLoop1], ": ")

                LEIA(notas[contadorLoop1, contadorLoop2])

           FIMPARA

           //CÁLCULO DAS MÉDIAS

           medias[contadorLoop1] := (notas[contadorLoop1, 1] + notas[contadorLoop1, 2] + notas[contadorLoop1, 3] + notas[contadorLoop1, 4]) / 4

      FIMPARA

 

      //APRESENTAÇÃO DOS RESULTADOS

      PARA contadorLoop1 DE 1 ATE 5 FACA

           SE medias[contadorLoop1] >= 6 ENTAO

              ESCREVAL("O aluno(a) ", nomes[contadorLoop1], " foi aprovado com as notas (", notas[contadorLoop1, 1], ", ", notas[contadorLoop1, 2], ", ", notas[contadorLoop1, 3], ", ", notas[contadorLoop1, 4], ") e média: ", medias[contadorLoop1])

           SENAO

              ESCREVAL("O aluno(a) ", nomes[contadorLoop1], " foi reprovado com as notas (", notas[contadorLoop1, 1], ", ", notas[contadorLoop1, 2], ", ", notas[contadorLoop1, 3], ", ", notas[contadorLoop1, 4], ") e média: ", medias[contadorLoop1])

           FIMSE

      FIMPARA

 

fimalgoritmo

Repare que os arrays (vetores ou matrizes) aliados a estrutura de repetição PARA é um ótimo recurso para algoritmos que precisam de muitas variáveis do mesmo tipo.

Se você é iniciante em programação este algoritmo pode parecer complexo para você, se houver dúvidas não se acanhe em deixar um comentário aí em baixo que vamos te ajudar. Pra aprender programação (e qualquer outra coisa) o mais importante é a força de vontade!

Um resultado do algoritmo acima pode ser observado a seguir:

Digite o nome do aluno(a) número 1 de 5: Gustavo

Digite a nota 1 do aluno(a) Gustavo: 9

Digite a nota 2 do aluno(a) Gustavo: 10

Digite a nota 3 do aluno(a) Gustavo: 9,5

Digite a nota 4 do aluno(a) Gustavo: 8

Digite o nome do aluno(a) número 2 de 5: João

Digite a nota 1 do aluno(a) João: 5

Digite a nota 2 do aluno(a) João: 6

Digite a nota 3 do aluno(a) João: 4,5

Digite a nota 4 do aluno(a) João: 7

Digite o nome do aluno(a) número 3 de 5: Pedro

Digite a nota 1 do aluno(a) Pedro: 7

Digite a nota 2 do aluno(a) Pedro: 8,5

Digite a nota 3 do aluno(a) Pedro: 6

Digite a nota 4 do aluno(a) Pedro: 7

Digite o nome do aluno(a) número 4 de 5: Luciana

Digite a nota 1 do aluno(a) Luciana: 10

Digite a nota 2 do aluno(a) Luciana: 7

Digite a nota 3 do aluno(a) Luciana: 7,5

Digite a nota 4 do aluno(a) Luciana: 8

Digite o nome do aluno(a) número 5 de 5: Augusto

Digite a nota 1 do aluno(a) Augusto: 5

Digite a nota 2 do aluno(a) Augusto: 5,5

Digite a nota 3 do aluno(a) Augusto: 7,5

Digite a nota 4 do aluno(a) Augusto: 6

O aluno(a) Gustavo foi aprovado com as notas ( 9, 10, 9.5, 8) e média: 9.125

O aluno(a) João foi reprovado com as notas ( 5, 6, 4.5, 7) e média: 5.625

O aluno(a) Pedro foi aprovado com as notas ( 7, 8.5, 6, 7) e média: 7.125

O aluno(a) Luciana foi aprovado com as notas ( 10, 7, 7.5, 8) e média: 8.125

O aluno(a) Augusto foi aprovado com as notas ( 5, 5.5, 7.5, 6) e média: 6

*** Fim da execução.

*** Feche esta janela para retornar ao Visualg.

 

Finalizando nosso estudo de algoritmos, iremos aprender hoje sobre variáveis compostas homogenias, ou seja… Matriz.

Antes de dar continuidade na leitura, recomendo que já estejam familiarizados com o assunto do post anterior, Vetores.

Afinal, o que é uma matriz?

Uma matriz, é nada mais, do que Vetores bi-dimensionais. Onde podemos acessar os dados ali contidos através de dois valores. As “linhas” e as “colunas”. Vocês entenderão logo!

Sintaxe…

1

nome: vetor[<linhas>,<colunas>] de <tipo>

Exemplo:

1

minhavar: vetor[1..3,1..3] de caractere

Onde o primeiro valor refere-se as linhas e o segundo as colunas. O exemplo acima, refere-se a criação de uma matriz com 3 linhas e 3 colunas, conforme imagem abaixo:

https://algoritmizando.com/wp-content/uploads/2010/10/matriz1.png

Como eu posso atribuir ou visualizar dados de minha matriz?

Para atribuir dados a uma determinada posição em uma Matriz, manteremos o mesmo padrão para variáveis comuns ou vetores.

* Para atribuir um determinado valor:

1

melhorblog[1,2] <- "Algoritmizando"

Atribui a palavra Algoritmizando na posição (1,2) da matriz melhorblog.

* Para ler determinado valor:

1

2

3

...

escreva("O melhor blog é: ",melhorblog[1,2])

...

Lê o valor que se encontra na posição (1,2) da matriz melhorblog.

E agora, um “pequeno” algoritmo, utilizando praticamente tudo o que vimos durante todos esses posts de algoritmos, inclusive o assunto desse post de hoje, Matriz:

Sistema de cadastro de alunos:

  • Fazer um programa de cadastro de alunos;
  • O programa deverá receber o nome, blog favorito e email de cada um dos alunos;
  • Após o cadastro, fornecer as seguintes opções:
  1. Consultar alunos cadastrados
  2. Consultar blogs favoritos por aluno
  3. Lista de emails cadastrados
  4. Lista completa, com todos os dados dos alunos cadastrados
  5. Finalizar o programa

Observação: O Programa só poderá ser finalizado quando escolhida a opção nº 5

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

algoritmo "Aprenda a Programar #13 - Matriz"

// Autor : Algoritmizando

// Seção de Declarações

var

alunos: vetor[1..2,1..3] de caractere

x, opcao, programa: inteiro

 

inicio

// Seção de Comandos

para x de 1 ate 2 faca

    escreval("============================")

    escreval("==== CADASTRO DE ALUNOS ====")

    escreval("============================")

    escreval("")

    escreva("Digite um Nome: ")

    leia(alunos[x,1])

    escreva("")

    escreva("Digite o blog favorito: ")

    leia(alunos[x,2]) // https://algoritmizando.com

    escreva("Informe o email: ")

    leia(alunos[x,3])

    limpatela

fimpara

limpatela

 

// Seta a variável 'programa' = 1 para manter o mesmo em execução

// Nosso programa só irá terminar quando esta variável for igual a zero

 

programa <- 1

 

enquanto programa = 1 faca

    escreval("")

    escreval("============================")

    escreval("==== CADASTRO DE ALUNOS ====")

    escreval("============================")

    escreval("")

    escreval("Digite a opção desejada: ")

    escreval("1 - Consulta Alunos Cadastrados")

    escreval("2 - Consulta Blogs Favoritos por aluno")

    escreval("3 - Lista de emails cadastrados")

    escreval("4 - Lista completa de alunos cadastrados")

    escreval("5 - Sair do Programa")

    escreval("")

    // Escolhendo a opção desejada...

    leia(opcao)

    limpatela

    escolha(opcao)

        caso 1

            escreval("---- Alunos Cadastrados: ")

            para x de 1 ate 2 faca

                escreval("---- ",alunos[x,1])

            fimpara

        caso 2

            escreval("---- Blogs favoritos por aluno: ")

            para x de 1 ate 2 faca

                 escreval("---- ",alunos[x,1],"    ",alunos[x,2])

            fimpara

        caso 3

            escreval("---- Lista de emails cadastrados: ")

            para x de 1 ate 2 faca

                escreval("---- ",alunos[x,3])

            fimpara

        caso 4

            escreval("---- Lista completa de alunos cadastrados: ")

            para x de 1 ate 2 faca

                escreval("---- ",alunos[x,1],"    ", alunos[x,2],"    ", alunos[x,3])

            fimpara

        caso 5

            escreval("==== OBRIGADO POR ACESSAR O BLOG! ====")

            programa <- 0

        outrocaso

            escreval("Opção Inválida...")

    fimescolha

fimenquanto

 

fimalgoritmo

Não entendeu? veja abaixo onde foi explicado cada trecho de nosso programa…

Caso prefira, você pode fazer o download de nosso algoritmo e testar no VisualG:

Cadastro de Alunos - Aprenda a Programar #13 (197)

Que tal praticar agora tudo o que você aprendeu?

Disponibilizamos para vocês 40 exercícios de Algoritmos e suas respectivas soluções. Mais de 2 mil pessoas já baixaram, está esperando o que para baixar e começar a praticar?

E aqui termina o último post da série ‘Aprenda a Programar’!

Continue Estudando!!!

Quer continuar estudando e se tornar um excelente programador? Recomendo a leitura do livro: Algoritmos e Programação – Teoria e Prática da editora Novatec. Vale a pena dar uma olhada.

Aprenda PHP no Algoritmizando!

PHP é uma das linguagens de programação mais utilizadas nos dias atuais, com ela é possível desenvolver desde simples páginas web até mesmo poderosos sistemas que rodam em qualquer navegador.

E o Algoritmizando agora ensina vocês a aprender a programar em PHP partindo do zero!

 

Conclusão

Como você pode perceber nesse artigo, Vetores e Matrizes são, na verdade, a mesma coisa: array a diferença é que o vetor é um array de apenas 1 dimensão e a matriz é um array de 2 (ou mais) dimensões.

Array é uma das estruturas de dados mais simples que existe e uma das mais utilizadas também. Acho que todas as linguagens de programação têm arrays, pelo menos ainda não conheço uma linguagem que não tem. Porém, os índices podem mudar dependendo da linguagem, algumas começam os índices do array com 1 e outras com 0, essa é a grande diferença que geralmente encontramos entre linguagens. No caso das linguagens que começam os arrays com o índice 0, o último elemento do array recebe o índice (<tamanho do array> – 1).

Sondagem

Avalia o Site

Optimo (111)
55%

Muito Bom (38)
19%

Bom (16)
8%

Regular (19)
9%

Mao (17)
8%

Total de votos: 201