Zliczanie zer

Użytkowanie arkusza kalkulacyjnego
ulaR
Posty: 4
Rejestracja: śr kwie 29, 2020 8:31 pm

Zliczanie zer

Post autor: ulaR »

Witam. Chciałabym stworzyć automatyczną formułę, która będzie zliczać ilość zer w ciągu do czasu, aż spotka pierwszą jedynkę (lub pierwszą napotkaną inna liczbę niż zero - byłoby to bardziej wszechstronne, ale na razie mam dane tylko z 0 i 1, wiec wystarczyłoby mi na razie to).

Żeby lepiej zrozumieć, dodaję załącznik.
Zazwyczaj stosuję zwyczajne proste funkcje, nie umiem makr i nie wiem, jak się je wstawia, byłoby super, gdyby rozwiązanie opierało się na zwyczajnych komendach/funkcjach. Będę bardzo wdzięczna za pomoc.
Załączniki
zliczanie zer.png
zliczanie zer.png (12.45 KiB) Przejrzano 506 razy
OpenOffice 4.1.3 na Windows 7
Jan_J
Posty: 4579
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Zliczanie zer

Post autor: Jan_J »

Numery porządkowe ciągu przyrastają o 1 z każdym wyrazem. Przyjęło się wizualizować tę zasadę schodząc „w dół”, jak wiersz po wierszu w tabeli albo na kartce. Niby żadna różnica, ale w funkcjach bibloitecznych służących do wyszukiwania ta notacja też jest przestrzegana.

Wobec tego w Twoich przykładach chodzi raczej o to, ile końcowych wyrazów ciągu ma wartość 0.

W przypadku liczenia od początku sprawę da się rozwiązać dość prosto przy użyciu składni tablicowej (wektorowej). Załóżmy, że kolumna A zawiera ciąg liczb pisanych od początku bez żadnej luki. Może ich być 100 lub mniej niż 100.
Jeśli mamy pewność, że ciąg zawiera cokolwiek oprócz zer, odpowiedź da formuła:

Kod: Zaznacz cały

=MATCH(1; A1:A100<>0; 0)
Bez tej pewności wyszukiwanie może doprowadzić do błędu N/A. Więc go obsłużymy, podając wtedy łączną liczbę wyrazów + 1:

Kod: Zaznacz cały

=IF(ISERROR(MATCH(1; A1:A100<>0; 0)); COUNT(A1:A100)+1; MATCH(1; A1:A100<>0; 0))
Formuły tablicowe działają wg innej składni niż „zwykłe”. Zatwierdza się je przez <Ctrl>+<Shift>+<Enter>.

Przy zliczaniu „od końca” trzeba się trochę pogimnastykować, ponieważ wbudowane funkcje biblioteczne chcą liczyć od początku.
Wykorzystanie dodatkowej kolumny roboczej pozwoli zarówno na liczenie „od końca”, jak na przejście na „zwykłe” formuły. Ale nie wiem, czy jest to dopuszczalna opcja.
Realizacja tego wariantu — pisanego na szybko, wymagającego dopracowania, korzysta z formuły:

Kod: Zaznacz cały

=IF(ISBLANK(A1); 0; IF(ISBLANK(A2); IF(A1=0;1;-1); IF(A1=0;IF(G2>=0;G2+1;G2);-1)))
Wymagana jest cała kolumna takich obliczeń; największa wartość w tej kolumnie — uzupełnionej zerem na wypadek startu od (-1) — będzie równa liczbie końcowych zer.

Załącznik z działającym przykładem:
zera_na_poczatku_i_koncu.ods
(7.41 KiB) Pobrany 67 razy
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Zliczanie zer

Post autor: Jermor »

Mój pomysł jest inny, także wykorzystuje formułę macierzową, czyli zatwierdzenie skrótem CTRL+SHIFT+ENTER.
Dopiero po realizacji zorientowałem się, że @ulaR korzysta z Apache OpenOffice, a pomysł jest do wykorzystania tylko w LIbreOffice, gdyż z zastosowanych funkcji tylko DŁ() jest dostępna w Apache OpenOffice.
Idea jest następująca:
Wyznaczam ciąg tekstowy ze wszystkich komórek zakresu zawierający wynik sprawdzenia, czy komórka zawiera wartość 0. To jest ta część macierzowa i ma postać: ZŁĄCZ.TEKST(A1:A11=0) Wynikiem będzie ciąg zer i jedynek, w którym 1 oznacza wartość zerową.
Z tego ciągu funkcją REGEX wyodrębniam ostatnie jedynki.
REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$")
A długość tego ciągu to liczba zer na końcu.
Dł(REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$"))
Pozostaje problem tego, gdy na końcu nie ma zera, funkcja REGEX() zwróci wówczas błąd #N/D, dlatego ostateczna postać znajduje się w funkcji JEŻELI.BŁĄD():
JEŻELI.BŁĄD(Dł(REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$"));0)
i należy ją zatwierdzić wspomnianym skrótem klawiaturowym.
Formuły takiej nie można kopiować przez zwykłe przeciągnięcie, należy przytrzymać przy przeciąganiu klawisz CTRL, albo skorzystać z operacji "Kopiuj" i "Wklej".
Uwaga: komórka "pusta" jest traktowana jak zawierająca 0.
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
Jermor
Posty: 2352
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Zliczanie zer

Post autor: Jermor »

Zmodyfikowałem formułę końcową. Nie musi ona być ubrana w JEŻELI.BŁĄD(), wystarczy zmienić sposób wyszukiwania końcowego ciągu jedynek. Zmodyfikowana formuła to: =DŁ(REGEX(ZŁĄCZ.TEKST(A1:A10=0);"1*$"))
No ale jak już wspomniałem dotyczy to tylko Calc w LibreOffice i dlatego zachęcam do przejścia na niego.
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