Fly me to the moon. Laboration om relationer, TDDC75 Diskreta strukturer. Mikael Asplund. 5 september 2017

Relevanta dokument
729G04 Programmering och diskret matematik. Python 3: Loopar

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

729G04 Programmering och diskret matematik. Föreläsning 7

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

TDP002 - Imperativ programmering

Övningsuppgifter kapitel 8

729G04 Programmering och diskret matematik TEN kl 8-12

Sätt att skriva ut binärträd

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Använda Python Laboration 1 GruDat, DD1344

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

TDDC74 Lab 02 Listor, sammansatta strukturer

Användarhandledning Version 1.2

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Introduktion till programmering SMD180. Föreläsning 9: Tupler

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

Tenta i Grundläggande programmering DD klockan

Planering av ett större program, del 2 - for och listor. Linda Mannila

TDDC77 Objektorienterad Programmering

Tentamen i Introduktion till programmering

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Föreläsning 4 Programmeringsteknik och Matlab DD1312. Logiska operatorer. Listor. Listor, tupler, strängar och forslingor

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

729G04 Programmering och diskret matematik. Python'1:'Labbmiljö'och'introduk7on'7ll'Python'

DD1314 Programmeringsteknik

Datalogi för E Övning 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Försättsblad till skriftlig tentamen vid Linköpings Universitet

729G04 Programmering och diskret matematik

Junior- och ungdomsta vlingar

729G74 IT och programmering, grundkurs. Tema 1, Föreläsning 3 Jody Foo,

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Statistik över heltal

Grundläggande Datalogi

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

729G04 Programmering och diskret matematik TEN kl 8-12

729G04 PYTHON 6 JODY FOO. Department of Computer and Information Science (IDA) Linköping University, Sweden

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

KARTLÄGGNING. 1.1 Finns kartla ggning, statistik om nyanla nda akademiker inom ramen fo r etableringsreformen? Hur ma nga stannar i regionen?

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Uppgifter teknik HT17 (uppdaterad v. 40)

Skapa rapport till regeringen, skicka för godkännande, godkänna, diarieföra och skicka rapport

Skapa remissvar till regeringen, skicka för godkännande, godkänna, diarieföra och skicka svar

TDP Regler

Föreläsning 10. Besiktningsprotokollet

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Föreläsning 3 Programmeringsteknik och C DD1316. Innehåll i listor. Uppdateringsoperatorer. +,* och listor. Listor. Indexering

729G04 Programmering och diskret matematik

Python vecka 41-42: Individuell programmering

Objektorienterad Programmering (TDDC77)

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

MUDDYCARDS 729G04 PYTHON 1. Positivt. Negativt. JODY FOO Department of Computer and Information Science (IDA) Linköping University, Sweden

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

TDDC77 Objektorienterad Programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Grundläggande datalogi - Övning 1

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Uppsala universitet Institutionen för lingvistik och filologi. Grundbegrepp: Mängder och element Delmängder

Hacka språket. Umeå

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 6: Introduktion av listor

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktion för laboration 1

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Övningsuppgift. En array baklänges. Steg 1. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

MMA132: Laboration 2 Matriser i MATLAB

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Laboration 1. Utgåva 1 Gäller från

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Introduktionsmöte Innehåll

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Introduktion till programmering D0009E. Föreläsning 9: Tupler och dictionaries

Programdesign. Dokumentera. Dokumentera

Problemlösning och funktioner Grundkurs i programmering med Python

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

Föreläsning 18 Filer och avbildningar

Besiktningsprotokollet

Instruktion för laboration 1

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

Projektuppgift - Biblioteket

TALSYSTEMET. Syfte Lgr 11

Transkript:

Fly me to the moon Laboration om relationer, TDDC75 Diskreta strukturer Mikael Asplund 5 september 2017 1 Inledning Denna laboration i diskret matematik a r ta nkt att ge en inblick i hur programmering kan anva ndas i kombination med matematiska begrepp fo r att analysera och lo sa problem. Utga ngspunkten a r det matematiska begreppet relation vilket definieras som en ma ngd av par. Laborationen anva nder programspra ket Python. Python a r ett av de mest anva nda programmeringsspra ken och det har mycket funktionalitet, men a r samtidigt ganska la tt att komma iga ng och anva nda. Det som framfo rallt go r att det a r la mpligt att anva nda i denna laboration a r att det finns bra sto d fo r att hantera ma ngder och tupler pa ett sa tt som ligger mycket na ra det matematiska spra ket. Vi kommer att anva nda oss av ett riktigt dataset som besta r av alla kommersiella flygrutter ha mtat fra n siten openflights.org. Hela databasen inneha ller o ver 7000 flygplatser och o ver 67000 rutter. Figur 1 visar dessa pa en va rldskarta. Figur 1: Flygrutter i va rlden 1

För att inte datamängden ska bli för stor och för att ni inte ska behöva bry er om att göra er kod effektiv, så minskar vi ner mängden flygplatser och rutter genom att endast inkludera flygplatser från de nordiska länderna (Sverige, Norge, Finland, Danmark och Island). 2 Förberedelser Denna laboration ger 1hp vilket motsvarar cirka 27 timmars arbete. Själva laborationstillfället (under vilken lösningen redovisas) tar 4h så det ni bör räkna med åtminstone 20 timmars förberedelser. Framförallt kan ni räkna med att det går åt lite tid att lära sig syntaxen i Python. Innan ni kommer till laborationen behöver ni göra följande steg. Ni kan med fördel hjälpas åt i grupp för att göra dessa. Tänk dock på att det är viktigt att alla hänger med. 1. Läs igenom hela detta kompendium. 2. Sätt upp en pythonmiljö som ni kan använda. Antingen på er egen dator eller genom att gå till en labbsal på IDA och använda den färdiga pythoninstallationen (skriv helt enkelt python3 i kommandoprompten). Använd online-resurser som lämpligt. 3. Hitta en Python-tutorial och lär er grunderna. Exempelvis denna: https://python.swaroopch.com/first_steps.html. Ni behöver inte göra hela, men så långt att ni behärskar loopar, if-satser, och utskrifter. 4. Testa att ni lärt er grunderna genom att skriva ett pythonprogram som skriver ut alla primtal upp till 100. 5. Lär er använda mängder i Python: https://snakify.org/lessons/sets/ 6. Testa era kunskaper genom att skriva en funktion i python som givet en mängd A bestående av heltal skriver ut alla tal i mängden som är delbara med 3. 7. För varje uppgift i avsnitt 5 nedan, skriv ned en matematisk lösningsstrategi (alltså inte svaret, utan vilka steg som behöver göras) för hur ni ska få fram svaret på uppgiften. 8. Anmäl er till labben i webreg. Labben görs två och två. Länk till anmälan finns på kurshemsidan. 3 Några Python-tips I detta avsnitt tas några specifika aspekter av Python upp som har betydelse för labben. Det är inte heltäckande och alltså inte tänkt som en ersättning till förberedelsestegen ovan. 2

3.1 Ett första program Ni kommer snabbt att upptäcka att det finns två versioner av Python, Python2.x och Python3.x. Det spelar ingen roll vilken ni använder, syntaxen är i stort sett samma (troligen är största skillnaden ni kommer märka hur print-funktionen fungerar). Detta kompendium utgår från Python3. Nedan följer ett exempelprogram som ni kan utgå ifrån för att testa med. Kopiera programmet till en texteditor och spara som test.py. För att köra programmet är det bara att skriva python3 test.py. #Detta är en kommentar #Nedan följer en funktion def plusett(x): return x+1; #Anropar funktionen a = plusett(3) #a har nu värdet 4 print(a) För att skriva ut ett värde eller sträng kan använda print-funktionen. Om man vill kombinera en sträng med ett tal måste man först konvertera talet till en sträng med hjälp av str()-funktionen: print("summan av " + str(1) + " och " + str(2) + " är " + str(1+2)) 3.2 Mängder och relationer i Python I matematiken finns begreppet tupler som är ordnade samlingar av objekt, exempel på en tupel kan vara (a, b, c, d). Ett par är en 2-tupel (a, b) som alltså består av två element. Python stöder tupler med i stort sett samma notation som i matematiken. Vi kan till exempel skriva följande i Python: a = (1,2) vilket sätter värdet av a till ett par med värdena 1 och 2. Python gör det också möjligt att arbeta med mängder. Om vi skriver följande i python så skapas en mängd A med fyra element. A = {1,2,3,4} För ta reda på storleken används den inbyggda len()-funktionen: len(a) Vi också skapa relationer genom att kombinera 2-tupler och mängder: R = {(1,2), (2,3), (4,5)} 3

Prova att skriva in dessa i din Python-kod och testa lite olika operationer (ta hjälp av guiden om mängder i Python som refereras ovan). Det är också möjligt att loopa över alla element i en mängd (eller i en relation): #Loop through a set and print the elements def print_elements(m): for i in M: print(i) #Loop through a relation (set of pairs) and print the sum of the elements def print_pair_sum(r): for (i,j) in R: print(i+j); 4 Förutsättningar Ni kommer att utgå ifrån ett labbskelett där en hel del av de grundläggande funktionerna redan är implementerade (filen heter air_labbskelett.py). Ni behöver inte bry er om hur data ska läsas in, utan bara hur de ingående datastrukturerna ska manipuleras för att få fram rätt lösningar. De datastrukturer som ni utgår ifrån är: En mängd A som innehåller alla nordiska flygplatser med en trebokstavssträng. Denna kodrad skriver ut resultatet av att kolla om ARN A: print( ARN in A) En relation R A A som innehåller alla direktrutter mellan flygplatser i A. Till exempel gäller att ( ARN, CP H ) R eftersom det finns en direktrutt från Arlanda till Köpenhamn. Lös en uppgift i taget. Uppgifterna är sorterade i ungefärlig svårighetsgrad. 5 Uppgifter Nedan följer de uppgifter som ni ska besvara. Kom ihåg att först (innan labben) formulera en matematisk lösning för varje uppgift. Kvar blir då att översätta den matematiska lösningen till en mjukvarulösning. 1. Hur många flygplatser finns det i datamängden? 2. Hur många rutter finns det? 3. Om man kan flyga från flygplats A till flygplats B, går det då att flyga B till A? 4. Finns det rutter som startar och stannar på samma flygplats? 4

5. Finns det flygplatser som man inte kan flyga ut ifrån? 6. Hur många flygplatser inom Norden finns det direktflyg till från Arlanda (ARN)? 7. Kan man flyga från Linköping (LPI) till Bodø (BOO) utan att lämna Norden? 8. Kan man flyga från Linköping till alla flygplatser i Norden utan att lämna Norden? 9. Hur många hopp måste man ta för att flyga från Linköping (LPI) för att komma till Florø (FRO) flygplats i Norge? 6 Redovisning Labben redovisas till labbassistenten på labbtillfället. Svaren ska skrivas ut av pythonskriptet (sista avsnittet i filen) med hjälp av lämpligt skapade funktioner. Observera att examinationen är individuell så båda måste kunna förklara hur ni har tänkt och gjort. Vid sjukdom eller annat förhinder kan labben redovisas senare då efter överenskommelse med labbassistenten. 5