Estruturas Básicas de Dados - Parte II


Estruturas de Dados Heterogêneas

 

No exemplo anterior de matriz, recebemos quatro notas de dez alunos e geramos uma média geral, mas não foi possível entrar com o nome do aluno na mesma matriz porque só podemos informar um tipo de dado por matriz criada.  Para usar mais de um tipo de dados utilizamos a estrutura de dados chamada registro.

 

Sintaxe:

  type

    TNome = record

      Campo_1: Tipo_1;

      Campo_2: Tipo_2;

      .

      .

      Campo_N: Tipo_N

    end;

 

Abra um novo projeto e configure conforme indicado:

 

Formulário

Propriedade

Valor

Height

298

Width

306

 

BitBtn

Propriedade

Valor

Kind

bkOK

Left

111

Name

BtnOk

Top

224

ListBox

Propriedade

Valor

Height

185

Left

24

Name

LBoxResultado

Top

16

Width

250

 

img

Figura 2 – Projeto DadosHeterogeneos.

 

Antes de utilizar um novo tipo de dado heterogêneo devermos criar o mesmo na seção type da unidade, para isso entre com o código abaixo na linha 19 da unidade:

 

TDiario = record

  Nome: string;

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

end;

 

O nosso projeto atual deverá solicitar o nome e as notas do aluno, ao ser informado todos os alunos e suas notas o resultado será mostrado no componente ListBox, para isso entre com o código em negrito no evento OnClick do componente BitBtn:

 

01

procedure TForm1.BtnOkClick(Sender: TObject);

02

var

03

  Diario: array [1..10] of TDiario;

04

  Soma, MdFinal: Real;

05

  Linha, Coluna: Integer;

06

  Nota: string;

07

begin

08

  LBoxResultado.Clear;

09

  for Linha := 1 to 10 do

10

    begin

11

      Diario[ Linha ].Nome := '';

12

      InputQuery('Média geral', 'Nome do ' + IntToStr( Linha ) +

13

        'º Aluno', Diario[ Linha ].Nome );

14

      for Coluna := 1 to 4 do

15

        begin

16

          Nota := '';

17

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

18

            IntToStr( Coluna ) +

19

              'ª nota do aluno ' + Diario[ Linha ].Nome, Nota );

20

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

21

        end;

22

      Diario[ Linha ].Media[5] :=  0;

23

    end;

24

  for Linha := 1 to 10 do

25

    begin

26

      For Coluna := 1 to 4 do

27

        begin

28

          Diario[ Linha ].Media[5] :=  Diario[ Linha ].Media[5] +

29

            Diario[ Linha ].Media[ Coluna ];

30

        end;

31

      Diario[ Linha ].Media[5] :=  Diario[ Linha ].Media[5] / 4;

32

    end;

33

  Soma := 0;

34

  for Linha := 1 to 10 do Soma := Soma + Diario[ Linha ].Media[5];

35

  MdFinal := Soma / 10;

36

  for Linha := 1 to 10 do

37

    begin

38

      LBoxResultado.Items.Add('Aluno : ' + Diario[ Linha ].Nome +

39

        ' - Média : ' + FloatToStr( Diario[ Linha ].Media[5] ) );

40

    end;

42

  LBoxResultado.Items.Add('');

43

  LBoxResultado.Items.Add('Média geral da turma : ' +

44

    FloatToStr( MdFinal ) );

45

end;

 

Na linha 03 temos a declaração da matriz Diario do tipo TDiario, como o tipo TDiario é uma registro com os campos Nome (tipo string) e Media (matriz do tipo Real), Diario será uma matriz com dados heterogêneos.

 

A linha 08 limpa o componente ListBox, enquanto a linha 12 é responsável por capturar o nome do aluno e a incluir na matriz Diario – para atribuir valor a um campo em uma matriz heterogênea devemos colocar um ponto depois dos colchetes e em seguida o nome campo desejado.

 

As linhas 36 à 44 mostram os resultados da matriz no componente ListBox, que nesse casso além da média individual também teremos o nome do aluno, após isso mostra a media geral da turma.

 

O restante do código é semelhante ao do exemplo anterior.

 

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