CASSIC
Estrutura de Dados Heterogêneos

  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.