p aradigmas de l inguagens t ipos de d ados prof. thiago pereira rique [email protected]
TRANSCRIPT
![Page 1: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/1.jpg)
PARADIGMAS DE LINGUAGENS
TIPOS DE DADOS
Prof. Thiago Pereira Rique
http://thiagorique.wordpress.com/
![Page 2: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/2.jpg)
AGENDA
Introdução Tipos de dados primitivos Tipos String de caracteres Tipos ordinais definidos pelo usuário Tipos matriz (array) Tipos registro Tipos ponteiro
![Page 3: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/3.jpg)
INTRODUÇÃO
Os programas de computador produzem resultados manipulando dados.
Que tipos de dados podemos ter?
![Page 4: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/4.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos de dados primitivos são aqueles não definidos em termos de outros tipos.
Tipos numéricos Inteiro Ponto-flutuante Decimais
Tipos booleanos
Tipos caractere
![Page 5: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/5.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos numéricos – Inteiro:
Muitos computadores suportam diversos tamanhos de inteiros.
Linguagem de programação Ada SHORT INTEGER, INTEGER, LONG INTEGER
Representado por uma cadeia de bits (bit de sinal na extrema esquerda)
Notação complemento de 2 para números negativos.
![Page 6: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/6.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
Modelam os números reais (aproximação – π:3,14...)
Os valores de ponto-flutuante são representados como frações e como expoentes (notação científica)
![Page 7: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/7.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
São armazenados na forma normalizada.
A maioria das linguagens inclui dois tipos de ponto-flutuante: float e double.
![Page 8: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/8.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos numéricos – Decimais:
São armazenados usando códigos binários para os dígitos decimais.
Representação BCD (Binary-Coded Decimal)
São necessários pelo menos 4 bits para codificar um dígito decimal.
123 (decimal) = 000100100011 (BCD)
![Page 9: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/9.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos booleanos:
Sua faixa de valores tem somente dois elementos.
Uma exceção popular é o C, no qual expressões numéricas podem ser usadas como condicionais.
![Page 10: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/10.jpg)
TIPOS DE DADOS PRIMITIVOS
Tipos caractere:
Os dados de caracteres são armazenados nos computadores como codificações numéricas;
A codificação mais comumente usada é a ASCII (American Standard Code for Information Interchange)
Codificação Unicode (Java)
![Page 11: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/11.jpg)
TIPOS STRING DE CARACTERES
Um tipo cadeia de caracteres (String) é aquele cujos valores consistem em sequências de caracteres.
Os dados das cadeias normalmente são armazenados em vetores de caracteres únicos e referenciados como tal na linguagem (Pascal, C, C++, Ada).
![Page 12: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/12.jpg)
TIPOS STRING DE CARACTERES
Ada
STRING é um tipo formado por elementos CHARACTER.
Referência a subcadeias, concatenação, operadores relacionais e atribuição são operações oferecidas para os tipos STRING.
NAME1(2:4)
NAME1 := NAME1 & NAME2;
![Page 13: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/13.jpg)
TIPOS STRING DE CARACTERES
C e C++
Vetores char para armazenar cadeias de caracteres.
Biblioteca padrão (string.h)
As cadeias de caracteres são finalizadas com um caractere especial nulo (zero).
Ex: char *str = “apples”;
Funções de biblioteca: strcpy, strcat, strcmp, strlen.
![Page 14: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/14.jpg)
TIPOS STRING DE CARACTERES
Opções de tamanho da cadeia
Cadeia de tamanho estático: FORTRAN 90, COBOL, Pascal e Ada.
Exemplo de instrução FORTRAN 90: CHARACTER(LEN=15) NAME1, NAME2
![Page 15: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/15.jpg)
TIPOS STRING DE CARACTERES
Opções de tamanho da cadeia
Cadeias de tamanho dinâmico limitado: C e C++
Cadeias de tamanho dinâmico: SNOBOL4, JavaScript e Perl.
![Page 16: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/16.jpg)
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO
Tipo ordinal: faixa de valores associada aos inteiros positivos.
Pascal e Ada: inteiro, caractere e booleano como tipos ordinais primitivos.
Em muitas linguagens, os usuários podem definir dois tipos de ordinais: Enumerações Subfaixa
![Page 17: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/17.jpg)
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO
Tipos Enumeração
São aqueles em que todos os valores possíveis são enumerados na definição.
Exemplo Ada: type DIAS is (Seg, Ter, Qua, Qui, Sex, Sab, Dom)
![Page 18: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/18.jpg)
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO
Tipos Enumeração
Dependendo de questões de projeto, duas variáveis do tipo enumeração e/ou literais do mesmo tipo podem ser comparadas com os operadores relacionais.
Ex:type tipocor = (vermelho, azul, verde, amarelo);var cor: tipocor;...cor:= azul;if cor > vermelho...
![Page 19: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/19.jpg)
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO
Tipos Subfaixa
Um tipo subfaixa (subrange) é uma subsequencia de um ordinal.
Ex: 12...14 (subfaixa de inteiro)
Na Ada, as subfaixas são incluídas na classe de tipos, chamada subtipos.
Ex: subtype DIASSEMANA is DIAS range Seg..Sex;
![Page 20: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/20.jpg)
TIPOS ORDINAIS DEFINIDOS PELO USUÁRIO
Tipos Subfaixa
Todas as operações para o tipo pai também são definidas para o subtipo, exceto atribuição fora da faixa de valores.
Ex: DIA1:DIAS;DIA2:DIASSEMANA;...DIA2:=DIA1;
A atribuição é válida, a menos que o valor de DIA1 seja Sab ou Dom.
![Page 21: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/21.jpg)
TIPOS MATRIZ (ARRAY)
Uma matriz é um agregado homogêneo de elementos de dados
Cada elemento é identificado por sua posição em relação ao primeiro.
Os elementos são de algum tipo previamente definido.
![Page 22: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/22.jpg)
TIPOS MATRIZ (ARRAY)
Matrizes e índices
Elementos são referenciados através do nome do agregado mais subscritos (ou índices).
Se todos os índices em uma referência forem constantes, o seletor será estático; caso contrário, será dinâmico.
Mapeamento finito nome_da_matriz(lista_de_valores_indice) → elemento
![Page 23: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/23.jpg)
TIPOS MATRIZ (ARRAY)
Matrizes e índices
Sintaxe de referência mais ou menos universal: ao nome da matriz segue-se a lista de índices entre parênteses ou colchetes.
Problema com parênteses (também usados em listas de parâmetros)
Exemplo FORTRAN: SOMA = SOMA + B(I) Subscrito de matriz ou parâmetro de subprograma?
![Page 24: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/24.jpg)
TIPOS MATRIZ (ARRAY)
Matrizes e índices
Dois tipos distintos são envolvidos em tipo de matriz: o do elemento e o do subscrito.
As primeiras linguagens de programação não especificavam que as faixas de subscrito deveriam ser implicitamente verificadas.
O C, o C++ e o FORTRAN não especificam a verificação de faixa de subscritos.
O Pascal, a Ada e o Java especificam.
![Page 25: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/25.jpg)
TIPOS MATRIZ (ARRAY)
Vinculações de subscrito
Vinculação do tipo do subscrito: normalmente estática.
Vinculação das faixas de valor de subscrito: às vezes dinâmica.
Em algumas linguagens, o limite inferior da faixa de subscrito é implícito. No C, no C++ e no Java, o limite inferior é fixado em zero
(0). No FORTRAN I, II e IV, o limite inferior foi fixado em um (1). No FORTRAN 77 e no FORTRAN 90, o padrão é um (1).
![Page 26: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/26.jpg)
TIPOS MATRIZ (ARRAY)
Inicialização de matrizes
No FORTRAN 77, todo o armazenamento de dados é alocado estaticamente.
Assim, é permitida a inicialização no momento de execução usando-se a instrução DATA.
Por exemplo:INTEGER LISTA(3)DATA LISTA /0, 5, 5/
![Page 27: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/27.jpg)
TIPOS MATRIZ (ARRAY)
Inicialização de matrizes
O ANSI C, o C++ e o Java também permitem inicialização de suas matrizes
Exemplo:int lista[] = {4, 5, 7, 83};
O compilador define o tamanho do vetor.
![Page 28: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/28.jpg)
TIPOS MATRIZ (ARRAY)
Inicialização de matrizes
As cadeias de caracteres no C e no C++ são implementadas como vetores de char.
Exemplo: char nome[] = “freddie”;
O vetor terá oito elementos
Caractere nulo (zero – ‘0’ ou ‘\0’)
![Page 29: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/29.jpg)
TIPOS MATRIZ (ARRAY)
Inicialização de matrizes
Vetores de cadeias no C e no C++ também podem ser inicializados com literais de cadeira (vetor de ponteiros para caracteres).
Exemplo: char *nomes[] = {“Bob”, “Jake”, “Darcie”};
As literais são consideradas ponteiros para os caracteres. nomes[0] é um ponteiro para a letra ‘B’.
![Page 30: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/30.jpg)
TIPOS MATRIZ (ARRAY)
Inicialização de matrizes
A Ada fornece dois mecanismos para inicializar matrizes na instrução de declaração
Primeiro mecanismo (exemplo): LISTA: array (1..5) of INTEGER := (1, 3, 5, 7, 9);
Segundo mecanismo (exemplo): GRUPO: array (1..5) of INTEGER := (1 => 3, 3 => 4,
others => 0); Operador seta (=>).
![Page 31: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/31.jpg)
TIPOS REGISTRO
Definições de registros
Um registro é um agregado possivelmente heterogêneo de elementos de dados.
Cada elemento possui um nome.
Exemplo: informações sobre um estudante Nome Número do estudante Média das notas
![Page 32: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/32.jpg)
TIPOS REGISTRO
Definições de registros
Os elementos (ou campos) do registro são referenciados utilizando-se seus identificadores.
Considere a forma COBOL de uma declaração de registro:
01 REGISTRO-EMPREGADO.02 NOME-EMPREGADO.
05 PRIMEIRO PICTURE IS X(20).05 MEIO PICTURE IS X(10).05 ULTIMO PICTURE IS X(20).
02 TAXA-HORARIA PICTURE IS 99V99.
![Page 33: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/33.jpg)
TIPOS REGISTRO
Definições de registros O Pascal e a Ada usam uma sintaxe diferente
para os registros.
Considere a seguinte declaração Ada:REGISTRO_EMPREGADO:
recordNOME_EMPREGADO:
recordPRIMEIRO: STRING (1..20);MEIO: STRING (1..10);ULTIMO: STRING (1..20);
end record;TAXA_HORARIA: FLOAT;
end record;
![Page 34: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/34.jpg)
TIPOS REGISTRO
Referências a campos do registro
As referências aos campos individuais são sintaticamente especificadas por diversos métodos diferentes.
As referências a campos do COBOL têm a forma: Nome_do_campo OF nome_do_registro_1 OF ... OF
nome_do_registro_n
MEIO OF NOME-EMPREGADO OF REGISTRO-EMPREGADO
![Page 35: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/35.jpg)
TIPOS REGISTRO
Referências a campos do registro
A referência ao campo MEIO da Ada tem a forma a seguir (notação de pontos) REGISTRO_EMPREGADO.NOME_EMPREGADO.MEIO
![Page 36: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/36.jpg)
TIPOS PONTEIRO
Definição
Um tipo ponteiro é aquele em que as variáveis têm uma faixa de valores que consiste em endereços de memória e um valor especial, o nil.
Os ponteiros, ao contrário das matrizes e dos registros, não são tipos estruturados (* no C e no C++, access na Ada e ^ no Pascal).
São usados para referenciar alguma outra variável.
![Page 37: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/37.jpg)
TIPOS PONTEIRO
Operações com ponteiros
Atribuição
Desreferenciamento
![Page 38: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/38.jpg)
TIPOS PONTEIRO
Ponteiros em C e C++
Operação de desreferenciamento (*)
Endereço de uma variável (&)
Exemplo:int *ptr;int cont, init;...ptr = &init;cont = *ptr;
![Page 39: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/39.jpg)
TIPOS PONTEIRO
Ponteiros em C e C++
Ponteiros podem receber o valor de endereço de qualquer objeto do tipo de domínio correto e a constante zero, usada para nil.
A aritmética de ponteiros também é possível, embora restrita.
Exemplo: ptr + indice
![Page 40: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/40.jpg)
TIPOS PONTEIRO
Ponteiros em C e C++
Os nomes de vetores sem subscritos sempre se referem ao endereço do primeiro elemento.
Exemplo:int list[10];int *ptr; Considere a atribuição de inicialização:ptr = list; //atribui o endereço de list[0] a ptr
![Page 41: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/41.jpg)
TIPOS PONTEIRO
Ponteiros em C e C++
Podemos concluir que:
*(ptr + 1) equivale a list[1] *(ptr + indice) equivale a list[indice] ptr[indice] equivale a list[indice]
![Page 42: P ARADIGMAS DE L INGUAGENS T IPOS DE D ADOS Prof. Thiago Pereira Rique thiagorique2011@gmail.com](https://reader034.vdocuments.mx/reader034/viewer/2022051615/552fc100497959413d8bcdcb/html5/thumbnails/42.jpg)
REFERÊNCIA SEBESTA, R. W. Conceitos de Linguagens de
Programação. 5a. Edição. São Paulo: Bookman, 2003.