plätt Linköpings universitet

Storlek: px
Starta visningen från sidan:

Download "plätt Linköpings universitet"

Transkript

1 plätt Linköpings universitet Innovativ programmering TDP019 Projekt: Datorspråk Sebastian Törngren Examinator: Anders Haraldsson, IDA Utskriftsdatum: 28 maj 2012

2 Innehåll Inledning... 3 Användarhandledning...3 Variabler och utskrift...3 Matematiska uträkningar...4 Tilldelningsoperatorer...5 Relationsuttryck och logiska uttryck...6 Villkorssats...6 Repetitionssats...7 Listor... 7 Funktioner...7 Kommentarer... 9 Systemdokumentation...10 Lexikalisk analys...10 Parsning Evaluering Installation Reflektion Grammatik... 13

3 Inledning plätt är ett enkelt programmeringsspråk främst anpassat för svensktalande personer som ska lära sig att programmera för första gången. Språket och dess nyckelord är helt och hållet på svenska vilket gör att man som svensktalande inte behöver tänka på att översätta orden. Detta språk är gjort under andra terminen på IP-programmet vid Linköpings universitet. Språket hör till kursen TDP019 Projekt: Datorspråk. Denna rapport består av fyra avsnitt: en Användarhandledning, en Systemdokumentation, Fullständig programkod, samt ett reflektionsavsnitt som beskriver erfarenheter jag fått från genomförande av projektet. Användarhandledning plätt står för att programmera lätt och är förhoppningsvis ett lättare språk för ickeprogrammerare att lära sig än många andra programmeringsspråk som finns ute på marknaden idag. plätt är ett imperativt språk med syntax som liknar C++ och Python. För er som inte har programmerat tidigare säger detta troligtvis ingenting, men plätt liknar i grunden två av de mest populära språken som finns. Detta är en fördel ifall ni vill prova på andra programmeringsspråk i framtiden. Här nedan kommer korta beskrivningar på de olika delarna som finns i plätt. Efter det kommer några exempel på vad man kan använda plätt till. Variabler och utskrift Variabler är en av de viktigaste delarna i ett programmeringsspråk. En variabel betecknar ett namngivet objekt som används för att representera ett okänt värde, till exempel ett reellt tal eller en sträng med tecken. Här kommer en del exempel på hur man tilldelar variabler i plätt: Heltal apelsiner = 5 Sträng förnamn = "Sebastian" Bool tre_mindre_än_fyra = 3<4 Flyttal zero Lista abc = ["a", "b", "c"] Det är alltid viktigt att ange vilken sorts variabel man vill ha. Som exemplet ovan visar är variabeln apelsiner ett heltal och innehåller värdet 5. Om du vill skapa en variabel skriver du alltså på detta vis: <Vilken typ av variabel man vill ha> <Namn på variabeln> = <Uttryck> Men du kan lika gärna strunta i att ge variabeln ett värde. Då tilldelas den automatiskt ett värde beroende på vilken typ variabeln är. Heltal får värdet 0, flyttal värdet 0.0, strängar värdet "" och bool värdet "sant". Vilka typer finns det i plätt att använda sig av? 3

4 Det finns fyra olika typer som kan vara bra att lägga på minnet. Dessa är: Heltal - Ett tal helt enkelt. Ex. 8056, 15, 1337, Flyttal - Decimaltal. Ex. 3.14, 80.56, Sträng - En textsträng som alltid börjar och slutar med " eller '. Ex. "Hej på dig!", 'bläää', "Jag är arg! %&#!" Bool - Returnerar alltid sant eller falskt. Kan skrivas direkt med sant eller falskt eller med ett relationsuttryck. Lista En lista med uttryck av vilken typ som helst. Skrivs inom hakparenteser. Ex. [1, 2, hej ], [1.9, 65, 1<4]. Kan namnet på variabeln se ut på vilket sätt som helst? Nej. Eftersom plätt fungerar ungefär som en sträng magister som kräver vilken typ av variabel man vill ha osv. så är även namnen begränsade. En variabel måste alltid börja på ett tecken mellan A-Ö (spelar ingen roll om det är versaler eller gemener) följt av oändligt antal tecken mellan A-Ö, 0-9 samt _. Variabler kan alltså ha namn som dessa: kanske_världens_längsta_och_minst_lämpliga_variabelnamn FjOrTiS_VaRiAbEL för_och_efternamn Men inte som dessa: _apelsiner %#&@ för- och efternamn Hur gör man för att skriva ut sin variabel då? Det är faktiskt inte svårare än vad det låter. Man skriver bara helt enkelt Skriv ut före sin variabel eller det uttryck man vill skriva ut. Nedan följer några exempel på hur man kan göra: Skriv ut apelsiner Skriver ut: 5 Skriv ut "Tjolahopp!" Skriver ut: Tjolahopp! Skriv ut "hej" * 2 Skriver ut: hej hej Hur gör man för att byta värde på en variabel? Om man vill byta värde på en variabel som redan existerar behöver man inte skriva vilken typ av variabel det är utan man skriver helt enkelt bara variabelnamnet samt dess nya värde. apelsiner = 7 förnamn = "Kalle" Något som inte fungerar att skriva däremot är: apelsiner = "sju" Eftersom variabeln apelsiner redan är deklarerad sedan tidigare av typen heltal kan man inte ge den ett nytt värde av typen sträng. 4

5 Skulle man vilja skriva ut apelsiner och förnamn igen skulle de returnera ut sina nya värden, det vill säga 7 och Kalle. Matematiska uträkningar Matematiska uträkningar är en stor och viktig del i ett programmeringsspråk. Då gäller det även att man som programmerare vet vilka matematiska operatorer och begrepp som är giltiga i språket. De giltiga matematiska operatorerna i plätt är: + - * / Som man kan gissa används + vid addering, - vid subtraktion, * vid multiplikation och / vid dividering. De operatorer som kan vara mer förvirrande är ++ och --. Dessa operatorer kan endast användas på redan deklarerade variabler av typen heltal och flyttal och ökar variabelns värde med 1. Något som också är viktigt att tänka på är att använda parenteser vid lämpliga ställen för att anpassa prioritet i uttrycket. Om man glömmer parenteser kan resultatet bli helt annorlunda mot vad man tror. 5*4-5 = 15 5*(4-5) = -5 Tilldelningsoperatorer Tidigare i dokumentet nämndes hur man kan ändra värde på en redan existerande variabel. Det var bara ett sätt av flera hur man kan ändra en variabels värde. Här listas de olika operatorerna som är tillgängliga för de olika typerna. Operator Heltal och flyttal Sträng Bool *= X X /= X += X X -= X ++ X -- X = X X X Men vad betyder då alla dessa operator? 5

6 *= Tar det ursprungliga värdet och multiplicerar det med ett nytt värde. /= Tar det ursprungliga värdet och dividerar det med ett nytt värde. += Tar det ursprungliga värdet och adderar det med ett nytt värde. -= Tar det ursprungliga värdet och subtraherar det med ett nytt värde. ++ Tar det ursprungliga värdet och adderar med Tar det ursprungliga värdet och subtraherar med 1. = Ersätter det ursprungliga värdet med det nya. För att göra det hela lite tydligare visas här några exempel: flyttal x = 3.9 x = 3.9 x /= 3 x = 1.3 x++ x = 2.3 x += 4.7 x = 7.0 x = x = sträng y = "hej" y *= 2 y += ", vad kul att ses!" y = "hej då" y = "hej" y = "hejhej" y = "hejhej, vad kul att ses!" y = "hej då" bool z = "sant" z = "falskt" z = "sant" z = "falskt" Relationsuttryck och logiska uttryck Inom programmeringen kan det vara bra att jämföra olika värden för att få fram ett bool värde, dvs. "sant" eller "falskt". De flesta operatorerna känner du säkert igen från grundskolematematiken men det finns vissa som används mer vid programmering. De olika relationsoperatorerna är: < Mindre än > Större än <= Mindre än eller lika med >= Större än eller lika med == Är lika med!= Är inte lika med Här kommer några exempel på hur dessa kan användas: bool x = 1<2 x = "sant" heltal fyra = 4 fyra = 4 x = (fyra!= 4) x = "falskt" Hur gör man om man vill jämföra två relationsuttryck? Eftersom plätt är på svenska är det inte krångligare än att använda de logiska operatorerna och eller eller mellan två relationsuttryck. bool z = (1<2 och 2<3) z = (1==2 eller 2>3) z = "sant" z = "falskt" 6

7 Villkorssats En av de satser som finns i plätt (samt många andra programmeringsspråk) är en så kallad if-sats, men eftersom plätt är på svenska så kallas den istället för en ifall-sats. En ifall-sats fungerar som så att den tar ett uttryck och kontrollerar ifall uttrycket är sant eller falskt och utför vissa satser ifall uttrycket skulle vara sant, annars gör den ingenting. Här kommer några exempel: heltal fyra = 4 ifall (fyra<5) { skriv ut "Fyra är mindre än fem." annars ifall (fyra==4) { skriv ut "Variabeln har värdet fyra." avsluta ifall ifall ((5+3) == 8) { skriv ut "Japp, det stämmer!" annars { skriv ut "Nepp, stämmer inte!" avsluta ifall Utskriften blir: Fyra är mindre än fem. Japp, det stämmer! Repetitionssats Loopar är något som kan vara väldigt bra att använda i ett språk vid vissa tillfällen. Om man behöver skriva ut talen ett till hundra så vore det ju skönt att slippa skriva hundra stycken skriv ut satser. Därför kan man istället skriva så kallade för- eller under tidensatser. för (heltal i = 1: i < 11: i++) { skriv ut i avsluta för I en försats deklarerar man först en variabel av typen heltal eller flyttal med ett värde, därefter kommer ett relationsuttryck (med den tidigare nämnda variabeln som operand) följt av ett tilldelningsuttryck. Det som kommer hända nu är alltså att först har i värdet 1 vilket är mindre än 11. För varje gång relationsuttrycket blir sant kommer de satser som finns inom måsvingarna att utföras. När i har kommit upp i värdet 11 kommer försatsen att avbrytas då relationsuttrycket inte längre är sant. Detta kommer då alltså skriva ut talen 1-10 i följd. Nedan kommer ett litet krångligare exempel på hur man kan använda sig av under tidensatser. flyttal small_number = 0.4 7

8 under tiden (small_number < 1 och small_number > 0.2) { skriv ut small_number small_number -= 0.15 ifall (small_number == 718) { skriv ut "Något har blivit väldigt fel " avsluta ifall avsluta under_tiden Först deklareras flyttalsvariabeln small_number med värdet 0.4. Därefter kommer en under tiden loop som kontrollerar att small_number både är mindre än ett och större än 0.2. Om detta uppfylls kommer small_number att skrivas ut samt minska med 0.15 i värde. Skulle small_number mot all förmodan få värdet 718 kommer en varningstext skrivas ut. Detta kommer då alltså att returnera ut talen 0.4 och Listor En lista är en variabel som kan innehålla en obestämd mängd med uttryck. Den kan innehålla vilken sorts uttryck som helst, t.ex. strängar blandat med heltal osv. Det viktigaste att komma ihåg är att listor omsluts av hakparenteser. Nedan följer några exempel på hur man skapar en lista samt några funktioner till listor. lista abc = ["a", "b", "c"] abc = ["a", "b", "c"] lägg till "d" i abc abc = ["a", "b", "c", "d"] skriv ut storlek på abc Returnerar: 4 ta bort index 2 i abc abc = ["a", "b", "d"] ta bort värde "d" i abc abc = ["a", "b"] skriv ut abc[0] Returnerar: a För att förklara lite noggrannare vad som händer börjar koden med att skapa variabeln abc av typen lista med värdena a, b och c. Därefter läggs d till i listan. Efteråt skrivs storleken ut på listan och som man kan se innehåller listan fyra uttryck. Nästa rad kan däremot vara lite förvirrande. I programmering börjar index i en lista med värdet noll. När man vill ta bort index två i listan kommer alltså det tredje uttrycket att tas bort från listan, dvs. d i det här fallet. Vidare tas uttrycket d bort från listan och sedan skrivs det första uttrycket ut ur listan. Funktioner För att göra sitt program ännu mer lättläsligt och smidigt kan man använda sig av funktioner. En funktion kan t.ex. vara bra så man slipper skriva om en sak flera gånger. Det finns mer avancerade funktioner än andra men här nedan kommer ett kort exempel på hur en funktion kan se ut. heltal funktion tal_plus_ett(n) { returnera n + 1 avsluta funktion heltal tre = tal_plus_ett(2) skriv ut tre Detta kommer då alltså att returnera ut talet 3. Lite mer förklaring på vad som händer: 8

9 Först skapas en funktion av typen heltal med namnet tal_plus_ett. Ett tips är att alltid försöka döpa funktionen så man vet vad den har för syfte. Man förstår ganska lätt att denna funktions uppgift är att addera sitt ursprungliga värde med ett. Funktionen tar sedan in en parameter n. n kommer sedan att ersättas med det värde som du anropar med, i det här fallet 2. Slutligen returnerar funktionen värdet man anropar med adderat med ett. Tänk på att alltid returnera ett värde av den typ du anger att funktionen har! Om du har skapat en funktion av typen heltal måste den returnera ett värde av typen heltal. Efter funktionen skapas en heltalsvariabel med namnet tre och har funktionen tal_plus_ett med anropet 2 som värde. Samma sak gäller här; ska man deklarera en heltalsvariabel med en funktion som värde så måste funktionen returnera ett heltal. Allra sist skrivs variabeln ut. Här kommer ett lite mer avancerat exempel på en funktion: heltal funktion fakultet(n) { ifall (n == 0) { returnera 1 annars { returnera n * fakultet((n-1)) avsluta ifall avsluta funktion för (heltal i = 0: i < 6: i++) { skriv ut fakultet(i) avsluta för Returnerar: Ovan visas ett exempel på hur man kan beräkna fakultet i plätt. För er som inte vet vad fakultet är så kommer en kort beskrivning nedan. För ett heltal större än noll är fakulteten lika med produkten av alla heltal från ett upp till och med talet självt. Dvs. fakulteten för talet fem är 1 * 2 * 3 * 4 * 5 = 120. Funktionen tar alltså in ett värde och kontrollerar sedan ifall värdet är noll eller ett. Fakulteten för noll eller ett är alltid ett, därför finns denna ifall-sats. Skulle värdet vara större körs funktionen i sig självt men med värdet minus ett för att t.ex. få ut fakulteten av värdet fem måste man först veta vad värdet av fakulteten för värdet fyra är osv. Därefter skapas en för-sats som skriver ut vad fakulteten är för värdena noll till fem. Nedan följer ett annat exempel på hur man kan skriva en funktion. 9

10 sträng funktion beställning(mat) { ifall (mat == "Pizza") { returnera "Pizza på gång!" annars ifall (mat == "Hamburgare") { returnera "Hamburgare på gång!" annars { returnera "Restaurangen har tyvärr inte den maten..." avsluta ifall avsluta funktion skriv ut beställning("pizza") skriv ut beställning("sallad") sträng skräpmat = beställning("hamburgare") skriv ut skräpmat Utskriften kommer alltså att bli: Pizza på gång! Restaurangen har tyvärr inte den maten... Hamburgare på gång! Denna funktion tar i stället in en måltid som användaren önskar. Därefter kontrolleras det ifall restaurangen har denna måltid. Olyckligtvis serverar denna restaurang bara pizza och hamburgare så utbudet är inte särskilt stort. Om användaren har valt måltiden pizza eller hamburgare kommer beställningen att ropas ut, annars kommer restaurangen svara att de inte har den maten. Skapar man i stället en variabel med funktionen som värde så kommer variabeln att få retursatsen som värde, i det här fallet beställningen. Kommentarer Har man skrivit ett långt och krångligt program kan det vara en smart idé att ha kommentarer i sin fil som gärna förklarar vad som händer i koden. I plätt finns det två olika sätt att skriva kommentarer. // Detta är en enradskommentar /* Denna kommentar kan vara på flera rader. */ Vill man skriva en kommentar på endast en rad fungerar det bra att använda //. Vill man istället skriva en kommentar på flera rader börjar man med att skriva /* och avslutar med */ som exemplet ovan visar. 10

11 Systemdokumentation Språket plätt är byggt på parsern rdparse och utifrån den har jag byggt mitt egna språk med hjälp av olika exempel, bland annat från språket diceparser samt äldre projekt som finns på kurshemsidan. Som slutresultat består plätt av tre filer; rdparse.rb vilket är parsern för språket, platt.rb som innehåller alla regler och tokens samt node.rb som består av alla noder i språket. plätt är ett programmeringsspråk främst anpassat för nybörjare som föredrar svenska framför engelska. plätt liknar till grunden en blandning mellan C++ och Python vilket är en bra start för nybörjaren som planerar att fortsätta lära sig programmering. Lexikalisk analys Eftersom jag har använt mig av parsern rdparse så har min lexikaliska del endast bestått av tokens som beskrivs med reguljära uttryck i språket Ruby. Med hjälp av dessa reguljära uttryck kan jag returnera en sekvens med tokens som reglerna i plätt sedan får tolka. De olika tokens jag har är följande och är även matchade i ordningen nedan: Här matchas flerradskommentarer och returnerar ingenting vilket gör att de fungerar precis som jag vill att de ska göra, dvs. de ignorerar allt inom /* och */. token(/\/\*(. \n)*\*\//) Här matchas enradskommentarer och returnerar ingenting vilket gör att de fungerar precis som jag vill att de ska göra, dvs. de ignorerar allt efter // på samma rad. token(/\/\/(.)*$/) Här matchas blanksteg och returnerar ingenting eftersom likt kommentarer saknar de funktion. token(/\s+/) Här matchas flerradskommentarer och returnerar ingenting vilket gör att de fungerar precis som jag vill att de ska göra, dvs. de ignorerar allt inom /* och */. token(/\/\*(. \n)*\*\//) Här matchas siffror av olika slag, både flyttal och heltal, negativa som positiva. Dessa returneras sedan eftersom vi vill kunna använda de senare. token(/\d+[.]\d+/) { m m.to_f token(/-(\d+[.]\d+)/) { m m.to_f token(/\d+/) { m m.to_i Här matchas strängar och returneras, både de som skrivs med " och '. token(/"[^\"]*"/) { m m token(/'[^\']*'/) { m m Här matchas alla de olika nyckelorden i språket och returneras eftersom vi vill kunna använda de senare. token(/ifall/) { m m token(/annars ifall/) { m m 11

12 token(/annars/) { m m token(/avsluta ifall/) { m m token(/returnera/) { m m token(/skriv ut/) { m m token(/för/) { m m token(/avsluta för/) { m m token(/under tiden/) { m m token(/avsluta under tiden/) { m m token(/ta bort värde/) { m m token(/ta bort index/) { m m token(/i/) { m m token(/lägg till/) { m m token(/storlek på/) { m m Här matchas alla specialtecken som kan användas i plätt, t.ex. matematiska operatorer och jämförelseoperatorer. token(/(\+= -= \*= \/= \+\+ -- \+ \- \* \/!= \., \] \[ { \( \) \: <= >= < > == =)/) { m m Här matchas alla variabelnamn som går att använda i plätt. En variabel måste alltså börja med ett tecken mellan A-Ö följt av noll eller fler tecken mellan A-Ö samt 0-9 och _. token(/[a-za-zåäöåäö]+[a-za-zåäöåäö0-9_]*/) { m m Parsning På det sättet som plätt är uppbyggt på så består parsningen av ett stort antal BNF-regler där jag kan matcha vad reglerna ska stå för och sedan bestämma vad som ska hända om en regel matchas. Grundregeln statements är den regeln som säger vad ett program kan bestå av. Grundregeln statements kan innehålla flera statements följt av ett statement eller endast innehålla ett statement. Ett statement kan t.ex. vara deklaration av variabler, utskrift, loopar osv. Med hjälp av denna struktur så är vårt program rekursivt och fungerar som det ska. Alla regler som matchas i statements returnerar en nod till det abstrakta syntaxträdet. Evaluering Evalueringen i plätt sker genom att traversera det abstrakta syntaxträdet bestående av många noder. Dessa noder är egentligen objekt från klasser, som skapas för de olika konstruktionerna i språket. Varje klass har en initiering- och evalueringsmetod. Initieringsmetoden tar in värden för noden och lagrar dessa som instansvariabler. Evalueringsmetoden anger vad som händer då noden skall exekveras. Språket kan innehålla både globala och lokala variabler. Tack vare två funktioner som öppnar och stänger så kallade scopes kan variabler lagras djupare i olika scopes. Detta gör att variabler som deklareras i början på en för-satser endast är tillgänglig under försatsen men tas sedan bort automatiskt efteråt. Installation plätt kan köras i alla operativsystem som Ruby har stöd för. För att kunna köra plätt måste du först installera Ruby (version rekommenderat). Detta gör du lättast genom att gå in på deras hemsida och följa instruktionerna där. Länken är 12

13 Efter att Ruby är installerat är det dags att hämta hem filerna för plätt. Dessa finns tillgängliga på Efter att du har hämtat hem filen behöver du packa upp filen. Detta gör du lämpligast med t.ex. WinRAR för Windows-användare. Efter att plätt är uppackat ska du öppna upp en terminal och förflytta dig till den mapp där plätt ligger installerat. Därefter kan du köra plätt på två sätt, antingen genom en fil eller direkt i terminalen. Vill du köra direkt i terminalen skriver du på det här viset: ruby platt.rb Om du vill köra plätt från en fil får du först skapa en fil där du skriver din plätt-kod i. Spara den t.ex. till Testfil.platt och kör den på detta vis: ruby platt.rb Testfil.platt Har du gjort allt korrekt har du nu plätt installerat och kan nu börja skriva vacker plättkod. Grattis! Reflektion I början av kursen då vi skulle välja vad för sorts projekt vi ville göra samt vilka vi skulle jobba med så kände jag redan från början att det skulle vara kul att göra något helt själv och utforma ett språk precis på det sättet som jag vill. Jag valde då alltså att ge mig in på detta stora projekt på egen hand utan en aning om ifall det skulle vara svårt eller inte. Eftersom jag inte har något erfarenhet av programmering sen innan jag började på den här utbildningen så tänkte jag att jag inte skulle göra det för svårt för mig. Jag började med att försöka komma på en idé på ett språk som både kan vara kul att göra och som jag kan lära mig någonting på. Efter att ha hört mig för hos de andra i klassen och vad de hade för idéer så fick jag ju självklart en kommentar om min östgötska och då kom jag på idén att mitt språk skulle vara på svenska. Som östgöte använder jag ju ÅÄÖ lite mer än många andra när jag pratar så det vore ju kul att kunna skriva kod på samma sätt också. Jag började rätt tidigt med att försöka få ihop en grund till språket. Efter att ha kollat på diceroller parsern och några äldre projekt började jag förstå hur mycket av det fungerade. Efter någon vecka lyckades jag få min utskrift-sats att fungera och det gick att skriva ut lite enklare matematiska uttryck. Från början hade jag rätt många idéer på vad för delar jag ville få in på mitt svenska programmeringsspråk. Jag ville ha listor, funktioner, loopar och allt möjligt vilket man trodde att man skulle kunna klämma in ganska fort med tanke på hur fort jag lyckades få mina aritmetiska uttryck att fungera. Dock gick det ju inte riktigt så. Efter att ha hållit på med språket i några veckor började man inse att det fanns mycket som man var tvungen att tänka på och för varje handledningsmöte jag hade insåg jag nya problem som jag hade framför mig. Det första stora problemet jag hade var att satserna inuti en för-sats kördes på helt fel sätt. Hade jag endast en sats inuti en för-sats gick det alldeles utmärkt men så fort jag 13

14 skulle ha flera satser så kördes alltid andra satsen och vidare för många gånger jämfört med vad de skulle. Detta lyckades jag till slut lösa efter mycket om och men när jag insåg ett fel i min nod för alla satser. Mycket frustration fanns det över detta fel. Det andra stora problemet jag stötte på i mitt språk var scopingen. Efter att ha kollat på det tidigare projektet JAIL så försökte jag få in scoping i mitt språk på ungefär samma sätt som de hade gjort och jag fick skriva om väldigt mycket i min kod för att detta skulle funka. Jag tror jag kan ha fått det att fungera men då slutade nästlingen av loopar att fungera istället och jag satt väldigt länge med att försöka lösa detta. Till slut gav jag upp och ändrade mitt språk igen till hur det fungerade från början, utan scoping men med fungerande nästling. Efter sista handledningsmötet fick jag upplysning om igen att jag borde försöka få in scoping i mitt språk och då började jag fråga mina klasskompisar om de kunde ge mig något tips på hur jag kunde göra. Tipset var att kolla på det gamla projektet Gandalf och försöka göra ungefär som de hade gjort. Efter ett tag lyckades jag och tyvärr fanns det inte mycket tid kvar av projektet. Under sista handledningsmötet hade jag tre viktiga delar kvar i mitt språk: scoping, if-satser och diverse funktioner för listor. I uppgift fick jag att jag skulle prioritera if-satserna först, därefter scoping och i mån av tid skulle jag ordna funktionerna för listorna. Tyvärr hann jag bara med de två första så listorna fick lämnas utanför. Efter första inlämningen fick jag i respons att fixa diverse stavfel i rapporten samt att fixa rekursion och listor till språket för att få bättre betyg. Självklart ville jag ha ett bättre betyg och lyckades fixa alla dessa saker innan sista inlämning. Jag är nöjd! 14

15 Grammatik <STATEMENTS> ::= <STATEMENT> <STATEMENTS> <STATEMENT> <STATEMENT> ::= <ARRAY_ADD_ELEMENT> <ARRAY_REMOVE_BY_INDEX> <ARRAY_REMOVE_BY_VALUE> <RETURN> <LOOP> <PRINT> <DECLARE_FUNC> <FUNCTION_CALL> <DECLARE_VAR> <ASSIGN> <LOOP> ::= <FOR_LOOP> <WHILE_LOOP> <FOR_LOOP> ::= "för" "(" <DECLARE_VAR> ":" <PRED_EXPR> ":" <ASSIGN>")" "{" <STATEMENTS> "" "avsluta för" <WHILE_LOOP> ::= "under tiden" "(" <PRED_EXPR> ")" "{" <STATEMENTS> "" "avsluta under tiden" <DECLARE_VAR> ::= <TYPE> <IDENTIFIER> "=" <EXPR> "bool" <IDENTIFIER> "=" <BOOL> <TYPE> <IDENTIFIER> "=" <STRING> <TYPE> <IDENTIFIER> <DECLARE_FUNC> ::= <TYPE> "funktion" <IDENTIFIER> "(" <PARAMETERS> ")" "{" <STATEMENTS> <RETURN> "" "avsluta funktion" <TYPE> "funktion" <IDENTIFIER> "(" ")" "{" <STATEMENTS> <RETURN> "" "avsluta funktion" <TYPE> "funktion" <IDENTIFIER> "(" <PARAMETERS>")" "{" <RETURN> "" "avsluta funktion" 15

16 <TYPE> "funktion" <IDENTIFIER> "(" ")" "{" <RETURN> "" "avsluta funktion" <TYPE> ::= "heltal" "flyttal" "sträng" "bool" <IDENTIFIER> ::= /[a-za-zåäöåäö]+[a-za-zåäöåäö0-9_]*/ <EXPR> ::= <ARRAY_INDEXING> <ARRAY_SIZE> <PRED_EXPR> <ADDITION_EXPR> <STRING> <ARRAY> <FUNCTION_CALL> ::= <IDENTIFIER> "(" <ARGUMENTS> ")" <IDENTIFIER> "(" ")" <PRED_EXPR> ::= <LOGIC_EXPR> <REL_EXPR> <LOGIC_EXPR> ::= <BOOL> <LOGIC_OPERAND> <LOGIC_OPERATOR> <LOGIC_EXPR> <LOGIC_OPERAND> <LOGIC_OPERATOR> <LOGIC_OPERAND> <LOGIC_OPERAND> ::= <REL_EXPR> <BOOL> <LOGIC_OPERATOR> ::= "och" "eller" <REL_EXPR> ::= <REL_OPERAND> <REL_OPERATOR> <REL_OPERAND> <REL_OPERAND> ::= <ADDITION_EXPR> <REL_OPERATOR> ::= ">=" "<=" ">" "<" 16

17 "==" "!=" <ADDITION_EXPR> ::= <ADDITION_EXPR> <ADDITION_OPERAND> <MULTI_EXPR> <MULTI_EXPR> <ADDITION_OPERAND> ::= "+" "-" <MULTI_EXPR> ::= <MULTI_EXPR> <MULTI_OPERAND> <MULTI_EXPR> <ARITM_BRACKETS> <MULTI_OPERAND> ::= "*" "/" <ARITM_BRACKETS> ::= "(" <EXPR> ")" <STRING> <INT> <FLOAT> <FUNCTION_CALL> <INT> <FLOAT> <STRING> <BOOL> ::= Integer "-" Integer ::= Float "-" Float ::= /"[^\"]*"/ /'[^\']*'/ <FUNCTION_CALL> <IDENTIFIER> ::= "sant" "falskt" <PARAMETERS> ::= <PARAMETER> <PARAMETERS> "," <PARAMETER> <PARAMETER> ::= <IDENTIFIER> <ARGUMENTS> ::= <ARGUMENT> 17

18 <ARGUMENT> ::= <EXPR> <ARGUMENTS> "," <ARGUMENT> <ASSIGN> ::= <IDENTIFIER> "++" <IDENTIFIER> "--" <IDENTIFIER> <ASSIGN_OPERATOR> <EXPR> <IDENTIFIER> <ASSIGN_OPERATOR> <STRING> <ASSIGN_OPERATOR> ::= "*=" "/=" "+=" "-=" "=" <PRINT> ::= "skriv ut" <EXPR> <IF_BLOCK> ::= <IF_RULE> <IF_RULE> <IF> <ELSE_IF> <ELSE_> <RETURN> <ARRAY> ::= <IF> <ELSE_IF> <ELSE> "avsluta ifall" <IF> <ELSE_> "avsluta ifall" <IF> <ELSE_IF> "avsluta ifall" <IF> "avsluta ifall" ::= "ifall" "(" <PRED_EXPR> ")" "{" <STATEMENTS> "" ::= "annars ifall" "(" <PRED_EXPR> ")" "{" <STATEMENTS> "" ::= "annars" "{" <STATEMENTS> "" ::= "returnera" <EXPR> ::= "[" <ARRAY_VALUES> "]" <ARRAY_VALUES> ::= <ARRAY_VALUES> "," <STRING> <ARRAY_VALUES "," <EXPR> <STRING> <EXPR> <ARRAY_SIZE> ::= "storlek på" <IDENTIFIER> 18

19 <ARRAY_INDEXING> ::= <IDENTIFIER> "[" <INT> "]" <ARRAY_ADD_ELEMENT> ::= "lägg till" <STRING> "i" <IDENTIFIER> "lägg till" <EXPR> "i" <IDENTIFIER> <ARRAY_REMOVE_BY_INDEX> ::= "ta bort index" <INT> "i" <IDENTIFIER> <ARRAY_REMOVE_BY_VALUE> ::= "ta bort värde" <STRING> "i" <IDENTIFIER> "ta bort värde" <EXPR> "i" <IDENTIFIER> 19

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk. flip/flop. ett helt flippat språk

Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk. flip/flop. ett helt flippat språk Linköpings universitet Innovativ Programmering TDP019 Projekt: Datorspråk flip/flop ett helt flippat språk TDP019 - Projekt: Datorspråk Vårterminen 2012 Johan Wänglöf Henrik Forsberg johwa457@student.liu.se

Läs mer

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet Žƒ ƒ Ž Ž ˆ ƒ ƒ ƒ Žƒ ƒ Ž ˆ Œ ŽŽ ƒ Backcode Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet Innehållsförteckning 12-05-29 Inledning... 3 Användarhandledningen... 4 Klasser... 4 Metoder...

Läs mer

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson. PROMETHEUS Ett typat, objektorienterat programmeringsspråk av Tim Andersson. Linköpings universitet TDP019 Projekt: Datorspråk Examinator: Anders Haraldsson, IDA Tim Andersson timan976@student.liu.se Utskriftsdatum:

Läs mer

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap

Parsning. TDP007 Konstruktion av datorspråk Föreläsning 6. Peter Dalenius Institutionen för datavetenskap Parsning TDP007 Konstruktion av datorspråk Föreläsning 6 Peter Dalenius Institutionen för datavetenskap 2017-02-14 2 Analys av källkod Lexikalisk analys Bildar tokensutifrån källkodens text. Syntaktisk

Läs mer

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling

Läs mer

Användar- och systemdokumentation

Användar- och systemdokumentation Användar- och systemdokumentation Linköpings universitet Examinator:, IDA marme647@student.liu.se Utskriftsdatum: Innehållsförteckning Inledning... 3 Användarhandledning... 4 Systemkrav och installation...4

Läs mer

Beräkningsvetenskap föreläsning 2

Beräkningsvetenskap föreläsning 2 Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

JavaScript del 3 If, Operatorer och Confirm

JavaScript del 3 If, Operatorer och Confirm JavaScript del 3 If, Operatorer och Confirm Under förra uppgiften så kollade vi på hur användaren kan ge oss information via promt(), vi använde den informationen både för att skriva ut den och för att

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Extramaterial till Matematik Y

Extramaterial till Matematik Y LIBER PROGRAMMERING OCH DIGITAL KOMPETENS Extramaterial till Matematik Y NIVÅ ETT Taluppfattning och tals användning ELEV Det finns många olika programmeringsspråk. Ett av dem är Python, som du ska få

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och

Läs mer

Övningsuppgifter kapitel 8

Övningsuppgifter kapitel 8 Inst. för Systemteknik Introduktion till programmering (SMD 180), 5 p Övningsuppgifter kapitel 8 1. Listor är en viktig datatyp i Python. Hur definierar kursboken lista? Vad kallas de värden som tillsammans

Läs mer

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

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 Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

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

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316

Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C DD1316 Föreläsning 2 Programmeringsteknik och C Datatyp Aritmetiska operatorer Omvandling av typer Reserverade ord Mikael Djurfeldt Logiska operatorer

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

DD1361 Programmeringsparadigm. Carina Edlund

DD1361 Programmeringsparadigm. Carina Edlund DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp

Läs mer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program

Läs mer

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Introduktion till formella metoder Programmeringsmetodik 1. Inledning Introduktion till formella metoder Programmeringsmetodik 1. Inledning Fokus på imperativa program (ex. C, Java) program betyder härefter ett imperativt program Program bestäms i en abstrakt mening av hur

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

Programmering för språkteknologer I, VT2012. Rum

Programmering för språkteknologer I, VT2012. Rum Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska

Läs mer

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Föreläsning 3: Typomvandling, villkor och val, samt textsträngar Camilla Kirkegaard camilla.kirkegaard@liu.se Linköpings universitet Sweden October 14, 2013 1 Innehåll n n n n n Repetition Typomvandlingar

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Grundläggande satser och uttryck Eric Elfving Institutionen för datavetenskap 5 augusti 2014 Översikt Uttryck Litteraler Operatorer Satser Villkor Upprepning Teckenhantering

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om

Läs mer

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

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är

Läs mer

Logik och kontrollstrukturer

Logik och kontrollstrukturer Logik och kontrollstrukturer Flödet av instruktioner i ett programmeringsspråk bygger vi upp med hjälp av dess kontrollstrukturer. I C har vi exemplen if, if else, while, do while. Dessutom finns switch

Läs mer

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

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

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera Föreläsning 2 Variabler, tilldelning och kodblock if-satsen Logiska operatorer Andra operatorer Att programmera Variabler Det är i variabler som all data (information) lagras. Genom att ändra värde på

Läs mer

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?

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? Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program

Läs mer

Inlämningsuppgift MiniPlotter

Inlämningsuppgift MiniPlotter LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap EDAA01 Programmeringsteknik fördjupningskurs Inlämningsuppgift MiniPlotter I den här uppgiften ska ett program som ritar grafer av matematiska funktioner

Läs mer

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

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 3 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Operatorer Java Standard Library Inmatning Operatorer operatorer En operator är en

Läs mer

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Övningsuppgifter till föreläsning 2 Variabler och uttryck Sid 1 (5) Övningsuppgifter till föreläsning 2 Variabler och uttryck Syfte Syftet med övningsuppgifterna är att träna på: Aritmetik, variabler, tilldelning, scanf och printf Generellt Diskutera gärna uppgifterna

Läs mer

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är

Läs mer

Tentamen Grundläggande programmering

Tentamen Grundläggande programmering Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn. Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0

Läs mer

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk

Läs mer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmering I Tobias Wrigstad fredag, 2009 augusti 28 Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor 732G11 Linköpings universitet 2011-02-01 1 2 3 Strukturdiagram Strukturdiagram används för att visa hur ett program fungerar. Man kan se alla val och upprepningar som sker i programmet. Består av tre (!)

Läs mer

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

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer 729G04 Programmering och diskret matematik Python 2: Villkorssatser, sanningsvärden och logiska operatorer Föreläsningsöversikt Vad händer när vi kör vår pythonkod? Programmerare Villkorssatser Jämförelser

Läs mer

Uppgifter teknik HT17 (uppdaterad v. 40)

Uppgifter teknik HT17 (uppdaterad v. 40) Uppgifter teknik HT17 (uppdaterad v. 40) Uppgifterna bedöms inte, de är bara till för att öva. Samarbeta gärna med andra! Du behöver inte skriva ner svaren, men se till att du förstår lösningarna! 1. Det

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter. TAIU07 Föreläsning 3 Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter. 27 januari 2016 Sida 1 / 21 Logiska variabler

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

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

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och... Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»

Läs mer

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-11:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

Tentamen i. Programmering i språket C

Tentamen i. Programmering i språket C 1 of 6 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering i språket C för D1 m fl, även distanskursen lördag 25 februari

Läs mer

Översikt över Visual Basic

Översikt över Visual Basic Översikt över Visual Basic Om denna översikt Denna översikt ger en kort introduktion till de viktigaste delarna i programspråket Visual Basic 6.0. På alla ställen där det beskrivs hur man skriver kod gäller

Läs mer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Konstruktion av datorspråk

Konstruktion av datorspråk Konstruktion av datorspråk Fö4: Domänspecifika språk och parsning Peter Dalenius petda@ida.liu.se Institutionen för datavetenskap Linköpings universitet 2009-02-12 Domänspecifika språk Ett domänspecifikt

Läs mer

2.4. Teckensträngar och logiska uttryck

2.4. Teckensträngar och logiska uttryck 2.4. Teckensträngar och logiska uttryck I Fortran sparar man text i variabler av typen CHARACTER. För varje tecken reserveras normalt 1 byte i minnet. För att deklarera en teckenvariabel TEXT och samtidigt

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 7 Örebro universitet Institutionen för teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen fredag 15

Läs mer

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

Läs mer

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret 2014-2015. L0 - Grunder i C++

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret 2014-2015. L0 - Grunder i C++ Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret 01-015 L0 - Grunder i C++ Det här är den första lektionen i kursen Introduktion till algoritmer vid Matematikgymnasiet, läsåret

Läs mer

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY Grunderna i C++ ARK 385: Virtuella Verktyg i en Materiell värld AT Arkitektur & Teknik Chalmers Tekniska Högskola 2009 - Kursen skapades (3 förel.) 2010-6 förel. + 2 projekt 2011-8 förel. Helt omarbetade

Läs mer

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

Språket Python - Del 2 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Funktioner Filhantering Felhantering 2 Funktioner 3 FUNKTIONER Att dela upp program Att dela upp program i mindre delar, funktioner är ett viktigt koncept i programmering. Viktigt

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik för ingenjörer, VT06 2 Repetition Repetition -

Läs mer

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera Föreläsning 2 Operatorer Tilldelning Kodblock if satsen Logiska uttryck Att programmera En operator tar ett eller två data och producerar ett svar. Typexemplet är +. Den tar t.ex två heltal och producerar

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator Programmering C: Tentamen 2008-05-31 1 of 5 Örebro universitet Institutionen för teknik Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se) Tentamen i Programmering grundkurs och Programmering

Läs mer

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

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java bild 1 Objektorienterad programmering i Java Föreläsning 1 Kapitel 1-3 i kursboken Java Software Solutions bild 2 Läsanvisningar Kapitel 1 är en repetition av det ni förväntas kunna sedan tidigare. Det

Läs mer

Extramaterial till Matematik Y

Extramaterial till Matematik Y LIBER PROGRAMMERING OCH DIGITAL KOMPETENS Extramaterial till Matematik Y NIVÅ TVÅ Taluppfattning och tals användning ELEV Det finns många olika programmeringsspråk. I den här uppgiften ska du få bekanta

Läs mer

LÖSNINGSFÖRSLAG TENTAMEN

LÖSNINGSFÖRSLAG TENTAMEN LÖSNINGSFÖRSLAG TENTAMEN OBJEKTORIENTERAD PROGRAMMERING I JAVA 5P FRISTÅENDE KURS, DAG (ITM - ÖSTERSUND) MÅNDAG 2 JUNI, 2003, KL. 8-13 TID: 5 TIMMAR ANTAL UPPGIFTER: 8 MAX POÄNG: 43 BETYGSKALA: UNDERKÄND

Läs mer

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011 1 of 7 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Datalogi för E Övning 3

Datalogi för E Övning 3 Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna

Läs mer

Repetition C-programmering

Repetition C-programmering Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 12 I torsdags: Klassen TelefonKostnad Exemplifierar objektorienterad design, metoder, konstruktorer static Standardklassen Math Matematiska

Läs mer

i LabVIEW. Några programmeringstekniska grundbegrepp

i LabVIEW. Några programmeringstekniska grundbegrepp Institutionen för elektroteknik Några programmeringstekniska grundbegrepp 1999-02-16 Inledning Inom datorprogrammering förekommer ett antal grundbegrepp som är i stort sett likadana oberoende om vi talar

Läs mer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer Programmering hh.se/db2004 Föreläsning 3: Java. Grundtyper, variabler och arrayer Hej Då, Karel! Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Center for Research on Embedded

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Java Språket Utmatning av Sträng litteraler Variabler

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

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

Planering av ett större program, del 2 - for och listor. Linda Mannila Planering av ett större program, del 2 - for och listor Linda Mannila 9.10.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Utskrift Indata Felhantering Funktioner och moduler (grunder)

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val 732G11 Linköpings universitet 2011-01-26 1 2 3 4 Program recept 1 spaghetti = 100; 2 salt = 1; 3 olja = 5; 4 köttbullar = 8; 5 ketchup = 0,5; 6 koka(salt, spaghetti); 7 micra(köttbullar); 8 Om(micron ==

Läs mer

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst Outline Objektorienterad Programmering (TDDC77) Föreläsning IV: while, for, do while, switch, arrayer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Ordning Villkorliga hopp I Normalt sett så

Läs mer

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller Övningar i 2D2050 Per-Anders Staav (kallas Pa) Epost: pasta@kth.se eller pastaav@algonet.se Läser till civilingengör på Elektro 180 p inriktning mot programmering. Har jobbat extra som lärare på Nada sedan

Läs mer

TDP007 Konstruktion av datorspråk Hemtentamen

TDP007 Konstruktion av datorspråk Hemtentamen TDP007 Konstruktion av datorspråk Hemtentamen 2008-08-20 Hemtentamen är kompletterings- och omexaminationstillfälle för de studenter som missat hela eller delar av inlämningar och seminarier, moment LAB1,

Läs mer

Planering Programmering grundkurs HI1024 HT 2015 - data

Planering Programmering grundkurs HI1024 HT 2015 - data Planering Programmering grundkurs HI1024 HT 2015 - data Föreläsning V36 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning

Läs mer

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

Läs mer

Introduktion C-programmering

Introduktion C-programmering Introduktion C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. 2 C Standarder

Läs mer

JavaScript del 5 Funktioner

JavaScript del 5 Funktioner JavaScript del 5 Funktioner När man skriver JavaScriptkod eller program i andra programmeringsspråk för den delen så kan det finnas anledningar till att man vill dela upp sitt stora program i flera mindre

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

Uppgift 1 (grundläggande konstruktioner)

Uppgift 1 (grundläggande konstruktioner) Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en

Läs mer

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

Introduktion till programmering och Python Grundkurs i programmering med Python

Introduktion till programmering och Python Grundkurs i programmering med Python Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?

Läs mer

Parameteröverföring. Exempel. Exempel. Metodkropp

Parameteröverföring. Exempel. Exempel. Metodkropp Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I

Läs mer

Uttryck och villkor. Föreläsning 2

Uttryck och villkor. Föreläsning 2 Uttryck och villkor Föreläsning 2 Dagens kluring Finn fem fel! #include int main(void) printf("resistans hos R1 (ohm) : ") scanf("%d",r1); printf("resistans hos R2 (ohm) : "); scanf("%d",r2);

Läs mer