4ª Lista de IP Questão 1 Apesar dessa era digital, os jogos de tabuleiros foram jogos que deixaram marcada a infancia de muitos. Assim como Banco Imaboliario e Jogo da Vida por exemplo, esses jogos são constituidos por por um tabuleiro onde o objetivo é atravessar todas as casas do tabulereiro. Faça um programa que simula um jogo de tabuleiro similar a figura acima. O jogo possui quatro jogadores(azul, Verde, Vermelho, Amarelo) que partidindo do Inicio devem atravessar todas as casas do tabuleiro até o Final, a movimentação das peças é feita a partir dos dados lançados. O programa deve informar quem é o ganhador do campeonato, os campeonatos serão compostos por pelo menos uma partida. O jogo deve funcionar da seguinte forma: 1. o usuário informa o tamanho do tabuleiro( < 500), a quantidade de armadilhas ( < ¼ do tamanho do tabuleiro) e a quantidade de partidas por campeonato( < 5). 2. as armadilhas são espalhadas no tabuleiro de forma randomica 3. caso o jogador caia em uma armadilha, ele deve ficar a rodada sem jogar os dados 4. a quantidade de quadrados do tabuleiro e de armadilhas não muda durante o campeonato 5. deve ser impresso na tela a situação dos 4 jogadores a cada rodada(posição e se está em alguma armadilha) 6. no final do campeonato deve ser mostrado a classificação dos jogadores com suas pontuações, a pontuação é feita da seguinte forma: 1º (8 * a quantidade de quadrados do tabuleiro) pontos 2º (4 * a quantidade de quadrados do tabuleiro) pontos
3º (2 * a quantidade de quadrados do tabuleiro) pontos 4º (0) pontos Esclarecimentos Finais: Deve-se usar todos os conhecimentos quanto a ponteiro nessa questão. Seu tabuleiro não deve ser estatico, deve ser alocado dinamicamente e as utilize também o conceito de passagem por refêrencia nas funções implementadas. Para gerar valores aleatorios, tanto para distribuir as armadilhas no tabuleiro quanto gerar o valor dos dados, utilizae uma função da biblioteca stdlib.h chamada rand. Para mais informações sobre essa função acesse: http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html Exemplo de Entrada e Saída ENTRADA Tamanho: 30 Armadilhas: 7 Numero de Jogos no Campeonato: 1 SAIDA +---------------------+----------+ Game (1/1) + +---------------------+----------+ Blue 0 0 Green 0 0 Red 0 0 Yellow 0 0
Blue 5 1 Green 4 1 Red 8 1 Yellow 8 1 Blue 5 0 Green 4 0 Red 8 0 Yellow 8 0 Blue 14 0 Green 9 0 Red 19 0 Yellow 16 0 Blue 23 0 Green 15 0 Red 26 0 Yellow 25 0
...::::::::Classification Board::::::::... Player Yellow... 240 Pts. Player Red... 120 Pts. Player Blue... 60 Pts. Player Green... 0 Pts. Questão 2 O governo está precisando de blocos de casas e pediu a sua ajuda. Sua tarefa é fazer um programa que ajude o governo a planejar a contrução de um quarteirão. Mas como o computador que esse programa irá rodar é antigo, o uso de memória deve ser otimizado. Ou seja, não deve haver espaço alocado e sem uso. Para isso, o programa deverá capturar quantas ruas o bloco tem, e quantas casas tem em cada rua. Cada casa deverá conter 3 informações: quantidade de pessoas que moram lá, soma das idades de todas as pessoas e renda total da casa. O Menu será subdividido em dois: um para manutenção do quarteirão e outro para estatísticas. Tendo isso, o programa oferecerá os seguintes recursos: 1. Menu de manutenção 1.1. Criar nova rua: essa função deverá preencher uma nova rua. Se houver espaço vago (de alguma outra rua que foi despovoada) os novos moradores devem ser colocados nesse espaço. Se não, uma nova rua será construída no final do quarteirão (depois da ultima rua de baixo). 1.2. Adicionar nova casa: Será pedido ao usuário o número da rua em que deseja criar a nova casa. Da mesma fora da função acima, caso haja alguma casa desocupada na rua dada, ela deverá ser preenchida. Caso não, uma nova casa será construída no final desta rua. 1.3. Despovoar rua: Dado o número da rua, o programa deverá despejar todos os moradores dela e esvaziar as casas. 1.4. Despovoar casa: Dado o número da rua e da casa, essa deverá ser despovoada e esvaziada. (Ao final de qualquer operação anterior, deverá ser impresso o log, que seria, por exemplo, Casa despovoada com sucesso!, Rua criada com sucesso ou Rua inexistente ). 2. Menu de estatísticas 2.1. Procurar rua mais rica: essa função deverá checar qual rua tem a maior soma de rendas médias. A renda média de uma casa é a renda total dividido pelo número de pessoas. Deverá ser impresso o resultado. Ex: A rua mais rica é a 1 com renda média de R$ 1200.. A renda de uma rua é a soma de todas as rendas médias de cada casa habitada divida pela quantidade de casas daquela rua. 2.2. Procurar rua mais velha: essa função deverá procurar qual rua tem a maior idade média. A idade média de uma rua é a soma das idades médias de cada casa dividida pela quantidade de pessoas naquela rua. Deverá ser impresso o resultado: Ex: A rua mais velha é a 3, com idade média de 27 anos.. 2.3. Procurar casa mais promissora da rua: dado o número de uma rua, essa função deverá informar qual a casa mais promissora dela. Uma casa ser promissora é ela ser a que tem a maior razão renda média/idade média, o que significa que pessoas mais novas estão tendo
rendas melhores. O resultado deverá ser impresso. Ex: A casa mais promissora da rua 2 é a 3, com razão igual a 40.. Em caso de empate, qualquer uma das duas será mostrada. 2.4. Procurar casa mais rica: essa função deverá procurar dentre todas as casas qual é a mais rica. A riqueza de uma casa é medida pela renda média, que é a renda total dividida pelo número de pessoas. O resultado deverá ser mostrado. Ex: A casa mais rica da quadra está na rua 2, numero 11, com renda media de R$2570.. OBS.: Como dito acima, o programa deverá ter o gasto de memória otimizado, por isso, todo e qualquer vetor ou matriz deverá ser alocado dinamicamente, com o tamanho necessário. O descumprimento disso acarretará em perda de pontos. OBS2.: Aconselha-se o uso da função free(), da biblioteca stdlib.h, nas funções de remoção, já que deve-se otimizar o gasto de memória. Questão 3 Você foi contratado por uma empresa de fabricação de componentes eletrônicos. Sua tarefa nessa empresa é desenhar caminhos em chips para a passagem de pulsos elétricos no mesmo. Você recebe uma folha (entenda como captar dados do usuário ) com as especificações da fabricação: 1. Primeiro será dada a quantidade de microchips para serem desenhados os caminhos. 2. Cada microchip terá formatos diferentes, mas todos terão forma de quadriláteros. (Ou seja terão formatos n x m). 3. Para o desenho dos caminhos será dado um determinado ponto de inicio no microchip e após esse ponto será dado uma string com as letras N (para Norte), S (para Sul), L (Leste), O (Oeste) indicando o caminho a ser seguido. Em cada microchip foi posto (no inicio e final) um nano adesivo para identificar onde é o início e o final de cada caminho (ou seja o endereço das coordenadas), de cada microchip desenhado. Você deverá imprimir de cada microchip o endereço do ponto inicial e o endereço do ponto final do caminho (todos os endereços devem estar em Hexadecimal.) Exemplo de Entrada: 1 8 32 0 0 SSSLLLLNLLLLLSSSSSS Exemplo de Saída: Microchip #1 X... X...XXXXXX... XXXXX...X... Endereço Inicial: 0x12 Endereço Final: 0xFF
Clarificações: biblioteca, caberá a você implementar utilizando os conceitos de ponteiros.) Admita que o caminho não se sobrepõe não queremos um curto no microchip. Questão 4 Números "sortudos" são os números 4, 7, e qualquer número cuja representação decimal contém apenas os números 4 e 7. Assim, 4, 7, 47, 74, 744, e 477 são exemplos de números "sortudos", enquanto 5, 17, e 467 não são. O problema que você deve resolver é o seguinte: Seu programa deve receber um número N do usuário. A partir daí, o programa receberá N números inteiros K ( 0 < K <= 100000 ). Após N números terem sido recebidos, se houver pelo menos um número "sortudo" entre os números K, para cada número "sortudo" entre os números K, você deverá descobrir quais dos divisores desse número são "sortudos" (exceto o próprio número), imprimir a quantidade total desses números, imprimi-los na tela, e repetir o procedimento para cada um dos números sortudos dentre os divisores de K. O processo deve ser repetido até que seja encontrado um caso em que não haja números "sortudos" entre os divisores de nenhum dos K. Observação: Divisores iguais devem ser impressos apenas uma vez! Exemplos: Entrada: N = 3 K1 = 4774 K2 = 10382 K3 = 77774 Saída: Número de divisores "sortudos": 2 Divisores: 7, 77 Número de divisores sortudos: 1 Divisores: 7 Número de divisores sortudos: 0 Entrada: N = 2 K1 = 7777
K2 = 4444 Saída: Número de divisores "sortudos": 4 Divisores: 4, 44, 7, 77 Número de divisores "sortudos": 2 Divisores: 4, 7 Número de divisores "sortudos": 0 Entrada: N = 4 K1 = 5215 K2 = 532 K3 = 4456 K4 = 7456 Número de divisores "sortudos": 0