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.

Föreläsning 10. Pekare (Pointers)

Planering Programmering grundkurs HI1024 HT 2014

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

Repetition C-programmering

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

Introduktion C-programmering

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

Planering Programmering grundkurs HI1024 HT TIDAA

Variabler och konstanter

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Planering Programmering grundkurs HI1024 HT data

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

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

Enkla datatyper minne

*Pekarvärden *Pekarvariabler & *

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

Programmeringsteknik med C och Matlab

Datastrukturer. föreläsning 3. Stacks 1

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

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

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Tentamen *:58/ID100V Programmering i C Exempel 3

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

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

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

Funktioner och programstruktur. Föreläsning 5

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

Föreläsning 6 pekare och pekare tillsammans med arrayer

1 Funktioner och procedurell abstraktion

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

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

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

Introduktionskurs i Datateknik

Funktioner och programstruktur. Föreläsning 5

Tentamen Grundläggande programmering

Det finns många flaggor till g++,

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

Poster ( structar ) Postdeklarationer

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Assemblerprogrammering för ARM del 2

Programmering i C, 7,5 hp

HI1024 Programmering, grundkurs TEN

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorienterad programmering Föreläsning 4

En kort text om programmering i C.

Föreläsning 6: Introduktion av listor

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

HI1024 Programmering, grundkurs TEN

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

HI1024 Programmering, grundkurs TEN

Funktionens deklaration

Att använda pekare i. C-kod

Hantering av textsträngar och talsträngar. William Sandqvist

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

HI1024 Programmering, grundkurs TEN

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

Föreläsning 5-6 Innehåll

Classes och Interfaces, Objects och References, Initialization

F4. programmeringsteknik och Matlab

Arrays (indicerade variabler) Föreläsning 6

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Föreläsning 3. Stack

Typkonvertering. Java versus C

6.1 Kompilering och lite grundläggande information

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Statistik över heltal

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

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

HI1024 Programmering, grundkurs TEN

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

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

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Objektorienterad Programmering (TDDC77)

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

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

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

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Indexerade variabler

Objektorienterad Programmering (TDDC77)

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

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

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

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

Föreläsning 2, vecka 8: Repetition

Föreläsning 3. Stack

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

Transkript:

HI1024 Grundkurs Programmering F09: Pekare! 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 typedef Sequencing casting Implicit promotion, Explicit. 3 2 Precedence, Operands Assosiativity Selection 9 Reference Iteration Abstract 4 Aggregates Jump Compound Literals Functions 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 King 11.1-4, 12.3-4 switch () case : [deafult :] Exceptions while () do while () for (;;) break continue lable:goto return exit 7 8 Directives main(void){ declarations statements } 1

Test! Indata? Utdata? Deklaration, Definition

Test Indata? Utdata?

Test x, y Parametrar a,b Argument Indata? Utdata? Copy-by-value!

Test! Indata? Utdata? 2-dim arrays

Stackexemplet deklaration Tjänsterna Datastrukturen Top-down Unit Test init() empty() peek() definition STACK PACKAGE view() pop() push()

Encapsulation robustness! Det är alltid smart att försöka skapa en återanvändbar modul med ett gränssnitt som döljer bort hur informationen rent praktiskt är lagrad. För stunden så måste vi tyvärr deklarera de variabler som behövs i main, vilket gör att de syns, men undvik (=aldrig) att ändra direkt i dessa utan skapa funktioner med kloka namn och variablerna som parametrar som gör jobbet!

Statistik

Statistik RndGen

Statistik init RndGen throw

Statistik init RndGen throw (os) [ ]

Statistik init RndGen throw (os) FrqTbl

Statistik init RndGen throw (os) init FrqTbl view tick

Statistik init RndGen throw (os) init FrqTbl view tick [ ]

Statistik

Statistik init RndGen throw (os)

Statistik init FrqTbl view tick [ ]

Statistik init FrqTbl view tick [ ]

Statistik?

Statistik Hade vi redan haft tillgång till paketen RndGen och FrqTbl så hade all ny logik i programet varit koncentrerad till 1 rad!

Nytt! Pekare rx = r1+r2 r1*r2 RAM %d = Läs in ett heltal! Det här är en sats. Till variabeln som finns på den här platsen! &r1=vart=46, r1=innehållet=4 46 47 48 49 4 6 2 r1 r2 rx Programmet stannar upp här och väntar på att du matar in ett tal + retur! ( & = Adressoperator. ) scanf() kan uppenbart ta emot, och använda, adressen till en?!

Pekare RAM 140 734 635 289 626 4 6? r1 r2 rx Hum, &r1 ger alltså adressen till den minnescell som kompilatorn har valt att spara r1:s värde i (tur att vi slipper komma ihåg den!) går det att spara den adressen i en variabel?

Pekare Självklart, men observera: RAM 140 734 635 289 626 4 6? 140 734 635 289 626 * r1 r2 rx pr1 Genom att skapa en variabel av typen * kommer kompilatorn ihåg att 1) innehållet är en adress 2) till en minnescell som ska innehålla en! Det är väldigt smart att ge sådana variabler prefixet p, så att ingen glömmer bort att det är en adress!!!!!!!!!!!!!

Pekare då borde det gå att använda pr1 i stället för &r1 vid ett anrop till scanf?! RAM 140 734 635 289 626 4 8 6? 140 734 635 289 626 * r1 r2 rx pr1 Det fungerar! Observera: Vid deklarationen av pr1 reserveras plats i minnet för att spara en adress. Plats för (i vårt fall) r1 måste skapas separat!!!!!!!!!!!

Pekare det går lika bra med char eller float! RAM 140 734 635 289 626 A B char ch 140 734 635 289 626 char * pch Det fungerar! hum, vad skulle hända om vi skickade en pekare till en funktion, där pekaren sedan användes via värdeoperatorn *

Järnkoll?! RAM 46 47 48 49 7 nb

Järnkoll?! RAM 46 47 48 49 7 nb

Järnkoll?! RAM 46 47 48 49 7 7 nb number

Järnkoll?! RAM 46 47 48 49 7 7 nb number

Järnkoll?! RAM 46 47 48 49 7 7 14 nb number

Järnkoll?! RAM 46 47 48 49 7 7 14 nb number

Järnkoll?! RAM 46 47 48 49 7 nb

Järnkoll?!

Järnkoll?! RAM 46 47 48 49 7 nb

Järnkoll?! RAM 46 47 48 49 7 0x000046 Int * nb nbptr

Järnkoll?! RAM 46 47 48 49 7 0x000046 Int * nb nbptr

Järnkoll?! RAM 46 47 48 49 7 14 0x000046 Int * nb nbptr

Järnkoll?! RAM 46 47 48 49 7 14 0x000046 Int * nb nbptr

Järnkoll?! RAM 46 47 48 49 7 14 nb

Järnkoll?!

Observationer 1. En ej initierad pekarvariabel är ett slumptal, som kan avsluta programmet om pekaren används! 2. Makrot NULL kan användas för att ge en pekare ett värde som betyder att pekaren för stunden e pekar på något! 3. Flera pekarvariabler kan peka på samma variabel! 4. Glöm aldrig & eller * där de krävs, det blir alltid svåra fel! 5. Variabelnamnet på en matris (utan [ ]) kan användas som en pekare till första elementet, det är därför & e behövs i funktionsanrop. 6. Döp alltid pekarvariabler med prefixet p (eller möjligen postfix Poer alt Ptr). 7. Innebörden av *&r1 är r1, d.v.s r1:s värde!

Varför pekare? Pekare används främst av 4 anledningar 1. Pekare möjliggör att funktioner kan ändra värdet på anropande funktionsargument. 2. Eftersom c kopierar funktionsargument blir funktionsanropet mycket snabbare om en pekare till argumentet används! 3. Pekare möjliggör att ett program kan skapa variabler när de behövs dynamiskt, e enbart statiskt via deklarationer. 4. Pekare möjliggör väldigt användbara speciella dynamiska datastrukturer som kallas länkade listor & träd.

Öva på pekare Skapa en funktion tocartesian som tar en polär koordinat (r,fi) och returnerar motsvarande rätvinkliga koordinater (x,y). (x=r*cos(fi) & y=r*sin(fi), fi anges i grader som ska konverteras till rad för att cos & sin ska fungera. Konstanten M_PI samt cos och sin finns via biblioteket math.h) Alla koordinater ska ha dubbel precision Funktionsdeklaration & Funktionsdefinition?!

Öva på pekare

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Användaren ska göra sitt val genom att ange en bokstav

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Användaren ska göra sitt val genom att ange en bokstav view enter reset measurements [ ] nb size Hum, programmet verkar bestå av tre delar......en kommadoavkodare v, e, c, r, q,...en del för att managera mätvärden,...och en statistikdel. max statistics normalize average min [ ] size

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska Start skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Stopp Användaren ska göra sitt val genom att ange en bokstav view enter reset measurements [ ] nb size Hum, programmet verkar bestå av tre delar......en kommadoavkodare v, e, c, r, q,...en del för att managera mätvärden,...och en statistikdel. 2) Om jag börjar med kommandoavkodaren blir det lätt att provköra de andra delarna när jag utvecklar dem (samt att programmets ressenter redan nu kan se vad det är jag tror att de beställt)! max statistics normalize average min [ ] size Din första kommandotolk hanterar bara q(uit) (och kanske en hjälpmeny om valet är okänt).

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Användaren ska göra sitt val genom att ange en bokstav view enter reset measurements [ ] nb size Hum, då är det nog dags att börja fundera på hur mina mätvärden ska lagras, dags för measurements-paketet! 3) Skapa de variabler som behövs för att lagra mätvärden samt hur många mätvärden som finns. Ge variablerna något rimligt initialt värde......och skapa view som skriver ut dem på ett snyggt sätt! Testa med olika antal värden, speciellt 0 och max! max statistics normalize average min [ ] size OBS: Inga globala variabler, använd funktioner med parametrar!

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Användaren ska göra sitt val genom att ange en bokstav view enter reset measurements [ ] nb size Hum, både enter och reset ska kunna ändrar värdet på antalet lagrade mätvärden, det går att göra på två sätt......oavsätt det så verkar reset enklare, börjar med den! 4) Data: Implementeras på valfritt sätt Elektro: Ska implementeras med pekare! (Där det behövs!) max statistics normalize average min [ ] size Provkör, och testa att view fortfarande fungerar!

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Användaren ska göra sitt val genom att ange en bokstav view enter reset measurements [ ] nb size Wow, reset fungerade då är det dags för enter! 5) Data: Implementeras på valfritt sätt Elektro: Ska implementeras med pekare! (Där det behövs!) max statistics normalize average min [ ] size Provkör, och testa att view fortfarande fungerar!

Kopplat till lab 2 (& 3) Att använda datorprogram för mätdatainsamling och analys är mycket vanligt. Ni ska skriva ett välstrukturerat program där man kan mata in mätvärden och analysera dessa. När programmet startar får användaren upp en meny där denne kan välja: v (View) - visar vilka mätvärden som finns lagrade e (Enter) - tillåter användaren att lägga till mätvärden c (Compute) - presenterar max, min, medelvärde och normaliserade mätvärden r (Reset) - raderar alla inmatade mätvärden q (Quit) - avslutar programmet Användaren ska göra sitt val genom att ange en bokstav view enter reset measurements [ ] nb size Hum, då är det bara statestiken kvar......mätvärdesmodulen blir mer generell om statestikanropen e ingår i den......antingen får valet c i kommandoavkodaren anropa statestikmodulen flera gånger alternativt så behövs det en hjälpfunktion som fixar det! 6) Realisera kommandot c på valfritt sätt. docompute max statistics normalize average min [ ] size Provkör, dubbelkolla indentering etc etc etc, Klart!

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 typedef Sequencing casting Implicit promotion, Explicit. 3 2 Precedence, Operands Assosiativity Selection 9 Reference Iteration Abstract 4 Aggregates Jump Compound Literals Functions 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 switch () case : [deafult :] Exceptions while () do while () for (;;) break continue lable:goto return exit 7 8 Directives main(void){ declarations statements } 1

Övning #08: 11E5 & Lab 2

Rev history 150729 0.1 AC Skapad. 150730 0.5 AC & * Array. 150731 1.0 AC Övning. 160917 2.0 AC Pekare tydligare förklarade.

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 10 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!