Till KTH:s startsida Till KTH:s startsida

Visa version

Version skapad av Linda Kann 2014-11-05 06:45

Visa < föregående | nästa >
Jämför < föregående | nästa >

Laboration 6

Nyhet: Betaversion av parprogrammeringsverktyget parkour är igång!

Prova parkour, och lämna feedback till handledare eller kursledaren.

Laboration 6 - Formelkoll

I denna labb ska du

  • Lära dig att använda domaren Kattis, ett automatiskt system för rättning av labbar.
  • Skriva ett program som läser in molekylformler och kontrollerar om dom är syntaktiskt korrekta. Närmare instruktioner finns i Kattis - problemet heter formelkoll2.

Registrera dig på Kattis

Gör så här:

  1. Följ länken: Kattis
  2. Logga in (längst upp till höger) med ditt KTH-id
  3. Välj "COURSES" i övre  menyn
  4. Välj "tilda14" (långt ner i listan)
  5. Klicka på "I am a student taking this course and I want to register for it on Kattis."

Lär dig använda Kattis

Indata

Programmen du skickar till Kattis ska läsa indata från stdin. Det fungerar som att läsa från fil! Exempel:

from sys import stdin

inrad = stdin.readline()
while inrad:
    lista = inrad.split()
    tal1 = int(lista[0])
    tal2 = int(lista[1])
    ...
    inrad = stdin.readline()

Utdata

Utdata kan du skriva ut med print som vanligt.

Öva på två problem

Arbeta igenom följande enkla uppgifter

Formelkoll

Läs instruktionerna för problemet formelkoll2.

Ditt program ska läsa formeln tecken för tecken och med rekursiv medåkning kolla syntaxen. Rekursiv medåkning innebär att huvudprogrammet först gör anropet readformel(), varefter readformel() anropar readmol() som anropar readgroup() och sedan eventuellt sej själv (men inte om inmatningen är slut eller om den just kommit tillbaka från ett parentesuttryck).

Funktionen readgroup() anropar antingen readatom() eller läser en parentes och anropar readmol() etc - allt enligt grammatiken. När ett syntaxbrott upptäcks genereras en exception (raise Syntaxfel("Saknad högerparentes")) som fångas i huvudprogrammet och där skrivs hela resten av indataraden ut.

Man måste ofta tjuvtitta på nästa tecken för att veta vilken gren man ska följa i syntaxträdet. Inför metoden peek() i din köklass, så kan du titta på nästa tecken utan att plocka ut det ur kön.

Om du har flera programfiler måste du ange vilken som innehåller main (bortse från att det står "Java only" - detta gäller även Python!)

Betyg

betyg E: Ditt program ska godkännas av Kattis (och förstås av handledaren vid redovisningen).
Du även kunna

  • Beskriva hur rekursiv medåkning fungerar.
  • Visa hur dina funktioner speglar den givna syntaxen.
  • Förklara varför man inte måste räkna antalet parenteser.

betyg C: Kraven för E uppfyllda + Labben inlämnad och redovisad i tid (se tidsplanering för labbar) +
Du ska också:

  • Skriva en spec med namnen på alla funktioner du planerar att skriva och en kommentar för varje funktion som beskriver vad funktionen ska göra.
    Se exempelspec från programmeringsteknikkursen.

betyg A: Kraven för C uppfyllda +

  • Skriv ett eget testprogram som kontrollerar de exempeldata som ges i formelkoll2.


Den här labben ska redovisas tillsammans med labb 7.