Desafio

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Desafio

Mensagem por Stanis Luksys »

Pessoal, tem um problema interessante para programadores que gostam de desafios:

Imagine um programa em que o usuário entra com um número qualquer.

O programa deve dizer se o número é par ou ímpar, no entanto sem se utilizar de nenhuma condição/validação, ou seja, não pode usar IF, IF(), WHILE, CASE etc... É só pegar o número e mostrar se é par ou ímpar.

É bem fácil... Quem se habilita??
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
MARINI
Usuário Nível 3
Usuário Nível 3
Mensagens: 288
Registrado em: 06 Jul 2004 08:06
Localização: Pindamonhangaba SP

Mensagem por MARINI »

LOCAL result[2],nr

result[1]:="PAR "
result[2]:="IMPAR"
nr:=1

DO WHILE .T.
@ 5,5 GET nr
READ
@ 7,5 say "numero "+result[(nr%2)+1]
ENDDO
Sds
Marini
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Essa o Marini matou fácil. :))
Então, só pra contribuir, simplifico: {"Par","Ímpar"}[n%2+1]
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
MARINI
Usuário Nível 3
Usuário Nível 3
Mensagens: 288
Registrado em: 06 Jul 2004 08:06
Localização: Pindamonhangaba SP

Mensagem por MARINI »

Outra solução:

nr:=1
DO WHILE .T.
@ 5,5 GET nr
READ
@ 7,5 say "numero "+PADR(SUBS("IMPAR",(nr+1)%2*3),5)
ENDDO
Sds
Marini
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Maligno escreveu:Essa o Marini matou fácil. :))
Então, só pra contribuir, simplifico: {"Par","Ímpar"}[n%2+1]
Matou mesmo!! Parabéns!

Mas existem outras soluções. A minha mesmo foi diferente. O desafio permanece.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

MARINI escreveu:Outra solução:

nr:=1
DO WHILE .T.
@ 5,5 GET nr
READ
@ 7,5 say "numero "+PADR(SUBS("IMPAR",(nr+1)%2*3),5)
ENDDO
Eita, o pessoal ta rápido mesmo por aqui... rsrs

A minha solução foi parecida com essa, mas usei a função right().

Isso ae pessoal!!!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Esse é o tipo de coisa que não tem por onde. Ou será por matriz ou por manipulação de string.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
MARINI
Usuário Nível 3
Usuário Nível 3
Mensagens: 288
Registrado em: 06 Jul 2004 08:06
Localização: Pindamonhangaba SP

Mensagem por MARINI »

Uma outra solução:

nr:=1
result:="0PAR..1IMPAR"
DO WHILE .T.
@ 5,5 GET nr
READ
@ 7,5 say "numero "+SUBS(result,AT(STR(nr%2,1),result)+1,5)
ENDDO
Sds
Marini
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

A solução por matriz me parece melhor, além de ser mais facilmente legível.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Maligno escreveu:A solução por matriz me parece melhor, além de ser mais facilmente legível.
... E funcionar em qualquer idioma!!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
MARINI
Usuário Nível 3
Usuário Nível 3
Mensagens: 288
Registrado em: 06 Jul 2004 08:06
Localização: Pindamonhangaba SP

Mensagem por MARINI »

E o Stanis não postou sua solução!!!
Sds
Marini
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Ele disse que usou uma solução parecida com a sua primeira, mas com a função Right(). Não muda muito.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Mas eu falei!

A solução que adotei foi usando string também, através da função right..

Deixa eu ver se lembro:

Código: Selecionar todos

? right( "IMPAR", n%2 * 2 + 3 )
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

E se o número em questão for um "DECIMAL" ?? Essas soluções apresentadas funcionam ??
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Augusto escreveu:E se o número em questão for um "DECIMAL" ?? Essas soluções apresentadas funcionam ??
Sim, pois par ou impar trata de número reais, não somenet inteiros, e nem somente naturais.

Ou seja, todos os números, mesmo negativos.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder