Jump to content
Nandito

Ajuda com um programa!

Recommended Posts

Nandito

Boas,

tenho o seguinte programa que não consigo resolver:

Uma palavra perfeita é uma palavra com n caracteres que cumpre os seguintes dois requisitos (1 ≤ i ≤ n):

-->O carácter na posição i é lexicograficamente maior ou igual ao carácter na posição n-i+1 se i é par e

-->O carácter na posição i é lexicograficamente menor ou igual ao carácter na posição n-i+1 se i é impar.

Um caracter é lexicograficamente menor do que outro carácter se o primeiro ter um valor em ASCII que é inferior ao valor do segundo. Por exemplo, ‘a’ é lexicograficamente menor do que ‘b’.

Uma maneira de obter uma palavra perfeita a partir de uma palavra não-perfeita é retirar todos os caracteres desta última que violam os dois requisitos acima. Existem várias maneiras de escolher os caracteres a remover.

Neste trabalho pretende-se que escreva um programa em C que produza uma palavra perfeita a partir de outra palavra, possivelmente não-perfeita, de acordo com a seguinte regra. Primeiro, deve retirar o carácter mais à esquerda que viola um dos dois requisitos acima e é o lexicograficamente menor. Esta transformação gera uma nova palavra diferente da original. Caso a palavra modificada não seja perfeita, deve repetir a transformação acima na palavra modificada para gerar outra palavra modificada. Este procedimento deve ser repetido quantas vezes forem necessárias até dar origem a uma palavra perfeita. Quando tal acontence, imprima a palavra perfeita.

Qualquer ajuda e bem vinda ;)

Share this post


Link to post
Share on other sites
kareka

O que é que já tentaste fazer até agora ?


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
Nandito

meti a lista alfabetica em chars e meti as condiçoes par e impar referidas no problema...mas como não sou nada experiente nem isso consegui fazer bem mas o maior problema é saber o que se tem de fazer de seguida

Share this post


Link to post
Share on other sites
kareka

Antes de mais isto tem de ser feito num ciclo , certo ? Em que a condição de paragem terá que ser a palavra ser perfeita .

Depois tens que correr a palavra do fim para o inicio , visto que tens que ir retirando o caracter mais à esquerda da palavra . Comparas o codigo ascii com o do caracter i com o do caracter n-i+1 e verificas a condição . Dependendo dos teus conhecimentos de C , tens várias maneiras de eliminar o caracter caso esse não seja a palavra perfeita .

Aqui vai uma dica :

int i=n, perfect=0;

while(perfect==0) {
     if(i%2==0) {
          if(vec[i]>=vec[n-i+1]) {
               ...
          } else {
               ...
          }
     } else {
          if(vec[i]<vec[n-i+1]) {
               ...
          } else {
               ...
          }
     }
     --i;
}

Só para teres uma ideia , já agora não precisas de lista alfabetica nenhuma .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
kareka

Ainda não percebi para que queres a lista alfabética  :wallbash:

Se é para o que estou a pensar (comparar o código ascii dos chars) googla um pouco sobre isso , vais ver que não é preciso tanta coisa  ;)


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites
carlosf

Bom ver pessoal da FCTUC por aqui, contudo, é feio pedir ajuda para trabalhos...

Se tiveres dúvidas concretas tuda a gente ajudará, assim é mais complicado...

cumps, carlosf

Share this post


Link to post
Share on other sites
Nandito

Ainda não percebi para que queres a lista alfabética  :wallbash:

Se é para o que estou a pensar (comparar o código ascii dos chars) googla um pouco sobre isso , vais ver que não é preciso tanta coisa  ;)

e isso k tas a pensar...mas ja sei como faço isso :P

Share this post


Link to post
Share on other sites
kareka

Faz da maneira que te disse , é mais fácil . É só comparares o ascii de cada char .


<?php include("assinatura.txt"); ?>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.