Estrutura de Dados Homogêneos
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 |
Em um novo projeto coloque um BitBtn e configure conforme indicado:
|
|
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 |
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).