Anda di halaman 1dari 9

Conjuntos em PASCAL

Antes de iniciarmos nosso estudo sobre manipulao de conjuntos em Pascal, vamos analisar os tipos de dados da linguagem. Esta anlise ser importante para voc entender a forma de trabalharmos com conjuntos no free pascal. Vamos l ento?

Tipos de Dados
Basicamente temos dois tipos de dados na linguagem Pascal
Este tipos de dados pode ser divididos em: 1. Primitivos ou Elementares 2. Compostos ou Estruturados

1. Tipos de dados primitivos: no existe uma estrutura sobre seus valores Ex: boolean, integer, char, etc... 2. Tipos de dados estruturados: existe uma relao estrutural intrnseca entre seus valores Ex: arrays(vetores), registros e conjuntos

Tipos de dados primitivos:


Podem ser definidos das seguintes formas: Dentro da linguagem: INTEGER, REAL, BOOLEAN, CHAR, ... Por enumerao de valores: TYPE sexo = (masculino, feminino) TYPE cor = (amarelo, verde, azul, branco, preto, roxo) Atravs de Subintervalos: TYPE ano = [1900..2100] TYPE digito = [0,9]

Tipos de dados estruturados


Os tipos de dados disponveis em Pascal so: 1. Vetores (arrays) ( ser visto no Segundo semestre)

2. Conjuntos
3. Registros ( ser visto no Segundo semestre)

Interessa-nos estudar agora os conjuntos (Tipo Estruturado Conjunto), os demais assuntos sero vistos no prximo semestre. Contudo fique a vontade se deseja estudar estes conceitos antecipadamente.

Tipo Estruturado Conjunto


Introduo
Na matemtica, usamos uma linguagem no s adequada s suas necessidades, mas tambm ao estudo de outras cincias. Uma boa parte dessa linguagem vem da teoria de conjuntos. Em matemtica, definimos um conjunto como sendo uma coleo de objetos, nomes, nmeros etc. Chamamos de elementos estes objetos, nomes, nmeros... que pertencem a esse conjunto. Na linguagem Pascal, voc tambm pode utilizar estes conceitos: No Pascal um conjunto uma coleo de elementos semelhantes. O tamanho do conjunto pode ser varivel, sendo que no caso especfico do Free Pascal, o conjunto pode ter no mximo 256 elementos. Um conjunto pode consistir em zero ou mais elementos do mesmo tipo No Pascal, os conjuntos tm seus elementos inclusos em colchetes e separados por vrgulas. Podemos ter tambm a representao da sub-faixa.

Exemplos: [1,3,5,7,9,11,13] [3..7] [3,4,5,6,7] ['A'..'Z'] [gol,passat,fusca] [] - alguns inteiros - inteiros entre 3 e 7 (ou seja 3,4,5,6,7) - equivalente ao anterior - caracteres alfabticos maisculos - marcas de carro - conjunto vazio

TIPO SET
A linguagem Pascal possui um tipo de dado pr-definido capaz de armazenar, sem indexaes, elementos de um conjunto, permitindo, com variveis deste tipo, a realizao de unies, intersees e diferenas como definido na matemtica, e a verificao do fato de que um dado elemento est ou no armazenado na varivel.

Declarao
A forma geral para definio de conjuntos :

Type identificador = SET OF tipo base;


tipo base: define que elementos podem ser armazenados na varivel, podendo ser qualquer tipo ordenado com at 255 elementos.

Vamos a alguns exemplos? Exemplo 01:


Type letras_maisculas = set of 'A'..'Z'; dgitos = set of 0..9; carros = set of (fusca,gol,escort,opala); Var letras : letras_maisculas; nmeros : dgitos; marca : carros;

Exemplos 02:
Type CorPrimaria = ( Vermelho, Amarelo, Azul); Cor = set of CorPrimaria; ConjMinusc = set of a..z; ConjDigitos = set of 0..9; Var preto, roxo, castanho, verde :Cor; letras, vogais, consoantes :ConjMinusc; decimal :ConjDigitos; Construo de conjuntos: verde := [amarelo, azul]; castanho := [vermelho, amarelo, azul]; preto := [ ]; vogais := [a, e, i, o, u];

Exemplos 03:
Type ingredientes = (morango, banana, napolitano, chocolate, nata, cobertura); sorvete = set of ingredientes; var sundae, casquinha : sorvete; {referncias e operaes } casquinha:= [morango, cobertura]; sundae:= casquinha + [banana, chocolate]; sundae:= sundae - [chocolate];

ATENO: Do mesmo modo que variveis de tipos definidos pelo usurio (Type), variveis do tipo set no podem ser "lidas" nem "escritas". O armazenamento de elementos numa varivel do tipo set s pode ser feito, portanto, atravs de um comando de atribuio, podendo ser utilizada uma das seguintes formas: 1. Enumerao explcita dos elementos entre colchetes: Conj := [1, 2, 3, 4, 5, 6, 7, 8, 9]; 2. Especificao, entre colchetes, de uma faixa do tipo base: Conj := [1..9]; 3. Combinao das formas anteriores: OutroConj := [1..9, 21..30, 41, 43, 45, 47, 49];. O conjunto vazio tambm pode ser "armazenado" numa varivel do tipo set. Vazio := [ ];

OPERAES SOBRE CONJUNTOS Atribuio: ( := )


O operador de atribuio o mesmo utilizado para tipos simples, exemplos:

c := ['a','e','i','o','u']; letras := ['B'..'H']; nmeros := [0,3,5];

+ (unio)
O operador unio representado pelo sinal '+'. A unio entre dois conjuntos resulta num terceiro conjunto, constitudo dos elementos dos dois conjuntos. Exemplo: a := [1,2,3]; b := [2,3,4,5]; c := a+b; resulta c = [1,2,3,4,5] ex: [a, b] + [z] = [a, b, z]

* (interseo)
Representada pelo sinal '*'. A interseco entre dois conjuntos, resulta num terceiro conjunto, constitudo pelos elementos que fazem parte tanto de um como do outro conjunto. Exemplo: a := [1,2,3]; b := [2,3,4,5]; c := a*b; resulta c = [2,3]

[1, 2, 7, 8, 9] * [3, 4, 5, 6, 7, 8] = [7, 8]

- (diferena).
Representada pelo sinal '-'. Retorna um conjunto, cujos elementos esto num conjunto mas no no outro. a := [1,2,3,6]; b := [2,3,4,5]; c := a-b; resulta c = [1,6] c := b-a; resulta c = [4,5]
ex: [vermelho, azul, amarelo] [azul] = [vermelho, amarelo]

O operador in
O operador in verifica se um elemento do tipo base est armazenado no conjunto. Este operador muito utilizado para que o programa se proteja de entradas de dados indesejveis. Por exemplo, se uma varivel Letra, do tipo char deve receber uma letra, pode-se utilizar uma estrutura como a seguinte: repeat readln(Letra); until Letra in ['a'..'z', 'A'..'Z']; O operador in tambm utilizado em expresses lgicas de comandos if quando o nmero de valores possveis para a varivel que definir a deciso no pequeno. Por exemplo, pretendendo-se verificar se uma varivel Letra uma vogal, pode-se usar: if UpCase(LETRA) in ['A', 'E', 'I', 'O', 'U']; then ...

Operadores relacionais:
a = b todos elementos esto em ambos conjuntos a <> b alguns ou todos elementos no esto em ambos conjuntos
ex: [1, 2, 7, 8, 9] <> [3, 4, 5, 6, 7, 8] ser true

a >= b todos elementos de b esto em a a <= b todos elementos de a esto em b


ex: [azul] <= [vermelho, azul, amarelo] ser true ex: [a, b] <= [z] ser false

ex: [vermelho, azul, amarelo] >= [azul, amarelo] ser true

a IN b a um elemento do conjunto b
do mesmo tipo base do conjunto b)

(neste caso deve ser um elemento

Exemplo de cdigos:
Exemplo 01: program Campeonato_Baiano; //tipo baianao que um tipo conjunto o qual os valores possveis(tipo base) esto //Definidos como sendo Bahia, Catuense, Camacari, Vitria, Juazeiro, Ipitanga TYPE Baianao = SET OF (Bahia, catuense, Camacari , Vitoria, Juazeiro, Ipitanga); //variveis VAR GrupoA, GrupoB : Baianao; Begin //Valores podem ser atribudos por: GrupoA := [Bahia, Catuense, Camacari]; GrupoB := [Vitoria..Ipitanga]; End.

Exemplo 02: Program Exemplo02; Uses CRT;


{L uma tecla e a envia para o monitor at que se digite 'S' ou 's' ou 'N' ou 'n'}

Var tecla : Char; Begin ClrScr; Repeat Read(kbd,tecla); Write(tecla); Until tecla IN ['s','S','n','N']; End. Exemplo 03: Program Exemplo03; Uses CRT; {l uma tecla e diz se nmero, letra maiscula ou letra minscula at que se leia um '?'} Type smbolos = Set of Char; Var Maiusc, Minusc, Nmeros : smbolos; tecla : char; Begin ClrScr; Maiusc := ['A'..'Z']; Minusc := ['a'..'z']; Numeros := ['0'..'9']; Repeat Read(kbd,tecla); If tecla IN Maiusc Then Writeln('MAIUSCULA') Else if tecla IN minusc Then Writeln('minuscula') else if tecla IN numeros Then Writeln('numero') else Writeln('nada'); Until tecla = '?'; End.

Exemplo 04: Program Exemplo04; Uses CRT; {Programa que conta o nmero de vogais, nmero de consoantes e de brancos numa frase lida do teclado} Type smbolos = set of char; Var Alfabeto, vogais, consoantes : smbolos; frase : string[50]; v,c,b,x : integer; Begin Vogais:=['a','e','i','o','u','A','E','I','O','U']; alfabeto:=['a'..'z']+['A'..'Z']; consoantes:=alfabeto-vogais; Clrscr; Write('Digite uma frase --> '); Readln(frase); b:=0;c:=0;v:=0; (* a funo length() devolve o nmero de caracteres que o parmetro tem *) For x:=1 to length(frase) do if frase[x] in vogais then v:=v+1 else if frase[x] in consoantes then c:=c+1 else if frase[x] = ' ' then b:=b+1; Writeln; writeln(b,' brancos'); Writeln(c,' consoantes'); Writeln(v,' vogais'); End.

Exemplo final
O objetivo do exemplo um programa que permita sorteio eletrnico de um bingo. Para isto,ele utiliza um conjunto Urna contendo as "pedras" de 1 (um) a 75 (setenta e cinco), sendo o sorteio realizado pela funo Random dentro de uma estrutura de repetio para que uma pedra no seja sorteada mais de uma vez. Quando o sorteio realizado, a "pedra" sorteada retirada da urna, utilizando-se para isto a diferena entre conjuntos.

program Bingo; type TPedras = 1..75; var Urna : set of TPedras; NumPedra, Pedra : integer; Bateu : char; begin Urna := [1..75]; NumPedra := 0; Bateu := 'N'; Randomize; writeln('Pedras sorteadas : '); while (Urna <> []) and (Bateu <> 'S' ) do begin writeln('Alguem bateu? (S/N)'); readln(Bateu); Bateu := UpCase(Bateu); if Bateu <> 'S then begin repeat Pedra := Random(75) + 1; until Pedra in Urna; writeln('Pedra sorteada: ', Pedra ); NumPedra := NumPedra + 1; writeln('Numero de pedras: ', NumPedra); Urna := Urna - [Pedra]; end; //fim do if end; //fim do while end. // fim programa

REFERNCIAS:
http://www.nuperc.unifacs.br/Members/thales.castro/arquivos/aulas/TiposDeDados.ppt http://oprofessorleandro.files.wordpress.com/2009/08/apost-turbo-pascal-ampliada1.doc

Anda mungkin juga menyukai