NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia: Něco podobného jako fuzzy logika

Aktivity
Avatar
TomBen
Tvůrce
Avatar
TomBen:5.7.2013 13:21

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á.

Odpovedať
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
Lukáš Hruda
Tvůrce
Avatar
Odpovedá na TomBen
Lukáš Hruda:5.7.2013 13:33

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

char Funkce(int cislo)
{
  return (cislo >= 0) ? "+" : "-";
}
Editované
 
Hore Odpovedať
5.7.2013 13:33
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovedá na Lukáš Hruda
Lukáš Hruda:5.7.2013 13:40

Pardon, má tam být '+' : '-'

 
Hore Odpovedať
5.7.2013 13:40
Avatar
TomBen
Tvůrce
Avatar
Odpovedá na Lukáš Hruda
TomBen:5.7.2013 13:44

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

Hore Odpovedať
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
Lukáš Hruda
Tvůrce
Avatar
Odpovedá na TomBen
Lukáš Hruda:5.7.2013 14:00
char Funkce(int cislo)
{
  return (cislo > 0) ? '+' : (cislo < 0) ? '-' : '0';
}
 
Hore Odpovedať
5.7.2013 14:00
Avatar
TomBen
Tvůrce
Avatar
Odpovedá na Lukáš Hruda
TomBen:5.7.2013 14:11

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.

Editované
Hore Odpovedať
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
Odpovedá na TomBen
Homo:5.7.2013 14:20
char sign(int i) {
    if (i == 0) return '0';
    if (i >> 31 != 0) return '-';
    return '+';
}
Hore Odpovedať
5.7.2013 14:20
1010011 1000101 1011000
Avatar
TomBen
Tvůrce
Avatar
Odpovedá na Homo
TomBen:5.7.2013 14:31

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.

Hore Odpovedať
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
Odpovedá na TomBen
Luboš Běhounek Satik:5.7.2013 20:15

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];
}
Hore Odpovedať
5.7.2013 20:15
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovedá na Luboš Běhounek Satik
Luboš Běhounek Satik:5.7.2013 20:23

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

Hore Odpovedať
5.7.2013 20:23
https://www.facebook.com/peasantsandcastles/
Avatar
Luboš Běhounek Satik:5.7.2013 20:38

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... :) )

Hore Odpovedať
5.7.2013 20:38
https://www.facebook.com/peasantsandcastles/
Avatar
TomBen
Tvůrce
Avatar
TomBen:5.7.2013 21:08

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ě.

Hore Odpovedať
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.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 12 správy z 12.