Egyszerű típusok
- int, real, boolean, string, felsorolási típus, részintervallum típus
A Turing Plus ezeket még kibővíti a nat, a kontrollált ábrázolású numerikus - például nat1, real8
(1 illetve 8 byte-on tárolt típusok)-, a char, és a rögzített hosszúságú karaktersorozat - például char(10)- típusokkal.
- Sztringkezelés
A string típus változtatható hosszúságú karakterláncot jelöl. A sztringek összefűzésére a + operátor használható.
A részsztring képezésének módjait a következő példában láthatók:
Példa kód:
var fruit: string
fruit := "pine"
fruit := fruit + "apple" % fruit ¬ "pineapple"
put fruit(1..2) + fruit(6) + fruit(*) % "pine" kiírása
A * segítségével a sztring utolsó karakterére tudunk hivatkozni.
Alapértelmezésben egy sztring hossza legfeljebb 255 karakter lehet, de explicit megadható felső korlát - például string(60).
Hossz meghatározása:
Sztring hosszának meghatározására nagyon egyszerű, a length függvényt használjuk. A függvénynek egy sztring típusú paramétere
van, s a szó hosszát adja vissza.
Példa kód:
var word : string
loop
put "Irj be egy szot:"..
get word
put word, " ", length (word), " karakterbol all"
end loop
Egy szót beírunk, ezután a program kiírja, hogy a szó hány karakterből áll.
Konkatenáció:
Ez is nagyon egyszerű: a + operátort használjuk sztringek összefűzésére.
Példa kód:
var word : string
var line : string := ""
put "Irj be 5 szot!"
for i : 1 .. 5
get word
line := line + word + " "
end for
put line
5 szót kell beírni, majd ezeket a program összefűzi, a szavak közé space-t tesz (az utolsó után is).
Ezután a program kiírja az így kapott sztringet.
Sztringek részeinek meghatározása:
Meg lehet adni, hogy sztringből melyik karaktereket választjuk ki. Minden egyes karakterre a sorszámával
hivatkozunk, megadhatunk egy tartományt, pl:1.-5. betűket szeretnénk, vagy megadhatunk egy konkrét pozíciót,
azaz egy darab karaktert választunk.
Példa kód:
const word := "tutor"
put word (1..3)
A képernyőre "tut" íródik ki.
put word (2 .. length ( word ) )
vagy
put word (2 .. *)
Mindkettő esetében a második karatkertől a szó végéig írjuk ki a szót.
(A * itt az utolsó karaktert jelöli a szóban.)
var word : string
put "Irj be egy szot:"..
get word
for i : 1 .. length (word)
put word ( i )
delay (200) %várakozás
end for
Ez a program a beírt szót betűnként írja ki a képernyőre.
Minta keresése:
Ehhez az index függvényt használjuk. A függvénynek 2 paramétere van:
- 1. paraméter: a sztring amelyben keresünk
- 2. paraméter: a minta amit keresünk
A függvény visszaadja az első olyan poziciót, ahol a minta és a szöveg első karaktere megegyezik.
a a minta nem található a szövegben, akkor 0-t ad vissza.
Példa kód:
put index ("getting", "t")
Amit kiír: 3
put index ("turingtutor", "tutor")
Amit kiír: 7
var word : string
loop
put "Irj be egy szot"..
get word
if index (word, "b") = 0 then
put "Nem található 'b' ", word, "-ben"
else
put word, " tartalmaz 'b'-t."
end if
end loop
Ez a program megnézi, hogy 'b'-t tartalmaz-e az a szó amit beírtunk. Ezután értelemszerűen kiírja a keresés eredményét...
Karakterek kicserélése:
Először megkeressük azt amit ki szeretnénk cserélni, majd kicseréljük.
Példa kód:
var word : string := "aces"
word := word (1 .. index( word, "c") -1) + "t" + word (index (word, "c") + 1 .. *)
put word
Itt most 'c'-t 't'-re cseréljük.
Levágjuk a 'c' előtti részt, aztán hozzáfűzzük 't'-t, aztán hozzáfűzzük a 'c' utáni részt.
Karakterek kivágása:
Ezt egy példán keresztül nézzük meg:
Példa kód:
var word : string
put "Irj be szavakat, az utolso 'Ki' legyen!"
const mgh := "aeiou"
loop
get word
exit when word = "Ki"
var newWord := ""
for i : 1 .. length (word)
if index (mgh, word( i ) ) = 0 then
newWord := newWord + word ( i )
end if
end for
put "A szo maganhangzo nelkul:", newWord
end loop
A program a szavakból kiveszi a magánhangzókat, s úgy írja ki őket újra.
A ciklus addig fut amíg nem 'Ki' a beírt szó. Minden egyes szót átmásol karakterenként egy másik szóba,
kivéve, ha a mgh nevű konstans sztringben benne van a karakter, ami pont azt jelenti, hogy az adott karakter
egy magánhangzó. Tehát a magánhangzókat kivéve átmásol mindent karakterenként.
Összetett típusok
-
Tömb típus: A tömb típus indexe egy - vagy több - diszkrét intervallum; ez lehet olyan intervallum is,
amely csak futási időben realizálódik (dinamikus tömb). Az index alsó és felső határára a lower(tömbnév)
illetve az upper(tömbnév) kifejezésekkel hivatkozhatunk egydimenziós esetben, több dimenziós tömb esetén pedig
a lower(tömbnév, dimenzió) és upper(tömbnév, dimenzió) kifejezésekkel. Tömb típusú változó kezdeti értékének megadása
az init kulcsszó segítségével történik.
Példa kód:
var a:array 2..9 of int % lower(a)=2, upper(a)=9
var b:array 1..4,2..5,3..6 of int % lower(b,1)=1, upper(b,1)=4, lower(b,2)=2, stb.
var c:array 1..2 of int := init(0, 1)
-
Unió típus: Az unió típus a Turing variáns rekordja. A kezdeti érték beállítása az init kulcsszóval történhet,
meg kell adni a determináns mező értékét és az ehhez tartozó rekordmezők értékeit. A determináns mező megváltoztatására
csak a tag kulcsszó segítségével történhet.
Példa kód:
type vehicle: enum(passanger, farm, recreational)
type vehicleRecord:
union kind: vehicle of
label vehicle.passanger:
cylinders: 1..16
label vehicle.farm
farmClass: string(10)
label : % ez az "otherwise" ág
end union
...
var v: vehicleRecord := init(vehicle.farm, "dairy") % deklaráció és kezdőérték megadása
v.farmClass := "vegetable" % a tag-mező "farm"
tag v, vehicle.passenger % a determináns mező megváltoztatása
v.cylinder := 4
-
Halmaz típus: A halmaz típusra a következő műveletek alkalmazhatók: unió (+), különbség (-), metszet (*), tartalmazás (in), részhalmaz (<=, >=).
Pointer típus
A Turingban dinamikus változóknak - pointereknek - egy collection elemének kell lennie. A collection szerepe nem típusszerű,
hanem egy olyan változóhoz hasonlít, amely lényegében egy tömbként működik. Pointer csak és kizárólag a new hozható létre,
és a free utasítással szüntethető meg.
Példa kód:
% láncolt lista létrehozása
var list: collection of record
next: pointer to list
name: string(30)
end record
var first, last: pointer to list := nil(list) % üres lista
procedure append(p: pointer to list)
if first = nil(list) then first := p
else list(last).next := p
end if
last :=p
list(p).next := nil(list)
end append
var item: pointer to list
new list. Item
list(item ).name := "A.M. Turing"
append(item)