Till KTH:s startsida Till KTH:s startsida

Laboration 6

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 "Kurser" i övre blå menyn
  4. Välj "tildav15" (långt ner i listan)
  5. Klicka på "Jag är student på den här kursen och vill registrera mig på 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 via KTH Social i tid ch redovisad i tid (se datum under Laborationer).
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 exempel från prgi12 (förel 12) alternativt prgcl13.

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.

Alexander Baltatzis skapade sidan 23 januari 2015

En användare har tagit bort sin kommentar
En användare har tagit bort sin kommentar
kommenterade 28 april 2015

Hej!

Denna labb har för min del endast blivit en jakt på att försöka klura ut vilket extremfall / slarv man missat. Enbart låga 15% av de inskickade förslagen blir godkända vilket tyder på att många testar sig fram. Jag har inte mer tid att lägga på denna uppgift och skulle VERKLIGEN uppskatta några ytterligare testfall i specen. Eller bara en hint i rätt riktning.

Men hopp om att sommaren börjar snart, Max 

kommenterade 28 april 2015

Och bara precis därför så gick det vägen. 

kommenterade 29 april 2015

Jag fortsätter på Max påstående. Vi har nu en lista med MÅNGA testfall där alla behandlas korrekt som förväntat. Vi får inte rätt på Kattis och vi kan nu varken börja på lab 7 och har slut på idéer om lab 6. Vi behöver verkligen mer testfall för att hitta vart det blir fel då Kattis inte hjälper med det.

kommenterade 2 maj 2015

Det börjar dra ihop sig till redovisning och vi har inte fått ett svar på 4 dagar. Kan någon assistent / examinator ge 5 minuter på sig att hjälpa oss?

kommenterade 3 maj 2015

Titta en gång på hur ni räknar <num>, där gjorde jag bort mig först och fick rätt på alla testfall men Kattis sågade mig längs fotknölarna. Prova kanske molekyler som H101, H201, H1001, H3410

Gör så att ni returnera resultatet från checkNum() el liknande och printar ut det för kontroll, ni behöver ändå detta <num> värde i lab7.

kommenterade 3 maj 2015

En annan grej kan vara att ni har ett mellanslag efter: "saknad högerparentes vid radslutet "

Assistent kommenterade 4 maj 2015

Hallå,

Saker som jag ser att folk har problem med:

  • Missar att "Sample Input 1" har andra testfall än "Sample Input 2", t.ex. Na332.
  • Missar att kolla att det är en valid atom (någon av H He Li Be B C N O F Ne Na Mg Al Si P S Cl Ar).
  • Stavfel.
  • Mellanslag efter viss utdata

Tänk på att svaret måste matcha EXAKT, inte ett endaste tecken får skilja åt.

kommenterade 5 maj 2015

Vi fick run time error och förstår inte varför. Programmet funkar när vi läser in indata från en fil. Vad kan orsaken vara? 

Assistent kommenterade 6 maj 2015

Från uppgifts-sidan:

Programmet ska läsa in en eller flera rader från standard input.

En användare har tagit bort sin kommentar