Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 18. 4. 2011 16:57:32

atapik
Člen
Registrace: 18. 4. 2011
Příspěvků: 3

Logický součin VYŘEŠENO

Zdravím, potřebuju poradit jak udělat logický součin mezi dvěmi binárními čísly.
Př.
číslo 1:     10101000
číslo 2:     10100100
výsledek:  10100000

Díky.

Offline

#2 18. 4. 2011 18:13:28

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Logický součin VYŘEŠENO

Jistou naprosto šílenou konstrukcí vzorce to jde a nic jiného jsem v nápovědě nenašel, ale radši počkáme na reakci ostatních. V nouzi nejvyšší použijte:

V A1 je 10101000
v A2 je 10100100

vzorec je:

=VALUE(CONCATENATE(IF(AND(LEFT(A1;1)="1";LEFT(A2;1)="1");1;0);
IF(AND(MID(A1;2;1)="1";MID(A2;2;1)="1");1;0);IF(AND(MID(A1;3;1)="1";MID(A2;3;1)="1")
;1;0);IF(AND(MID(A1;4;1)="1";MID(A2;4;1)="1");1;0);IF(AND(MID(A1;5;1)="1";MID(A2;5;1)="1");
1;0);IF(AND(MID(A1;6;1)="1";MID(A2;6;1)="1");1;0);IF(AND(MID(A1;7;1)="1";MID(A2;7;1)="1");
1;0);IF(AND(RIGHT(A1;1)="1";RIGHT(A2;1)="1");1;0)))

Tak a teď mě zastřelte než mě najde lp.
;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 18. 4. 2011 18:58:53

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 814

Re: Logický součin VYŘEŠENO

Ano, jde to. Trochu přehlednější (a méně zavislá na počtu číslic) je možná varianta:

=SUMPRODUCT(
VALUE(MID(TEXT(A1;REPT(0;8));ROW(INDIRECT("1:8"));1));
VALUE(MID(TEXT(A2;REPT(0;8));ROW(INDIRECT("1:8"));1));
10^(8-ROW(INDIRECT("1:8")))
)

Kvůli čitelnosti je těch řádků více:

ROW(INDIRECT("1:8"))

vygeneruje řadu čísel 1 - 8,

=MID(TEXT(A1;REPT(0;8));ROW(INDIRECT("1:8"));1))

nebo

=MID(TEXT(A1;"00000000");ROW(INDIRECT("1:8"));1))

rozloží číslo na číslice (zkuste uložit pomocí ctrl-shift-enter (matice)), Samozřejmě 8 číslic, lze dodat jako parametr.

=10^(8-ROW(INDIRECT("1:8")))

dá 10E7, 10E6, ..., 1 (zkuste uložit jako matici)

SUMPRODUCT vyvolá maticový režim a jednotlivé číslice pronásobí, ...


ale radši si na to napište vlastní makro funkci (určitě ji na webu najdete)

Offline

#4 18. 4. 2011 19:18:26

hanus
Člen
Místo Olomouc
Registrace: 29. 11. 2006
Příspěvků: 573
Web

Re: Logický součin VYŘEŠENO

Makro resp. fce nebude složitá, navíc by se do ní dal rovnou zakomponovat parametr pro AND/OR/XOR. Chcete, abychom vám tu vlastní funkci napsali? Budete si ji pak muset "vláčet" s sebou v dokumentech, nebo si ji dát do vlastních maker.

Offline

#5 18. 4. 2011 21:36:48

atapik
Člen
Registrace: 18. 4. 2011
Příspěvků: 3

Re: Logický součin VYŘEŠENO

díky za pomoc, jak budu mít čas tak na to mrknu

Offline

#6 18. 4. 2011 21:47:44

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 814

Re: Logický součin VYŘEŠENO

OR a XOR taky jde:

OR>

=SUMPRODUCT( 
(("1"=MID(TEXT(A1;REPT(0;8));ROW(INDIRECT("1:8"));1))+
 ("1"=MID(TEXT(A2;REPT(0;8));ROW(INDIRECT("1:8"));1)))>0; 
10^(8-ROW(INDIRECT("1:8"))) 
)

XOR

=SUMPRODUCT(
(MID(TEXT(A1;REPT(0;8));ROW(INDIRECT("1:8"));1)) <> 
(MID(TEXT(A2;REPT(0;8));ROW(INDIRECT("1:8"));1)); 
10^(8-ROW(INDIRECT("1:8"))) 
)

Makra jsou např.: na
http://www.ehow.com/how_7624700_perform … ation.html

Offline

#7 19. 4. 2011 22:10:10

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Logický součin VYŘEŠENO

Makrem například takto:

rem lze použít pro logický součin dvou binárních čísel
rem u delších čísel je
rem nutné formátovat buňky jako text.
rem funkce vrací výsledek součinu jako text

function binlog(bin1 as string, bin2 as string) as string    ' zadani promenych
dim vysledek as string                                       ' stanoveni vysledku jako textu
dim test1 as boolean, test2 as boolean                       ' test jako logicka hodnota
 do while len(bin1) > len(bin2)                              ' test delky cisel
   bin2 = 0 & bin2                                           ' doplneni nul kratsiho cisla
 loop
 do while len(bin1) < len(bin2)                              ' test delky cisel
   bin1 = 0 & bin1                                           ' doplneni nul kratsiho cisla
 loop
for i = 1 to len(bin1)                                       ' pro kazdou pozici jedn. cisel
test1 =  mid(bin1,i,1)                                       ' rozdeleni na cislice k testu
test2 =  mid(bin2,i,1)                                       ' rozdeleni na cislice k testu
 if test1 AND test2 then                                     ' pokud je log.soucin pravdivy
    hodnota = 1                                              ' vysledek je 1
 else                                                        ' pokud je nepravdivy
    hodnota = 0                                              ' vysledek je 0
 end if
vysledek = vysledek & hodnota                                ' spojeni vsech vysledku
next i
binlog = vysledek 
end function

Pokud A1 a A2 obsahují bin.čísla do buňky zadáváte =BINLOG(A1;A2). Funkce vrací hodnotu jako text (protože pro delší čísla Calc automaticky mění formát) tzn. že pokud bude výsledek začínat nulami budou zobrazeny. Možností je zadat vzorec =VALUE(BINLOG(A1;A2) funkce vrátí hodnotu jako číslo bez uvozujících nul.
Naštěstí Calc rozpozná při dalších výpočtech číslo naformátované jako text a lze s ním dále provádět výpočty.

A jak psal Hanus - nevýhodou této funkce je, že ji máte definovanou ve svých makrech a v jiném OO nebude fungovat, nebo ji můžete uložit přímo do maker konkrétního dokumentu a nosit si ji sebou. Variantou je výpočet CTRL+C zkopírovat do schránky a vložit jako text pomocí CTRL+SHIFT+V (hlavně odznačit vzorce)
;o)

Editoval sedlacekdan (20. 4. 2011 07:48:46)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 22. 4. 2011 23:05:53

atapik
Člen
Registrace: 18. 4. 2011
Příspěvků: 3

Re: Logický součin VYŘEŠENO

Ještě jednou dík, všechno mi už funguje smile

Offline

Zápatí