Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Powiedzmy, że w komórkach A1:A20 mamy dane tekstowe. Chcielibyśmy wpisać do komórki B1 znak lub ciąg znaków i obliczyć ile razy ten właśnie ciag znaków występuje we wszystkich komórkach tabeli.

Rozwiązanie:
Najpierw prosty przykład, czyli ile razy to co jest w B1 występuje w A1 (dla jednej komórki)
=DŁ(A1)-DŁ(PODSTAW(A1;B1;""))
W komórce A1 podstaw (jak znajdziesz) nic "", w miejsce tekstu, który znajduje się w B1. Oblicz różnicę długości: pierwotną tekstu oraz długość po podstawieniu "".

Formuła rozwiązująca główne pytanie (dla tablicy) to formuła tablicowa (Ctrl + Shift + Enter)
=SUMA(DŁ(A1:A20)-DŁ(PODSTAW(A1:A20;B1;"")))/DŁ(B1)
W zakresie A1:A20 podstawia (jak znajdzie) nic "", potem liczy różnicę długości dla każdej z komórek, następnie sumuje otrzymane róznice i na końcu dzieli otrzymaną sumę długości przez długość podstawianego tekstu.
Uwaga: ważna jest wielkość liter.

Formuła pomijająca wielkość liter, czyli nie jest ważne czy "A", czy też "a" wygląda następująco
=SUMA(DŁ(LITERY.WIELKIE(A1:A20))-DŁ(PODSTAW(LITERY.WIELKIE(A1:A20);LITERY.WIELKIE(B1);"")))/DŁ(B1)
oczywiście tablicowaBogdan Gilarski edytował(a) ten post dnia 29.08.09 o godzinie 19:45
Małgorzata Majchrzak

Małgorzata Majchrzak kontroler operacyjny

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Proste a genialne. Tego szukałam, dzięki :)

konto usunięte

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Fajne, ale nieprecyzyjne.

Przypuśćmy, że w A1 wstawiamy: lalala

W B1: ala

Czy wynik jest prawidłowy?
Małgorzata Majchrzak

Małgorzata Majchrzak kontroler operacyjny

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Nie, ale zupełnie nie widzę zastosowania tego przykładu. Chyba że szukamy dziury w całym :)
Bo czy w "alalala" faktycznie "ala" powinna być liczona 3 krotnie? Ja tam widzę dwie Ale :)

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Mariusz T.:
Fajne, ale nieprecyzyjne.

Przypuśćmy, że w A1 wstawiamy: lalala

W B1: ala

Czy wynik jest prawidłowy?

Tak. 2.

Jedynie można polemizować i zrobić "update" pierwszej formuły:
=(DŁ(A1)-DŁ(PODSTAW(A1;B1;"")))/DŁ(B1)


Jeżeli jednak ktoś chciałby otrzymać wynik 3 przy czymś takim, to można polemizować, czy chce na prawdę otrzymać ilość wystąpień, czy kombinację wystąpień w wyrażeniu, a to co innego.

konto usunięte

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Maciej P.:
Mariusz T.:
Fajne, ale nieprecyzyjne.

Przypuśćmy, że w A1 wstawiamy: lalala

W B1: ala

Czy wynik jest prawidłowy?

Tak. 2.

Jedynie można polemizować i zrobić "update" pierwszej formuły:
=(DŁ(A1)-DŁ(PODSTAW(A1;B1;"")))/DŁ(B1)

Tu był błąd.
Jeżeli jednak ktoś chciałby otrzymać wynik 3 przy czymś takim, to można polemizować, czy chce na prawdę otrzymać ilość wystąpień, czy kombinację wystąpień w wyrażeniu, a to co innego.

A tu? Który przypadek to ilość wystąpień a który to "kombinacja wystąpień w wyrażeniu"? Dla mnie sprawa jest jasna: ciąg "ala" występuje w "lalala" w dwóch różnych miejscach (za każdym razem początek jest w innym miejscu i koniec jest w innym miejscu, a treść krótszego ciągu jest ta sama), a więc 2 (słownie: dwa) razy. A formuła błędnie pokazuje "1".

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Próbuję na wszystkie sposoby, nawet monitor rotowałem o 360 stopni i nie potrafię zrobić, aby ta formułą pokazała mi 1 w tym przykładzie....jak wół ciągle 2. Może mój excel inaczej liczy? :->

Aaaa już widzę, najpierw piszesz alalala a potem lalala, stąd niepotrzebnie obracałem ten monitor.

A co do twojej odpowiedz, to najwidoczniej źle liczy, bo przy twoich założeniach powinno być 4, bo nie dość, że widzisz to w dwóch miejscach, to jeszcze możesz przeczytać wyraz od tyłu i też będzie w dwóch kolejnych miejscach.
Albo idźmy dalej i zacznijmy przestawiać literki w wyrazie i zobaczmy ile razy wyjdzie ta szukana fraza?

A może inaczej? W moim mieście jest 1 kościół który ma 3 wieże. Ile widzisz par wieży? Jak rozumiem z twoim tokiem rozumowania widzisz 2 pary wież?

konto usunięte

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Maciej P.:
Aaaa już widzę, najpierw piszesz alalala a potem lalala, stąd niepotrzebnie obracałem ten monitor.

Już druga osoba twierdzi, że napisałem alalala. W którym to było miejscu? Może zacytuj linię....
A co do twojej odpowiedz, to najwidoczniej źle liczy, bo przy twoich założeniach powinno być 4, bo nie dość, że widzisz to w dwóch miejscach, to jeszcze możesz przeczytać wyraz od tyłu i też będzie w dwóch kolejnych miejscach.
Albo idźmy dalej i zacznijmy przestawiać literki w wyrazie i zobaczmy ile razy wyjdzie ta szukana fraza?

A może inaczej? W moim mieście jest 1 kościół który ma 3 wieże. Ile widzisz par wieży? Jak rozumiem z twoim tokiem rozumowania widzisz 2 pary wież?

Moja dobra rada: najpierw przeczytaj uważnie i ze zrozumieniem, później pisz. Po co się błaźnić niepotrzebnie...

konto usunięte

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

I taka jeszcze dygresja na koniec: informatyka (a w tym algorytmika) jest nauką ścisłą. Analiza występowania podciągu w całym ciągu powinna uwzględniać różne przypadki. Nie tylko skrajne. Weźmy na przykład uparcie podawany przez Was ciąg "alalala" (jako ponoć mój :) ). Rozpoczynając analizę występowania Waszym sposobem (tj. z usuwaniem znalezionego podciągu) od środka ciągu mogę stwierdzić, że "ala" występuje w nim raz, ponieważ po zastąpieniu środkowych trzech znaków ciągiem pustym, otrzymam "alla". W ciągu "alalala" podciąg "ala" występuje trzy (słownie trzy) razy na pozycjach: 1, 3, 5 w tym ciągu licząc znaki ciągu od 1. Każde inne podejście do tematu jest nieprecyzyjne, a więc nieprawidłowe.Ten post został edytowany przez Autora dnia 17.06.13 o godzinie 09:38

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Mariusz T.:
Już druga osoba twierdzi, że napisałem alalala. W którym to było miejscu? Może zacytuj linię....

Rzeczywiście, zasugerowałem się przytoczonym przykładem, nie twoim, ale to akurat nic nie zmienia w takim przypadku.

Nie szastaj tak pojęciami "nauki ścisłe", bo akurat nie zabłyśniesz tym. To samo tyczy się logicznego myślenia oraz algorytmów. Zagadnienie, które opisujemy jest zagadnieniem akurat matematycznym, nie informatycznym.

Reasumując, ciągle poszukujesz ilości możliwości wystąpienia podciągu znaków w ciągu znaków uwzględniając powtórzenia, a problemem jest ile razy na prawdę wystąpił bez powtórzeń tych samych liter, bo do tego problem się sprowadza.
Wczytaj się ze zrozumieniem w to zdanie, bo może to jednak nie ja mam ten problem.

Ale jeżeli się uprzesz to możemy pobawić się kombinatoryką, kombinacjami, wariacjami etc. Ale myślę, że od tego są inne grupy.

Ale ja mam inne podejście do tematu pewnie, bo jestem taki humanista i nie potrafię przeczytać ze zrozumieniem.

PS. Dobra, niech Bodek wpadnie i rozstrzygnie, bo mnie się już nie chce przepychać, a po co zaśmiecać temat kłótniami.Ten post został edytowany przez Autora dnia 17.06.13 o godzinie 10:00
Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

No własnie, dajmy sobie spokój z tymi alami i lalami. Wszystko zalezy od założeń i tyle, zatem każdy z Was ma rację.
Proponuję zakończyć dyskusję, niech każdy czytający dopasuje sobie stosowną odpowiedź do potrzeb.
Sam trik pisany kilka lat temu lekko bym zmodyfikował, do o wiele prostszej postaci, ale to przy okazji, jak zapanuje spokój :)

konto usunięte

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Nie mam zamiaru się kłócić. Przeciwnie, staram się wyważać słowa, a ostrzejszym stwierdzeniem reaguję tylko w momencie, kiedy ktoś mnie ukłuje nie mając racji.

Wracając do tematu: dokonaliście pewnych (IMHO błędnych) założeń. Potraktowaliście badany ciąg tako tekst posklejany z krótszych tekstów. Takie podejście spowodowało, że w moim przekonaniu nieprawidłowo liczycie wystąpienia podciągów w ciągu.

A teraz wyjaśniam, dlaczego uważam, że nieprawidłowo.

"Waszym" sposobem:

"ala" występuje w "alala" jeden raz, ponieważ po stwierdzeniu wystąpienia szukanego podciągu na pozycji 1, usuwam go i pozostały ciąg już nie zawiera szukanego podciągu. Czyli, jak już wcześniej wspominałeś, te podciągi zachodzą na siebie, więc nie można ich liczyć z osobna.

Postępując jednak dalej w podany przez Was sposób, szukając w ciągu "alas" podciągów "ala i "as" należy stwierdzić, że "ala" występuje w tym ciągu jeden raz, a "as" nie występuje wcale, ponieważ zachodzą na siebie, więc po wyszukaniu i usunięciu zgodnie z tokiem Waszego rozumowania "ala", pozostanie "s".

Nierozwiązanym pozostaje problem, jak traktować liczenie "ala" w "aalala" :)

"Moim" sposobem:

"ala" występuje w "alala" dwa razy, ponieważ szukam wystąpienia podciągu "ala" w całym ciągu począwszy od pierwszej pozycji do długość_ciągu - długość_podciągu + 1 pozycji. Traktuję po prostu każde wystąpienie podciągu jako osobny podciąg.

Idąc tym tropem (nie zmieniając nic w algorytmie), ponownie prawidłową odpowiedź da wyszukanie kolejno podciągów "ala" i "as", czyli po 1.

Całkowicie sprawę rozwiązuje prosta funkcja w VBS:



Function szukaj_wystapien(lancuch As String, podlancuch As String) As Integer

Dim i, licznik As Integer

licznik = 0

For i = 1 To Len(lancuch) - Len(podlancuch) + 1

If (Mid(lancuch, i, Len(podlancuch)) = podlancuch) Then

licznik = licznik + 1

End If

Next i

szukaj_wystapien = licznik

End Function

Ten post został edytowany przez Autora dnia 17.06.13 o godzinie 10:45
Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Mariusz, nasze (moje) założenia nie są błędne tylko inne i naprawdę nie ma o co krószyć kopii.

Proponuję przeanalizować
=LICZ.JEŻELI(A1:A20;"*ala*")

Wyniki mogą wyjść jeszcze inne, ponieważ tutaj też przyjęto jakieś założenia. No i co należy go określić jako, zły przykład, nie nadaje się, liczy bzdury itd?

konto usunięte

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Bogdan G.:
Mariusz, nasze (moje) założenia nie są błędne tylko inne i naprawdę nie ma o co krószyć kopii.

Proponuję przeanalizować
=LICZ.JEŻELI(A1:A20;"*ala*")

Wyniki mogą wyjść jeszcze inne, ponieważ tutaj też przyjęto jakieś założenia. No i co należy go określić jako, zły przykład, nie nadaje się, liczy bzdury itd?

Problem jest tylko taki, że Twoje rozwiązania nie spełniają zdefiniowanego przez Ciebie zadania, cyt.: "ile razy ten właśnie ciag znaków występuje we wszystkich komórkach tabeli".

Takie jeszcze interesujące przykłady mi się nasunęły (analiza z Waszego punktu widzenia):

1. Łamana ABCD (matematyka).

Z ilu odcinków składa się ona? Według Waszego rozumowania, z dwóch. Jeśli usuniemy odcinek AB i odcinek CD, to pozostanie jakaś część tylko odcinka BC, ponieważ punkty B i C zostały usunięte.

2. Trzy domki szeregowe rozdzielone pojedynczymi ścianami.

Z ilu domków się składa ten szereg? Według Waszego rozumowania z dwóch. Jeśli zburzymy domek pierwszy, to zostanie jeszcze jeden i kawałek drugiego :)

Przykłady można mnożyć. Natomiast przykład Macieja z wieżami jest głupi. Można by co najwyżej dać takie zadanie: ustawić wieże w jednej linii i spytać, ile jest dwuwieżowych ciągów. Zaznaczam, że za każdym razem analizuję ciągi licząc od jednej strony. Nie ma tu wbrew twierdzeniom Macieja mowy o żadnych kombinacjach, permutacjach itp.

Cała sytuacja przypomina mi pewne zdarzenie, które spowodowało, że straciłem szacunek dla pewnych osób. Miało to miejsce (o ile pamiętam) w 1997 r. Przysłuchałem się rozmowie grupki moich znajomych, którzy stwierdzili, że już niedługo, 1 stycznia 2000 r. rozpocznie się dwudziesty pierwszy wiek. Słysząc ten oczywisty bezsens wtrąciłem uwagę, że dwudziesty pierwszy wiek nastąpi dopiero 1 stycznia ale 2001 r. Wtedy zostałem głośno przez wszystkich wyśmiany i wyszydzony, jaki to ja głupek jestem i takie bzdury opowiadam. Nie trafiały do nich żadne argumenty ani próby tłumaczenia podstawowych zasad liczenia. Na nic zdały się ich późniejsze przeprosiny. Uraz pozostał. Tu sytuacja jest znacznie bardziej kulturalna, niemniej jednak upór przy nieprecyzyjnym ujmowaniu tematu jest podobny.

I jeszcze propozycja: zapoznajcie się z zadaniami typu "ile widzisz trójkątów". Wtedy zaczniecie rozumieć znaczenie moich wyjaśnień.
Bogdan Gilarski

Bogdan Gilarski www.excelperfect.pl
Perfect And
Practical

Temat: TRIK - ile razy w całej tabeli występuje określony ciąg...

Mariusz, błagam, wystarczy. Temat zamykam.



Wyślij zaproszenie do