Anda di halaman 1dari 32

Tipos de Dados da Linguagem Pascal

Como so organizados os tipos de dados do Pascal?


Manipula somente um nico valor de cada vez

Tipos Simples

So divididos em:
Tipos Estruturados Permite manuipular vrios
valores ao mesmo tempo

Estes, por sua vez, podem ser:


Pre-definidos na linguagem ou Definidos pelo utilizador Alm dos tipos primitivos, o programador pode definir novos tipos, usando tipos existentes como base. Para isso usa-se a clausula TYPE

Tipos de Dados Simples

Tipos simples

Definidos pelo utilizador

Predefinidos ou primitivos

Subintervalo (subrange)

Enumerado (enummerated)

Booleano (boolean)

Caracter (char)

Inteiro (integer)

Real (real) Tipo no ordinal

Tipos ordinais

Tipos Simples Definidos pelo Utilizador


Tipo subintervalo- subrange um tipo de dado ordinal definido em funo de outro tipo ordinal j existente (inteiro, booleano, char, etc. )

Type IdentificadorTipoSubrange = <valor_inferior> .. <valor_superior> ; Aonde <valor_inferior> .. <valor_superior: definem um intervalo em um tipo ordinal existente. Pode ser declarado na clausula TYPE ou pode ser associado diretamente a uma declarao de variavel.

Como Usar:
2. Defina um novo tipo Subrange ou declare uma variavel usando um intervalo: Type Var diames: diasValidos; {declarao de uma variavel do tipo diasValidos} mesesAno: 1..12; {declarao de uma variavel do tipo subrange sem identificador} minusculas: a..z; 2. Pode ser usada normalmente como uma variavel do tipo ordinal basico (ex: no caso acima, as variaveis funcionam como inteiros). diasValidos = 1 ..31; {criao de novo tipo chamado diasValidos}

3. Podemos usar as funes para ordinais Ord (<varsubrange>) Succ(<varsubrange>) Pred(<varsubrange>)

Exemplo

retorna a posicao do valor de var no intervalo diames:= 4; retorna o sucessor de <varsubrange> retorna o antecessor de <varsubrange>
Ord (diames)= 4 Succ (diames) = 5 Pred (diames) = 3

Exercicio para casa / laboratrio: Faa um programa que leia 2 datas no formato dd / mm e calcule quantos dias decorreram entre as datas (do mesmo ano). Usar Tipos SUBRANGE

Pergunta: O que acontece se associarmos variavel um valor que no est no intervalo? Ex: diames := 32;

Tipos de Dados Estruturados


Tipos Estruturados

Definidos pelo utilizador

Predefinidos ou primitivos

Agregado (array)

Registro (record)

Conjunto (set)

Arquivo (file)

Cadeia de Caracteres (string)

Tipo Estruturado Array


1. Vetores (agregado ou array unidimensional) 2. Matrizes (agregado ou array multidimensional) Caracteristicas:
contm varios valores do mesmo tipo bsico Possui tamanho pre-definido (i.e. o nmero de elementos do agregado deve ser definido pelo programador na declarao dessa estrutura)

Ex: agregado de notas, agregado de nomes, etc.

1.

Definio do Tipo Agregado Unidimensional (vetor): ARRAY [tipo_ndice] OF tipo_elemento ;

tipo_ndice um tipo simples ordenado (inteiro, caracter, booleano, etc.) formado por [li..ls ], onde li= limite inferior e ls= limite superior. Pode ser utilizado tanto na declarao de variveis, constantes, como tambm na definio de novos tipos (sesso TYPE). Definio de constante do tipo Array: identificadorConst: tipo_array = (lista de valores) ;

Ex: Const naipes: array [1..4] of string[7] = ( copas, ouro, espadas, paus);

Exemplos de definies e declaraes de vetores


Ex1: Ex2: Var lista: array [1..100] of integer; Type indice = 1..100; Var lista: array [indice] of real; Const max = 300; Type vetor = array [1..max] of string[20]; Var endereo: vetor; Var dados: array [A..Z] of integer;

Ex3:

Ex4: Ex5:

Type vetsemana = array [1..7] of string [3]; Const dias_semana: vetsemana = (DOM, SEG, TER, QUA, QUI, SEX, SAB);

Manipulao dos elementos de um Vetor Basta usar em expresses, instrues de atribuio, instrues de entrada e saida (read e write), sempre referenciando-se um elemento especifico do Vetor com o uso da posio que ele ocupa no vetor. Identificador_array [posio_elemento] Exemplo:
Considere o seguinte vetor

Var lista: array[1..100] of integer;


Exemplos de comandos

writeln (lista[5]); read (lista[i]); { i deve ser do tipo inteiro} x:= lista[i+j]; { i e j devem ser do tipo inteiro}

Exemplo
Algoritmo de busca sequencial de elementos no vetor

Considere um vetor Idades com 30 elementos (valores inteiros). Verificar se existe um elemento igual a K no vetor. Se existir mostrar a posio em que se encontra, seno imprimir "no encontrei K no vetor".

EXERCICIO PARA CASA

Exemplo: Algoritmo de manipulao de vetor e uso de funes numricas do Pascal


Defina um vetor de 100 elementos inteiros e elabore um programa que preencha VETOR[i] com 1 , se i um quadrado perfeito ou com 0 , nos demais casos.

Exemplos de Funes do Pascal para nmeros Reais e Inteiros


Round (n: real) : retorna o nmero n arredondado (como um nmero real) Frac (n: real) : retorna a parte fracionria de n Int (n: real) : retorna a parte inteira de n como um nmero inteiro Trunc(n: real) : retorna a parte inteira de n como um nmero inteiro Odd(m: int): determina se um numero par ou impar (retorna um valor booleano: True = mpar | False = par) Succ(m: int) : retorna o sucessor de m Pred(m: int) : retorna o valor anterior a m Vejamos como estas funes funcionam

Tipo Estruturado: Matriz


Sintaxe Geral:
array [dim1, dim2, dim3...] of tipo_elemento;
onde as dimenses so definidas como: dim1 = li1..ls1 , dim2 = li2..ls2, dim3 = li3..ls3 , etc.

Ex: Matriz bidimensional array [1..2, 1..3] of integer; Matriz tridimensional


array [1..10, 1..20, 1..40] of real;
define uma matriz tridimensional onde a 1 dimenso tem 10 elementos, a 2 tem 20 elementos e a 3 tem 40 elementos e aonde todos os elementos so do tipo real.

Definio de tipos, variveis ou constantes do tipo matriz


Type matrizNotas = array [1..3,1..40] of real;

Const matA : array [1..2,1..2] of char = ((A, B),(C,D));

Var notasMAT146: matrizNotas; MatrizQuadrada: array [1..20, 1..20] of integer;

Manipulao dos elementos de uma Matriz Da mesma forma que no Vetor, usamos matrizes em expresses, instrues de atribuio, instrues de entrada e saida. Cada elemento da matriz identificado por: Identificador_matriz [coordenada_elemento] Exemplo:
Considere a seguinte matriz

Var matrizA: array[1..40, 1..20] of integer;


Exemplos de comandos

writeln (matrizA[3,2]); {elemento da linha 3 coluna 2} matrizA[i,j] := succ(matrizA[i,j]); { acrescenta 1 ao valor original do elemento da posio i,j}

Exemplo 1:
Este programa cria uma matriz de nmeros inteiros de dimenses 3x3 e calcula a soma dos elementos da diagonal principal. Ao final mostra a matriz e a soma.

Exemplo 2:
Elabore um programa que crie uma matriz constante de inteiros de dimensso 3x3 com os valores {1,2,3,4,5,6,7,8,9}. Some os elementos de cada linha da matriz para gerar elementos de um vetor

Matriz

Vetor

123 456 789

6 15 24

Tipo Estruturado: Registro Registro ou Record: So estruturas heterogneas - compostas de elementos de tipos diferentes. Cada elemento uma parte do registro:
elemento = CAMPO

Luis Gustavo Silva


Campo Nome

25 Programador 950,00
Campo Salario

Campo Idade Campo Funcao

Registros - RECORD Em Pascal, o registro definido como um tipo RECORD. Podemos definir registros em Pascal na sesso TYPE ou diretamente declarar variveis do tipo RECORD.

Declarao de RECORD na sesso TYPE:


TYPE <nome_novo_tipo> = RECORD campo1: tipo1 ; campo2: tipo2 ; campon: tipon ; END ; VAR <identificador_variavel> : <nome_novo_tipo>;

Ex: Type Funcionario= Record nome: string[40]; idade: integer; funcao: string[30]; salario: real; End; Var FuncionarioUFBA: Funcionario ;

Declarao de RECORD na sesso VAR:


VAR <identificador_registro> : RECORD campo1: tipo1 ; campo2: tipo2 ; campon: tipon ; END ;

VAR FuncionarioUFBA: Record nome: string[40]; idade: integer; funcao: string[30]; salario: real; End;

Exercicio 1
Crie um tipo registro com a seguinte estrutura:
Nome do funcionario . 60 caracteres Data de admissao dd mm-aaaa, onde dd contem um valor de {1,,31} e mm de {1,..,12} Salario base nao pode ser menor que o salario minimo (crie separadamente uma constante SALMINIMO) Dias trabalhados nos ultimos 12 meses, indique o mes de ferias com o valor 1

Crie uma variavel FuncionarioUFBA do tipo criado acima.

Manipulao de Registros
Acesso a campos individuais: a) uso da notao <identif_Registro>.<campo>
Ex: write('Nome: '); readln(funcionarioUFBA.nome); {acesso ao campo nome }

b) uso da estrutura WITH <identif_Registro> DO


With funcionarioUFBA do begin write (Nome:, nome); write (Funcao:, funcao); end; OBS: s possvel ler e escrever o registro campo a campo !

Exercicio 2
Crie um trecho de algoritmo que faa uma consulta a um funcionrio j cadastrado:
O usuario deve fornecer o primeiro nome do funcionario, ou parte do nome. Caso encontre, o programa deve mostrar o nome completo e pedir confirmao se este o funcionario procurado. Se for, deve informar o salrio, a data de admisso e se ja tirou frias neste ano e em que ms.

Como fazer armazenar informaes sobre vrios funcionrios?

Luis Gustavo Silva Maria dos Santos Marcelo Andrade

25 Programador 950,00 29 Coordenadora 2030,00 39 Supervisor 2400,00

Tipo Estruturado: Array de Registros


TYPE <nome_novo_tipo> = RECORD campo1: tipo1 ; campon: tipon ; END ; VAR <identificador_variavel>: array [n..m] of <nome_novo_tipo>;

Exemplo de um Array de Registros


Type aluno = record matricula: string[6]; nome:string[15]; serie:integer; end; Var Tab_alunos: array [1..45] of aluno;

Begin for i:= 1 to 45 do begin readln(Tab_alunos[i].matricula); readln(Tab_alunos[i].nome); readln(Tab_alunos[i].serie) end;

Exercicio 3
Modifique o programa anterior para criar um conjunto de funcionarios. Crie um trecho de algoritmo que faa uma consulta a um funcionario ja cadastrado:
O usuario deve fornecer o primeiro nome do funcionario, ou parte do nome. O programa deve mostrar todos os funcionarios encontrados que cujos nomes coincidem com o conteudo da busca e solicitar qual deles o procurado. Para este funcionario, deve ento mostrar o salrio, a data de admisso e se ja tirou frias neste ano e em que ms.

Exerccio para casa


Faa um programa Pascal que preencha um conjunto de registros de contas-correntes de clientes de uma agncia bancria utilizando o modelo de informaes abaixo:
cdigo cliente nome cliente limite de crdito data abertura conta saldo atual numrico inteiro (4 posies) alfanumrico (30 posies) numrico real (500,00 a 3.000,00) dd-mm-aa numrico real

Modularizao - Procedimentos e Funes A modularizao de programas divide o programa em partes que possuem uma certa independncia Vantagens da modularizao :
Aumenta a manutenibilidade do programa Facilita a depurao de erros Aumenta a legibilidade do programa Aumenta o reuso de cdigo

Modularizao Uma boa modularizao deve ter as seguintes caractersticas:


Alta coeso: cada modulo deve fazer uma atividade bem especifica do programa. Baixo Acoplamento: independncia lgica dos mdulos. Um mdulo deve funcionar o mais independentemente possvel de outros mdulos. A comunicao entre os mdulos deve ser bem controlada.

Anda mungkin juga menyukai