Spełnienie warunków

Użytkowanie arkusza kalkulacyjnego
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Spełnienie warunków

Post autor: brex87 »

Dzień dobry.
W jaki sposób mogę zapisać funkcję, która zaokrąglałaby wynik i inkrementowała go np. o 1 lub 2 jeśli jest to liczba nieparzysta lub parzysta ?
W arkuszu w C3 mam wpisaną funkcję, która wykonuje mnożenie wartości z poszczególnych komórek, a wygląda to tak: =$H3*$B$3*C3
Chciałbym uaktualnić wynik w zależności od wartości jaka zostanie zwrócona tzn.

Kod: Zaznacz cały

=$H3*$B$3*C3+jeżeli(C3=liczba.parzysta;"0";"+1")
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Spełnienie warunków

Post autor: Jermor »

=$H3*$B$3*C3+CZY.NIEPARZYSTE(C3)
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: Spełnienie warunków

Post autor: brex87 »

Jermor pisze:=$H3*$B$3*C3+CZY.NIEPARZYSTE(C3)
A w jaki sposób wkomponować tam jeżeli, żeby wykonało działanie dodawania w zależności od tego czy jest to parzysta czy nieparzysta ?
Jeśli wyjdzie parzysta to +2, jeśli nieparzysta to +3 ?
Dlatego napisałem zależność z jeżeli, gdzie pierwsza wartość prezentuje PRAWDĘ, a druga FAŁSZ.
LibreOffice 6.2.2.2 (x64)
zulu144
Posty: 92
Rejestracja: sob gru 12, 2009 3:27 am

Re: Spełnienie warunków

Post autor: zulu144 »

Jermor pisze:=$H3*$B$3*C3+CZY.NIEPARZYSTE(C3)
Rozumiem to tak

Kod: Zaznacz cały

CZY.NIEPARZYSTE(C3)
daje 0 jak parzysta C3
daje 1 jak nieparzysta C3
formatem załatwia się zaokrąglenie całości jak chce się mieć dokładny wynik w komórce ale przedstawiony w sposób zaokrąglony.
Dodaj do całości dwa i będziesz miał to co chcesz.
AOO 4.1.7 na WIN7; LO 6.3.2 portable
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: Spełnienie warunków

Post autor: brex87 »

Rozwiązałem to inaczej, póki co błędy mi się nie pojawiają zobaczymy na dalszym etapie budowy arkusza.

Kod: Zaznacz cały

=$H3*$B$3*10/1,5+jeżeli(C3=CZY.NIEPARZYSTE(C3);2;3)
Wartość "10", która się pojawia to moja stała, którą później przerzucę do innej komórki.
Obecnie mam spełnione warunki, że jeśli jest PRAWDA = PARZYSTE = +2, jeżeli FAŁSZ = NIEPARZYSTE = +3.
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Spełnienie warunków

Post autor: Jermor »

W swoim pierwszym poście podałeś ten przykład: =$H3*$B$3*C3+jeżeli(C3=liczba.parzysta;"0";"+1")
co rozumiem tak: jeśli parzysta niczego nie dodawaj a jeśli nieparzysta dodaj 1
I ta formuła to robi.
Teraz piszesz, że jeśli parzysta to dodaj 2 a gdy nieparzysta dodaj 3.
Każda liczba jest albo parzysta albo nieparzysta. Czyli formuła może być taka:
=Wyrażenie podstawowe + 2+CZY.NIEPARZYSTE(C3)

Jest jeszcze funkcja CZY.PARZYSTE_ADD() i CZY.NIEPARZYSTE_ADD() te funkcje zwracaj wartości liczbowe 1 albo 0.
Do określenia "parzystości" brana jest część całkowita liczby.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: Spełnienie warunków

Post autor: brex87 »

Projekt ewoluuje, bo wychodzą inne kwestie, których niestety nie przewidziałem.
Co do dodawania liczb to faktycznie mój błąd bo określiłem to po prostu jako 1 = prawda, 0 = fałsz.
Potrzebowałem dodać określoną liczbę do wyniku, który jest w komórce C3 na podstawie wyrażenia podstawowego.
Nie mniej jednak dziękuję za wskazówkę, tematu proszę nie zamykać bo możliwe, że jeszcze powrócę.
LibreOffice 6.2.2.2 (x64)
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: Spełnienie warunków

Post autor: brex87 »

Zauważyłem ułomność mojego rozwiązania, a mianowicie zastosowanie formuły, która wygląda tak:
=$H$3*$B$3*10/1,5+JEŻELI(C3=CZY.NIEPARZYSTE(C3);+2;+3)
H3 = 1,35
B3 = 2,2
10/1,5 (stała wartość)
Wynikiem jest 1,35*2,2*10/1,5 = 19,8
Liczba 19 jest nieparzysta, zatem powinno dodać do niej + 3, tymczasem po zaokrągleniu do pełnej liczby, czyli 20 i tak dodawane jest 3.
W jaki sposób "zmusić" calca, żeby porzucił liczby po przecinku i zwiększał zgodnie z wartością liczby całkowitej ?
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Spełnienie warunków

Post autor: Jermor »

Widzę tu dużą ułomność twojego rozwiązania. Przyglądając się opisowi tego co piszesz, dochodzę do wniosku, że podana przez ciebie formuła

Kod: Zaznacz cały

=$H$3*$B$3*10/1,5+JEŻELI(C3=CZY.NIEPARZYSTE(C3);+2;+3)
jest wpisana do komórki C3. Już to samo jest błędem, ponieważ tego typu formuła generuje błąd 522, mówiący o tym, że w obliczeniach następuje odwołanie cykliczne. Formuła napisana w komórce odwołuje się do siebie samej.
Pytanie, skoro to jest błąd, to dlaczego nie ma o nim żadnej informacji?
Otóż dlatego, że czasami taki rodzaj obliczeń, szczególnie w dziedzinie inżynierskiej jest potrzebny. Nazywa się go obliczeniami iteracyjnymi. W opcjach programu Calc jest specjalny przełącznik informujący o tym, czy obliczenia iteracyjne są dozwolone. Jeśli są, błąd się nie wyświetla, a arkusz próbuje wykonać obliczenia. To ustawienie jest w "Narzędzia -> Opcje -> LibreOffice Calc -> Oblicz -> Odwołania iteracyjne".
Teraz sama część JEŻELI(C3=CZY.NIEPARZYSTE(C3);+2;+3), ona daje wyniki dotyczące takiego oto badania: czy wartość w C3 jest równa wynikowi funkcji CZY.NIEPARZYSTE(C3). Funkcja CZY.NIEPARZYSTE zwraca jedną z dwóch wartości 1, gdy liczba jest nieparzysta i 0 - gdy parzysta. Gdy C3 zawiera np. 7, to ta część formuły sprawdza czy 7 jest równe 1, bo CZY.NIEPARZYSTE(C3) da w wyniku 1. To oczywiście spowoduje, że ten fragment prawidłowo zadziała tylko gdy w C3 będzie 1 albo dowolna liczba parzysta. Formalnie to wyrażenie jest poprawne ale bezsensowne. Pierwszym argumentem funkcji JEŻELI może być przecież od razu funkcja CZY.NIEPARZYSTE, gdyż zwraca ona, sama z siebie, wartość PRAWDA albo FAŁSZ. Ale już w tym przykładzie coś się nie zgadza, bo wygląda na to, że gdy liczba jest nieparzysta ma zostać dodane 2 a gdy parzysta - 3 a dwa posty niżej napisałeś odwrotnie.
brex87 pisze:Jeśli wyjdzie parzysta to +2, jeśli nieparzysta to +3 ?
Jeżeli chcesz w swojej formule wykorzystać obliczony już w jej procesie wynik, powinieneś użyć funkcji BIEŻĄCY(), funkcja udostępnia wartość obliczoną w wyrażeniu do miejsca jej wystąpienia. Czyli twoja formuła powinna wyglądać mniej więcej tak:

Kod: Zaznacz cały

=$H$3*$B$3*10/1,5+CZY.NIEPARZYSTE(BIEŻĄCY())+2
Funkcje CZY.PARZYSTE() i CZY.NIEPARZYSTE() biorą pod uwagę tylko część całkowitą liczby.
W końcu, co oznacza
brex87 pisze:tymczasem po zaokrągleniu do pełnej liczby, czyli 20 i tak dodawane jest 3
W twojej formule nigdzie nie widać zaokrąglania do liczby całkowitej, więc skąd to pytanie? 19,8+3 to 22,8
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: Spełnienie warunków

Post autor: brex87 »

Mam uruchomioną opcję obliczeń iteracyjnych, gdyż bez tego w ogóle nie będzie działać zwracanie wyników w tej samej komórce.
W założeniu funkcja JEŻELI miała pełnić rolę wykonywania funkcję powiększania wyniku w zależności od tego czy wynikiem jest liczba PARZYSTA czy NIEPARZYSTA.
Funkcja działa połowicznie, gdyż potrzebuję wyniku liczby CAŁKOWITEJ, a nie liczby DZIESIĘTNEJ, i zwrócony wynik ZAWSZE powinien być liczbą PARZYSTĄ tzn:
- mając wynik 19,8 i chcąc uzyskać liczbę całkowitą, funkcja powinna zaokrąglić w dół do 19 i dodać 3 = 22
- mając wynik 14,6 i chcąc uzyskać liczbę całkowitą, funkcja powinna zaokrąglić w dół do 14 i dodać 2 = 16
Można do tego dodać funkcję ZAOKR.DÓŁ i całość prezentuje się wtedy tak:

Kod: Zaznacz cały

=ZAOKR.DÓŁ($H$3*$B$3*10/1,5+JEŻELI(C3=CZY.NIEPARZYSTE(C3);2;3))
, lecz w tej sytuacji nie zwraca poprawnego wyniku w przypadku kiedy wynikiem jest liczba PARZYSTA np. 14,6 i dodaje do niej +3 = 17.

Czyli wartość logiczna powinna wyglądać tak - jeśli dobrze rozumuję:

Kod: Zaznacz cały

=$H$3*$B$3*10/1,5+ZAOKR.DÓŁ(JEŻELI(C3=CZY.NIEPARZYSTE(C3);2;0))+ZAOKR.GÓRA(JEŻELI(C3=CZY.PARZYSTA(C3);3;0))
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Spełnienie warunków

Post autor: Jermor »

brex87 pisze:...gdyż potrzebuję wyniku liczby CAŁKOWITEJ, a nie liczby DZIESIĘTNEJ...
A w jakim miejscu twojej formuły widać, że własnie o to chodzi?

Jeśli jednak o to ci chodzi, to bez włączania "iteracyjności" możesz użyć formuły:

Kod: Zaznacz cały

=ZAOKR.DO.PARZ(ZAOKR.W.DÓŁ($H$3*$B$3*10/1,5))+2
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 527
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Spełnienie warunków

Post autor: Rafkus »

brex87 pisze:Można do tego dodać funkcję ZAOKR.DÓŁ i całość prezentuje się wtedy tak:

Kod: Zaznacz cały

=ZAOKR.DÓŁ($H$3*$B$3*10/1,5+JEŻELI(C3=CZY.NIEPARZYSTE(C3);2;3))
, lecz w tej sytuacji nie zwraca poprawnego wyniku w przypadku kiedy wynikiem jest liczba PARZYSTA np. 14,6 i dodaje do niej +3 = 17.
Bo troszkę źle to zapisałeś. Najpierw oblicz i zaokrąglij wyrażenie a następnie z sprawdź czy otrzymany wynik jest parzysty i w zależności od niego dodaj 2 lub 3, czyli:

Kod: Zaznacz cały

=ZAOKR.DÓŁ($H$3*$B$3*10/1,5)+JEŻELI(CZY.PARZ(BIEŻĄCY());2;3)
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Spełnienie warunków

Post autor: Jermor »

Jeszcze uwaga do tej informacji
brex87 pisze:przypadku kiedy wynikiem jest liczba PARZYSTA np. 14,6 i dodaje do niej +3 = 17
Nie przeczytałeś uważnie mojego wyjaśnienia co do formuły typu JEŻELI(C3=CZY.NIEPARZYSTE(C3);2;3)
w tym konkretnym przypadku sprawdzasz czy liczba 14 równa się 1, funkcja CZY.NIEPARZYSTE(C3) zwraca 0, gdyż liczba 14 jest parzysta. No i 14 nie równa się 1, więc jest dodawane 3. Jeśli się zastanowisz nad działaniem tej formuły, to ona dobry wynik daje tylko wtedy gdy C3=1 albo C3=0.
Ponieważ funkcja CZY.NIEPARZYSTE od razu zwraca wynik PRAWDA, to ewentualnie tylko ona powinna pojawić się jako pierwszy argument funkcji JEŻELI.

Bez względu na te rozważania, twoja formuła w ogóle nie wymaga składni z wyrażeniem JEŻELI ani włączania opcji odwołań iteracyjnych.
AOO 4.1.15, LO 24.8.2 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ