DD1320VT201
    Laboration 10: Molekylvikter
    Hoppa över till innehåll
    Översikt
    • Logga in
    • Översikt
    • Kalender
    • Inkorg
    • Hjälp
    Stäng
    • Min översikt
    • DD1320VT201
    • Uppgifter
    • Laboration 10: Molekylvikter
    • Startsida
    • Uppgifter
    • Sidor
    • Filer
    • Moduler

    Laboration 10: Molekylvikter

    • Inlämningsdatum Inget inlämningsdatum
    • Poäng 1
    • Lämnar in en filuppladdning
    • Filtyper py
    Mål Läs
    • Skriva ett program som bygger upp ett syntaxträd.
    • Anropa metoder i ett givet program för att rita upp syntaxträdet.

    Om Allmänna träd i Föreläsning 5: Binära träd

    Om syntaxträd i Ruslans blog: Let’s Build A Simple Interpreter. Part 7: Abstract Syntax Trees

    Förberedelse: Rita syntaxträd

    Titta på syntaxen i förra labben, och rita med hjälp av den upp syntaxträd för följande molekyler:

       O
       CO2
      (CH3)2(CH2)4

    Uppgift

    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

     

    Låt ditt program bygga ett molekylträd

    Du ska komplettera formelkollsprogrammet till att samtidigt bygga ett träd som ser ut som ovan. Observera att detta inte är ett binärträd med pekarna left och right utan ett allmänt träd med next och down.

    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. Skapa ett objekt av klassen Molgrafik:

       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.

    Testprogram för molgrafik: labb10exempel.py

    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.

    Tips: I testprogrammet hashtest.py från hashlabben finns alla atomvikter.


    Betyg

    Denna labb kan endast ge betyg E. Du måste lämna in den och redovisa den i tid för att få göra labbarna för högre betyg.

    Redovisning

    Labben lämnas in indivuellt med "Lämna in uppgift"-knappen högst upp på sidan, och ska redovisas muntligt av bägge gruppmedlemmarna. Skriv gruppmedlemmarnas namn i kommentarsfältet!

    Vid redovisningen ska du kunna

    • Rita hur syntaxträ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).
    0
    Ytterligare kommentarer:
    Maxresultat för gradering till > poäng

    Matris

     
     
     
     
     
     
     
         
    Det går inte att ändra en matris efter att du börjat använda den.  
    Hitta en matris
    Hitta matris
    Titel
    Du har redan bedömt studenter med den här matrisen. Större ändringar kan påverka resultaten för deras uppgifter.
    Titel
    Kriterier Bedömningar Poäng
    Redigera beskrivning av kriterium Ta bort kriterium rad
    Det här kriteriet är länkat till ett lärandemål Beskrivning av kriterium
    tröskel: 5 poäng
    Redigera ranking Radera ranking
    5 till >0 poäng
    Full poäng
    blank
    Redigera ranking Radera ranking
    0 till >0 poäng
    Inga poäng
    blank_2
    Det här området kommer användas av utvärderaren för kommentarer relaterade till det här kriteriet.
    poäng
      / 5 poäng
    --
    Ytterligare kommentarer
    Poängsumma: 5 av 5