Este documento apresenta 4 exercícios sobre estruturas de dados a serem implementados em C. O primeiro exercício pede um programa para converter expressões matemáticas do modo pós-fixa para infixa usando pilha. O segundo pede um simulador de escalonamento de processos em 3 filas de prioridade. O terceiro pede um simulador de memória com lista duplamente encadeada de processos. O quarto pede um programa para representar e operar com polinômios de várias variáveis usando lista circular.
1. Universidade Federal do Piauí – UFPI
Campus Senador Helvídio Nunes de Barros – CSHNB
Curso de Sistemas de Informação Bloco: III
Disciplina: Estruturas de Dados
Professora: Juliana Oliveira de Carvalho
Acadêmico:..................................................................................................Matrícula:............................
SEGUNDA LISTA DE EXERCÍCIOS DE ESTRUTURAS DE DADOS
1. Faça um programa em C que use pilha dinâmica para converter e calcular o valor de uma expressão
matemática do modo pós-fixa para infixa. E depois mostre na tela o resultado da expressão e como a
expressão fica no modo pós-fixa.
2. Escalonador é uma parte do Sistema Operacional que escolhe de uma fila de prontos o próximo processo a
ocupar o processador. Suponha que nosso escalonador mantenha 3 filas dinâmicas, de acordo com a
prioridade do processo.
Cada processo possui as seguintes informações: o seu número, o tempo de processamento que o mesmo
necessita em segundos e a prioridade do mesmo para que ele possa ser inserido na fila de acordo com a sua
prioridade.
O processador deve sempre executar primeiro os processos da fila de maior prioridade e somente passar
para outra fila quando todos os processos da fila atual tiver sido executado pelo menos 2 vezes, ou ficar
vazia.
Quando o processador retira o primeiro processo da fila para usar o processador, o mesmo só pode ficar 1s
utilizando o processador, terminado este tempo o escalonador diminui de 1 o tempo de processamento
deste processo e verifica seu valor. Se o valor do tempo de processamento atual for 0, o processo é
finalizado, ou seja, retirado da fila, caso contrário, será verificado quantas vezes o processo passou nesta
fila para decidir em qual fila o mesmo será inserido. Se o processo passou somente 1 vez será colocado ao
final da mesma fila, se passou 2 vezes será colocado ao final da próxima fila de prioridade abaixo da atual.
Caso ele já esteja na última fila, ou seja, na fila de menor prioridade, o processo será inserido ao final desta
fila até que o mesmo termine independente do número de vezes que já passou por ela.
Faça um programa em C que tenha um menu de opções para inserir processos em uma fila do escalonador,
para o escalonador escolher o processo(caso não existia nenhum processo na fila emitir uma mensagem),
para mostrar os processos das filas, para mostrar o próximo processo que irá utilizar o processador, mostrar
quantos processos tem em cada fila, para mostrar quanto tempo falta para executar os processos de uma
determinada fila e para mostrar quanto tempo de processamento ainda falta para chegar em um
determinado processo e mostrar quanto tempo de processamento ainda restam para terminar cada fila e
todas as filas.
3. Faça um programa em C que simule processos na memória do computador para isso, com as seguintes
opções de menu:
1. Cadastrar dados da memória e da página: definir o tamanho da memória em bytes; o tamanho
de cada página da memória, também em bytes.
2. Inserção na Lista de Processos: inserir os dados do processo em uma lista ordenada e duplamente
encadeada, contendo as seguintes informações: número do processo, o tamanho em páginas do
processo, último acesso ao processador em unidades de tempo (0 caso ainda não tenha acessado,
ou seja, no ato da inserção, e valores inteiros para os próximos acesso pode manter um contador
para todas vezes que executar um processo aumentar em 1 a unidade de tempo de último acesso), e
por fim se o mesmo foi ou não modificado.
3. Executar um processo: verificar se o mesmo já está na memória, através da lista de processos. Se
estiver na memória executar processo significará atualizar dados. Atualizar dados significa mudar
último acesso e informar se se o processo sofreu ou não modificado/atualização. Se o processo não
estiver na memória, ou seja na lista de processos, verificar se o mesmo cabe na memória, somando
2. os tamanhos de cada processo da lista, caso caiba pedir para o usuário inseri-lo na memória, caso
contrário, pedir ao usuário para remover um processo e depois inseri-lo na memória.
4. Mostrar todos os processos na Lista de Processos: mostre todos os processos com suas
respectivas informações.
5. Remoção da Lista de Processos: ordem de prioridade para remoção:
• primeiro: remova o primeiro processo que couber o processo que se deseja inserir, que não
tenha sido acessado no último instante de tempo e não tenha sido modificado.
• Segundo: remova o primeiro processo que couber o processo que se deseja inserir, que tenha
sido acessado no último instante de tempo e não tenha sido modificado.
• Terceiro: remova o primeiro processo que couber o processo que se deseja inserir, que tenha
sido acessado no último instante de tempo e tenha sido modificado. Neste caso enviar uma
mensagem dizendo que o processo que está sendo retirado deve ser gravado no disco.
• Quarto: remova quantos processos forem necessários para inserir o novo processo. Lembre-se
que se o processo que está sendo removido foi modificado, deve ser emitida uma mensagem
informando que o mesmo deve ser gravado em disco.
4. Um polinômio em três variáveis (x, y, z) pode ser representado por uma lista circular, onde cada nó deve
representar um termo e deve conter: a potência do termo, o coeficiente desse termo. Faça um programa em
C que possua as seguintes opções:
a) Cadastrar polinômios: para cada polinômio cadastrado tenha uma lista circular, manter um vetor
contendo os ponteiros inicias de cada polinômio, além de um código para identificar o polinômio
desejado.
b) Somar dois polinômios cadastrados, permita ao usuário escolher os polinômios.
c) Multiplicar dois polinômios cadastrados, permita ao usuário escolher os polinômios.
d) Avaliar um dos polinômios cadastrados em função de valores dados para x, y e z, permita ao usuário
escolher o polinômio.
e) Imprimir a representação de um dos polinômios cadastrados, permita ao usuário escolher o polinômio.
f) Imprimir a representação de todos os polinômios cadastrados.
g) Calcular a derivada parcial de um dos polinômios cadastrados em relação a qualquer uma das
variáveis, permita ao usuário escolher o polinômio e a variável.
Equipe: os programas podem ser feitos em dupla, mas os relatórios são individuais. Se os
programas forem feitos em dupla, a dupla deve ser identificada no envio do código.
Data de Entrega: data primeira prova escrita
Entregar: Código Fonte, Relatório(Conforme Modelo em PDF)
Forma de Entrega: pelo SIGAA, caso tenha algum problema enviar por e-mail
(julianaoc@gmail.com).
Entrevista Individual: agendar horário com a Professora.
Processo da Entrevista: para cada aluno será sorteado 2 programas, dentre os entregues pelo aluno,
para que o mesmo explique os 2 programas.