Página 1 de 2

Desafio

Enviado: 16 Jan 2008 08:55
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??

Enviado: 16 Jan 2008 09:23
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

Enviado: 16 Jan 2008 09:31
por Maligno
Essa o Marini matou fácil. :))
Então, só pra contribuir, simplifico: {"Par","Ímpar"}[n%2+1]

Enviado: 16 Jan 2008 09:51
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

Enviado: 16 Jan 2008 09:51
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.

Enviado: 16 Jan 2008 09:53
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!!!

Enviado: 16 Jan 2008 10:00
por Maligno
Esse é o tipo de coisa que não tem por onde. Ou será por matriz ou por manipulação de string.

Enviado: 16 Jan 2008 10:05
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

Enviado: 16 Jan 2008 10:16
por Maligno
A solução por matriz me parece melhor, além de ser mais facilmente legível.

Enviado: 16 Jan 2008 10:40
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!!

Enviado: 16 Jan 2008 10:45
por MARINI
E o Stanis não postou sua solução!!!

Enviado: 16 Jan 2008 10:49
por Maligno
Ele disse que usou uma solução parecida com a sua primeira, mas com a função Right(). Não muda muito.

Enviado: 16 Jan 2008 10:51
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 )

Enviado: 16 Jan 2008 15:21
por Augusto
E se o número em questão for um "DECIMAL" ?? Essas soluções apresentadas funcionam ??

Enviado: 16 Jan 2008 15:27
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.