Buscar

Aula_012 - Tipos Estruturados V

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
Professores:
Dante Corbucci Filho
Alexandre Plastino
Conteúdo:
- Tipos Estruturados (5a- Parte)
 - Conjunto (Set)
 
Aula 12
2
Conjunto (Set)
 Em Pascal, uma variável pode conter um conjunto de 
elementos de um mesmo tipo escalar (tipo-base).
 Para tanto, esta variável deve ser definida com
o tipo conjunto (set of).
 type T_Cor_Primaria = (Vermelho, Verde, Azul);
 T_Cores = set of T_Cor_Primaria;
 var Palheta : T_Cores;;
 A variável Palheta pode conter qualquer subconjunto 
dos elementos enumerados T_Cor_Primaria.
3
Conjunto (Set)
 type T_Cor_Primaria = (Vermelho, Verde, Azul);
 T_Cores = set of T_Cor_Primaria;
 var Palheta : T_Cores;
 A variável Palheta, do tipo conjunto, pode assumir 
os seguintes valores:
 - { } (conjunto vazio)
 - {Vermelho}, {Verde}, {Azul}
 - {Vermelho,Verde}, {Vermelho,Azul}, {Verde,Azul}
 - {Vermelho,Verde,Azul}
4
Declaração do Tipo Set
 type T_Conjunto = set of TipoEscalarBase;
 Qualquer variável declarada com o tipo 
T_Conjunto deverá conter um subconjunto dos 
elementos definidos no TipoEscalarBase.
 Em Pascal, o número máximo de elementos em 
um conjunto é 256.
 Se TipoEscalarBase possuir n elementos, 
então a variável do tipo T_Conjunto poderá assumir 
2n valores distintos, onde n≤256.
5
Declaração do Tipo Set
 type 
 T_Cor_Primaria = (Vermelho, Verde, Azul);
 T_Cores = set of T_Cor_Primaria;
 var 
 Palheta : T_Cores;
 
 Neste exemplo, a variável Palheta pode conter 
um dos 8 (23) diferentes subconjuntos do tipo escalar 
base T_Cor_Primaria.
 - { } (conjunto vazio)
 - {Vermelho}, {Verde}, {Azul}
 - {Vermelho,Verde}, {Vermelho,Azul}, {Verde,Azul}
 - {Vermelho,Verde,Azul}
6
Exemplos
A) Um conjunto para representar o jogo bingo:
 Type
 T_Pedra = 0 . . 99;
 T_Saco = set of Pedra;
 Var
 Bingo: T_Saco;
B) Um conjunto de caracteres:
 Var
 Conj_Caracteres: set of char;
7
Como Especificar um Conjunto
 Em Pascal, o valor de um conjunto é definido 
entre colchetes. A definição dos elementos do conjunto 
pode ser feita das seguintes formas:
 - pela enumeração dos elementos do tipo base:
 [1, 2, 3] ou [’a’, ’e’, ’i’, ’o’, ’u’]
 - pela definição de intervalos sobre o tipo base:
 [1 . . 20] ou [’a’ . . ’z’] 
 - pela combinação das duas formas:
 [’a’ . . ’z’, ’0’ . . ’9’, ’.’]
 
8
Atribuição
 Considerando-se as definições anteriores das 
variáveis Palheta, Bingo e Conj_Caracteres, as seguintes
atribuições seriam válidas:
 Palheta:= [Vermelho, Verde, Azul];
 Bingo:= [1 . . 75];
 Conj_Caracteres:= [’A’ . . ’Z’, ’0’ . . ’9’, chr(12)];
9
Operadores para Conjuntos
UNIÃO (+)
 O conjunto resultante da união de dois conjuntos 
A e B é formado por todo elemento que pertence a A 
ou que pertence a B (ou a ambos).
 x ∈ (A + B) ⇔ x ∈ A ou x ∈ B 
 [1, 3, 4] + [1, 2, 4] = [1, 2, 3, 4]
 [1, 3] + [2, 4] = [1, 2, 3, 4]
 [’A’, ’C’, ’E’] + [’B’, ’C’, ’D’] = [’A’, ’B’, ’C’, ’D’, ’E’] 
 [’C’] + [’B’, ’C’, ’D’] = [’B’, ’C’, ’D’] 
 
10
Operadores para Conjuntos
INTERSEÇÃO (*)
 O conjunto resultante da interseção de dois 
conjuntos A e B é formado por todo elemento que 
pertence a A e que pertence a B.
 x ∈ (A * B) ⇔ x ∈ A e x ∈ B
 
 [1, 3, 4] * [1, 2, 4] = [1, 4]
 [1, 3] * [2, 4] = [ ]
 [’A’, ’C’, ’E’] * [’B’, ’C’, ’D’] = [’C’] 
 [’C’] * [’B’, ’C’, ’D’] = [’C’] 
 
11
Operadores para Conjuntos
DIFERENÇA (-)
 O conjunto resultante da diferença entre dois 
conjuntos A e B é formado por todo elemento que 
pertence a A e que não pertence a B.
 x ∈ (A - B) ⇔ x ∈ A e x ∉ B 
 
 [1, 3, 4] - [1, 2, 4] = [3]
 [1, 3] - [2, 4] = [1, 3]
 [’A’, ’C’, ’E’] - [’B’, ’C’, ’D’] = [’A’, ’E’] 
 [’C’] - [’B’, ’C’, ’D’] = [ ] 
 
12
Operadores para Conjuntos
 
Type
 Meses = ( Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez );
 T_Periodo = set of Meses;
Var
 PeriodoLetivo : T_Periodo;
 FeriasFimAno, FeriasMeioAno, Ferias : T_Periodo;
 Ano : T_Periodo;
begin
 . . . 
 Ano := [Jan . . Dez];
 FeriasFimAno := [Jan, Fev, Dez];
 FeriasMeioAno := [Jul];
 Ferias := FeriasFimAno + FeriasMeioAno;
 Periodo := Ano - Ferias;
 . . . 
End. 
13
Operadores Relacionais para Conjuntos
 
IGUAL (=) e DIFERENTE (<>)
 Sejam A e B dois conjuntos.
 A = B é verdadeiro ⇔ A e B contêm os mesmos
 elementos; 
 A <> B é verdadeiro, em caso contrário. 
 
 [1, 3] = [1, 3] é verdadeiro [1, 3] <> [1, 3] é falso
 [1, 3] = [3, 1] é verdadeiro [1, 3] <> [3, 1] é falso
 [1, 3] = [1, 2] é falso [1, 3] <> [1, 2] é verdadeiro
 [1, 3] = [ ] é falso [1, 3] <> [ ] é verdadeiro
14
Operadores Relacionais para Conjuntos
 
CONTÉM (>=) e ESTÁ CONTIDO (<=)
 Sejam A e B dois conjuntos.
 A <= B é verdadeiro ⇔ todo elemento de A está em B.
 A >= B é verdadeiro ⇔ todo elemento de B está em A. 
 
 [1, 3] <= [1, 2, 3, 4] é verdadeiro [1, 3] >= [1, 2, 3, 4] é falso
 [1, 3] <= [1, 3] é verdadeiro [1, 3] >= [1, 3] é verdadeiro
 [ ] <= [1, 3] é verdadeiro [ ] >= [1, 3] é falso
 [1, 2, 3, 4] <= [1, 3] é falso [1, 2, 3, 4] >= [1, 3] é verdadeiro 
 [1, 3] <= [ ] é falso [1, 3] >= [ ] é verdadeiro
15
Operadores Relacionais para Conjuntos
 
PERTINÊNCIA (in)
 Seja A um conjunto.
 Seja x um elemento do mesmo tipo dos elementos de A. 
 x in A é verdadeiro ⇔ x é um elemento de A. 
 
 3 in [1, 2, 3, 4] é verdadeiro 
 5 in [1, 2, 3, 4] é falso
 1 in [ ] é falso 
16
 Este programa gera e imprime os números primos 
entre 2 e N (informado pelo teclado), usando o algoritmo 
"Crivo de Eratóstenes".
Program Eratostenes(input{teclado}, output{vídeo});
Type
 T_Numeros = set of Byte;
Var
 Primos : T_Numeros;
 N : Byte;
Begin 
End. 
17
Program Eratostenes(input{teclado}, output{vídeo});
Type
 T_Numeros = set of Byte;
Var
 Primos : T_Numeros;
 N : Byte;
Begin 
 LeNumero(N);
 GeraPrimos(N,Primos);
 ImprimePrimos(N,Primos);
End. 
18
Program Eratostenes(input{teclado}, output{vídeo});
Type
 T_Numeros = set of Byte;
Procedure LeNumero(Var Num{s}: Byte);
begin 
end;
Procedure GeraPrimos(Num{e}: Byte; Var NPrimos{s}: T_Numeros); 
begin 
end;
Procedure ImprimePrimos(Num{e}: Byte; NPrimos{e}: T_Numeros); 
begin 
end;
...
Begin 
 LeNumero(N);
 GeraPrimos(N,Primos);
 ImprimePrimos(N,Primos);
End. 
19
Program Eratostenes(input{teclado}, output{vídeo});
. . .
Procedure LeNumero(Var Num{s}: byte);
 begin 
 repeat
 write(output, ’Entre com o valor de N: ’);
 readln(input, Num);
 until Num>1;
 end;
. . .Begin 
 LeNumero(N);
 GeraPrimos(N,Primos);
 ImprimePrimos(N,Primos);
End. 
20
Procedure GeraPrimos(Num{e}: byte; Var NPrimos{s}: T_Numeros); 
 var 
 Prox, J: integer;
 Crivo: T_Numeros;
 begin 
 Crivo := [2 . . Num]; 
 NPrimos := [ ];
 Prox := 2;
 repeat
 while not ( Prox in Crivo ) do Prox := Prox+1;
 Nprimos := Nprimos + [Prox];
 J := Prox;
 while J <= Num do
 begin
 Crivo := Crivo - [J];
 J := J + Prox
 end
 until Crivo = [ ]
 end; 
21
Executável
Código Fonte
Program Eratostenes(input{teclado}, output{vídeo});
. . .
Procedure ImprimePrimos(Num{e}: byte; NPrimos{e}: T_Numeros); 
 var candidato: integer;
 begin 
 write(output, ’São Primos entre 2 e ’, Num, ’: ’);
 for candidato := 2 to Num do
 if candidato in NPrimos then 
 writeln (output, candidato, ’ ’);
 end;
. . .
Begin 
 LeNumero(N);
 GeraPrimos(N,Primos);
 ImprimePrimos(N,Primos);
End. 
22
 Este procedimento imprime o número de 
vogais, consoantes e espaços em branco existentes 
em uma frase.
Const 
 Tam_Frase = 100;
 Branco = ’ ’;
 Vogais = [’A’, ’E’, ’I’, ’O’, ’U’, ’a’, ’e’, ’i’, ’o’, ’u’];
 Consoantes = [’A’ . . ’Z’, ’a’ . . ’z’] - Vogais;
Type 
 T_Frase = string[Tam_Frase];
Procedure TiposLetras (Frase{e}: T_Frase);
begin
end;
23
Procedure TiposLetras (Frase{e}: T_Frase);
var
 i, nvogais, nconsoantes, nbrancos : integer;
begin
 nvogais := 0; 
 nconsoantes := 0; 
 nbrancos := 0;
 for i := 1 to length(Frase) do
 if Frase[i] = Branco then nbrancos := nbrancos+ 1
 else 
 if Frase[i] in Vogais then nvogais := nvogais + 1
 else 
 if Frase[i] in Consoantes then 
 nconsoantes := nconsoantes + 1;
 writeln (output, ’Número de Vogais: ’, nvogais);
 writeln (output, ’Número de Consoantes: ’, nconsoantes);
 writeln (output, ’Número de Brancos: ’, nbrancos);
end;
24
 Este procedimento imprime o conjunto de 
características comuns a todos os indivíduos pertencentes 
a um subconjunto de uma determinada população. Cada 
indivíduo da população está associado a um identificador 
(1..MaxPop) e possui um conjunto de características.
Const Max_Pop = 100;
Type 
 T_Faixa = 1..Max_Pop;
 T_Caracteristica = (esporte, tv, cinema, livro, jornal, teatro, musica);
 T_Pessoa = set of T_Caracteristica;
 T_Populacao = array [T_Faixa] of T_Pessoa;
 T_Grupo = set of T_Faixa;
Const
 Mapeia: array[esporte..musica] of string = 
 (’Esporte’, ’TV’, ’Cinema’, ’Ler Livro’, ’Ler Jornal’, ’Teatro’, ’Música’);
Procedure Perfil_Comum(Populacao{e}: T_Populacao; Grupo{e}: T_Grupo);
begin
end;
25
Procedure Perfil_Comum(Populacao{e}: T_Populacao; Grupo{e}: T_Grupo);
var 
 Comuns: T_Pessoa;
 C : T_Caracteristica;
 ind : integer;
begin
 Comuns := [esporte..musica];
 for ind:=1 to Max_Pop do
 if ind in Grupo then Comuns := Comuns * Populacao[ind]; 
 write(output, ’As características comuns são: ’);
 for C:= esporte to musica do
 if C in Comuns then write(output, Mapeia[C], ’ ’);
 writeln(output);
end;
26
Professores:
Dante Corbucci Filho
Alexandre Plastino
Aula 12
Conteúdo:
- Tipos Estruturados (5a- Parte)
 - Conjunto (Set)

Outros materiais