Grundkurs Programmering

Relevanta dokument
Grundkurs Programmering

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

Repetition C-programmering

Introduktion C-programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

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

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

TDIU01 - Programmering i C++, grundkurs

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Funktionens deklaration

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

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

HI1024 Programmering, grundkurs TEN

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Föreläsning 3-4 Innehåll

Planering Programmering grundkurs HI1024 HT 2014

Rekursion och induktion för algoritmkonstruktion

1 Funktioner och procedurell abstraktion

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Enkla datatyper minne

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

TDDC77 Objektorienterad Programmering

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

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Planering Programmering grundkurs HI1024 HT TIDAA

Introduktionskurs i Datateknik

Programmering i C, 7,5 hp

F4. programmeringsteknik och Matlab

Övning från förra gången: readword

Tentamen Grundläggande programmering

Tentamen i Introduktion till programmering

Innehåll. Pekare Exempel

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

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

Planering Programmering grundkurs HI1024 HT data

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Föreläsning 6: Introduktion av listor

Föreläsning 2, vecka 8: Repetition

Föreläsning 6: Metoder och fält (arrays)

Objektorienterad Programmering (TDDC77)

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Det finns många flaggor till g++,

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Funktioner och programstruktur. Föreläsning 5

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

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

C-programmering, föreläsning 2 Jesper Wilhelmsson

Programmering A. Johan Eliasson

Föreläsning 3. Stack

Variabler och konstanter

Föreläsning 3: Booleans, if, switch

Innehåll. Pekare Exempel

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

HI1024 Programmering, grundkurs TEN

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

#include <stdio.h> #include <string.h>

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Typkonvertering. Java versus C

Funktioner och programstruktur. Föreläsning 5

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Indexerade variabler

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

Visual Basic, en snabbgenomgång

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

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

Innehållsförteckning

Objektorienterad Programmering (TDDC77)

HI1024 Programmering, grundkurs TEN

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

Twincat: PLC Control

*Pekarvärden *Pekarvariabler & *

TDIU01 - Programmering i C++, grundkurs

Deklarationer/definitioner/specifikationer

HI1024 Programmering, grundkurs TEN

Föreläsning 3. Stack

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

Grundläggande datalogi - Övning 1

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Objektorienterad programmering Föreläsning 4

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

HI1024 Programmering, grundkurs TEN

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

Transkript:

HI124 Grundkurs Programmering F7b: Funktioner på djupet! A. Cajander, STH

6 1 5 42 3.14f a float char short circuit order of subexp eval. Dagens fokus = + - * / % ++ -- + - * / % & ^ << >> ==!= > < >= <=! && ~ & ^ << >> a[i] * & a->b a.b fn(), A?B:C sizeof() && comp. ass. i*i++, [ ] Integer overflow Index out of range #define =; Aritmetic If () { } [else { }] Compound assign. qualifiers Comparison 5 switch () case : typedef Sequencing [deafult :] casting Implicit promotion, Explicit. 3 2 Precedence, Operands Assosiativity Selection Reference Iteration Abstract 4 Aggregates Jump Compound Literals Functions 7 Logical Bitwise Referens Other {,,,} overf/index Basic Side effects / Und. behavior DATA TYPES PRG CORR Imp. dependent Syntax related Logical related CTRL STRUCT PRG IN LARGE ; { } /*comment*/ or // makefile Exceptions King 9.6 & 1 while () do while () for (;;) break continue lable:goto return exit Directives main(void){ declarations statements } 1

Den första sammansatta datatypen, matris! RAM RAM 46 47 48 49 4A 4B _ 3 mo 46 2 tu 47 1 3 we 48 1 th 49 1 fr 4A sa _ 4B su 1 _ 4 4 4 4 4 _ 4 4 2 box[] box[1] box[2] box[3] box[4] box[5] box[6] mo = 3; box[] = 3; for ( i=; i<weekdays; i++) box[ i ] = 4; box[ box[ ] ] = 2;

Sammantaget Alla element är av samma typ! Indexen är från till storleken-1! Det går e att tilldela en hel matris till en annan! Matriser måste kopieras element för element! Ett element fungerar exakt som en variabel av elementtypen! Saknas element i ett aggregat ( {1,2,3} ) tilldelas! Ingen run-time test för index-out-of-bounds! Viktigt vid utskrift av innehållet i matriser???

Funktioner Lättbegripligt! Obegripligt! Återanvändbart. Ingen in-data! Ingen ut-data! Ingen ut-data! Namn! Ingen in-data!

Observationer Returtypen kan vara, float, char men e array! Precis som main kan throwdice ha egna variabler. De existerar dock bara när datorn kör funktionen throwdice! Och de döljer då andra globala variabler med samma namn! c fungerar enligt principen copy-by-value. Det betyder att när return ska returnera ett värde så beräknar den först värdet av throw, säg 5, som den därefter returnerar. Den returnerar m.a.o en kopia av resultatet (och e en referens till throw, för throw finns e när funktionen är avslutad!)

Funktioner Kallas för (in-)parameter och fungerar som en lokal variabel i funktionen! Den får sitt värde, via copy-by-value, när funktionen anropas! Värdet eller uttrycket som anges i funktionsanropet kallas för argument. Återkommande! Återanvändbart! Ingen in-data! Ut-data: kast! Antal ögon En funktion kan ha flera inparametrar, då åtskiljda med komma ( a, char ch).

Observationer RAM 46 47 48 49 4A 4B 6 i size Beräknas, copy-by-value! En parameter fungerar som en lokal variabel. Det går bra att ändra värdet, men det påverkar e argumentet som användes vid anropet!!!

Matriser box[ ] & thebox[ ] är samma minnesceller! RAM 46 47 48 49 4A 4B 4C 2 1 1 1 1 7 box[], thebox[] box[1], thebox[1] box[2], thebox[2] box[3], thebox[3] box[4], thebox[4] box[5], thebox[5] box[6], thebox[6] thesize 46 7 Wow! Innehållet kan uppdateras!!!

Observationer RAM 46 5 46 47 48 49 4A 4B 2 1 1 1 1 5 box[], thebox[] box[1], thebox[1] box[2], thebox[2] box[3], thebox[3] box[4], thebox[4] box[5] box[6] thesize 4B 2 Kom ihåg när [ ] ska vara med, och e. Kom ihåg storleken!

Observationer RAM 46 5 46 47 48 49 4A 4B 2 1 1 1 1 2 box[] box[1] box[2] box[3] box[4] box[5], thebox[] box[6], thebox[1] thesize 4B 2 Kom ihåg när [ ] ska vara med, och e. Kom ihåg storleken!

Observationer RAM WOW! 46 47 48 49 4A 4B 2 3 4 2 tmp[], thebox[] tmp[1], thebox[1] tmp[2], thebox[2] thesize Namnlös 1-dim matris perfekt för att testa (Unit Test = UT) en funktion! Kom ihåg när [ ] ska vara med, och e. Kom ihåg storleken!

2 dim matriser RAM w rad 46 1 w[][] 47 2 w[][1] 48 3 w[][2] 49 4 w[][3] 4A 5 w[][4] 4B 6 w[][5] 4C 7 w[][6] 4D 1 w[1][] rader kolumner 1 NO! 2 YES!

Lösningsförslag Luffarschack

Test! Indata? Utdata?

Test! Indata? Utdata? Deklaration, Definition

Test Indata? Utdata?

Test Indata? Utdata? Funktionslokal variabel!

Test Indata? Utdata?

Test Indata? Utdata? Copy-by-value!

Test Indata? Utdata?

Test Indata? Utdata? 2-dim arrays

NYTT! Rekursion En funktion kan anropa sig själv, den är då rekursiv! T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1.

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 n 4 3

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 3 n n 4 3 3 2

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 3 2 n n n 4 3 3 2 2 1

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 3 2 1 n n n n 4 3 3 2 2 1

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 3 2 n n n 4 3 3 2 2 1

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 3 n n 4 3 3 2

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4 n 4 6

Rekursion En funktion kan anropa sig själv, den är då rekursiv! RAM T.ex. kan fakulteten av ett tal n lätt beräknas som: n! = n * (n 1)! Där n! = 1. 46 47 48 49 4A 4B 4!=24

Lokal vs Global variabel Variabeln w sägs vara lokal därför att den deklarerats inuti en funktion! En lokal variabel skapas varje gång koden passeras under exekvering där den är deklarerad, och den glöms bort så snart funktionen når sitt slut! M.a.o kan den hamna på olika ställen i minnet Automatic storage duration, Block scope (visability)

Lokal vs Global variabel Variabeln w sägs vara global därför att den deklarerats utanför alla funk! En global variabel skapas när koden passeras under exekvering där den är deklarerad, och den finns kvar så länge kod från samma fil exekveras. En global variabel är synlig i hela filen från den punkt där den deklareras! Den kan dock skuggas av lokala variabler/parametrar. Static storage duration, File scope (visability)

Lokal vs Global variabel X Svårt att hitta fel, omöjligt att återanvända, förbjudet i kursen!

Bottom up vs Top Down Programutvecklingsmetodik

Bottom up vs Top Down Wow!!!! den måste ha en brutal motor!

Bottom up vs Top Down Sen behövs det kanske någon form av styrning också... Wow!!!! den måste ha en brutal motor!

Bottom up vs Top Down Javisst, en på-knapp behövs också Sen behövs det kanske någon form av styrning också... Wow!!!! den måste ha en brutal motor!

Bottom up vs Top Down Den behöver ett bra gränssnitt

Bottom up vs Top Down Den behöver ett bra gränssnitt som exponerar styrdatorns alla program

Bottom up vs Top Down Den behöver ett bra gränssnitt som exponerar styrdatorns alla program så att motorn körs på rätt sätt!

Bottom up vs Top Down Javisst, en på-knapp behövs också Den behöver ett bra gränssnitt Sen behövs det kanske någon form av styrning också... som exponerar styrdatorns alla program Wow!!!! den måste ha en brutal motor! så att motorn körs på rätt sätt! Det är ofta smart att försöka förstå problemet top-down Det är också ofta smart att utveckla koden top-down

Modultänk init() put() DATA get() Användargränssnitt pr() store() load() Finns redan! init() put() DATA get() pr() store() load() Måste utvecklas!

RPN miniräknare 1P6 1 2 3 * + = 7 5 8 * 4 9 - / = -8 Q (quit) Läs in nästa tecken Om tal, tryck på stacken! Om op, utför op med de två översta talen på stacken! så länge tecknet är tal eller op!..9,+ - * / = Ingen felkod! STACK!

Top-down översikt, nu behöver vi en stack! float Vilken datatyp hjälper oss mest?! char

Top-down översikt, nu behöver vi en stack! stack top SIZE-1 Hum en 1-dim matris kan kanske användas det är svårt att trycka ner tal men ingen vet om de hamnar sist i stället indexet top får markera nästa lediga position push placerar talet på indexet top och ökar top med ett pop returnerar talet på indexet top-1 och minskar top med ett... varför e spara indexet top sist i matrisen ok att skippa alla tester för fel. SIZE

Top-down översikt, nu behöver vi en stack! Push 2 Push 4 Pop 4 stack stack stack stack top 2 2 2 top 4 top top SIZE-1 SIZE-1 1 2 SIZE-1 1 SIZE

Top-down översikt, nu behöver vi en stack! stack top Egentligen behöver bara sista elementet sättas till (=top), men smart att :a alla element. SIZE-1 Programmet behöver e en funktion som skriver ut hela stacken men den är bra att ha!!!!!!!!!!!!!!!!! SIZE

Top-down översikt, nu behöver vi en stack! stack top Egentligen behöver bara sista elementet sättas till (=top), men smart att :a alla element. SIZE-1 Programmet behöver e en funktion som skriver ut hela stacken men den är bra att ha!!!!!!!!!!!!!!!!! SIZE

Top-down översikt, nu behöver vi en stack! stack top SIZE-1 SIZE

Top-down översikt, nu behöver vi en stack! Push 2 Push 4 Pop 4 stack stack stack stack top 2 2 2 top 4 top top SIZE-1 SIZE-1 1 2 SIZE-1 1 SIZE

Top-down översikt, nu behöver vi en stack! Push 2 Push 4 Pop 4 stack stack stack stack top 2 2 2 top 4 top top SIZE-1 SIZE-1 1 2 SIZE-1 1 SIZE

Top-down översikt, nu behöver vi en stack! stack top SIZE-1 SIZE OK!

Användargränssnittet stack top 1 2 3 * + = 7 5 8 * 4 9 - / = -8 PROBLEMBESKRIVNING! Q (quit) Pseudokod datatyper bibliotek återanvända?! Läs in nästa tecken Om tal, tryck på stacken! Om op, utför op med talen på stacken! så länge tecknet är tal eller op! Int main(void) { SIZE-1 } SIZE Nöjd chef Nöjd användare $$$ Bättre kodbibliotek Säkrare utvecklare

stack top SIZE-1 SIZE OK!

Statistik

6 1 5 42 3.14f a float char short circuit order of subexp eval. Dagens fokus = + - * / % ++ -- + - * / % & ^ << >> ==!= > < >= <=! && ~ & ^ << >> a[i] * & a->b a.b fn(), A?B:C sizeof() && comp. ass. i*i++, [ ] Integer overflow #define =; Aritmetic If () { } [else { }] Compound assign. qualifiers Comparison 5 switch () case : typedef Sequencing [deafult :] casting Implicit promotion, Explicit. 3 2 Precedence, Operands Assosiativity Selection Reference Iteration Abstract 4 Aggregates Jump Compound Literals Functions 7 Logical Bitwise Referens Other {,,,} overf/index Basic Side effects / Und. behavior DATA TYPES PRG CORR Imp. dependent Syntax related Logical related CTRL STRUCT PRG IN LARGE ; { } /*comment*/ or // makefile Exceptions while () do while () for (;;) break continue lable:goto return exit Directives main(void){ declarations statements } 1

Övning #7b: -

Rev history 15724.1 AC Rekursion. 15725.5 AC Scope 15726 1. AC Prg.utv.metodik.

file struct [ ] Kursens uppbyggnad Aritmetic If () { } [else { }] Compound assign. qualifiers Comparison 5 switch () case : typedef Sequencing [deafult :] Logical casting Implicit promotion, Explicit. 3 Bitwise 2 Precedence, Referens Operands Assosiativity Selection 9 Reference Repetition 12 Abstract 4 11 Aggregates Jump 1 Compound DATA CTRL 6 Literals Functions 7 1 TYPES STRUCT Basic 5 Exceptions Side effects = + - * / % ++ -- + - * / % & ^ << >> ==!= > < >= <=! && ~ & ^ << >> a[i] * & a->b a.b fn(), A?B:C sizeof() && comp. ass. Other 42 3.14f a float char short circuit i*i++, Integer overflow Index out of range {,,,} text order of subexp eval. uninit var. overf/index #define =; / Und. behavior PRG CORR Imp. dependent Syntax related Logical related PRG IN LARGE ; { } /*comment*/ or // makefile while () do while () for (;;) break Continue lable:goto return exit Directives main(void){ declarations statements } 1 8 Algoritmer I 13 14 Algoritmer II Outlook, not on exam!