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:
TNome = record
Campo_1: Tipo_1;
Campo_2: Tipo_2;
...
Campo_N: Tipo_N
end;
Abra um novo projeto e configure conforme indicado:
|
|||||||||||||||||||||||||||
|
|
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.