Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Aula 4 Professores: Dante Corbucci Filho Alexandre Plastino Conteúdo: - Tipos de Dados - Tipos Simples - primitivos - escalares ou enumerados - faixas ou subintervalos 2 Tipos de Dados As variáveis de um programa representam os dados que serão manipulados por este. Cada variável pode assumir um conjunto específico de valores. Esse conjunto de valores é definido por um tipo de dados. Os tipos de dados podem ser classificados em duas grandes categorias: - Tipos simples (ou não estruturados) - Tipos estruturados. Programa = Algoritmo + Estrutura de Dados 3 Tipos de Dados Simples Um tipo simples (ou não estruturado) é aquele composto por elementos "atômicos" ou indivisíveis. Exemplos: - Tipo inteiro - Tipo real - Tipo caracter - Tipo booleano 4 Tipos de Dados Estruturados Um tipo estruturado é aquele composto a partir de tipos simples. Um tipo estruturado pode ser uma composição de outros tipos estruturados. Exemplo: suponha que, em determinado programa, seja necessário armazenar todas as posições assumidas durante um jogo de xadrez. 5 Tipos de Dados Estruturados Versão 1: história = seqüência de tabuleiro; 6 Tipos de Dados Estruturados Versão 2: história = seqüência de tabuleiro; tabuleiro = matriz[8,8] de posição; 7 Tipos de Dados Estruturados Versão 3: história = seqüência de tabuleiro; tabuleiro = matriz[8,8] de posição; posição = registro cor: (branca, preta); peça: (peão, torre, cavalo, bispo, rainha, rei, nada) fim; 8 Tipos de Dados Simples Em Pascal, os tipos simples podem pertencer a três categorias: a) tipos primitivos: boolean, integer, char, real; b) escalares ou enumerados: Dia = (dom, seg, ter, qua, qui, sex, sab); c) faixas ou subintervalos: Mes = 1 . . 12 DiaUtil = seg . . sex; 9 Tipo Primitivo Boolean Conjunto de possíveis valores: • Variáveis do tipo boolean podem assumir os valores true ou false. • Considera-se que false < true. • As constantes true e false não podem ser lidas através dos comandos read e readln, mas podem ser escritas através dos comandos write e writeln. Exemplo de declaração: var P,Q,R : boolean; 10 Tipo Primitivo Boolean Operadores: • Variáveis booleanas podem fazer parte de expressões lógicas através dos operadores and, or e not. • Semântica destes operadores: V V F F V F V F F F V V V F F F V V V F P Q not P P and Q P or Q 11 Tipo Primitivo Boolean Lei de De Morgan: • Trata-se de equivalências lógicas muito úteis em programação. not (P or Q) é equivalente a (not P) and (not Q) Analogamente: not (P and Q) é equivalente a (not P) or (not Q) P Q P or Q not (P or Q) P Q not P not Q (not P) and (not Q) V V F F V F V F F F F V V V V F V V F F V F V F F F F V F F V V F V F V 12 Tipo Primitivo Boolean • Observe que os operadores relacionais =, <>, <, <=, >=, > retornam um valor booleano quando aplicados a operandos do mesmo tipo. A expressão ( A >= 20 ) and ( A <= 30 ) retornará o valor true quando as duas condições forem verdadeiras, ou seja, quando o inteiro A estiver no intervalo fechado [20,30]. 13 Tipo Primitivo Integer Conjunto de possíveis valores: • Variáveis do tipo inteiro podem assumir valores no intervalo: - maxint . . + maxint • maxint é uma palavra reservada que indica o maior inteiro representável na implementação Pascal em questão. • Supondo que um inteiro seja representado em n bits, maxint = 2(n-1) - 1 • Utilizando-se 16 bits, tem-se: maxint = 215 - 1 = 32.767 Exemplo de declaração: Var A, B, C : integer; 14 Tipo Primitivo Integer Operadores: • Os seguintes operadores geram resultados inteiros quando aplicados a valores inteiros: • * • div • mod • + • − : multiplicação : divisão inteira : resto ( A mod B = A - ( ( A div B) ) * B ) : soma : subtração 15 Tipo Primitivo Integer Funções Padrões: - abs (X) : retorna o valor absoluto do inteiro X; - sqr (X) : retorna o valor do inteiro X elevado ao quadrado; - trunc (Y) : retorna a parte inteira de um valor real Y; - round (Y) : retorna o valor inteiro mais próximo ao valor real Y; - odd (X) : retorna o valor true, se X for um inteiro ímpar, e retorna false, caso contrário. 16 Tipo Primitivo Char Conjunto de possíveis valores: • Variáveis do tipo char podem assumir os valores do conjunto padrão de caracteres do código ASCII. • Os caracteres ’a’ . . ’z’, ’A’ . . ’Z’, ’0’ . . ’9’, ’ ’ (caracter branco) fazem parte deste conjunto. • As constantes do tipo char são representadas entre apóstrofos: ’m’ representa o caracter m e " " representa o apóstrofo. Exemplo de declaração: Var M, N, O : char; 17 Tipo Primitivo Char Funções Padrões: - ord (C) : retorna a posição ordinal do caracter C no conjunto de caracteres implementado; - chr (X) : retorna o caracter que ocupa a X-ésima posição deste mesmo conjunto; - ord e chr são funções inversas: chr ( ord (’C’) ) = ’C’ e ord ( chr (X) ) = X - considerando o conjunto ASCII: ord (’A’) = 65 e chr (57) = ’9’ 18 Tipo Primitivo Real Conjunto de possíveis valores: • Um valor real é representado internamente no formato "ponto-flutuante", que corresponde à chamada notação científica. 23.14216 = 2.314216 X 10+1 mantissa = 2.314216, base = 10, expoente = +1 • Uma vez fixada a base, a representação ponto-flutuante de um real é definida por um par (mantissa, expoente). 23.14216 = 2.314216 E + 1 19 Tipo Primitivo Real Conjunto de possíveis valores: • Um valor do tipo real pertence a um subconjunto dos números reais, que depende do compilador Pascal. Cada fabricante pode ter seu próprio padrão para o formato ponto-flutuante. • Em geral, tem-se: • mantissa m representada em 24 bits • expoente representado em 8 bits • representando reais na faixa m X 2-128 . . m X 2+127 • o que equivale aproximadamente à faixa +/-10-38 . . +/-10+38 Exemplo de declaração: Var F, G, H : real; 20 Tipo Primitivo Real Operadores: • * : multiplicação • / : divisão • + : soma • − : subtração Em função da sua representação não exata, a aritmética com números reais também é passível de erros. Portanto: - o teste de igualdade entre dois reais pode gerar erros, utilize a forma ( X - Y > erro ) em vez de ( X = Y ). - a subtração de valores próximos pode implicar em perda de dígitos significativos.21 Tipo Primitivo Real Funções Padrões: - abs (X) : retorna o valor absoluto de X; - sqr (X) : retorna o valor de X elevado ao quadrado; - sin (X) : retorna o seno de X; - cos (X) : retorna o co-seno de X; - arctan (X) : retorna o arco-tangente de X; - ln (X) : retorna o logaritmo neperiano de X; - exp (Y) : retorna a função exponencial de X (ex); - sqrt (Y) : retorna a raiz quadrada de X; 22 Tipos Escalares ou Enumerados Tipos escalares em Pascal são definidos a partir da enumeração de valores. A variável DiaDaSemana poderá assumir qualquer valor enumerado no conjunto Dia. Vantagens de utilização: - torna o programa mais legível, - permite ao compilador testar os valores sendo atribuídos. type Dia = (dom, seg, ter, qua, qui, sex, sab); var DiaDaSemana : Dia; 23 Tipos Escalares ou Enumerados Outro exemplo: A variável Figura só poderá assumir valores do conjunto Forma. No programa, poderia haver sentenças como: type Forma = (Triangulo, Retangulo, Poligono, Circulo); var Figura : Forma; if ( Figura = Triangulo ) or ( Figura = Retangulo) then Figura = Poligono; 24 Tipos Escalares ou Enumerados Funções Padrões: - succ(V) - função sucessor: retorna o valor seguinte ao valor V na ordem de enumeração do tipo escalar ao qual V pertence. Se V for o último valor, ocorrerá um erro de execução. - pred(V) - função predecessor: retorna o valor anterior ao valor V na ordem de enumeração do tipo escalar ao qual V pertence. Se V for o primeiro valor, ocorrerá um erro de execução. - ord(V) - função ordem: retorna a posição de V na enumeração que define o tipo escalar ao qual V pertence. A ordem do primeiro elemento é zero. 25 Tipos Escalares ou Enumerados Ainda o exemplo: type Forma = (Triangulo, Retangulo, Poligono, Circulo); var Figura1, Figura2 : Forma; No programa, poderia haver sentenças como: Figura1 := succ(Retangulo); if ord(Figura2) <> 0 then Figura2 := pred(Figura2); Não são permitidas sentenças como: Figura1:= Figura1 + 1; 26 Tipos Escalares ou Enumerados Observações: • Valores escalares definidos pelo usuário não podem ser lidos ou escritos pelos comandos read e write. • Os tipos boolean, char e integer são implicitamente definidos como tipos escalares. Implicitamente: type boolean = (false, true); • Portanto as funções pred, succ e ord podem ser aplicadas a variáveis destes tipos. Considera-se que false < true. 27 Tipo Faixa ou Subintervalo Um tipo subintervalo pode ser entendido como uma restrição de um outro tipo escalar previamente ou implicitamente definido. Forma Geral: type T = Constante1 . . Constante2; type Dia = (dom, seg, ter, qua, qui, sex, sab); DiaUtil = seg . . Sex; LetraMinuscula = ’a’ . . ’z’; Digito = ’0’ . . ’9’; Idade = 0 . . 100; Tipos subintervalos tipo escalar 28 Revisão / Exercícios 1) Para cada um dos trechos de programas apresentados a seguir, determine quantas vezes a sentença "S" será executada. 29 Revisão / Exercícios program Programa1A(input{teclado},output{vídeo}); const N = 100; var I: integer; begin for I := 1 to sqr(N) do if odd(I) then S end. 30 Revisão / Exercícios program Programa1B(input{teclado}, output{vídeo}); var Ch: char; I: integer; begin for Ch := ’a’ to ’c’ do for I := ord(’d’) downto ord(Ch) do S end. 31 Revisão / Exercícios program Programa1C(input{teclado}, output{vídeo}); var I, J: integer; begin I := ord(true); J := 1; while ( I > J ) or ( I < J ) do S end. 32 Revisão / Exercícios program Programa1D(input{teclado}, output{vídeo}); var B: boolean; begin B := false; repeat S; B := not B until not B end. 33 program Programa1E(input{teclado}, output{vídeo}); var U, V, Z: integer; begin Z := 0; U := 256; V := 103; while U <> 0 do begin if odd(U) then Z := Z + V; U := U div 2; V := 2 * V; S end end. 34 Revisão / Exercícios program Programa1F(input{teclado}, output{vídeo}); var I, N: integer; begin N := ord(’9’) - ord(’0’); for I := 0 to sqr(N) do if ( I mod 3 ) = 0 then S end. 35 program Programa1G(input{teclado}, output{vídeo}); var B: boolean; I, J: integer; begin B := false; I := 1; J := 1; repeat I := I + J * 10; J := 10 * J; S until not ( succ(B) > B ) or ( J >= 1000) end. 36 Revisão / Exercícios program Programa1H(input{teclado}, output{vídeo}); var I: integer; begin I := 1; while odd(I) or ( (I > 13) and (’c’ > ’d’) ) do begin S; I := I + 2 end end. 37 Revisão / Exercícios 2) Indique o valor da variável "X" ao final da execução dos trechos de programas apresentados a seguir. 38 program Programa2A(input{teclado}, output{vídeo}); var I, X: integer; begin I := 1; X := 0; while I < 99 do begin X := X + 1; I := I + 2 end end. 39 program Programa2B(input{teclado}, output{vídeo}); const A = 231; B = 2.23; var X, Y: real; begin Y := A * B; X := round(Y) div A + trunc(Y + 0.5) mod A; X := X - round(Y) end. 40 program Programa2C(input{teclado}, output{vídeo}); var X, Y: integer; begin X := 17; Y := 0; repeat Y := X mod 2 + Y * 10; X := X div 2 until X = 0; while Y <> 0 do begin X := Y mod 10; Y := Y div 10 end end. 41 Aula 4 Professores: Dante Corbucci Filho Alexandre Plastino Conteúdo: - Tipos de Dados - Tipos Simples - primitivos - escalares ou enumerados - faixas ou subintervalos
Compartilhar