Baixe o app para aproveitar ainda mais
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)
Compartilhar