bild
Skolan för
elektroteknik
och datavetenskap

Laboration 3 - Ordtr�d

Laborationens tema �r bin�ra s�ktr�d och f�rsta uppgiften �r att bygga upp ett s�ktr�d fr�n en fil med svenska ord och spotta ut dubbletter. N�sta uppgift �r att kolla orden i en engelsk text mot det svenska s�ktr�det. Finns det n�gra skenbart svenska ord ska dom skrivas ut, dock endast f�rsta f�rekomsten av varje svenskt ord. F�r att veta vilka ord man redan hittat sparar man f�rst�s dom i ett annat s�ktr�d.

Ett s�ktr�d med ordlista

I filen bintree.py ska du skriva en class bintree: med tre anrop, n�mligen f�ljande (som kan t�nkas st� i huvudprogrammet lab3.py).
   from bintree import bintree  # �vrigt i filen f�rblir dolt
   svenska=bintree()
   svenska.put("gurka")
   - - -
   if svenska.exists("gurka"):
      - - -
   svenska.write()              # Skriver alla ord i bokstavsordning
N�r tr�dobjektets put("gurka") anropas skickar tr�det sin rotpekare och det nya ordet till en rekursiv funktion putta som ser till att en ny nod skapas p� r�tt st�lle. Analogt g�r de �vriga anropen, allts� s� h�r.
class bintree:
    root=None

    def put(self,newvalue):
        self.root=putta(self.root,newvalue)

    def exists(self,value):
        return finns(self.root,value)

    def write(self):
        skriv(self.root)
        print
H�r �r klassen slut men sedan kommer definitionerna av putta, finns och skriv. Tr�det ska bara lagra en upplaga av varje objekt som l�ggs in, s� f�rs�ker man stoppa in en dublett h�nder ingenting.

Det finns f�rst�s ocks� en class node: i bintreefilen som inneh�ller ett v�rde och tv� pekare.

I lab3.py ska du f�rst l�sa in hela filen word3.txt i tr�det, till exempel s� h�r:

svenskfil=open("word3.txt","r")    # �ppnar filen f�r l�sning (r)
for rad in svenskfil.readlines():
    ord=rad[0:3]                   # Ett trebokstavsord per rad
    if svenska.exists(ord):
        print ord, 
    else:
        svenska.put(ord)           # in i s�ktr�det
print
Om du gjort r�tt kommer dom dubblettord som spottas ut att bilda ett viktigt budskap.

Tv� bin�ra s�ktr�d med ordlistor

N�r du nu har ett s�ktr�d med alla svenska trebokstavsord kan du blixtsnabbt kolla om ett givet ord finns med. Du ska nu l�sa filen engelska.txt ord f�r ord och putta in orden i ett annat s�ktr�d. Nu vill du inte ha dubbletterna utskrivna, s� kolla f�rst if engelska.exists(...). Om ordet redan fanns g�r du ingenting, men om det �r nytt ska du ocks� kolla om det r�kar finnas som svenskt ord. I s� fall ska det skrivas ut p� sk�rmen.

Om du har gjort r�tt kommer dom utskrivna orden att bilda �nnu ett hemligt budskap! N�r du mottagit det kan du f�rs�ka f� underskrift av en l�rare.


Frivilliga extrauppgifter

S�t t�s: Unders�k vilka trebokstavsord som blir andra ord bakl�nges. Varje ordpar ska bara skrivas ut en g�ng och symmetriska ord inte alls.

Alpin pinal: Unders�k vilka fembokstavsord som blir ett annat ord n�r dom tv� f�rsta bokst�verna flyttas sist. Du kan anv�nda ordlistan word5.txt.




Genialt programmerat av ..................................... anser.............................. den .................


Sidansvarig: Magnus Rosell <rosell@csc.kth.se>
Uppdaterad 2006-08-25