apostila
259 pág.

apostila


DisciplinaAlgoritmos e Estrutura de Dados I706 materiais7.915 seguidores
Pré-visualização50 páginas
em Pascal que realize as seguintes operac¸o\u2dces:
\u2022 admissa\u2dco de novo funciona´rio
\u2022 demissa\u2dco de funciona´rio
\u2022 mudanc¸a de departamento por um funciona´rio
Para estas operac¸o\u2dces devem ser lidas as informac¸o\u2dces:
\u2022 co´digo do tipo da operac¸a\u2dco: 0 para fim, 1 para admissa\u2dco, 2 para demissa\u2dco
e 3 para mudanc¸a de departamento
\u2022 nu´mero do funciona´rio
\u2022 n´\u131vel salarial (somente no caso de admissa\u2dco)
\u2022 nu´mero do departamento ao qual o funciona´rio passa a pertencer (no caso
de admissa\u2dco e mudanc¸a)
\u2022 nu´mero do departamento do qual o funciona´rio foi desligado (no caso de
demissa\u2dco e mudanc¸a)
O programa deve escrever as seguintes informac¸o\u2dces:
\u2022 os valores iniciais lidos dos arquivos
\u2022 para cada operac¸a\u2dco: o tipo da operac¸a\u2dco realizada, os dados da operac¸a\u2dco e
a forma final dos dados (de funciona´rios e departamentos)
No final do programa novos arquivos \u201cfunc.dat\u201d e \u201cdepto.dat\u201d sa\u2dco gerados com
os dados atualizados.
Detalhamento:
\u2022 a quantidade ma´xima de funciona´rios e´ 1000
\u2022 a quantidade ma´xima de departamentos e´ 20
218 CAPI´TULO 10. ESTRUTURAS DE DADOS
\u2022 se a quantidade ma´xima for ultrapassada o programa deve dar uma men-
sagem de erro
\u2022 se for requisitada a remoc¸a\u2dco ou mudanc¸a de um funciona´rio na\u2dco existente
no departamento especificado o programa deve dar uma mensagem de erro.
\u2022 quando for requisitada a inserc¸a\u2dco de um novo funciona´rio e´ preciso verificar
se um funciona´rio com o mesmo nu´mero ja´ existe.
\u2022 se o co´digo de operac¸a\u2dco for inva´lido o programa deve continuar lendo um
novo co´digo ate´ que ele seja 0 (zero), 1 (um), 2 (dois) ou 3 (tre\u2c6s).
8. Uma empreiteira tem contratos para construir diversos tipos de casa: moderno,
fazenda, colonial, etc. A quantidade de material empregada para cada tipo
de casa esta´ armazenada em um arquivo chamado \u201cmaterial.dat\u201d. Este e´ um
arquivo de registros contendo: o tipo de casa e as respectivas quantidades de
cada material necessa´rias para sua construc¸a\u2dco. Existem no ma´ximo 50 tipos de
casas e 100 tipos distintos de materiais.
Cada tipo de casa e´ representado por um co´digo inteiro no intervalo [1,50]. Por
exemplo:
\u2022 1: moderno
\u2022 2: fazenda
\u2022 3: colonial, ...
Cada tipo de material e´ representado por um co´digo inteiro no intervalo [1,100].
Por exemplo:
\u2022 1: ferro
\u2022 2: madeira
\u2022 3: vidro
\u2022 4: tinta
\u2022 5: tijolo, ...
Em um segundo arquivo, chamado \u201cpreco.dat\u201d, encontram-se os prec¸os de cada
um dos materiais. Este tambe´m e´ um arquivo de registros contendo: o co´digo
do material e o seu respectivo prec¸o. O co´digo do material segue a mesma
codificac¸a\u2dco utilizada pelo arquivo de materiais.
Escreva um programa Pascal que leia os dados do arquivo \u201cmaterial.dat\u201d em
uma matriz e o dados do arquivo \u201cpreco.dat\u201d em um vetor, como ilustrado
abaixo.
9. Usando as estruturas de dados abaixo escreva um procedimento em Pascal que
recebe como para\u2c6metro uma estrutura do tipo TAGENDA e ordena de forma cres-
cente o vetor pessoa dessa estrutura tomando como refere\u2c6ncia para a ordenac¸a\u2dco
o campo nome da estrutura TPESSOA. Ou seja, ordena uma agenda pessoal de
10.3. REGISTROS 219
telefones e enderec¸os em ordem crescente do nome das pessoas presentes na
agenda. Voce\u2c6 deve usar a func¸a\u2dco compara(r, s), que recebe dois para\u2c6metros do
tipo string e retorna 0 se r e s sa\u2dco iguais, 1 se r e´ lexicograficamente maior que
s e \u22121 se r e´ lexicograficamente menor que s. Um nome n1 e´ lexicograficamente
maior que um nome n2 se n1 aparece depois de n2 numa ordenac¸a\u2dco alfabe´tica
crescente desses nomes.
Const
MAX = 1000;
Type
TPESSOA = record
nome: string;
telefone: string;
endereco: string
end;
TAGENDA = record
pessoa: array [1..MAX] of TPESSOA;
tamanho: integer
end;
10. Uma matriz e´ dita esparsa quando a maioria dos seus elementos possui valor 0.0
(zero). Neste caso, a representac¸a\u2dco da matriz sob a forma tradicional (um array
bidimensional) implica em uma utilizac¸a\u2dco ineficiente da memo´ria. Por isso,
matrizes esparsas sa\u2dco frequ¨entemente representadas como vetores de elementos
na\u2dco nulos, sendo que cada elemento conte´m suas coordenadas e seu valor.
Exemplo:
M =
\uf8ee\uf8ef\uf8ef\uf8f0
0 0 0 1.2
7.3 0 99 0
0 2 0 0
0 17 0 0
\uf8f9\uf8fa\uf8fa\uf8fb\u21d0\u21d2Me = [ 1 41.2 2 17.3 2 399 3 22 4 217
]
Para representar estas matrizes em Pascal, podemos definir as seguintes estru-
turas de dados:
Const MAX= 1000; MAXESP =MAX\u2217MAX/10;
Type t matriz = record
lin , col : integer ;
dados : array [ 1 . .MAX, 1. .MAX] of real ;
end;
elemento = record
l , c : integer ;
val : real ;
end;
t matrizesp = record
tam : integer ;
dados : array [ 1 . .MAXESP] of elemento ;
end;
220 CAPI´TULO 10. ESTRUTURAS DE DADOS
Utilizando as estruturas de dados definidas acima, fac¸a:
(a) Escreva uma func¸a\u2dco que transforme uma matriz do tipo t_matriz em uma
matriz do tipo t_matrizesp.
(b) Escreva uma func¸a\u2dco que transforme uma matriz do tipo t_matrizesp em
uma matriz do tipo t_matriz.
(c) Escreva uma func¸a\u2dco que receba duas matrizes do tipo t_matrizesp e im-
prima o resultado da soma destas matrizes. O resultado deve ser im-
presso na forma bidimensional, com os valores de cada linha separados por
espac¸os.
11. Verdadeiro ou falso:
\u2022 um record deve ter pelo menos dois campos
\u2022 os campos de um record tem que ter nomes diferentes
\u2022 um record deve ter um nome diferente de qualquer um dos seus campos.
12. Suponha que a linguagem Pascal foi modificada para permitir que o s´\u131mbolo
ponto \u201d.\u201dpossa fazer parte de identificadores. Qual problema isto poderia cau-
sar? De\u2c6 um exemplo.
13. Esta definic¸a\u2dco e´ legal? Porque na\u2dco?
TYPE
Ponto = RECORD
quantidade: integer;
corte: Tamanho;
END;
Tamanho = (mini, medio, maxi);
14. Latitudes e longitudes sa\u2dco especificadas em graus (o), minutos (\u2019), segundos
(\u201d) e direc¸a\u2dco (norte, sul, leste, oeste). Suponha que uma cidade esteja na lati-
tude 22o17\u201934\u201d norte e longitude 53o41\u20199\u201doeste. Armazene esta localizac¸a\u2dco na
varia´vel Cidade, como declarada abaixo:
TYPE
TipoDirecao = (norte, sul, leste, oeste);
Coordenadas = RECORD
graus: 0..180;
minutos, segundos: 0..60;
direcao: TipoDirecao;
END;
Localizacao = RECORD
latitude, longitude: Coordenadas;
END
VAR
Cidade: Localizacao;
10.3. REGISTROS 221
15. Suponha que temos as seguintes definic¸o\u2dces e declarac¸o\u2dces abaixo:
TYPE
NumTelefone = RECORD
Area, Prefixo, Numero: integer;
END;
VAR
Casa, Escritorio, Celular: NumTelefone;
Escreva co´digo Pascal par testar se Escritorio e Celular esta\u2dco sobre o mesmo
co´digo de a´rea e para atribuir o mesmo nu´mero do Celular como sendo o do
Escrito´rio.
16. Criar registros para as seguintes configurac¸o\u2dces da vida real:
\u2022 Pessoas com nome, enderec¸o, telefone, sexo, idade e sala´rio;
\u2022 Planetas com massa, dista\u2c6ncia me´dia do sol, nu´mero de sate´lites, nome,
dia\u2c6metro.
\u2022 Cursos, com alunos e suas notas, per´\u131odos em que sa\u2dco oferecidos, professor,
hora´rio.
17. Uma matriz e´ dita esparsa se o nu´mero de elementos na\u2dco nulos for bastante
pequeno com relac¸a\u2dco ao nu´mero total de elementos da matriz. Voce\u2c6 deve fazer
um programa que leia do teclado uma matriz qualquer de nu´meros reais e crie
um vetor que armazene somente os elementos na\u2dco nulos da matriz. Cada posic¸a\u2dco
do vetor deve ser um registro contendo o valor do elemento, e a posic¸a\u2dco desse
elemento na matriz (linha e coluna). Imprima o resultado. A maneira de definir
o vetor faz parte da prova. Exemplo: Seja a matriz 4× 5 abaixo:
0.0 0.0 3.0 0.0 1.7
-1.1 0.0 0.0 0.0 0.0
0.0 0.0 0.0 -2.1 0.0
0.0 0.0 2.5 0.0 0.0
Seu programa devera´ construir um vetor que permita imprimrir as seguintes
informac¸o\u2dces:
\u2022 o elemento 3.0 esta´ na posic¸a\u2dco (1,3) do vetor;
\u2022 o elemento 1.7 esta´ na posic¸a\u2dco (1,5) do vetor;
\u2022 o elemento -1.1 esta´ na posic¸a\u2dco (2,1) do vetor;
\u2022 o elemento -2.1