Nada

Laboration 6 - Molekylgrafik

Det här programmet ska fullborda det som den föregående labben har påbörjat. Det gör formelkoll som tidigare och ritar sedan upp molekylen. I terminalfönstret kan det se ut så här:
   Molekyl: Si(C3(COOH)2)4(H2O)7
   Molekyl: 
och i molekylfönstret ritar programmet ut formelstrukturen så här:



Bygg ett molekylträd

Du ska komplettera formelkollsprogrammet till att samtidigt bygga ett träd som ser ut som ovan. Varje ruta motsvaras av ett objekt:
class Ruta:          
    atom="( )"
    num=1    
    next=None
    down=None
Funktionen readgroup skapar först en sådan tomruta med rutan = Ruta() och anropar readatom och readnum för att kunna sätta in rätt värden på atom och num. Om det är en parentesgrupp ska readgroups anrop till readmol returnera en delmolekyl som sätts under rutan.down.

När readgroup är klar returnerar den rutan till anropet

    mol=readgroup()
som görs allra först i readmol. Vad som ska göras med mol.next får du själv tänka ut. Slutligen returnerar readmol den färdiga strukturen till readformel som returnerar den till huvudprogrammets anrop
    mol = readformel()
där mol pekar högst upp till vänster på syntaxträdet.

Rita molekylträdet

Huvudprogrammet ska nu rita upp den färdiga molekylen. Grafiken i Python ingår inte i vår kurs så du får en färdig modul /info/grudat06/molgrafik.py som du kan importera metoden show från. Sedan ska
   show(mol)
rita upp molekylbilden i ett eget fönster. Bilden ritas förstås rekursivt, och du ska formulera den rekursiva tanke som används. Om du inte kommer på den själv kanske det hjälper att kolla molgrafikkoden. Om programmet avslutas direkt hinner man inte se grafiken blinka förbi. Se därför till att ha en slinga för inmatning av flera formler.

Extrauppgifter för högre betyg (välj en)

Molekylvikten kan beräknas rekursivt med anropet weight(mol). Formulera först en mycket rekursiv tanke för vikten och programmera den sedan! Modifiera molgrafiken så att vikten skrivs ut i samma fönster.

Lysande löst av................................. fastslår............................ den ...............


Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 25 oktober 2006
Tekniskt stöd: <webmaster@nada.kth.se>