Cassic

Estrutura de Dados Heterogêneos

Autor: Tadeu Pereira


  No exemplo anterior de matriz, recebemos quatro notas de dez alunos e geramos uma méedia geral, mas não foi possíel 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

Figura 1 – 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.