Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Tłumaczenie: mgr Jerzy Wałaszek

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

Rozdział 8

Łańcuchy

Obsługa łańcuchów i slicing

SPIS TREŚCI

Rozdział 8: Łańcuchy

Podsumowanie

Slicing, używanie TO. Zauważ, że ta notacja nie należy do standardowego BASIC'a.


Mając dany łańcuch, jego podłańcuch składa się z pewnego ciągu kolejnych znaków zawartych w nim. Stąd "tekst" jest podłańcuchem "wielki tekst", lecz "w tekst" i "wielki reg" nie są.

Istnieje notacja zwana slicing  (segmentowanie) do opisu podłańcuchów i można ją zastosować do dowolnych wyrażeń łańcuchowych. Ogólna postać wygląda następująco:

wyrażenie łańcuchowe (start TO koniec)

zatem przykładowo:

"abcdef"(2 TO 5)="bcde"

Jeśli pominiesz start, to zostanie w to miejsce przyjęta wartość 1; jeśli pominiesz koniec, to komputer zastosuje wartość równą długości łańcucha. Stąd:

"abcdef"( TO 5)="abcdef"(1 TO 5)="abcde"
"abcdef"(2 TO )="abcdef"(2 TO 6)="bcdef"
"abcdef"( TO )="abcdef"(1 TO 6)="abcdef"

(Ostatni przykład możesz również wpisać jako "abcdef"(), jednak jaką ma to wartość?)

Nieco inna postać opuszcza TO i pozostawia jedynie samą liczbę.

"abcdef"(3)="abcdef"(3 TO 3)="c"

Chociaż zwykle zarówno start jak i koniec muszą odwoływać się do istniejących fragmentów łańcucha, to reguła ta jest unieważniana przez inną: jeśli start jest większy od koniec, to wynikiem będzie pusty łańcuch. Zatem

"abcdef"(5 TO 7)

daje błąd 3 subscript wrong (3 zły indeks), ponieważ łańcuch zawiera jedynie 6 znaków a 7 to już zbyt wiele, lecz

"abcdef"(8 TO 7)=""

i

"abcdef"(1 TO 0)=""

Początek i koniec nie powinny być ujemne, inaczej otrzymasz błąd B integer out of range (B liczba całkowita poza zakresem).

Poniższy program w prosty sposób ilustruje niektóre z tych reguł.

10 LET a$="abcdef"
20 FOR n=1 TO 6
30 PRINT a$(n TO 6)
40 NEXT n
50 STOP

Gdy uruchomisz ten program, wpisz NEW i wprowadź kolejny:

10 LET a$="TEREFEREKUKU"
20 FOR n=1 TO 12
30 PRINT a$(n TO ),a$((13-n) TO )
40 NEXT n
50 STOP

Przy zmiennych łańcuchowych możemy nie tylko wydobywać z nich podłańcuchy, lecz również przypisywać tym łańcuchom nowe zawartości.

Na przykład, wpisz:

LET a$="Jestem ten ZX Spectrum"

a następnie:

LET a$(8 TO 11)="xxxxxx"

i

PRINT a$

Zwróć uwagę, że ponieważ podłańcuch a$(5 TO 8) ma długość tylko 4 znaków, to jedynie pierwsze 4 litery x zostały użyte w przypisaniu. Jest to cecha charakterystyczna przypisywania do łańcuchów: podłańcuch musi posiadać taką samą długość po zakończeniu operacji, jaką miał na jej początku. Aby upewnić się, że tak właśnie się stanie, przypisywany łańcuch jest przycinany z prawej strony, jeśli jest zbyt długi, lub wypełniany spacjami, jeśli jest zbyt krótki — nazywa się to przypisaniem Prokrusta (ang. Procrustean assignment). Nazwa ta pochodzi od nazwiska syna Posejdona, Prokrusta, który przebrany w skórę wilka czyhał na podróżnych na drodze Megary do Aten. Każdego złapanego nieszczęśnika kładł na swoim łożu i mierzył — jeśli był za długi, to go przycinał, jeśli był za krótki, to go naciągał. Kres temu procederowi położył grecki heros Tezeusz.

Jeśli teraz spróbujesz:

LET a$()="Co tam"

i

PRINT a$;"."

to zobaczysz, że ta sama rzecz wystąpiła ponownie (tym razem ze wstawieniem spacji), ponieważ a$() liczy się jako podłańcuch.

 

LET a$="Co tam"

wykona zadanie poprawnie.

Skomplikowane wyrażenia łańcuchowe będą potrzebowały nawiasów wokół siebie, zanim zostaną poddane slicingowi. Na przykład:

"abc"+"def"(1 TO 2)="abcde"
("abc"+"def)(1 TO 2)="ab"

Ćwiczenie

  1. Postaraj się napisać program wypisujący dzień tygodnia z użyciem slicingu. Podpowiedź, niech łańcuch ma zawartość NiePonWtoSroCzwPiaSob.
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.