Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO -‐ UFRPE PPGIA -‐ DEINFO Fundamentos de Programação Aplicada Prof. Filipe Cordeiro 1ª Lista de Exercícios – Programação Imperativa Instruções: • A lista é individual. • Os códigos com a resolução da lista devem ser entregues zipados no edulify. • O nome do arquivo deverá conter seu nome. Ex: “Lista1_Filipe_Cordeiro” Condições para receber nota 0 (zero): 1. Entrega fora do prazo estabelecido. 2. Algoritmos com erros de sintaxe e/ou lógica. 3. Algoritmos incompletos. 4. Algoritmo com alta similaridade com algum de outro(s) aluno(s). 1. Deseja-‐se fazer um levantamento a respeito da ausência de alunos à primeira prova de Programação de Computadores para cada uma das 5 turmas existentes. Para cada turma, é fornecido um conjunto de valores, sendo que os dois primeiros valores do conjunto corresponde a identificação da turma (A, ou B, ou C,...) e ao número de alunos matriculados, e os demais valores deste conjunto contêm o número de matrícula do aluno e a letra A ou P para o caso de o aluno estar ausente ou presente, respectivamente. Fazer um algoritmo que: -‐ para cada turma, calcule a porcentagem de ausência e escreva a identificação da turma e a porcentagem calculada; - determine e escreva quantas turmas tiveram porcentagem de ausência superior a 5%. 2. Um operador de crossover pode ser aplicado a duas strings s1 e s2 e consiste em se sortear aleatoriamente um ponto de s1 e s2. Escolhido este ponto, então, é realizada a troca de informações de s1 e s2 tal como mostrado no esquema da Figura 1. Construir um programa que: a) Realiza a leitura de duas strings s1 e s2 b) Emprega o operador de crossover para construir novas strings s1 e s2. c) Mostra as novas strings s1 e s2 e o valor do ponto p sorteado aleatoriamente que representa o índice a partir do qual ocorreu a troca de informações entre s1 e s2. 3. Escreva um programa que peça ao usuário dados para preencher duas listas (ou arrays): lista A e lista B. O programa deve exibir como resultados as seguintes informações: a. Lista A – lista B (elementos que estão na lista A e não estão na lista B) b. Lista A ∩ lista B (elementos que estão na lista A e na lista B ao mesmo tempo) c. Lista A ∪ lista B (elementos que estão na lista A ou na lista B, sem repetição) 4. Faça um programa que crie uma matriz 5x5, aleatoriamente. Normalize os valores da matriz, de acordo com a seguinte equação: Elemento Normalizado = #$#%#&'( *+',-.%+-(, #$#%#&'( /%#&(, #$#%#&'( Imprima a matriz normalizada. 5. Um quadrado mágico é uma tabela de números dispostos na forma de um quadrado, de tal modo que a soma dos elementos de uma linha, coluna ou diagonal seja uma constante. Estes números devem ser inteiros e consecutivos, começados por 1. A seguir é apresentado é apresentado um exemplo de quadrado mágico de ordem três. Nota-‐se que a soma dos elementos de uma linha, coluna ou diagonal é constante, sendo igual a 15. 8 1 6 3 5 7 4 9 2 Figura 2. Quadrado mágico de ordem 3 Podemos dizer que um quadrado mágico é um arranjo de números que vai de 1 até 𝑛1numa matriz 𝑛×𝑛, onde cada número ocorre apenas uma vez e este arranjo é tal que a soma dos números existentes em uma linha deve ser igual à soma dos números existentes em qualquer coluna como também em qualquer das diagonais. Desta forma, a ordem n de um quadrado mágico é o número de colunas ou de linhas que este comporta. Para construção de um quadrado mágico de ordem ímpar é utilizado um algoritmo comum. A seguir é ilustrado um exemplo de construção de um quadrado mágico de ordem 5. Figura 3. Construção de um quadrado mágico de ordem 5x5. Para construir um quadrado 5x5 escrevemos os números de 1 a 25 no quadrado Q do seguinte modo: Começamos colocando o 1 na casa central da primeira linha de Q e uma casa para cima e uma para a direita para colocar os números seguintes. Se um número cai fora do quadrado Q, ficando nos quadrados A, B ou C, voltamos com o número na casa correspondente no quadrado Q. Veja por exemplo, a colocação do 2. Se encontramos uma casa ocupada, como, por exemplo, na colocação do número 6 a casa a ser usada já está ocupada pelo 1. Escrevemos então o número (no caso o 6) na casa abaixo do número anterior (no caso o 5) e continuamos com a regra inicial. O procedimentocontinua até preencher todo o quadrado. Completado o quadrado, obtemos soma 65 em todas as linhas, colunas e diagonais. O processo é o mesmo para a construção de qualquer quadrado mágico de ordem ímpar. Crie um algoritmo que construa um quadrado mágico de ordem ímpar. O tamanho do quadrado deverá ser fornecido pelo usuário. 6. Faça um programa para jogar um jogo da velha. O primeiro jogador a jogar utilizará um X para marcar sua jogada e o segundo um O. A configuração do tabuleiro deve ser impressa antes de cada nova jogada e ao final da partida utilizando o caractere '.' para marcar as casas vazias. A jogada deve ser feita através de dois inteiros que indicam a linha e a coluna em que se deseja jogar. Não deve ser possível jogar em uma casa já ocupada e o programa deve reconhecer quando um dos jogadores vencer ou quando a partida terminar sem vencedor. 7. Uma das principais ferramentas de uma Máquina de Turing, que possibilita que seu poder de computação seja maior do que de outros modelos mais simples, é uma fita infinita, dividida em células, onde informações de um alfabeto ficam armazenadas. Uma Máquina Dobradora é uma máquina inspirada na Máquina de Turing, onde a fita é finita, os dados armazenados são números inteiros e, ao invés do mecanismo de funcionamento tradicional de Turing, a máquina utiliza operações de dobras da fita para fazer computações. Para efetuar uma dobra, a máquina escolhe uma posição entre células adjacentes e, ao realizar a dobra, ela soma os valores das células que se sobrepuseram, como pode ser visto na figura abaixo. Observe também que a dobra pode ser feita em uma posição anterior ao centro da fita, como ilustrado a seguir. Note também que, com isso, podem ser feitas dobras também no início e no final da fita, invertendo a ordem desta. A empresa Science of Bends Company vem desenvolvendo versões comerciais da Máquina Dobradora e a produção tem aumentado recentemente. Infelizmente o último lote de Máquinas Dobradoras produzidas está com problemas e algumas máquinas não estão funcionando corretamente. Assim, testes são necessários para evitar a venda de produtos com defeito, o que poderia denegrir a imagem da empresa. Para testar as máquinas, um conjunto de testes é dado e, para cada fita, a máquina devolve o resultado da computação. Assim os engenheiros responsáveis pelos testes tomam nota do resultado e podem verificar se este está correto. Mas os engenheiros esqueceram-‐se de tomar nota de qual computação foi feita em cada conjunto de teste. Para evitar a necessidade de testar todas as máquinas novamente, os engenheiros estariam satisfeitos em descobrir se pelo menos existe uma sequência de dobras coerente para um par de fitas de entrada e saída. Para isso, eles contrataram você para desenvolver um programa que verifique, para cada fita de entrada, se existe uma sequência de dobraduras que leve a uma fita de saída. Entrada Cada caso de teste é composto por 4 linhas. As primeiras duas linhas referem-‐se à entrada fornecida à Máquina Dobradora e as duas seguintes referem-‐se à saída fornecida pela Máquina. A primeira linha da entrada contém um único inteiro N, descrevendo o tamanho da fita de entrada. A linha seguinte conterá N inteiros 𝑣4, … , 𝑣7 , correspondentes ao conteúdo da fita de entrada. A terceira linha contém um inteiro M, o tamanho da fita de saída e a última linha conterá inteiros 𝑤4, … , 𝑤*, correspondentes ao conteúdo da fita de saída. Saída A saída de cada caso de teste conterá uma única linha contendo a letra “S” caso exista uma sequência de dobraduras que transforme a fita de entrada na fita de saída e “N” em caso contrário. Restrições • 1 ≤ 𝑀 ≤ 𝑁 ≤ 15 • 0≤ 𝑣-, 𝑤> ≤ 10@, para 1 ≤ 𝑖 ≤ 𝑁 e 1 ≤ 𝑗 ≤ 𝑀 • A máquina só realiza 1 dobra Exemplos: 8. Uma das principais dificuldades de organizar uma Maratona de Programação é recolher os balões que escapam e ficam presos no teto do salão: muitas vezes o contrato com o dono do salão exige que este seja entregue limpo logo após o evento, sob pena de multa. Este ano a organização da Maratona está mais previdente: ela tem o desenho do teto do salão, e quer sua ajuda para determinar o que pode acontecer com um balão, dependendo da posição no solo onde ele é solto (isto é, se é bloqueado pelo teto ou se escapa para o exterior do salão). O teto do salão é formado por vários planos que, vistos de lado, podem ser descritos por segmentos de reta, como mostrado na figura abaixo: O balão pode ser considerado pontual. Quando um balão toca um segmento do teto que éhorizontal, ele fica preso. Quando um balão toca um segmento que é inclinado, o balão desliza até o ponto mais alto do segmento e escapa, podendo escapar completamente do salão ou podendo tocar em mais segmentos. Não há pontos em comum entre os segmentos que formam o teto. Por exemplo, se o balão for solto nas posições marcadas como a ou b, será bloqueado na posição de coordenadas (3, 5); se o balão for solto na posição marcada como c, será bloqueado na posição de coordenadas (7, 5); e se o balão for solto na posição marcada como d, não será bloqueado e escapará para fora do salão na posição de coordenada x = 9. Escreva um programa que, dada a descrição do teto do salão como segmentos de reta, responde a uma série de consultas sobre a posição final de balões soltos do piso do salão. Entrada A primeira linha da entrada contém dois inteiros N e C indicando, respectivamente, o número de segmentos de reta do teto e o número de consultas. Cada uma das N linhas seguintes contém quatro inteiros X1, Y1, X2, Y2, descrevendo um segmento de reta do perfil do teto, com extremos de coordenadas (X1, Y1) e (X2, Y2). Cada uma das C linhas seguintes descreve uma consulta e contém um inteiro X, indicando que a consulta quer determinar o que acontece com um balão solto no ponto de coordenada (X, 0). Saída Para cada consulta da entrada, seu programa deve imprimir uma única linha. Se o balão escapar do salão, a linha deve conter um único inteiro X, indicando a coordenada x pela qual o balão escapa do salão. Caso contrário, a linha deve conter dois inteiros X e Y indicando a posição (x, y) em que o balão fica retido no teto. Restrições 1 ≤ 𝑁 ≤ 5 1 ≤ 𝐶 ≤ 10 0 ≤ 𝑋4, 𝑋1 ≤ 10, 0 < 𝑌4, 𝑌1 ≤ 10 a b c d 0 ≤ 𝑋 ≤ 10 só serão considerados segmentos com ângulos de 45, 135 e 180 graus. Exemplos
Compartilhar