A maior rede de estudos do Brasil

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

Pré-visualização | Página 2 de 4

do aluno”
fim.
1
30
ref. “declarar variáveis”
cad_aluno ALUNO; // informação de um aluno
inteiro I; // subscrito para leitura do vetor de notas
ref. “definir estrutura”
inicio
ref. “declarar variáveis”
ref. “ler os dados de um aluno”
ref. “imprimir os dados do aluno”
fim.
2
Exemplo Completo
31
ref. “ler dados de um aluno”
leia(ALUNO.NOME);
para ( I = 0 ; I <= 3; I = I + 1 ) faça
{
leia(ALUNO.NOTA[I]);
}
ref. “definir estrutura”
inicio
ref. “declarar variáveis”
ref. “ler os dados de um aluno”
ref. “imprimir os dados do aluno”
fim.
3
Exemplo Completo
32
ref. “imprimir dados de um aluno”
imprima(ALUNO.NOME);
para ( I = 0 ; I <= 3; I = I + 1 ) faça
{
imprima(ALUNO.NOTA[I]);
}
ref. “definir estrutura”
inicio
ref. “declarar variáveis”
ref. “ler os dados de um aluno”
ref. “imprimir os dados do aluno”
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;
� 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("%f", &aluno1.nota[i]);
puts(aluno1.nome);
for(i = 0; i <= 3; i++)
printf("%f\n", aluno1.nota[i]);
return 0;
}
Exemplo Completo em C
35
� 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
� Pode-se criar vetores de estruturas como se criam 
vetores de tipos primitivos.
� Os programas apresentados até o momento só
fizeram menção a uma única instância da estrutura.
� É necessário possuir uma definição da estrutura 
antes de declarar um vetor de estrutura.
Vetores de Estruturas
37
� 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
� Pode-se utilizar uma estrutura referente a cada poltrona 
� (passagem) e para agrupar todas elas utiliza-se um vetor de 
estruturas.
� 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
� 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
� Acessos:
VET_PASSAGEM[3].NUMERO; 
VET_PASSAGEM[34].DISTANCIA;
VET_PASSAGEM[2].ORIGEM;
41
� Outro exemplo mais completo....
� 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
� 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
� 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
� 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]);
}
}
}
� 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]);
}
}
}
� 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]);
}
}
}
� 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]);
}
}
}
� 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
� 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
� 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
� 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
� 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("Informe o nome do aluno");
gets(a[i].nome);
printf("Informe as 4 notas ");
for( j = 0; j < 4; j++)
scanf("%f%*c", &a[i].notas[j]);
}
}
void imprimeVetorAlunos(aluno a[], int n)
{
int i, j;
printf("\nAlunos:");
for( i = 0; i < n; i++)
{
printf("\n%20s ", a[i].nome);
for( j = 0; j < 4; j++)
printf("%.2f ", a[i].notas[j]);
}
}
int main()
{
aluno alunos[8];
leVetorAlunos(alunos, 8);
imprimeVetorAlunos(alunos, 8);
return 0;
}
54
1) Defina uma estrutura para

Crie agora seu perfil grátis para visualizar sem restrições.