Estruturas Básicas de Dados - Parte I


Estruturas de Dados Homogêneas

 

Quando se deseja criar uma quantidade grande de variáveis de um mesmo tipo e com função semelhante torna-se muito difícil cria e controla todas como mostrado abaixo:

 

var

  nome1, nome2, nome3, ... , nome100: string;

 

Para evitar-se esse tipo de transtorno podemos usar a criação de um agrupamento de variáveis de um mesmo tipo, essa estrutura de dados recebe diversos nomes:

 

-          Variáveis indexadas 

-          Variáveis compostas 

-          Variáveis subscritas 

-          Arranjos 

-          Vetores 

-          Matrizes 

-          Tabela em memória 

-          etc.

 

Sintaxe:

  Nome_Matriz: array [quantidade de ocorrências] of Tipo;

 

var

  nome: array [1..100] of string;

 
Matriz de uma Dimensão

 

As matrizes de uma dimensão, também conhecida como matriz unidimensional, guarda cada valor desejado em uma linha (uma coluna e várias linhas).

 

Nº Aluno – Índice

Média – Tipo Real

1

4,5

2

6,5

3

7,0

4

7,5

5

5,0

6

9,5

7

8,0

8

3,5

9

7,5

10

8,5

Média da Turma

6,75

Tabela 1 – Exemplo de matriz de uma dimensão.

 

Em um novo projeto coloque um BitBtn e configure conforme indicado:

 

Formulário

Propriedade

Valor

Height

133

Width

225

BitBtn

Propriedade

Valor

Kind

bkOK

Left

71

Name

BtnOk

Top

37

 

Figura 1 – Projeto Matriz.

 

Entre com código a seguir no evento OnClick do BitBtn, após compile e teste o programa utilizando a tabela 1:

 

01

procedure TForm1.BtnOkClick(Sender: TObject);

02

var

03

  Media: array [1..10] of Real;

04

  Soma, MdFinal: Real;

05

  Contador: Integer;

06

  MdEntrada: string;

07

begin

08

  for Contador := 1 to 10 do

09

    begin

10

      MdEntrada := '';

11

      InputQuery('Média geral', 'Informe a média do aluno ' +

12

        IntToStr( Contador ),MdEntrada );

13

      Media[ Contador ] := StrToFloat( MdEntrada );

14

    end;

15

  Soma := 0;

16

  for Contador := 1 to 10 do Soma := Soma + Media[ Contador ];

17

  MdFinal := Soma / 10;

18

  MessageDlg('A média geral da turma é ' +

19

    FloatToStr( MdFinal ), mtInformation, [mbOk], 0);

20

end;

 

A declaração da matriz é feita na linha 03, a matriz Media é do tipo real e tem tamanho 10, a entrada de valor nessa matriz é feito dentro do looping que inicia na linha 08 e termina na linha 14.

 

Na linha 11 temos a função InputQuery, essa função abre uma caixa de diálogo onde o titulo é o primeiro parâmetro(Média geral), essa caixa de diálogo também tem um rotulo com uma informação(Informe a média do aluno n) acima de uma caixa de texto que recebe o valor de uma variável(MdEntrada) e retorna o valor digitado pelo usuário na mesma variável.

 

A linha 16 totaliza as médias digitadas pelo usuário para calcular a média geral na linha 17.

 

Por fim a linha 18 mostra a média geral através da função MessageDlg, essa função é uma caixa de diálogo onde a string “A média geral da turma é x” é a mensagem da caixa de diálogo, mtInformation é o tipo e ícone que será mostrado na caixa de dialogo, mbOk o botão que será utilizado e o ultimo parâmetro é a página do help(zero) que seria chamada caso tivesse sido informado mbHelp no terceiro parâmetro.

 
Matriz com mais de uma Dimensão

 

Uma matriz de duas dimensões estará sempre fazendo menção a colunas e linhas (várias colunas e várias linhas).

 

Nº Aluno

Índice

Nota 01

Tipo Real

Nota 02

Tipo Real

Nota 03

Tipo Real

Nota 04

Tipo Real

Média

Tipo Real

1

3,5

5,0

7,5

2,0

4,5

2

7,5

8,0

3,0

7,5

6,5

3

7,0

6,5

7,5

7,0

7,0

4

5,5

7,0

8,0

9,5

7,5

5

7,0

5,0

4,5

3,5

5,0

6

9,5

9,0

10

9,5

9,5

7

7,0

8,0

9,0

8,0

8,0

8

2,5

2,5

1,0

8,0

3,5

9

7,5

9,0

6,5

7,0

7,5

10

8,0

9,0

7,5

9,5

8,5

Média da Turma

6,75

Tabela 2 – Exemplo de matriz com mais de uma dimensão.

 

Utilizando o projeto anterior, altere apenas o código existente no evento OnClick do componente BitBtn, após compile e teste o programa utilizando a tabela 2:

 

01

procedure TForm1.BtnOkClick(Sender: TObject);

02

var

03

  Media: array [1..10,1..5] of Real;

04

  Soma, MdFinal: Real;

05

  Linha, Coluna: Integer;

06

  MediaAluno, Nota: string;

07

begin

08

  for Linha := 1 to 10 do

09

    begin

10

      for Coluna := 1 to 4 do

11

        begin

12

          Nota := '';

13

          InputQuery('Média geral', 'Informe a ' +

14

            IntToStr( Coluna ) + 'ª nota do aluno ' +

15

              IntToStr( Linha ), Nota );

16

          Media[ Linha, Coluna ] := StrToFloat( Nota );

17

        end;

18

      Media[ Linha, 5 ] :=  0;

19

    end;

20

  for Linha := 1 to 10 do

21

    begin

22

      for Coluna := 1 to 4 do

23

        begin

24

          Media[ Linha, 5 ] :=  Media[ Linha, 5 ] +

25

            Media[ Linha, Coluna ];

26

        end;

27

      Media[ Linha, 5 ] :=  Media[ Linha, 5 ] / 4;

28

    end;

29

  Soma := 0;

30

  MediaAluno := '';

31

  for Linha := 1 to 10 do

32

    begin

33

      Soma := Soma + Media[ Linha, 5 ];

34

      MediaAluno := MediaAluno + 'Média do Aluno ' +

35

        IntToStr( Linha ) + ' : ' +

36

          FloatToStr( Media[ Linha, 5 ] ) +#13;

37

    end;

38

  MdFinal := Soma / 10;

39

  MessageDlg( MediaAluno +#13+

40

    'A média geral da turma é ' +

42

      FloatToStr( MdFinal ), mtInformation, [mbOk], 0);

43

end;

 

Na linha 03 é feita a declaração da matriz que nesse caso tem duas dimensões e apelidaremos de linha e coluna respectivamente, a entrada dos valores propostos na tabela 2 é feito nas linhas 08 à 19 onde temos dois loopings aninhados, o primeiro passar por todas as linhas, já o segundo looping passará pelas quatro primeiras colunas que serão responsáveis por guardar as notas do aluno.

 

Os loopings aninhados farão com que a matriz seja completada uma linha por vez até a quinta coluna, ou seja, quando o looping externo estiver na linha 1 o looping interno tratará de preencher as colunas 1, 2, 3 e 4 com os dados digitado pelo usuário e iguala a 5ª coluna a zero, em seguida vai a linha 2 e preenche as colunas 1, 2, 3 e 4 com os dados digitado pelo usuário e iguala a 5ª coluna a zero, repetindo esse processo em todas as 10 linhas da matriz.

 

Nas linhas 20 à 28 semelhante as linhas 08 à 19 temos dois loopings aninhados, mas nesse caso eles são responsáveis por calcular a media e colocar o resultado na quinta coluna da matriz.

 

O looping iniciado na linha 31 tem a função de fazer a soma de todas as médias e colocar na variável Soma ao mesmo tempo em que a variável MediaAluno acumula o número da linha e a média da mesma sempre entrando com uma quebra de linha no final da atribuição a cada iteração.

 

Por fim a linha 39 mostra a média de cada linha(aluno) assim como a média final(geral da turma).

 

Este artigo foi cedido por http://www.cassic.com.br/