Aula 09 - Estruturas de dados heterogêneas
84 pág.

Aula 09 - Estruturas de dados heterogêneas


DisciplinaLaboratório de Programação153 materiais2.482 seguidores
Pré-visualização4 páginas
do aluno\u201d
fim.
1
30
ref. \u201cdeclarar variáveis\u201d
cad_aluno ALUNO; // informação de um aluno
inteiro I; // subscrito para leitura do vetor de notas
ref. \u201cdefinir estrutura\u201d
inicio
ref. \u201cdeclarar variáveis\u201d
ref. \u201cler os dados de um aluno\u201d
ref. \u201cimprimir os dados do aluno\u201d
fim.
2
Exemplo Completo
31
ref. \u201cler dados de um aluno\u201d
leia(ALUNO.NOME);
para ( I = 0 ; I <= 3; I = I + 1 ) faça
{
leia(ALUNO.NOTA[I]);
}
ref. \u201cdefinir estrutura\u201d
inicio
ref. \u201cdeclarar variáveis\u201d
ref. \u201cler os dados de um aluno\u201d
ref. \u201cimprimir os dados do aluno\u201d
fim.
3
Exemplo Completo
32
ref. \u201cimprimir dados de um aluno\u201d
imprima(ALUNO.NOME);
para ( I = 0 ; I <= 3; I = I + 1 ) faça
{
imprima(ALUNO.NOTA[I]);
}
ref. \u201cdefinir estrutura\u201d
inicio
ref. \u201cdeclarar variáveis\u201d
ref. \u201cler os dados de um aluno\u201d
ref. \u201cimprimir os dados do aluno\u201d
fim.
4
Exemplo Completo
33
{definição da estrutura}
estrutura cad_aluno
{
caracter NOME[40];
real NOTAS[4];
}
principal
{
{declaração das variáveis}
cad_aluno ALUNO; 
inteiro I;
\ufffd Juntando todos os 
refinamentos.
{leitura dos dados de um aluno}
leia(ALUNO.NOME);
para ( I = 0 ; I <= 3; I = I + 1 ) faça
{
leia(ALUNO.NOTA[I]);
}
{impressão dos dados do aluno}
imprima(ALUNO.NOME);
para ( I = 0 ; I <= 3; I = I + 1 ) faça
{
imprima(ALUNO.NOTA[I]);
}
}
Exemplo Completo
34
#include <stdio.h>
#include <stdlib.h>
typedef struct cad_aluno
{
char nome[40];
float nota[4];
}aluno;
int main()
{
aluno aluno1; 
int i;
gets(aluno1.nome); 
for(i = 0; i <= 3; i++)
scanf(&quot;%f&quot;, &aluno1.nota[i]);
puts(aluno1.nome);
for(i = 0; i <= 3; i++)
printf(&quot;%f\n&quot;, aluno1.nota[i]);
return 0;
}
Exemplo Completo em C
35
\ufffd Como qualquer outra variável, uma variável do tipo estrutura pode ser 
usada como parâmetro. Também, uma variável do tipo estrutura pode 
ser passada para uma subrotina por referência ou por valor.
estrutura Texemplo
{
tipot CAMPO1;
tipot CAMPO2;
}
{.............................}
real fnc1(Texemplo X)
{
....
}
proc1(ref Texemplo Y)
{
....
fnc1(Y);
....
}
{..........................}
Texemplo fnc2(inteiro A)
{
Texemplo V;
....................
retorne V;
}
Definição da 
estrutura
Passagem por 
valor
Passagem por 
referência
Tipo de retorno 
da função
Subrotinas e estruturas
36
\ufffd Pode-se criar vetores de estruturas como se criam 
vetores de tipos primitivos.
\ufffd Os programas apresentados até o momento só
fizeram menção a uma única instância da estrutura.
\ufffd É necessário possuir uma definição da estrutura 
antes de declarar um vetor de estrutura.
Vetores de Estruturas
37
\ufffd Suponha que deseja-se manter um registro 
de informações relativas a passagens 
rodoviárias de todos lugares (poltronas) de 
um ônibus. 
Declaração de vetor de estrutura
38
\ufffd Pode-se utilizar uma estrutura referente a cada poltrona 
\ufffd (passagem) e para agrupar todas elas utiliza-se um vetor de 
estruturas.
\ufffd Um ônibus possui 44 lugares numerados de 0 a 43:
Nome:__________ Número:__________
De:______________ Para:_____________
Data:____/____/____ Horário:___________
Poltrona:__________ Distância:__________
0
1
43
Declaração de vetor de estrutura
39
\ufffd Declaração:
estrutura reg_passagem
{
caracter NOME[50];
inteiro NUMERO;
caracter ORIGEM[20];
caracter DESTINO[20];
caracter DATA[8];
caracter HORARIO[5];
inteiro POLTRONA;
real DISTANCIA;
}
reg_passagem VET_PASSAGEM[44];
Declaração de vetor de estrutura
Em C utilizaremos a 
mesma sintaxe para criar 
vetores de estruturas
40
Declaração de vetor de estrutura
\ufffd Acessos:
VET_PASSAGEM[3].NUMERO; 
VET_PASSAGEM[34].DISTANCIA;
VET_PASSAGEM[2].ORIGEM;
41
\ufffd Outro exemplo mais completo....
\ufffd Considere que você está fazendo um 
programa que leia o nome e as 4 notas 
escolares de 8 alunos.
Declaração de vetor de estrutura
42
Nome:______
4321
notasNome:______
4321
notasNome:______
4321
notasNome:______
4321
notasNome:______
4321
notasNome:______
4321
notasNome:______
4321
notas
Declaração de vetor de estrutura
\ufffd Esquematicamente:
Nome:______
4321
notas
0
1
2
3
4
5
6
7
Í n d
i c e
s d
o v
e t o
r
Cadastro de notas 
escolares
43
\ufffd Visão esquemática do vetor de estruturas:
Declaração de vetor de estrutura
Cadastro de notas 
escolares Nome:______
4321
notas
0
1
2
3
4
5
6
7
44
Declaração de vetor de estrutura
\ufffd Definição da estrutura e do vetor de 8 alunos.
estrutura cad_aluno
{
caracter NOME[40];
real NOTAS[4];
}
cad_aluno ALUNOS[8];
45
Leitura de um vetor de estrutura
le_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1) faça
{
leia(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
leia(A[I].NOTA[J]);
}
}
}
\ufffd Procedimento para ler os dados dos alunos:
Recebe, por referência, um 
vetor com oito alunos ( A[8] )
46
Leitura de um vetor de estrutura
le_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1) faça
{
leia(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
leia(A[I].NOTA[J]);
}
}
}
\ufffd Procedimento para ler os dados dos alunos:
Variáveis auxiliares
47
Leitura de um vetor de estrutura
le_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1) faça
{
leia(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
leia(A[I].NOTA[J]);
}
}
}
\ufffd Procedimento para ler os dados dos alunos:
Laço para ler os oito alunos
48
Leitura de um vetor de estrutura
le_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1) faça
{
leia(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
leia(A[I].NOTA[J]);
}
}
}
\ufffd Procedimento para ler os dados dos alunos:
Para cada aluno, um laço para 
ler as suas quatro notas
49
Escrita de um vetor de estrutura
\ufffd O processo de escrita de um vetor de estrutura é similar 
aos modos de escrita anteriores já vistos. 
imprime_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1 faça
{
imprima(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
imprima(A[I].NOTA[J]);
}
}
}
Todo vetor, quando passado 
por parâmetro, é passado por 
referência !!!!
50
Escrita de um vetor de estrutura
\ufffd O processo de escrita de um vetor de estrutura é similar 
aos modos de escrita anteriores já vistos. 
imprime_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1 faça
{
imprima(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
imprima(A[I].NOTA[J]);
}
}
}
Variáveis auxiliares
51
Escrita de um vetor de estrutura
\ufffd O processo de escrita de um vetor de estrutura é similar 
aos modos de escrita anteriores já vistos. 
imprime_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1 faça
{
imprima(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
imprima(A[I].NOTA[J]);
}
}
}
Laço para imprimir os oito 
alunos
52
Escrita de um vetor de estrutura
\ufffd O processo de escrita de um vetor de estrutura é similar 
aos modos de escrita anteriores já vistos. 
imprime_vetor_alunos(ref cad_aluno A[8])
{
inteiro I,J;
para (I = 0; I < 8; I = I + 1 faça
{
imprima(A[I].NOME);
para (J = 0; J < 4; J = J + 1) faça
{
imprima(A[I].NOTA[J]);
}
}
}
Para cada aluno, um laço para 
imprimir as suas quatro notas
53
Exemplo de vetores de estruturas em C
#include <stdio.h>
#include <stdlib.h>
typedef struct cad_aluno
{
char nome[40];
float notas[4];
}aluno;
void leVetorAlunos(aluno a[], int n)
{
int i, j;
for( i = 0; i < n; i++)
{
printf(&quot;Informe o nome do aluno&quot;);
gets(a[i].nome);
printf(&quot;Informe as 4 notas &quot;);
for( j = 0; j < 4; j++)
scanf(&quot;%f%*c&quot;, &a[i].notas[j]);
}
}
void imprimeVetorAlunos(aluno a[], int n)
{
int i, j;
printf(&quot;\nAlunos:&quot;);
for( i = 0; i < n; i++)
{
printf(&quot;\n%20s &quot;, a[i].nome);
for( j = 0; j < 4; j++)
printf(&quot;%.2f &quot;, a[i].notas[j]);
}
}
int main()
{
aluno alunos[8];
leVetorAlunos(alunos, 8);
imprimeVetorAlunos(alunos, 8);
return 0;
}
54
1) Defina uma estrutura para