Projektarbete. Arbetsgång. Krav på programmet. Redovisning. Göteborgs Universitet / Datavetenskap / Logikprogrammering

Relevanta dokument
Program & programmering

Imperativ programmering

Välkomna till kursen i grundläggande programmering DVGA08, ISGA04

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering och begrepp

Föreläsning 2. Operativsystem och programmering

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

Föreläsning 1: Intro till kursen och programmering

Föreläsning 1: Intro till kursen och programmering

Föreläsning 1: Introduktion till kursen

Programmering och begrepp

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Språkteknologi och Open Source

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

TDDC74 - Projektspecifikation

Introduktion till programmering, hösten 2011

Projektdokumentation för Othello

Kort om World Wide Web (webben)

ENKEL Programmering 3

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Tips på AKK-appar. Jag tycker om dig! Appar med symboler, text och ljud för personer som behöver AKK-stöd för uttryck och förståelse

Projektet. TNMK30 - Elektronisk publicering

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

SKOLFS. beslutade den -- maj 2015.

IT-körkort för språklärare. Modul 9: Rätta skrivuppgifter

Kompilatorer och interpretatorer

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

INNEHÅLLSFÖRTECKNING... 1 INLEDNING ORDBOKEN I VERKTYGSLISTEN ORDBOKEN... 3

Design och konstruktion av grafiska gränssnitt

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

AEC 7 Ch av 10. Detta ska du kunna (= konkretisering)

PROGRAMMERING ÅK 9 INTRODUKTION

Programmeringsolympiaden 2010 Kvalificering

Programmeringsolympiaden 2018

Tips på AKK-appar. Jag tycker om dig! Appar med symboler, text och ljud för personer som behöver AKK-stöd för uttryck och förståelse

Installationsbeskrivning för CAB Service Platform med CABInstall

BLOCK 1. 1A. Att komma igång

Laboration i datateknik

Programmering. Analogt och med smårobotar. Nina Bergin

Dash & Dot. Förskola F-klass - 6

Grundkurs i programmering - intro

Introduktionsmöte Innehåll

Kurser på GrundVuxNivå

Digitalt lärande och programmering i klassrummet

JavaScript Block Editor:

12 Programstege Substantiv

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Taltaggning. Rapport av Daniel Hasselrot , 13 oktober 2003

Slumpförsök för åk 1-3

Uttryck, satser och strömhantering

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Grim. Några förslag på hur du kan använda Grim. Version 0.8

Föreläsning 1: Introduktion till kursen

Välkommen till min sida!

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Kort-kort om utdelade användarkonton och datormiljön på NADA

Laboration i datateknik

Lgr 11 - Centralt innehåll och förmågor som tränas:

Matematisk modellering

Konvexa höljet Laboration 6 GruDat, DD1344

Extramaterial till Matematik X

Prova på-laboration i Prolog

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

TILLÄMPNINGAR INOM DATORTEKNIK

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

Undervisning och bedömning av språkfärdighet inför högre studier

TDIU01 (725G67) - Programmering i C++, grundkurs

Kom igång med Skype (PC)

Evaluation Summary - CT3380 Grundäggande webbdesign HT06 Dan Levin

Röda tråden i engelska har vi delat in i fem större delmoment: Mål som eleverna skall ha uppnått i slutet av det femte skolåret.

DATALOGISK TÄNKANDE OCH PROGRAMMERING CETIS OKTOBER 2017

Digitalt lärande och programmering i klassrummet

Examensjobb

Programmering. Den första datorn hette ENIAC.

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

ORDKLASSERNA I. Ett sätt att sortera våra ord

Grupper; Gruppindelningar; Vanliga inställningar för modul

Datavetenskapliga programmet, 180 hp

Tentaupplägg denna gång

Introduktion till programmering och Python Grundkurs i programmering med Python

TUTORIAL: KLASSER & OBJEKT

manual D E M O Systemkrav Pc med Windows 98/ Mhz Pentium 64 Mb RAM Miljontalsfärger (24 bit) Upplösning: 800 x 600 pixels

Programmera ett dörrlarm. Se video

Inlämningsuppgift: Pronomenidentifierare

Förmodligen är vi ganska många som

Lärarhandledning. Modularbetet. Modulöversikt

Läslandet 2 Ord och meningar

Rullningslisten. Klicka på rullningslistpilar (pil upp eller pil ner) 1 för att förflytta dig i önskad riktning, en liten bit i taget.

Barnen får genom övningen känna att de spelar roll på förskolan, och att era gemensamma upplevelser är viktiga.

Det här är en övning för de barn som har förmåga till visst abstrakt tänkande.

Engelskaläxa glosor samt fraser till berättelsen En sommar i Storbritannien

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Språket Python - Del 1 Grundkurs i programmering med Python

grammatik Ordklasser, nominalfraser, substantiv

Labrapport: Programmering i NXC Programmera LEGO Maindstorm med NXC

Programmeringsteknik I

Transkript:

Göteborgs Universitet / Datavetenskap / Logikprogrammering Projektarbete Syftet med det projektarbete som avslutar kursen är att få prova på att skriva ett större program som löser något icke-trivialt problem. Arbetet utföres lämpligen i grupper om 3-4 personer. För att det hela ska fungera är det viktigt att tänka först, planera ordentligt och sedan göra det som ska göras. Arbetsgång Den första uppgiften att lösa är att hitta något man vill göra och någon/några att göra det med. Förslag på uppgifter finns nedan. Efter övningen 8/11 bör alla ha hittat något att göra och några att jobba med. På övningen kommer vi att hitta grupper och uppgifter till de som inte bestämt sig tidigare, samt bestämma handledare. Då man valt uppgift gäller det att specificera den ordentligt. Börja med att tänka efter och försök skriva ner en någorlunda precis beskrivning av vad det resulterande programmet ska klara av. Boka därefter en tid med handledaren för genomgång av vad ni tänkt göra då vi tillsammans kan fastställa ramarna för uppgiften. Försök att få detta överstökat så snart som möjligt så ni kan komma igång. Sedan börjar det verkliga arbetet. Var som sagt noggranna med att tänka efter först, försök t.ex. se vilka delproblem som måste lösas och dela upp arbetet på olika personer. Försök att fastställa gränssnitt mellan de olika delproblemen så att de kan lösas var för sig, etcetera. Krav på programmet All kod som skrivs ska som vanligt vara snygg och väldokumenterad. Tänk på att ni ska kunna komma tillbaka om ett år, läsa koden och förstå hur programmet fungerar. Alla i gruppen ska veta vad de olika delarna i programmet gör, så informera varandra om hur delarna fungerar. Uppenbara effektivitetsmissar i form av onödiga val och liknande godtas inte. Programmet ska också delas in i olika "riktiga" moduler, dvs inte enbart i ett antal filer som i laboration 3 utan i moduler deklarerade med module/2. Redovisning Projektarbetet redovisas skriftligt och muntligt. Den skriftliga redovisningen ska vara en rapport innehållande: Beskrivning av uppgiften. Beskrivning av lösningen. Beskrivning av hur programmet fungerar i stora drag, innehållande åtminstone en förklaring av de olika delarna/modulerna och deras inbördes beroende, samt en beskrivning av de viktigare

predikaten i varje modul. Beskrivning av hur ni gått tillväga. Användarhandledning i form av en enkel manual (som appendix). Programkod, väl kommenterad (som appendix). Den muntliga redovisningen består av att gruppen får en stund (ungefär 20 minuter) på sig att berätta för övriga vad de gjort och hur. Detta kommer att ske tisdagen den 8 januari i hörsalen. Observera att det är obligatorisk närvaro på alla redovisningar, inte bara ens egen. Redovisningen bör innehålla följande element: Kort beskrivning av vad programmet gör. Ett körningsexempel (dator i form av unixterminal finns i hörsalen). Översiktlig beskrivning av hur programmet fungerar. Projektförslag Här är några förslag på möjliga projektuppgifter. Egna förslag är välkomna. Observera att ett projekt ska motsvara minst 3 veckors heltidsarbete för alla i projektgruppen. Många av förslagen går utmärkt att kombinera med varandra: alla sorters program mår väl av ett snyggt gränssnitt (mot internet, eller ett fönstersystem), dessutom kan det vara trevligt att kunna prata med databaser på naturligt språk istället för att skriva konstiga formler, etcetera. Samtliga förslag är ganska lösa, första uppgiften blir förstås att precisera tillräckligt exakt vad projektet omfattar. Språk Gör ett grammatiksystem, där man kan skriva in sina egna grammatiker och parsa satser. Alltså ungefär som DCG, men detta ska klara av vänsterrekursiva regler och automatiskt bygga parsträd, samt kunna skriva ut dem på ett läsbart sätt. Det finns ganska enkla algoritmer för att parsa vänsterrekursiva grammatiker, så ni behöver inte hitta på en egen lösning för det. Gör ett konkordanssystem - ett program där man kan få reda på i vilka sammanhang vissa ord eller fraser i texter finns. Språkbanken på universitetet har ett exempel på hur det kan se ut på nätet. http://spraakdata.gu.se/lb/konk/ Gör ett dialogsystem för att boka biljetter till konserter och andra evenemang. Programmet ska kunna svara på enkla frågor av typen "vilka konserter ges på måndag?". Alternativt kan systemet agera bilförsäljare, eller boka föreläsningslokaler på universitetet. Gör ett läromedel, som t.ex. tränar språkfärdighet. Det kan vara glosor, grammatik, böjningsformer eller något sådant. Tänk på att tänka på målgruppen; programmet bör agera olika om det är till för lågstadieelever eller universitetsstudenter. Alternativ till språkfärdighet kan vara lågstadiematematik, geografi, historia eller något annat av intresse.

Gör ett översättningssystem som översätter från ett språk till ett annat. Ett sätt att göra detta på är att skriva två grammatiker som båda översätter till en gemensam semantisk form, men det finns flera andra varianter. Implementera en enkel morfologi för ett språk, t.ex. svenska eller engelska. Programmet ska översätta mellan ytnivå och lexikalnivå; ordet "pojkars" ska översättas till "pojke", samt säga att originalordet var ett substantiv i utrum, plural, obestämd form och genitiv. Gör ett program som försöker rätta till svenska nominalfraser. Det ska läsa en text, hitta nominalfraserna, och reagera när det hittar en felaktig böjning någonstans. Då ska det försöka förändra nominalfrasen på något sätt så att den blir korrekt, och föreslå för användaren. Skriv ett program som automatiskt lär sig känna igen t.ex. ordklasser eller grammatiska strukturer från en given korpus (databas med texter). Exempel på hur det kan fungera finns på Torbjörn Lagers hemsida, klicka på länken "Demos". http://www.ling.gu.se/~lager/ Eller mer generellt, gör ett program som på något sätt analyserar en text, t.ex. genom att beräkna statistik. Spel och pussel Gör ett brädspel där datorn spelar den ena motståndaren. Exempel på passande spel är: othello, fyra i rad, luffarschack, dam, kinaschack, kalaha, eller något annat skoj. En del brädspel innehåller slumpmoment, vilket går precis lika bra, t.ex. yatzy, backgammon, fia med knuff, poker, och så vidare. Dessutom finns det solitärspel som patienser som man kan leka med. Ett program som spelar Alfapet är en höjdare; men man kan ju också göra ett program som hjälper användaren att tillverka eller lösa ett korsord. Vissa brädspel kan vara lite svåra att få en dator att spela, t.ex. schack, go eller mah jong. Alternativet kan då vara att bara skriva ett program där två människor spelar mot varandra - gärna så att de två kan sitta på olika datorer och spela, t.ex. via internet. Ett annat alternativ kan vara att göra ett program som löser schackproblem av typen "matt i tre drag" och sånt. Prolog lämpar sig alldeles lysande till att lösa "logiska klurigheter" på formen "Pelle bor bredvid den rosa kaninen; giraffen har en röd volvo; vilket husdjur har Lisa?". Gör ett generellt system för att lösa logiska klurigheter, där man kan specificera en klurighet och Prolog hittar lösningen. En annan sorts problem är på formen "en bonde ska tar sin varg och sitt får över en bro; hur ska han göra det på snabbast möjliga sätt?". Man kan kombinera spel med dialogsystem för att göra ett s.k. äventyrsspel, där man går omkring i en påhittad värld och ska lösa problem av olika slag (typ döda prinsen och rädda draken).

En variant på äventyrsspel är s.k. "MUD" - virtuella världar där flera kan gå omkring samtidigt och interagera med varandra. Ett tips är att göra ett gränssnitt mot internet. Ett actionspel kan ju också vara skoj, med grafik och interaktivitet. Eller kanske något pusselspel (t.ex. sokoban, tetris eller minröj), eller ett "gissa rätt svar"-spel (t.ex. hänga gubbe). Databaser och AI Skriv ett program som ger förslag på hur man ska åka kollektivt från plats A till B vid en viss tidpunkt. Aktuella tidtabeller finns att hämta på nätet, och kan transformeras om till en Prologdatabas. Ett alternativ är att datorn föreslår en passande väg för att köra bil från stad A till stad B, samt säger hur lång tid det kommer att ta. I detta fall får man tillverka en databas utifrån en kartbok eller en itllgänglig avståndstabell. Gör ett system som föreslår matrecept - användaren anger vilka ingredienser som finns, kanske vilket sorts mat som önskas, och systemet föreslår ett passande recept. Eller kanske genererar hela veckans mat och ger en inköpslista. Det går också att göra t.ex. en drinkblandare (fast användaren får nog blanda drinken själv). Skriv ett program som skapar lämpliga TV-kvällar åt användaren. Programmet ska lagra/läsa information om alla tillgängliga TV-program och utifrån vad användaren föredrar sätta ihop ett förslag på program att se. Gör ett schemaläggningsprogram för en skola. Skolan har ett begränsat antal lärare och lokaler, och en bunt med elever som ska läsa olika ämnen som helst inte ska krocka alltför mycket. Ett expertsystem är ett program som har kunskap om ett visst område, t.ex. sjukdomar. Användaren får t.ex. svara på frågor om olika symptom och expertsystemet ger förslag på troliga sjukdomar och kanske behandlingar. Det behöver inte handla om just sjukdomar, det går bra med t.ex. väderprognoser, elektriska kretsar eller system för att hitta rätt bok i ett bibliotek. Ett känt AI-problem är att göra planering i en blockvärld. Man tänker sig att man har ett antal olikformade block i en värld och en robot som kan flytta runt dem. Uppgiften är att skriva ett program där man kan be roboten att göra saker t.ex. "Ställ det röda blocket på det blåa". Utifrån väderstatistik kan man göra ett program som beräknar var olika klimatområden finns. Dessutom vill man visa dessa områden visuellt på något sätt. Det behöver inte handla om meteorologi, utan egentligen vad som helst där det finns statistik. Övrigt Gör ett system som ritar bilder på skärmen med hjälp av så kallad sköldpaddsgrafik. Eller översätter grafiska bilder till tecken så att de kan visas i ett terminalfönster. I bildbehandlingsprogrammet Photoshop finns det en mängd filter för att bearbeta bilder, t.ex. genom att hitta linjer eller göra en bild skarpare. Gör ett eget bildbehandlingsprogram som transformerar om en bild genom att applicera ett eller flera filter.

Eftersom Prolog inte direkt kan visa bilder så krävs det lite kunskap om Unix eller t.ex. Java för att få programmet att fungera bra. Gör en interpretator/tolkare för ett mindre imperativt programmeringsspråk, t.ex. Basic eller en delmängd av Pascal. En mer avancerad uppgift är att göra en kompilator, som översätter ett program till en lägre nivå, t.ex. maskinkod. Prolog passar också alldeles utmärkt till att bevisa saker - man kan skriva ett program som säger om ett visst påstående följer av en samling fakta eller inte. Något eget förslag går naturligtvis alldeles utmärkt. Peter Ljunglöf (peb@cs.chalmers.se) 29 oktober 2001