Universidade Estadual do Oeste do Paraná – UNIOESTE
Campus de Cascavel
Colegiado de Ciência da Computação
Algoritmos
Trabalho 3º Bimestre
1) A utilização de jogos de baralho tem sido um entretenimento muito utilizado ao longo dos
anos. Esta abordagem estende-se inclusive ao dia-a-dia dos universitários onde, em seus
horários livres, costumam praticar jogos de cartas para diversão.
Os alunos do curso de computação, porém, tem muito pouco horários livres para esta
pratica desportiva, impossibilitando assim, a realização de disputas muito extensas. Visando
contornar este “problema de tempo”, os alunos desenvolveram uma variação do jogo de
chacheta (em alguns lugares chama-se pife) chamado QuickCard. O novo jogo segue a
seguinte abordagem:
a)
Utiliza-se um baralho completo, com suas 52 cartas (de 1 a 13, para cada um dos
naipes) mais os dois coringas.
b)
Podem participar da partida de 2 a 6 jogadores.
c)
O objetivo do jogo é construir combinações envolvendo as três cartas presentes na
mão do jogador. Estas combinações pode ser:
• Três cartas semelhantes. Por exemplo: 2 de ouros, 2 de paus e 2 de copas;
• Três cartas de um mesmo naipe em seqüência: 2, 3 e 4 de espadas;
• Qualquer das combinações citadas, utilizando o coringa para substituição de alguma
determinada carta. Por exemplo, 2 de ouros, coringa e 2 de copas, ou 2 de espadas, 3
de espadas e coringa.
• A carta “As” vale tanto para o início quanto para o fim da seqüência, ou seja, pode
assumir o valor 1 ou o valor 14.
d)
Cada jogador recebe 3 cartas (justamente para gastar menos tempo).
e)
Distribuídas as cartas, o jogador à direita daquele que distribuiu as cartas.
f)
Carta jogador na sua vez pode pescar uma carta do monte ou do lixo. As cartas do
monte estão escondidas, de forma que o jogador só saberá qual é no momento em que
compra-la. Enquanto a carta do lixo é revelada e descartada pelo jogador anterior.
g)
O jogo é disputado até que um jogador consiga completar sua combinação de três
cartas, tornando-se assim o vencedor. Caso as cartas do monte terminem, as cartas do lixo são
embaralhadas novamente e são utilizadas para a construção do novo monte.
Visando tornar o jogo ainda mais prático e sem depender de que alguém leve o baralho
para a faculdade, desenvolvam um software que simule a realização do QuickCard. Este
programa deve, obrigatoriamente, conter as seguintes implementações:
1) Um procedimento nomeado Mistura que embaralhe as 54 cartas (52 normais e 2 coringas),
garantindo aleatoriedade na distribuição das mesmas.
2) Um procedimento chamado Distribui que recebe por parâmetro o numero de jogadores
presentes na mesa e faz a distribuição das 3 cartas para cada jogador.
3) Para controle de quem deve iniciar a partida, sorteia-se um valor inteiro de 1 ao número de
jogadores. O valor sorteado será o jogador a iniciar a partida.
4) Desenvolver o procedimento Compra, que deve controlar o processo de compra das cartas
de cada jogador. Quando o jogador tem a vez, ele pode escolher entre pegar a carta que está
no topo do lixo (quando existir lixo) e a carta do topo do monte. Caso ele deseje ficar com a
carta, o procedimento deve pedir que o jogador escolha uma carta para descartar, indo assim
para o lixo. Caso ele não queira ficar com a carta comprada, ela é descartada automaticamente
ao lixo.
5) O programa deve conter uma função chamada TestaMonte que verifica quantas cartas
ainda existem no monte. Esta função apenas retorna 1 se ainda existem cartas no monte e 0se
não existirem mais cartas. Caso o monte tenha acabado e ainda não haja vencedor, as cartas
do lixo são então embaralhadas e passam a formar o novo monte. Lembrem-se que quando
isso ocorrer, o embaralhamento não envolve as 54 cartas, pois cada jogador ainda possui suas
três em mãos.
6) Após cada jogador efetuar sua jogada, o sistema deve executar uma função chamada
VrfVencedor, que tem por objetivo testar se o jogador que acabou de atuar conseguiu formar
alguma combinação possível. A função testa apenas o ultimo jogador a atuar e não todos.
Caso alguma combinação seja obtida, a função retornará o número do jogador vencedor, caso
contrário retornará 0.
7) O programa deve rodar até que a função VrfVencedor retorne valor diferente de zero. Não
há necessidade de simular mais que uma partida.
2) Construir um software que simule um jogo de caça-palavras. Este algoritmo deverá compor
uma matriz de 20 linhas e 20 colunas com caracteres de forma que o usuário possa procurar
palavras distribuídas na matriz. Para tal desenvolvimento, a equipe deve atender aos seguintes
requisitos:
a) Os caracteres dispostos na matriz serão todos maiúsculos e estendem-se de A até Z. Não
haverá caracteres especiais.
b) Para fazer a construção e preenchimento da matriz, deve ser usado um procedimento
chamado Constroi, sem passagem de parâmetros de entrada;
c) Após formada a matriz o usuário começa a interagir, escolhendo palavras que devem ser
procuradas na matriz. Este processo de busca é repetido até que o usuário informe um número
ao invés de um caracter. Como a matriz envolve apenas caracteres maiúsculos, não há
necessidade de verificar a entrada informada pelo usuário;
d) O processo de busca deverá ser feito de três formas distintas:
• Busca vertical no sentido cima baixo e baixo cima;
• Busca horizontal no sentido direita esquerda e esquerda direita;
• Busca em diagonal no sentido crescente e decrescente;
e) Para fazer a procura vertical deve ser construído um procedimento chamado BuscaVer que
receba como parâmetro de entrada (por cópia) a palavra fornecida pelo usuário;
f) Para fazer a procura horizontal deve ser construído um procedimento com o nome de
BuscaHor que receba como parâmetro de entrada (por cópia) a palavra fornecida pelo
g) Já no terceiro caso, deve ser construída a procedure BuscaDia;
3) Seu Ignácio, dono de uma mercearia, interessado em ter um controle mais eficiente dos
produtos de sua loja, bem como das operações de compra e venda, decidiu contratar alguém
para desenvolver um software (vocês) básico para tais controles. Para facilitar a vida do
programador, Ignácio criou um arquivo em formato texto chamado “cadastro.txt” contendo
os dados dos produtos que ele comercializa na mercearia. Este arquivo tem a seguinte
estrutura:
Código
Descrição
Unidade
Quantidade
Preço Compra
Preço Venda
O campo quantidade indica o total de cada produto em estoque no momento em que o
software vai entrar em funcionamento. Assim, existe a restrição de quantidade a ser vendida
(não pode vender mais do que possui armazenado).
O software deve então ser capaz de armazenar as informações dos produtos
especificados e operar sobre estes. Estas operações são as compras feitas pelo seu Ignácio,
para renovar o estoque e as vendas feitas a clientes.
Para armazenar os dados em memória, pode-se utilizar um vetor contendo os
dados (vetor de registro). Este vetor pode ser dimensionado com 35 posições, pois assim
cabem todos os registros presentes no arquivo de entrada.
Venda
Um cliente, ao dirigir-se ao seu Ignácio lhe informa quantos produtos quer comprar e
qual a quantidade de cada produto. Apenas os itens que tem unidade em quilograma que
podem ser adquiridos parcialmente (meio quilo de feijão, por exemplo). Ao finalizar o pedido,
o software deve retornar o total a ser pago pelo cliente e o lucro obtido na comercialização.
Para descobrir o produto no cadastro, deve-se verificar o código do item. Este código é
informado pelo usuário é deve ser passado por parâmetro (cópia) a uma função chamada
VrfCodProd. Esta função deverá retornar o total do produto em estoque caso o produto esteja
cadastrado e, caso o produto não esteja cadastro, a função retornará -1. Se o retorno for -1 o
usuário deverá redigitar o código do produto, até informar um valor válido. Se a quantidade
retornada for 0, exiba uma mensagem avisando o fato e indicando que tal venda não pode ser
efetuada.
Para critérios de controle, o sistema deve armazenar todas as operações de venda em
um arquivo chamado “saidas.txt” sob o formato especificado no exemplo abaixo:
Dados da venda:
Código: 77 Quantidade: 5
Código: 14 Quantidade: 1
Registro no Arquivo:
Venda 01
Código: 77 Quantidade: 5
Total: R$ 9.90
Código: 14 Quantidade: 1
Total: R$ 15.40
Total Venda: R$ 25,30
Lucro Total: R$ 10,60
Lucro: R$ 3.40
Lucro: R$ 7.20
Compra
Seu Ignácio, ao notar que o estoque de determinada mercadoria está baixo, vai ao seu
fornecedor e adquire produtos para manutenção dos estoques. Ao chegar lá, ele informa
quantos produtos vai adquirir e os códigos de cada um deles (os códigos são os mesmos dos
cadastrados na mercearia). Como ele sabe de cabeça todos os códigos dos seus produtos, não
há necessidade de verificar se o código informado é válido.
Para cada compra realizada, deve ser criado um registro em um arquivo texto chamado
“entradas.txt”, onde a formato a ser seguido está definido abaixo:
Dados da Venda
Código: 77 Quantidade: 5
Código: 14 Quantidade: 1
Registro no Arquivo:
Compra 01
Código: 77 Quantidade: 5
Código: 14 Quantidade: 1
Total: R$ 6.50
Total: R$ 8.20
Total Compra: R$ 14.70
Sempre que ocorrer uma operação de compra ou venda de produtos, o controle
de estoque deve atualizar a quantidade de produtos armazenados.
Saída do Sistema
Quando o usuário pedir para sair do sistema, este deve exibir na tela o total lucrado no
período e o total gasto em compras.
Além disso, o programa deve criar um arquivo chamado “cadastroatual.txt” que
contenha os mesmos dados do arquivo de entrada, porém, com as quantidades atualizadas.
Especificações:
a) O trabalho deve ser desenvolvido em dupla ou individualmente. Trabalhos com mais de
dois alunos serão desconsiderados.
b) Neste trabalho, serão avaliadas organização e clareza do código fonte. O programador deve
respeitar as identações necessárias e quanto necessário, utilizar-se de comentários para
elucidar operações mais complexas.
c) O valor total do trabalho representará 30 décimos da nota do terceiro bimestre.
d) Devem ser entregues arquivos contento apenas o código fonte (.c). Este código deve ser
entregue em formato digital enviado pelo Curso Moodle da disciplina. Não serão aceitos, em
hipótese alguma, trabalhos enviados via e-mail.
e) Cópias de trabalhos serão penalizadas com a perda total do valor do trabalho.
f) A linguagem utilizada para desenvolver este trabalho deve ser o C (podem ser utilizados os
compiladores Geany, Dev C++, GCC, MingW ou mesmo o NetBeans).
g) A data de envio do trabalho é 15/10/2010 até as 23:55. Esta submissão será feita via
Moodle, dessa forma, todos devem estar cadastrados no curso Algoritmos 2010, para que seja
possível o envio do trabalho.
h) O trabalho enviado deve estar claramente identificado, como nome dos acadêmicos, série e
data do trabalho.
Download

Trabalho 3º Bimestre