universidade federal de ouro preto ufop instituto de ci
play

Universidade Federal de Ouro Preto UFOP Instituto de Cincias Exatas - PDF document

Universidade Federal de Ouro Preto UFOP Instituto de Cincias Exatas e Biolgicas ICEB Departamento de Computao DECOM Disciplina: Algoritmos e Programao Avanada Professores: Marco Antonio M. Carvalho Tlio ngelo M.


  1. Universidade Federal de Ouro Preto – UFOP Instituto de Ciências Exatas e Biológicas – ICEB Departamento de Computação – DECOM Disciplina: Algoritmos e Programação Avançada Professores: Marco Antonio M. Carvalho Túlio Ângelo M. Toffolo Lista de Exercícios 05 – Strings Instruções • Todos os exercícios que envolvem programas devem ser resolvidos através de programas; • Na solução dos exercícios, devem ser utilizados os conceitos listados no cabeçalho desta lista; • Para cada exercício, deve ser criado um arquivo com nome “Nome_ListaX_ExeY.c”, em que Nome denota o nome do aluno, X denota o número da lista de exercícios e Y denota o número do exercício; • Os códigos fonte deverão ser primeiramente submetidos ao Uva, e após serem aceitos, devem ser entregues através do Moodle, sem zipar; • Códigos copiados ou tentativas de trapaça acarretam em perda total da lista de exercícios; • Eventuais dúvidas podem ser sanadas com o professor; • A data da entrega é até o início da próxima aula prática. Onde está Waldorf? ID: 10010 Dado uma grade de m por n de letras, (1<= m , n <=50), e uma lista de palavras, encontre a localização na grade na qual a palavra pode ser encontrada. Uma palavra casa uma linha de letras da grade direta, sem interrupções. Uma palavra pode casar as letras da grade independentemente da caixa (ou seja, letras maiúsculas ou minúsculas são tratadas da mesma forma). O casamento pode ser feito em qualquer uma das oito direções, horizontalmente, verticalmente ou diagonalmente na grade. Entrada A entrada começa com um único inteiro em uma linha indicando o número de casos a seguir, cada um deles descrito como a seguir. Esta linha é seguida por uma linha em branco, e também há uma linha em branco entre duas entradas consecutivas. A entrada começa com um par de inteiros, m seguido por n , 1<= m , n <=50 em notação decimal em uma única linha. As próximas m linhas contém n letras cada, este é a grade de letras na qual as palavras da lista devem ser encontradas. As letras da grade podem ser maiúsculas ou minúsculas. Depois das letras da grade, outro inteiro k aparece sozinho em uma linha (1<= k <=20). As próximas k linhas da entrada contém uma lista de palavras a serem procuradas, uma palavra por linha. Estas palavras podem conter letras maiúsculas e minúsculas apenas (sem espaços, hífens ou outros caracteres não alfabéticos). Saída Para cada caso de teste, a saída segue a descrição abaixo. As saídas de dois casos consecutivos serão separadas por uma linha em branco.

  2. Para cada palavra na lista, um par de inteiros representando a localização da palavra correspondente na grade deve ser exibido. Os inteiros devem ser separados por um único espaço. O primeiro inteiro é a linha da grade na qual a primeira letra da palavra pode ser encontrada (1 representa a coluna mais à esquerda na grade, e n representa a coluna mais à direita na grade). Se uma palavra pode ser encontrada mais de uma vez na grade, a localização exibida deve corresponder àquela ocorrência mais ao topo (ou seja, a ocorrência que posiciona a primeira letra mais próxima do topo da grade). Se duas ou mais palavras são as mais ao topo, a saída deve corresponder àquela mais à esquerda. Todas as palavras podem ser encontradas pelo menos uma vez na grade. Exemplo de Entrada Exemplo de Saída 1 8 11 abcDEFGhigg hEbkWalDork FtyAwaldORm FtsimrLqsrc 2 5 byoArBeDeyv 2 3 Klcbqwikomk 1 2 strEBGadhrb 7 8 yUiqlxcnBjf 4 Waldorf Bambi Betty Dagbert

  3. Ananagramas ID: 156 A maioria dos fãs de jogos de palavras cruzadas é acostumada com anagramas -- grupos de palavras com as mesmas letras em ordens diferentes -- por exemplo, OPTS, SPOT, STOP e POST. Algumas palavras, porém, não possuem este atributo, não importa como você rearranje as letras delas, você nunca formará outra palavra. Tais palavras são chamadas ananagramas , um exemplo é QUIZ. Obviamente, tais definições dependem do domínio no qual estamos trabalhando; você pode pensar que ATHENE é um ananagrama, ao passo que qualquer químico rapidamente produziria ETHANE. Um possível domínio poderia ser a língua inglesa completa, mas isto poderia levar a alguns problemas. Alguém poderia restringir a, digamos, música, em que SCALE se tornaria um ananagrama relativo (LACES não está no mesmo domínio) mas NOTE não é, uma vez que pode produzir TONE. Escreva um programa que lerá o dicionário de um domínio restrito e determine os ananagramas relativos. Note que palavras de uma letra só são, ipso facto , ananagramas relativos, uma vez que não podem ser “rearranjados” de maneira nenhuma. O dicionário não conterá mais que 100 palavras. Entrada A entrada consistirá de uma série de linhas. Nenhuma linha terá mais que 80 caracteres de comprimento, mas pode conter qualquer número de palavras. Palavras consistem de até 20 letras maiúsculas/minúsculas, e não serão divididas entre linhas. Espaços podem aparecer livremente ao redor das palavras, e pelo menos um espaço separa múltiplas palavras na mesma linha. Note que palavras contendo as mesmas letras de diferentes caixas são consideradas anagramas uma da outra, logo, tIeD e Edit são anagramas. O arquivo será terminado por um único #. Saída A saída consistirá de uma série de linhas. Cada linha consistirá de uma única palavra que é um ananagrama relativo no dicionário de entrada. Palavras devem ser exibidas em ordem lexicográfica ( case-sensitive ). Haverá sempre pelo menos um ananagrama relativo. Exemplo de Entrada Exemplo de Saída Disk NotE ladder came tape soon leader acme RIDE lone Dreis peat derail ScAlE orb eye Rides dealer NotE derail LaCeS drIed drIed noel dire Disk mace Rob dries eye # ladder soon

  4. Códigos ID ID: 146 É 2084 e o ano do Grande Irmão finalmente chegou, apesar de um século depois. No intuito de exercer grande controle sobre os cidadãos e assim conter um colapso crônico da ordem e da lei, o Governo decide em uma medida radical -- todos os cidadãos devem ter um microcomputador cirurgicamente implantado em seus punhos esquerdos. Este computador conterá todos os tipos de informações pessoais assim como um transmissor que permitirá que os movimentos das pessoas sejam registrados e monitorados por um computador central. (Um efeito colateral desejável deste processo é que serão encurtadas as filas de desemprego dos cirurgiões plásticos). Um componente essencial de cada computador será um código de identificação único, consistindo de até 50 caracteres tomados a partir das 26 letras minúsculas. O conjunto de caracteres para qualquer código é escolhido atropeladamente. A forma complicada na qual o código é impresso no chip faz com que seja muito mais fácil para o fabricante produzir códigos que são rearranjamentos de outros códigos do que criar códigos novos com uma seleção diferente de letras. Logo, uma vez que um conjunto de letras foi escolhido, todos os códigos deriváveis dele serão utilizados antes que o conjunto seja trocado. Por exemplo, suponha que foi decidido que um código conterá exatamente 3 ocorrências de ‘ a ’, 2 de ‘ b ’ e 1 de ‘ c ’, então três dos 60 códigos permitidos sob estas condições são: abaabc abaacb ababac Estes três códigos são listados do alto para baixo em ordem alfabética. Entre todos os códigos gerados com este conjunto de caracteres, estes códigos aparecem consecutivamente nesta ordem. Escreva um programa que ajude a gerar estes códigos de identificação. Seu programa deve aceitar uma sequência de não mais que 50 letras minúsculas (que podem conter caracteres repetidos) e imprimir o código sucessor se ele existir ou a mensagem ‘No Successor’ se o dado código é o último na sequência para aquele conjunto de caracteres. Entrada A entrada consistirá de uma série de linhas, cada uma contendo ma string representado um código. O arquivo será terminado por uma linha consistindo de um # único. Saída A saída consistirá de uma linha para cada código lido, contendo o código sucesso ou as palavras ‘No Successor’. Exemplo de Entrada Exemplo de Saída abaacb ababac cbbaa No Successor #

  5. WERTYU ID: 10082 Um erro comum em digitação é posicionar as mãos no teclado uma linha à direita da posição correta. Desta forma, “Q” é digitado como “W” e “J” é digitado como “K” e assim por diante. Você deve decodificar uma mensagem digitada desta maneira. Entrada A entrada consiste de várias linhas de texto. Cada linha contém dígitos, espaços, letras maiúsculas e minúsculas (Exceto, Q, A, Z) ou pontuação mostrada acima [exceto a aspa invertida (`)]. Teclas rotuladas com palavras [ Tab , BackSp , Control , etc .] não são representadas na entrada. Saída Você deve substituir cada letra ou símbolo de pontuação por aquele imediatamente à sua esquerda no teclado QWERTY mostrado acima. Espaços na entrada devem ser exibidos na saída. Exemplo de Entrada Exemplo de Saída O S, GOMR YPFSU/ I AM FINE TODAY.

Recommend


More recommend