Avatar
TomBen
Redaktor
Avatar
TomBen:

Jak byste napsali funkci, která vrací následující:

vstup/výstup
------------
0/'0'
kladné číslo/'+'
záporné číslo/'-'

Pokud možno bez ifů. Na jazyce mi nezáleží, pište nápady v čem libo.
Není to žádná soutěž, jen mě to zajímá.

Odpovědět 5.7.2013 13:21
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Lukáš Hruda (Luckin):

Pokud jsem to správně pochopil, tak bych to napsal takhle:

char Funkce(int cislo)
{
  return (cislo >= 0) ? "+" : "-";
}
Editováno 5.7.2013 13:34
 
Nahoru Odpovědět 5.7.2013 13:33
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
TomBen:

Mělo by to vracet nulu jako znak, v případě, že vstup je nula jako číslo.

Nahoru Odpovědět 5.7.2013 13:44
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Lukáš Hruda (Luckin):
char Funkce(int cislo)
{
  return (cislo > 0) ? '+' : (cislo < 0) ? '-' : '0';
}
 
Nahoru Odpovědět  +2 5.7.2013 14:00
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
TomBen:

A nějaké řešení čistě bitově přes logické funkce by to mělo?
Kdyby se pak výsledek jen překonvertoval na znak.

Editováno 5.7.2013 14:12
Nahoru Odpovědět 5.7.2013 14:11
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Homo
Člen
Avatar
Odpovídá na TomBen
Homo:
char sign(int i) {
    if (i == 0) return '0';
    if (i >> 31 != 0) return '-';
    return '+';
}
Nahoru Odpovědět 5.7.2013 14:20
1010011 1000101 1011000
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Homo
TomBen:

Posun bitu je zajímavý, ale kdyby se nějak dal skloubit s těmi ostatními
stavy - takhle to je 3x pořád podmínka = stav. Vlastně je to stejné řešení
jako to co má Lukáš Hruda (Luckin).

Nahoru Odpovědět 5.7.2013 14:31
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na TomBen
Luboš Běhounek (Satik):

Dalo by se to napsat v asm s jen jednou podminkou (v eax posilas cislo, do al dostanes vysledny znak):

cmp eax, 0
  jz nula
  jge kladny
  mov al, 0x2D ; -
  ret
kladny:
  mov al, 0x2B ; +
  ret
nula:
  mov al, 0x30 ; 0

V C# "bez podminky" treba takhle, ale to asi neni reseni, ktere sis predstavoval :)

static char sgn(int number)
{
  return number.ToString("+#;-#;0")[0];
}
Nahoru Odpovědět  +1 5.7.2013 20:15
:)
Avatar
Odpovídá na Luboš Běhounek (Satik)
Luboš Běhounek (Satik):

misto jge by tam bylo spravnejsi *jg, i kdyz uz je to v tu chvili fuk, protoze pokud to byla nula, tak uz se skocilo jinam

Nahoru Odpovědět 5.7.2013 20:23
:)
Avatar
Luboš Běhounek (Satik):

Ono se to pak nejspis smrskne na problem jak z cisla -1/0/1 udelat odpovidajici znak bez podminkovani.

Udelat z cisla jen cislo 0/1/-1 (podle "znamenka") uz je celkem jednoduche a zpusobu je hromada.

(sorry za triple post, chtelo by to tu vyresit nejak jinak tu editaci prispevku... :) )

Nahoru Odpovědět 5.7.2013 20:38
:)
Avatar
TomBen
Redaktor
Avatar
TomBen:

Díky všem. Paradoxně Satikův C# kousek byl pro mě nejvíc inspirativní
i když použil řešení takřka obchvatem. :-)
Ale zajímavé jsou skoro všechny postupy a skutečně se ukazuje,
že je způsobů požehnaně.

Nahoru Odpovědět 5.7.2013 21:08
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.