Algoritmusok
(részletek egy
folyóiratcikk előzetes anyagából)
Pont nullás korlátozottan közös alosztás
Azonosítjuk a jelzet törzs részét. A jelzetet elvágjuk az
elválasztójelnél (ez itt a pont). Ami az elválasztójel után van, az az alosztás (a pontot is
beleértve), ami előtte, az az alapjelzet. Kimentjük az alapjelzetet, majd a
törzset, az alosztással.
Példa: 303.725.064. A törzs: 303, az alosztás: .064, az
alapjelzet: 303.725. Kimentendő elemek:
%303.725 és %303.064. Modellelemzés a társadalomtudományokban, illetve
számítógépes társadalomtudományi módszerek.
Torzs$="303"
Jelzethossz=LEN(Jelzet$)
AlosztasPoz=INSTR(Jelzet$,".0")
Alosztas$=RIGHT$(Jelzet$,Jelzethossz-AlosztasPoz+1)
Alapjelzet$=LEFT$(Jelzet$,AlosztasPoz-1)
(Mintaprogram: 303.EXE)
Kötőjeles alosztás
Megkeressük az adott jelzetre érvényes szabályt. Azonosítjuk
a jelzet törzs részét, levágjuk a jelzetet az elválasztójelnél (ez itt a
kötőjel). Ami az elválasztójel után van, az az alosztás (beleértve a
kötőjelet), ami előtte, az az alapjelzet.
Kimentendő elemek: az alapjelzet, valamint a törzs és az alosztás.
Példa: 546.11-14. Törzs: 54. Alapjelzet: 546.11. Alosztás:
-14. Kimentendők: %546.11 és %54-14. Hidrogén, illetve folyékony állapot.
Torzs$="54"
Jelzethossz = LEN(Jelzet$)
AlosztPoz=INSTR(Jelzet$,"-")
Alosztas$=RIGHT$(Jelzet$,Jelzethossz-AlosztPoz+1)
Alapjelzet$=LEFT$(Jelzet$,AlosztPoz-1)
(Mintaprogram: 546.EXE)
Aleset: általánosan közös alosztáson (például a földrajzi
alosztáson) belüli kötőjeles korlátozottan közös alosztás. Megállapítjuk, hogy
ez kötőjeles földrajzi alosztás. A kötőjel előtti rész az alapjelzet, a
kötőjellel kezdődő rész a korlátozottan közös alosztás, amelyet az egyes
szám és a kötőjel vezet be. Kimentendők:
az alapjelzet, valamint a korlátozottan közös alosztás.
Példa: (4-11). Az alapjelzet: (4), a korlátozottan közös
alosztás: -11, amelynek standard alakja: (1-11). Kimentendők: %(4) és %(1-11).
Európa és keleti égtáj.
IF INSTR(FoldrAlosztas$,"-")>0 THEN
Alapjelzet$=LEFT$(FoldrAlosztas$,INSTR(FoldrAlosztas$,"-")-1)+")"
Torzs$="(1-"
KorlKozAlosztas$=RIGHT$(FoldrAlosztas$,INSTR(FoldrAlosztas$,"-"))
(Mintaprogram: 411.EXE)
Kötőjel nullás korlátozottan közös alosztás
Ilyenek a 616-os, 617-es és 618-as szakon belül is előfordulnak. Azonosítjuk a jelzet
törzs részét. elvágjuk a jelzetet az elválasztójelnél (ez itt a kötőjel). Ami
az elválasztójel után van, az az alosztás (beleértve a kötőjel nullát), ami
előtte, az az alapjelzet. Kimentendők: az alapjelzet, illetve a törzs az
alosztással.
Példa: 616.23-
Torzs$="616"
Jelzethossz = LEN(Jelzet$)
AlosztasPoz = INSTR(Jelzet$,"-")
Alosztas$=RIGHT$(Jelzet$,Jelzethossz-AlosztasPoz+1)
Alapjelzet$=LEFT$(Jelzet$,AlosztasPoz-1)
(Mintaprogram: 616.EXE)
Kötőjel nullás korlátozottan közös alosztások szerepelnek a
nyelv és irodalom területén is. Megkeressük az alapjelzet végét, és
azonosítjuk az aktuális alosztást. Az aktuális alosztás alapján megkeressük az
analóg nyelvtudományi jelzetet. Kimentendők: az alapjelzet és a nyelvtudományi
jelzet.
Nyelvtudományi példa: 802.0-022. Alapjelzet: 802.0,
alosztás: -022, amit analógiásan vissza kell vezetnünk a 800.22 jelzetre (a
nyelvek korai szakasza). Ennek törzse: 800. Kimentendők: %802.0 és %800.22.
Angol nyelv, valamint korai nyelvfejlődési szakasz.
Torzs$="800"
Jelzethossz = LEN(Jelzet$)
AlosztasPoz = INSTR(Jelzet$,"-")
Alapjelzet$=LEFT$(Jelzet$,AlosztasPoz-1)
Alosztas$=RIGHT$(Jelzet$,Jelzethossz-AlosztasPoz+1)
Alosztas$=RIGHT$(Alosztas$,LEN(Alosztas$)-1) 'a -0
levágása
Alosztas$="."+Alosztas$ 'a pont
hozzátétele
Fotablazat$=Torzs$+Alosztas$
(Mintaprogram: 802.EXE)
Irodalmi példa: 820-022. Alapjelzet: 820, alosztás: -022,
amit analógiásan ugyancsak a 800.22-re vezetünk vissza. Kimentendők tehát: %820
és %800.22. Angol irodalom és korai nyelvfejlődési szakasz. Itt ugyanaz a törzs
jelzet, az alapjelzet pedig az eredeti főtáblázati szám kötőjel előtti része. A
BASIC program a fentiek miatt szóról szóra megegyezik (mintaprogram: 820.EXE)
Közbeékeléses alosztás
Ebben az esetben a főtáblázati szám és a logikailag hozzá
tartozó alosztás közé be van ékelve egy másik, általánosan közös alosztás.
Ilyen előfordulhat a művészeti stílusoknál: 7.034 (reneszánsz, barokk, rokokó,
koloniál művészet). Azonosítjuk az alapjelzetet és a közbeékelt (itt:földrajzi)
alosztást, valamint a hátravetett jelzetelemet. Kimentendők: az alapjelzet, a
közbeékelés, valamint a törzs jelzet az alosztással és a hátravetett elemmel
együtt.
Példa: 75.035(439)5. Az alapjelzet:
Torzs$="7"
Jelzethossz = LEN(Jelzet$)
AlosztasPoz = INSTR(Jelzet$,".0")
Alapjelzet$=LEFT$(Jelzet$,AlosztasPoz-1)
Maradek$=RIGHT$(Jelzet$,Jelzethossz-AlosztasPoz)
NyitoZarojel = INSTR(Maradek$,"(")
Alosztas1$=LEFT$(Maradek$,NyitoZarojel-1)
Maradek2$=RIGHT$(Maradek$,LEN(Maradek$)-NyitoZarojel+1)
ZaroZarojel = INSTR(Maradek2$,")")
FoldrAlosztas$=LEFT$(Maradek2$,ZaroZarojel)
Hatravetett$=RIGHT$(Maradek2$,LEN(Maradek2$)-ZaroZarojel)
Alosztas$ = "." + Alosztas1$ +
"." + Hatravetett$
(Mintaprogram: 750.EXE)
Szempont szerinti alosztás főtáblázati számmal
A .000-hoz ponttal kapcsolhatunk egy főtáblázati számot,
például a .000.34 jelentése: jogi szempontból. Ezt úgy tehetjük alkalmassá a
posztkoordinációra, hogy főtáblázati számként értelmezzük. Példa: .000.34.
Kimentendő: %34. Jogtudomány. A pont nulla nulla nulla önmagában üres
kategória, azt nincs értelme visszakereshetővé
tenni.
IF LEFT$(Jelzet$,5)=".000." THEN
Fotablazat$=RIGHT$(Jelzet$,LEN(Jelzet$)-5)
PRINT
"Kimenteni: ";RekordID$+Prefix$+Fotablazat$
END IF
(Mintaprogram: 000.EXE)
Kiegészítéses alosztás
Ezek jellemzője, hogy egy jelzethez egy bizonyos szabály szerint
egy másik főtáblázati számot lehet hozzákapcsolni. Ha a főtáblázati szám
egy bizonyos jelzettel kezdődik (pl.a 372.8-cal), az az alapjelzet, az utána
lévő jelzetet pedig főtáblázati számként kell értelmezni. Mivel a pont nullás
főtáblázati szám miatt elcsúszhat a pont, be kell iktatni egy eljárást a
főtáblázati szám három jegyenként való újratagolására. Kimentendők: az
alapjelzet és a kiegészítés mint főtáblázati szám.
Tantárgyi példa: 372.894.39. Törzs: 372.8, a főtáblázati
szám nyersen: 94.39, a pontok áthelyezése után pedig 943.9. Kimentendők: %372.8
és %943.9. Tantárgyak, valamint Magyarország történelme.
Alapjelzet$="372.8"
Jelzethossz = LEN(Jelzet$)
Alapjelzethossz = LEN(Alapjelzet$)
IF LEFT$(Jelzet$,Alapjelzethossz)=Alapjelzet$ THEN
Lenyeg$=RIGHT$(Jelzet$,Jelzethossz-Alapjelzethossz)
Nyers$ =
Lenyeg$
GOSUB Pontok
' a pontokat áthelyező szubrutin
Lenyeg$ =
Kesz$
GOTO
ProgramVege
END IF
A pontokat áthelyező szubrutin:
Pontok:
GOSUB PontKi
GOSUB PontBe
RETURN 'visszatérés a Pontok szubrutinból
PontKi:
Sima$ = ""
FOR v = 1 TO LEN(Nyers$)
IF
MID$(Nyers$,v,1) <> "." THEN
Sima$ =
Sima$ + MID$(Nyers$,v,1)
END IF
NEXT v
RETURN
'visszatérés a Pontok szubrutinba
PontBe:
Kesz$ = ""
FOR v = 1 TO LEN(Sima$)
Kesz$ = Kesz$
+ MID$(Sima$,v,1)
IF v MOD 3 =
0 THEN Kesz$ = Kesz$ + "."
NEXT v
IF RIGHT$(Kesz$,1) = "." THEN Kesz$ =
LEFT$(Kesz$,LEN(Kesz$)-1)
IF LEFT$(Kesz$,1) = "." THEN Kesz$ =
RIGHT$(Kesz$,LEN(Kesz$)-1)
RETURN
'visszatérés a Pontok szubrutinba
(Mintaprogram: 3728.EXE)
Szakfőiskolai példa: 378.633. A
Alapjelzet$=”
(Mintaprogram: 3768.EXE)
Számvégződéses alosztások
Ilyenek például a 669-es szakon belül fordulnak elő
(kohászat). Ha egy egyszerű (nem képzett) főtáblázati szám végén 1-es áll, az
az arról a témakörről szóló összefoglaló műveket jelenti, a 3-as az ércek
kohósítására, a 4-es a tisztítására, finomítására utal. Ha a főtáblázati szám
végén 5-ös számjegy áll, az az
ötvözeteket jelzi.
Azonosítjuk a törzs jelzetet, azonosítjuk a fém saját
jelzetét, majd az utolsó számjegyet. Kimentendők: a fém jelzete, valamint a
törzs a számvégződéses alosztással.
Példa: 669.35. Törzs:
Réz és ötvözetek.
Torzs$="669"
Vegzodes$=RIGHT$(Jelzet$,1)
Maradek$=LEFT$(Jelzet$,LEN(Jelzet$)-1)
Egyed$=RIGHT$(Maradek$,LEN(Maradek$)-LEN(Torzs$)-1)
Fem$=Torzs$+"."+Egyed$
(Mintaprogram: 669.EXE)
Aposztrófos alosztások
Ezeket többnyire olyankor használjuk, amikor két azonos
főtáblázati számhoz kapcsolódó korlátozottan közös alosztást kombinálunk Tiszta
aposztrófos elosztást találunk többek között a pártok és mozgalmak többes
irányultságánál és az ötvözeteknél.
A pártok esetében: azonosítjuk a törzs jelzetet (ez a 329)
és az egyes alkotóelemeket, az aposztróf utáni számjegyeket egyenként
hozzákapcsolva a törzs jelzethez. Kimentendők: a rekonstruált jelzetek.
Példa: 329.11'17. Törzs: 329. Az egyes irányzatok: 11 és 17.
Kimentendők: a rekonstruált jelzetek: %329.11 és %329.17. Konzervatív irányzat,
nemzeti irányzat. Felvetődhet, hogy a két irányultság külön kezelése mellett
nem lenne-e szükség az eredeti, kombinált jelzetre is. Ez is lehetséges, de
csak akkor, ha szerepeltetjük az indexben.
Jelzethossz=LEN(Jelzet$)
Torzs$="329" 'pártok, mozgalmak
Torzshossz=LEN(Torzs$)
Minta$="'" 'aposztróf
Szetszedendo$=RIGHT$(Jelzet$,Jelzethossz-Torzshossz-1)
Itt szükség van egy iterációra (egy feltételtől függő
ismételt végrehajtásra) ahhoz, hogy az előre nem ismert számú aposztrófos hozzáfűzéseket
kezelni tudjuk. Az egyes elemek azonosítása után mindig megnézzük, hogy vége
van-e a jelzetnek, vagy újabb aposztróf következik.
Ciklus:
IF X$="0" THEN ProgramVege
ap = INSTR(Szetszedendo$,"'") 'a következő
aposztróf pozícioja
IF ap=0 AND Szetszedendo$>"" THEN ’ha van aposztróf
Egyed$=Szetszedendo$
Maradek$=""
GOTO
ElemAzonositas
END IF 'ha már nincs aposztróf, a maradék az utolsó
elem
IF ap>0 THEN
’ha már nincs aposztróf
Egyed$=LEFT$(Szetszedendo$,ap-1) 'az aposztróf előtti karakterig
Ehossz=LEN(Egyed$)
Maradek$=RIGHT$(Szetszedendo$,LEN(Szetszedendo$)-Ehossz-1)
GOTO
ElemAzonositas
END IF 'ha van még aposztróf, az addig tartó rész az
elem
Az elemazonosító részlet állítja össze a kimentendő sort:
ElemAzonositas:
Komplex$=Torzs$+"."+Egyed$
PRINT "Kimenteni:
";RekordID$+Prefix$+Komplex$
IF Maradek$="" THEN GOTO UjSor
IF Maradek$>"" THEN
Szetszedendo$=Maradek$
GOTO Ciklus
(Mintaprogram: 329.EXE)
A 669-es szakban az ötvözetek esete annyiban nehezebb, hogy ott
egyszerre fordulhat elő számvégződéses alosztás és aposztróf. Azonosítjuk az
egyes alkotóelemeket (az aposztróf utáni számjegyet hozzákapcsolva a törzs
jelzethez). Kimentendők: a számvégződéses alosztás fajtája és az egyes fémek
rekonstruált jelzete (az ötvözetet jelző számjegy nélkül).
Példa: 669.35'5'6. Törzs: 669. Kimentendők: %669...5,
%669.3, %669.5, %669.6. Ötvözetek, réz, cink, ón.
Kombinálhatjuk az aposztrófkezelést és a számvégződés-azonosítást.
Először megállapítjuk, milyen számvégződésről van szó, utána megnézzük, mi az
első elem, majd a ciklussal kimentjük mindegyik összetevő rekonstruált jelzetét.
Jelzethossz=LEN(Jelzet$)
Torzs$="669"
Maradek$=RIGHT$(Jelzet$,Jelzethossz-4)
ap=INSTR(Maradek$,"'")
ElsoElem$=LEFT$(Maradek$,ap-1)
Vegzodes$=RIGHT$(ElsoElem$,1)
Tipus$=Torzs$+"..."+Vegzodes$
PRINT "Kimenteni: ";RekordID$+Prefix$+Tipus$
ElsoElem$=LEFT$(ElsoElem$,LEN(ElsoElem$)-1)
Fem$=Torzs$+"."+ElsoElem$
PRINT "Kimenteni: ";RekordID$+Prefix$+Fem$
Szetszedendo$=RIGHT$(Maradek$,LEN(Maradek$)-ap)
PRINT "A szetszedendo jelzetresz az aposztrof utan:
";Szetszedendo$:DELAY 1
GOTO Ciklus
(Mintaprogram: 669AP.EXE)
Analógiás alosztások
Ezeket is külön problémaként kell kezelnünk. Egyes fogalmak részletezése
nem az adott osztályban történik, hanem egy másik helyen kifejtett részletezést
veszünk át. A paleobotanika rendszertanánál az 582 növényrendszertanhoz
utasítanak bennünket, a paleozoológia rendszertanánál pedig az 592/599
állatrendszertan a minta. De ha az eredeti jelzetben van egy pont nullás
korlátozottan közös alosztás, akkor azt az 56-os számtartományon belül kell
megértenünk.
Azonosítjuk a törzset, az analógiás jelzetet, valamint az
esetleges korlátozott alosztást hozzákapcsoljuk a törzs jelzethez. Kimentendők:
ezek a jelzetelemek.
Példa: 568.1.01. A jelzet a nem részletezett 562/569
jelzettartományba esik (paleozoológia), ez lesz az alapjelzet. A törzs:
A paleozoológiai kódrészlet:
Eredeti$=Jelzet$
Bovitmeny$=RIGHT$(Eredeti$,LEN(Eredeti$)-2) 'levágjuk az 56-ot
UjSzam$="59"+Bovitmeny$
Nyers$=UjSzam$
GOSUB Pontok 'a pontokat átrendező szubrutin
Jelzet$=Kesz$
(Mintaprogram: 568.EXE)
Az egyes nyelveken belül kötőjeles korlátozottan közös
alosztások jelzik a filológiai, nyelvészeti tanulmányokat, pl. -1 helyesírás,
ábécé, kiejtés, -5 nyelvtan. Itt azonban van egy külön nehézség: ezeket a
kötőjeles alosztásokat ugyanis a 801-ből kell képezni, és a részletezés
analógiák segítségével történhet. A -1 megfelel a 801.1 főtáblázati számnak,
ahol a
Azonosítjuk a főtáblázati számot (a nyelvet). Levágjuk a
kötőjel utáni részt, elébe tesszük a 801-es jelzetelemet, a kötőjelet pedig
pontra cseréljük.
Példa: 802.0-316.1. A nyelv: 802.0 (angol). A kötőjel
eltávolítása után marad: 316.1, a 801 jelzettel és az ott található pont
beiktatása után 801.316.1-t kapunk (neologizmusok). Kimentendők: %802.0 és
%801.316.1. Angol nyelv, neologizmusok.
A BASIC programrészlet először megkeresi a kötőjelet, aztán
átalakítja az alosztást, végül hozzáírja az elemeket a kész tételekhez.
Torzs$="801"
AlosztasPoz=INSTR(Jelzet$,"-")
Alosztas$=RIGHT$(Jelzet$,LEN(Jelzet$)-AlosztasPoz)
Nyelv$=LEFT$(Jelzet$,AlosztasPoz-1)
Analogia$="."+Alosztas$
(Mintaprogram: 801.EXE)
Sajátosak az állattenyésztésen belüli analógiás kapcsolatok
is. Az állati termékeket és a háziállatokat egy aposztrófos kombináció foglalja
magában.
Formalizálva: Azonosítjuk a terméket és a háziállatra utaló jelzetelemet,
majd a szabályt követve rekonstruáljuk a háziállat jelzetét.
Példa: 637.5'
Erre a következő kódrészlet adna megoldást:
ap=INSTR(Jelzet$,"'")
IF LEFT$(Jelzet$,3)="637" AND ap>0 THEN
Termek$=LEFT$(Jelzet$,ap-1)
Maradek$=RIGHT$(Jelzet$,LEN(Jelzet$)-LEN(Termek$)-1)
Allat$="636"+"."+Maradek$
PRINT
"Kimenteni: ";RekordID$+Prefix$+Termek$
PRINT
"Kimenteni: ";RekordID$+Prefix$+Prefix$+Allat$
END IF
(Mintaprogram: 637.EXE)
A formai alosztásokon belül is vannak ilyen bonyolult
analógiás jelzetképzési szabályok, amelyek előírják, hogy egy meg nem nevezett
formai alosztást hogyan lehet előállítani. Erre két példát hozok.
A (0.05) alosztás jelentése: dokumentumok a sajátos
használói kategóriák szempontjából. Ha a dokumentum könyv, akkor egyrészt a
(02) általánosan közös alosztást kell alkalmazni, másrészt a személyi
általánosan közös alosztás kötőjel utáni
jelzetrészét kell átvenni. Mivel a -053.2 jelentése: gyermekek és
csecsemők általában, a gyermekkönyvek formai alosztását a táblázatban említett
analógiás szabály alapján a (02.053.2)
formai alosztás fogja jelenteni a jelzetalkotásnál. Ugyanez
megismétlődhet például a (03)-ban: referenszkönyv gyermekeknek, a (05)-ben és
elvileg más formai alosztásokon belül is. A jelzetelemzésnél fordítva járunk
el.
Formalizálva:Azonosítjuk a dokumentumtípust: (02), (03), (05) stb. A pont
utáni jelzetrészt különválasztjuk, és személyi alosztásként ábrázoljuk, az ott
talált kötőjel nullás formában. Kimentendő: a dokumentumtípus és a személyi
alosztás.
Példa: (02.053.2). Dokumentumtípus: (02), személyi alosztás:
-053.2. Kimentendők: %(02) és %-053.2. Könyv, gyermekek.
Elvalasztas = INSTR(Jelzet$,".05")
Adathordozo$ =
LEFT$(Jelzet$,Elvalasztas-1)+")"
Maradek$ = RIGHT$(Jelzet$,LEN(Jelzet$) -
Elvalasztas)
Olvasok$ = LEFT$(Maradek$, LEN(Maradek$) -1)
Olvasok$ ="-"+Olvasok$ 'a személyi alosztás kötőjele
(Mintaprogram: 020532.EXE)
A másik példa a formai alosztások táblázatában semmilyen
módon nem szereplő formák jelzése a zárójel nulla és kettőspont után, a
megfelelő főtáblázati szám felhasználásával. Elvágjuk a formai alosztást a
kettőspontnál, és csak az ebből levezetett (zárójel nélküli) főtáblázati számot
mentjük ki.
Példák: (0:82-32) regény formájában. Kimentendő: %82-32. Regény.
Vagy: (0:930.24) kronológia formájában. Kimentendő: %930.24. Történelmi
kronológia. (Ami regény formájában tárgyal valamit, az maga is regény, ami
kronológia formájában, az kronológia.)
Fotablazat$=RIGHT$(Jelzet$,LEN(Jelzet$)-3)
Fotablazat$=LEFT$(Fotablazat$,LEN(Fotablazat$)-1)
PRINT "Kimenteni: ";RekordID$ + Prefix$ +
Fotablazat$
(Mintaprogram: 08232.EXE)
Lásd még az egyes algoritmusok működését illusztráló mintaprogramokat.
Ezeket külön le lehet tölteni (ZIP fájlként).
Vissza a menüre