Till KTH:s startsida Till KTH:s startsida

Laboration 7

Laboration 7 - 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. På skärmen kan det se ut så här (användarens inmatning i fetstil):

   Molekyl: Si(C3(COOH)2)4(H2O)7
   Molekyl:

och i molekylfönstret ritar programmet ut formelstrukturen: molekylträd

Förberedelse: Rita syntaxträd

Plocka fram syntaxen i labb 6, och rita med hjälp av den upp syntaxträd för följande molekyler:

O
CO2
(CH3)2(CH2)4

Låt ditt program bygga 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:
    def __init__(self, atom="( )", num=1):
        self.atom = atom
        self.num = num
        self.next = None
        self.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. Använd molgrafik.py från labb 5. Skapa ett objekt av den klassen:

   mg = molgrafik()

Sedan ska

   mg.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.

Molekylvikten

Molekylvikten ska beräknas rekursivt med anropet weight(mol). Formulera först en mycket rekursiv tanke för vikten och programmera den sedan! Låt programmet skriva ut vikten av molekylen i terminalfönstret.

betyg E: Du ska ha löst uppgifterna ovan, och kunna

  • Rita hur trädet byggs upp av funktionsanropen.
  • Visa med ett exempel hur funktionen weight() beräknar molekylvikten.
  • Förklara hur ditt anrop till molgrafikens show() fungerar (men du behöver inte kunna förklara hur Tkinter fungerar).

betyg C: Kraven för E uppfyllda +

  •  Labben inlämnad via KTH Social i tid ch redovisad i tid (se datum under Laborationer).

betyg A: Kraven för C uppfyllda +

  • Modifiera molgrafiken så att vikten skrivs ut i samma fönster.

Gratulerar till avklarad labbkurs! Glöm inte att fylla i kursenkäten

Kommer snart

Alexander Baltatzis skapade sidan 23 januari 2015

En användare har tagit bort sin kommentar
Lärare kommenterade 15 april 2015
Ja. "... Molekylvikten ska beräknas rekursivt med anropet weight(mol)."
kommenterade 22 april 2015

Ska molekylvikten skrivas i varje ruta, eller ska den totala vikten ha en egen ruta, eller ska man ha båda eller är det fritt för tolkningar?

kommenterade 24 april 2015

Kursenkäten pekar till TildaV14 (förra årets kurs). Hoppas utvärderingarna hittar rätt ändå...

Lärare kommenterade 24 april 2015

@Mats Tack! Det ska jag ändra på. Jag tänkte använda det nya kursutvärderingssystemet på KTH. Jag har inte använt det förut. 

Lärare kommenterade 24 april 2015

@Jacob, det finns en bild i labblydelsen som visar hur det är tänkt att fungera. Kan du förklara vad som är oklart så kan jag förbättra bilden. 

http://www.csc.kth.se/utbildning/kth/kurser/2D1320/gemensam/bilder/molbild.gif

kommenterade 24 april 2015

@Alexander, I A-uppgiften ska man ju skriva ut molekylvikten (som ju inte finns med i labblydelsebilden som är E-varianten), så frågan var om man skulle skriva ut den totala molekylvikten i en egen ruta placerad på lämpligt ställe eller om  man skulle skriva ut molekylvikten för respektive atom/molekyl i alla rutor. 

Lärare kommenterade 24 april 2015

@Jacob, Jag tycker det är snyggast att skriva i samma ruta, undertill i lite mindre stil. 

kommenterade 24 april 2015

@Alexander, Ok! Vi hann helgardera oss och skriver ut både i samma ruta och totalen, snyggt som tusan ;)

kommenterade 27 april 2015

När kommer bokningsschema upp för redovisning av labb 6 och 7?