C-programmering del 4. Ulf Assarsson. extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg
|
|
- Kerstin Mattsson
- för 6 år sedan
- Visningar:
Transkript
1 C-programmering del 4 Ulf Assarsson Läromoment: extern, sta.c, Överkurs: const, inline, Gameloop, grafikloop, fraktalt berg Kopplat.ll: Lab 5 - spelprogrammering
2 Kombinera C och assembler Anropa assembler-ru.ner från C Anropa C-ru.ner från assembler Kodgenerering sker från olika filer, så ihopkopplingen sker i länkningen..o filer Parameteröverföring och returvärden Se Rogers föreläsning MOP-Cortex_M4_assemblerprogrammering_3 2
3 GCC genererar assembler från C Från C.ll assembler Från assembler.ll maskinkod Symbolerna i assemblern är samma som i C för ARMs gcc. Annars vanligt med eu understreck: myadd() _myadd: i C i assembler T ex för au undvika reserverade ord i assemblerspråket Nu: import / extern Synlighet assembler / C 3
4 Bonus Import / Export IMPORT i assembler säger au symbolen kommer från en annan fil. IMPORT myfunc... BL myfunc Symbol från annan fil ( t ex.c-fil) Börja exekvera funk.onen myfunc: EXPORT myfunc BX LR Exportera symbolen så den kan importeras av annan fil ( t ex.c-fil eller assemblerfil) I den här kursen använder vi dock asm () för au inline:a assembler direkt i en c-fil. 4
5 Extern extern i C säger au symbolen kommer från en annan fil. // main.c #include <stdio.h> extern int g_var; void myfunc(); void main() myfunc(); g_var definerad senare t ex i annan.c-fil extern ej nödvändig för funk.oner, prototypen säger: finns vid länkning. // myfunc.c int g_var; void myfunc() printf("hej"); ; Vanligast är dock au ta hjälp av.h-fil 5
6 Extern Poäng: Om ni kodar eu större program för lab5 så vill ni nog inte ha alla globala objekt/ variabler deklarerade i main-filen. Då måste ni använda extern. extern i C säger au symbolen kommer från en annan fil. // main.c #include "fractalmountain.h POBJECT objects[] = &player, &fmountain; unsigned int nobjects = 2; void main() // fractalmountain.h #ifndef FRACTALMOUNTAIN_H #define FRACTALMOUNTAIN_H #include "object.h" #include "types.h" void somefunc1(); void somefunc2(); extern OBJECT fmountain; #endif //FRACTALMOUNTAIN_H // fractalmountain.c #include fractalmountain.h" OBJECT fmountain = 0, // geometri - ingen 0,0, // riktningsvektor 0,0, // initial startposition drawmountain, // draw method 0, // clear_object unused movemountain, // move method set_object_speed // set-speed method ; extern = declare without defining Utan extern skulle vi skapa en ny variabel. 6
7 Synlighet av symboler Alla symboler synliga per-default i C för länkaren. Inga symboler synliga per-default i assembler: Gör symboler (i.o filen) synliga med EXPORT Gör symboler från andra filer synliga med IMPORT 7
8 sta.c static i C kan göra två saker 1. Ta bort synlighet (för andra filer) av symboler. 2. Allokera minne för lokala variabler som om de vore globala variabler (men forfarande med lokal synlighet) istället för på stacken. 8
9 Sta.c variant 1 static int var; Variabeln var kan ej ses från andra filer, oavseu om man använder extern eller IMPORT. 9
10 Sta.c variant 2 #include <stdio.h> void testfkt() int var1 = 0; static int var2 = 0; var1++; var2++; printf("var1: %i, var2: %i \n", var1, var2); int main() testfkt(); testfkt(); testfkt(); Utskrij: var1: 1, var2: 1 var1: 1, var2: 2 var1: 1, var2: 3 var2 ini.aliseras.ll noll endast första gången vi anropar funk.onen, men behåller sedan siu värde mellan anrop. var2 är global variabel som endast har lokal synlighet inom siu scope dvs här för testfkt(). 10
11 Sta.c variant 2 vanligt exempel #include <stdio.h> void testfkt() static int bfirsttime = 1; if(bfirsttime) // T ex allokera minne på heapen // eller förberäkna något. bfirsttime = 0; Gör huvudberäkningarna. int main() testfkt(); T ex: rita gubbe, skriv ut resultat i eu fönster, gör avancerad AI-simulering, skicka data över nätverk. 11
12 Bonus Några fler qualifiers const inline sta.c extern vola.le (restrict) const double pi = ; // variabeln kan inte ändras x = 90 * pi / 180; // kan förberäknas vid kompileringen // pekaren får nu inte ändra värde till annan adress volatile unsigned char * const inport = (unsigned char*) 0x ; static inline int square(int x) return x * x; int main() int a = square(5); 12
13 Inline och h-filer Bonus Foo kan inte inline:as såhär (< gcc 2010) // main.c #include <stdio.h> #include "foo.h" int main() printf("x is %i", foo(0)); return 0; // foo.h inline int foo(int x); // foo.c #include <stdlib.h> inline int foo(int x) if( x == 0 ) int x = 4; return x; return x; c-fil Inkluderar header-fil header-fil Innehåller funk.onsprototyper c-fil För main.c så syns inte defini.onen av foo() utan bara deklara.onen. Exemplet leder i själva verket oja.ll kompileringsfel. 13
14 Inline och h-filer Bonus Nu kan foo inline:as // main.c #include <stdio.h> #include "foo.h" int main() printf("x is %i", foo(0)); return 0; // foo.h static inline int foo(int x) if( x == 0 ) int x = 4; return x; return x; c-fil Inkluderar header-fil header-fil För main.c syns nu hela defini.onen av foo() och kan inline:as J. 14
15 Inline och h-filer Bonus // vecmath.h #ifndef VECMATH_H #define VECMATH_H typedef struct union float v[2]; struct float x,y; ; ; Vec2f; typedef struct Vec2f min; Vec2f max; Box2f; // box inline innebär au man ber kompilatorn au stoppa in koden direkt i anropande funk.on istället för au göra eu funk.onsanrop. Då slipper man overhead för branching och ak.veringspost. För au kunna göra deua får ej inline-funk.onen ligga i en annan.c-fil (ejersom den aldrig syns vid kompileringen utan först vid länkningen. Vissa kompilatorer klarar dock inline även vid länkningssteget. sta.c inline Box2f Add(Box2f * box, Vec2f v) Box2f res; res.min.x = box->min.x + v.x; res.min.y = box->min.y + v.y; res.max.x = box->max.x + v.x; res.max.y = box->max.y + v.y; return res; #endif //VECMATH_H // Adds vector v to min and max of box Vissa kompilatorer kräver sta.c framför inline, ty om inline misslyckas så kan funk.onen Add() bli globalt definierad (dvs får skapad kod som är globalt synlig vid länknigen) för varje.cfil som inkluderar vecmath.h, om det inte stod sta.c. Sta.c betyder au Add() bara får.c-fillokal synlighet. Utan sta.c genereras länkfelet mul.ple defini.on om vecmath.h inkluderas av flera.c-filer. 15
16 Typer läses läuast från höger -> vänster #define find and replace på textnivå. Typedef funkar inte på samma säu (men oja ingen prak.sk skillnad) typedef int postnr; typedef int gatunummer; postnr x = 41501; Gatunummer y = 3; // Observera au x och y nu har samma typ så man kan skriva x = y; Angående typer: Läs från höger ;ll vänster: (const finns sedan C89/90) unsigned char * const inport = (unsigned char*) 0x400; // inport är en constant pekare.ll en unsigned char unsigned char const * inport2 = (unsigned char*) 0x400; // inport är en pekare.ll en constant unsigned char const unsigned char * inport2 = (unsigned char*) 0x400; // inport är en pekare.ll en constant unsigned char char unsigned const * inport2 = (unsigned char*) 0x400; // inport är en pekare.ll en constant unsigned char char unsigned const * const inport3 = (unsigned char*) 0x400; // inport är en constant pekare.ll en constant unsigned // char MEN (som exempel på au typedef ej motsvarar find and replace) typedef unsigned char* port8ptr; const port8ptr p = (port8ptr)0x400; const unsigned char* p2 = (port8ptr)0x400; p2=0; // OK för p2 är pekare.ll const unsigned char p = 0; // ej OK för p är const-pekare.ll unsigned char port8ptr const p3 är samma som const port8ptr p3 Bonus 16
17 EU enkelt spel 17
18 Game loop En typisk game loop. int main(int argc, char **argv) appinit(); // initialize GPIO_E graphic_initalize(); // initialize the lcd-display graphic_clearscreen(); clearbuffers(); // clear front/backbuffer bool gameover = false; while(!gameover ) clearbuffer(0); collisiondetection(); // sets flags on the objects updateplayer(); // user input updateobjects(); // moves and/or kills objects based on the flags drawobjects(); // draws the objects (based on the flags) swapbuffers(); // draw backbuffer and swap back/frontbuffer. delay_milli(40); // ~25 frames/sec 18
19 Game loop POBJECT objects[] = &player, osv ; unsigned int nobjects = 1; void collisiondetection() ; // insert your own code void updateobjects() for(int i=0; i<nobjects; i++) objects[i]->move(objects[i]); void drawobjects() for(int i=0; i<nobjects; i++) objects[i]->draw(objects[i]); sta.c OBJECT player = &ball_g, // geometri för en boll 0,0, // ini.ala riktningskoordinater 1,1, // ini.al startposi.on draw_object, clear_object, move_object, set_object_speed ; // funk.onspekare void updateplayer() switch( tstchar() ) // tstchar() checkar input via USART-porten case '6': player.set_speed( &player, 2, 0); break; case '4': player.set_speed( &player, -2, 0); break; case '8': player.set_speed( &player, 0, -2); break; case '2': player.set_speed( &player, 0, 2); break; 19
20 Game loop En realis.sk grafikloop. int main(int argc, char **argv) appinit(); graphic_initalize(); graphic_clearscreen(); clearbuffers(); bool gameover = false; unsigned char framebuffer0[1024], framebuffer1[1024]; unsigned char *frontbuffer = framebuffer0; unsigned char *backbuffer = framebuffer1; void clearbuffer(unsigned char val) for (int i=0; i<1024; i++) backbuffer[i] = val; void clearbuffers() for (int i=0; i<1024; i++) backbuffer[i] = frontbuffer[i] = 0; while(!gameover ) clearbuffer(0); collisiondetection(); updateplayer(); updateobjects(); drawobjects(); swapbuffers(); delay_milli(40); void swapbuffers() graphic_drawscreen(); unsigned char* tmp = frontbuffer; // swap front/backbuffers frontbuffer = backbuffer; backbuffer = tmp; 20
21 Game loop En realis.sk grafikloop. void graphic_drawscreen(void) unsigned int k = 0; bool bupdateaddr = true; for(uint8 c=0; c<2; c++) // loop over both controllers (the two displays) uint8 controller = (c == 0)? B_CS1 : B_CS2; for(uint8 j = 0; j < 8; j++) // loop over pages graphic_writecommand(lcd_set_page j, controller ); graphic_writecommand(lcd_set_add 0, controller); for(uint8 i = 0; i <= 63; i++, k++) // loop over addresses // update display only where it is different from last frame if( backbuffer[k]!= frontbuffer[k] ) if(bupdateaddr ) graphic_writecommand(lcd_set_add i, controller); graphic_writedata(backbuffer[k], controller); bupdateaddr = false; // Display hardware auto-increments the address per write else bupdateaddr = true; // No write -> we need to update the x-address next write 21
22 Game loop Vi får då även uppdatera pixel(). void pixel( int x, int y, int set ) if (!set) return; if( (x > 127 ) (x < 0) (y > 63) (y < 0) ) return; unsigned char mask = 1 << (y%8); int index = 0; if(x>=64) x -= 64; index = 512; index += x + (y/8)*64; backbuffer[index] = mask; switch( y%8 ) case 0: mask = 1; break; case 1: mask = 2; break; case 2: mask = 4; break; case 3: mask = 8; break; case 4: mask = 0x10; break; case 5: mask = 0x20; break; case 6: mask = 0x40; break; case 7: mask = 0x80; break; 22
23 Fractal mountains POBJECT objects[] = &player, &fmountain; unsigned int nobjects = 2; sta.c OBJECT fmountain = 0, // geometri behöver vi ej 0,0, // ini.ala riktningskoordinater 0,0, // ini.al startposi.on drawmountain, // funk.onspekare 0, // unused move_object, // dummy set_object_speed // dummy ; sta.c OBJECT player = &ball_g, // geometri för en boll 0,0, // ini.ala riktningskoordinater 1,1, // ini.al startposi.on draw_object, // funk.onspekare clear_object, move_object, set_object_speed ; 23
24 Fractal mountains static unsigned char y_values[128]; void drawmountain() static bool bfirsttime = true; if(bfirsttime) bfirsttime = false; for(uint8 x=0; x<128; x++) y_values[x] = fractal(); else // shift mountain to the left for(uint8 x=0; x<127; x++) y_values[x] = y_values[x+1]; y_values[127] = fractal(); // anropa pixel för alla x=[0,127] for(uint8 x=0; x<127; x++) pixel(x, y_values[x], 1); 24
25 Fractal mountains #define RAND_MAX static unsigned int next = 1; static unsigned int rand(void) next = next * ; return (unsigned int)(next/65536) % 32768; static void srand(unsigned int seed) next = seed; 25
26 Fractal mountains static unsigned char fractal() // f = noise(t)*a + noise(0.5t)*2a + noise(0.25t)*4a... static int noise[] = 0,0,0; // room for 3 octaves static int t = 0; static int f = RAND_MAX / 2; const int half_max = RAND_MAX/2; noise[0] = (rand() > half_max)? 1 : -1; // update each time if( (t%2) == 1) noise[1] = (rand() > half_max)? 1 : -1; // update every 2 nd time if( (t%4) == 3) noise[2] = (rand() > half_max)? 1 : -1; // update every 4 th time // sum octaves int val = 0; for(int i=0; i<3; i++) val += noise[i]; f += val; // update our static non-bounced fractal function t = (t+1) % 4; val = f % 64; // return a bounced value between 32 + [0-32] val = (val > 31)? 63-val : val; return val + 32; 26
27 För au ni ska kunna läsa kod C luriga uuryck (överkurs) for (expr/dekl; expr; expr) statement; if( expr ) Godtyckliga expressions. Examples of statements: if, while, do/while, for, switch, expr Deklara.on av lokala variabler: int a, b; Examples of expressions: x = y + 3; x++; x = y = 0; // Both x and y are initialized to 0 proc( arg1, arg2 );// Function call y = z = f(x) + 3; // A function-call expression expr, expr; // list of expressions. Conditional value // of the expression is the result of the // last expression. 27
28 För au ni ska kunna läsa kod C luriga uuryck (överkurs) Godtyckligt expression/dekl. Dock typiskt en vanlig deklara.on och ini.ering av loopvariabeln. for(expr/dekl; expr; expr) statement; for (int a=1, b=0; b<5, a++, f(a), a<3; b++, a += (b>a)? 1 : -1) a++, b++; Godtyckligt expression. OBS vilkorets värde endast lika med sista uurycket a<3 (så b<5 har här ingen effekt). if(a=0, b++, a = (b == c) ) Gör inte såhär ejersom det blir svårläst kod! 28
29 För au ni ska kunna läsa kod C luriga uuryck (överkurs) EU.ll knäppt exempel void f(int b, int c) printf("%d, %d", b, c); void main() int a = 0; f( (++a, ++a, ++a), (++a, ++a)); Expr för 1:a parametern. Vad skrivs ut? Svar: 3, 5 Kommaseparerade expressions evalueras vä -> hö. Så även för inputparametrar hos de flesta C-kompilatorer (men är ospecificerat). Värdet för en lista av expr är värdet av sista uurycket. Expr för 2:a parametern. Värde = värdet hos sista uurycken (++a). Gör inte såhär ejersom det blir svårläst kod! 29
30 EU spel Exempel på lite större projekt Output i konsolen Denna version kör enbart på Windows + CodeLite men hyfsat läu au porta. Utan externa APIs Objektorienterad s.l Objekt: Anima.on, Object, Enemy, Player, Text h-filerna visar strukturen hup:// 30
Ulf Assarsson. Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C.
Grundläggande C-programmering del 5 Applika'onsbyggnad/Spelprogrammering (real'dsstyrsystem) och Avancerad C Ulf Assarsson Läromoment: Kodningskonven(oner Real(dsloop Överkurs: grafikloop, fraktalt berg
Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson
Grundläggande C-programmering del 4 Mer programstruktur samt Dynamisk minnesallokering Ulf Assarsson Läromoment: Synlighet static, #extern, (inline), #if/#ifdef, #include guards, enum, union, little/big
Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe
Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK
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
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
Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volafle, #define Arrayer av pekare, arrayer av arrayer Hemuppgi9er: v2. Föregående
Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe
Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering
Programmering av grafisk display
Programmering av grafisk display Arbetsboken avsnitt 5 - Drivrutrin för grafisk display, s. 86-96. Datablad LCD Grafisk under resurser på kurshemsidan, s.14-23. Lab 3 - Drivrutiner - Enkel grafik Lab 5
Programmering av grafisk display
Programmering av grafisk display Arbetsboken avsnitt 5 - Drivrutrin för grafisk display, uppg. 5.10-5.16. Datablad LCD Grafisk under resurser på kurshemsidan, s.14-23. Lab 3 - Drivrutiner - Enkel grafik
Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3
LCD Display och Grafik Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3 Målsättning: Efter lektionen ska alla självständigt kunna slutföra
Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe
Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering
Ulf Assarsson. Grundläggande C-programmering del 3. Läromoment: Grundläggande C-programmering del 3
Grundläggande C-programmering del 3 Ulf Assarsson Läromoment: Grundläggande C-programmering del 3 enum, union, byte-adressering med unions, include-guards Pekare och arrayer, 2D-arrayer dubbelpekare Kopplat.ll:
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
Funktionens deklaration
Funktioner - 1 Teknik för stora program #include #include......... cout
Det finns många flaggor till g++,
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se Inge Frick, inge@nada.kth.se Alexander Baltsatsis hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m.
Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe
Pekare och Arrayer Ulf Assarsson Originalslides av Viktor Kämpe Pekare Pekarens värde är en adress. Pekarens typ berä>ar hur man tolkar bitarna som finns på adressen. char str[] = "apa"; char* p = &str[0];
Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs 2007 www.hh.se/staff/vero/programmering. Verónica Gaspes. IDE-sektionen.
Programmering Sommarkurs 2007 www.hh.se/staff/vero/programmering Verónica Gaspes IDE-sektionen Juni 14 Utkast 1 Recap 2 Mera om nya typer 3 Kort 4 Fält Recap Man kan ge namn till typer. Vi undersökte enum
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
Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström
DST 1 Nicholas Wickström IDE, Högskolan i Halmstad 2009 1 Outline 1 Vad är Hårdvara? (Datorsystemmodell; processor m. periferi, IO, Minne) Typiskt för hårdvarunära programmering (datablad, register, datastrukturer,...)
Grundläggande C-programmering
Grundläggande C-programmering - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, typedef, #define, struct, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer,
Typkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
Structs och funktionspekare
Grundläggande C-programmering del 3 Structs och funktionspekare Ulf Assarsson Läromoment: Structs, pekare till structs (pilnotation), array av structs, Portadressering med structs Funktionspekare, structs
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 1 Daniel Aarno bishop@kth.se Översikt övning 1 Kompilering och länkning Makefile Preprocessordirektiv Funktioner Funktionen main() Datatyper Minneshantering Pekare
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
Föreläsning 3: Booleans, if, switch
TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta
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
En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK.
2 1 0 / ) - & 9 > ; 7 * ( ) ) En klass behöver både deklaration och definition Deklaration i h (hh) och definition i cc (cpp) Private är förvalt Student::learn() Student::Student() Student::~Student()
Att använda pekare i. C-kod
Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare
TDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
Ulf Assarsson. Grafisk display + seriekommunika3on (USART) Läromoment: USART Grundläggande C-programmering del 2
Grafisk display + seriekommunika3on (USART) Ulf Assarsson Läromoment: USART Grundläggande C-programmering del 2 Pekare portadressering med structs structs med funk.onspekare Kopplat.ll: Arbetsbok avsni5:
Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Underprogram - Funktioner Eric Elfving Institutionen för datavetenskap 18 september 2014 Översikt 2/22 Återblick till satsblocken Funktioner - Namngivna satsblock
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
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
Programbibliotek. Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek
Programbibliotek Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek Programbibliotek 1 Programbibliotek Programbibliotek 2 Programbibliotek
Enkla datatyper minne
Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in
Övning från förra gången: readword
(9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver
grundläggande C++, funktioner m.m.
C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel Ett enkelt program i C++, hello.cpp #include
Föreläsning 10. Pekare (Pointers)
Föreläsning 10 Pekare (Pointers) Dagens kluringar int a=5; int f(int b) a--; b++; return b; int main() int a=3; printf("%d,",f(a)); printf("%d",a); return 0; int f(int a) if(a==1) return a; else return
Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
F5: Högnivåprogrammering
1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data
Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1
Ett enkelt program i C++, hello.cpp C++, Övning 1 Jonas Sjöbergh, jsh@nada.kth.se hur man kompilerar och kör make preprocessor minnesallokering, pekare grundläggande C++, funktioner m.m. ett exempel int
Assemblerprogrammering - fördjupning
Assemblerprogrammering - fördjupning Ur innehållet: Trampoliner tabellerade funktionsadresser Aktiveringspost med ARM Cortex M4 Mer om parameteröverföring Registerspill Kodgenerering - ISA "Kodoptimering"
C++-programmets beståndsdelar
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ
orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]
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 (
Byggstenar. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Grundläggande datatyper
C++-programmets beståndsdelar Ett C++-program är uppdelat i headerfiler (fil.h) och implementationsfiler (fil.cpp) Programmet måste innehålla åtminstone funktionen int main() main() startar programmet
EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)
EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) 1. Motivation ROM. 8kbyte 2 3 2 10 byte 13 Adressbitar [A12,A0] direkt till ROM-kapsel. RWM. 32kbyte 2 5 2 10 byte 15 Adressbitar
Arrays (indicerade variabler) Föreläsning 6
Arrays (indicerade variabler) Föreläsning 6 Dagens kluring int i; scanf("%d", &i); switch(i) case 1: printf("1"); case 2: printf("2"); case 3: printf("3"); break; case 4: printf("4"); break; case 5: printf("5");
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Programbibliotek. Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek
Programbibliotek Ur innehållet: Olika typer av bibliotek Kompilatorbibliotek C-bibliotek Run-time miljö Så skapar du ett nytt bibliotek Läsanvisningar: Arbetsbok kapitel 8 Programbibliotek 1 Programbibliotek
Första exemplet. Kompilator & länkare. Projekt. Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, Ronnie Johansson,
Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, 2003 09 11 Ronnie Johansson, rjo@nada.kth.se Vi kommer att titta på: Kompilering och länkning make och Makefile Preprocessordirektiv main() funktionen
F5: Högnivåprogrammering
F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via
2D1387, Programsystemkonstruktion med C++ Johnny Bigert, Kursens hemsida:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Slide 1 2D1387, Programsystemkonstruktion med C++ Johnny Bigert, johnny@nada.kth.se Kursens hemsida: http://www.nada.kth.se/kurser/kth/2d1387 Varför vill
Objektorientering i liten skala
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2012-10-24 Objektorientering i liten skala Mål I denna lab skall du skriva ett objektorienterat program. Programmet skall delas
Programmering av inbyggda system
GPIO, In- och utmatning Demonstration och konsultation ST407 GPIO konfigurering och användning Arbetsbokens avsnitt 4 och 5 LCD ASCII-display Keyboard Introduktion till laboration 2 Demonstrationsövning
Tillämpad programmering
Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout
Grundläggande C-programmering del 1 - För maskinorienterad programmering
Grundläggande C-programmering del 1 - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer, Läromoment för hemuppgifterna
Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe
Pekare och Arrayer Viktor Kämpe Pekare Pekarens värde är en adress. Pekarens typ berättar hur man tolkar bitarna som finns på adressen. unsigned char* pek 0x3026 0x3026 0110 0001 typ värdet är en adress...
Assemblerprogrammering för ARM del 2
Assemblerprogrammering för ARM del 2 Ur innehållet Programflöde Subrutiner, parametrar och returvärden Tillfälliga (lokala) variabler Läsanvisningar: Arbetsbok kap 2 Quick-guide, instruktionslistan Assemblerprogrammering
Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 1 Karl Palmskog palmskog@kth.se september 2010 Programuppbyggnad Klassens uppbyggnad en C++-klass består av en deklaration och en definition deklaration vanligtvis
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Arrays (indicerade variabler) Föreläsning 4
Arrays (indicerade variabler) Föreläsning 4 Dagens kluring Hitta felet (ska skriva ut 10,9,8,7,6,5,4,3,2,1): int n; for(n=10;n0;n--) for(m=0;m
Grundläggande C-programmering del 1 - För maskinorienterad programmering
Grundläggande C-programmering del 1 - För maskinorienterad programmering Ulf Assarsson Läromoment: Datatyper, arrayer, synlighet Preprocessing, kompilering, länkning IDE,.c- /.h-filer, Läromoment för hemuppgifterna
TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET
UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt
E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I
E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition Kurs: 1dv403 Webbteknik I Johan Leitet E02 - "The Review" Dagens agenda Identifierare Kommentarer Variabler Datatyper Operatorer Villkorssatser
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenska Tentamen EDAF30 Programmering i C++ 2015 05 06, 8.00 13.00 Hjälmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna. Du
En kort text om programmering i C.
En kort text om programmering i C C skapades 1972 av Brian Ritchie och Dennis Kerighan på Bell Labs i USA Det blev det språk som är mest använt genom tiderna Det finns många olika språk Pascal, FORTH,
Föreläsning 6: Metoder och fält (arrays)
TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden
Föreläsning 4 IS1300 Inbyggda system
Föreläsning 4 IS1300 Inbyggda system Programutveckling Exempel PingPong Idé Tillståndsdiagram State machine Skapa projekt Testning av programvara Peripheral Library till STM32 Programmeringsuppgiften RS232
Assemblerprogrammering, ARM-Cortex M4 del 3
Assemblerprogrammering, ARM-Cortex M4 del 3 Ur innehållet: Fler pekartyper Användning av stacken Lagringsklasser, synlighet - lokala variabler Funktioner - returvärden och parametrar Läsanvisningar: Arbetsbok
Kapitel 1. C++-programmets beståndsdelar. C++-programmets beståndsdelar. Kapitel 1 grunderna i C++
Kapitel 1 Grunderna i C++ Kapitel 1 grunderna i C++ C++-programmets beståndsdelar Datatyper Funktioner och funktionsanrop Sammansatta datatyper Pekare, aritmetik och referenser Minneshantering, preprocessorn
Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare
Funktionspekare, inledning: funktionsanropsmekanismen Vid funktionsanrop läggs aktuella argumentvärden och återhoppsadressen på stacken, därefter sker ett hopp till adressen för funktionens första instruktion.
EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.
EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade
BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag
HI1024 TEN2 2013-10-28 Betygsgränser: Fx-8, E-9, D-11, C-12, B-14, A-16 (MAX-18) Generella rättningsnormer: Mycket dåliga variabelnamn ger -1p totalt på provet vid andra tillfället Inga eller dåliga kommentarer
Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning
Övning 3 i 2D1324 Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning Avancerad c-programering och repetition Typisk h-fil #ifndef special_a
F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander
F4 Klasser och Metoder ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Klasser och objekt Klasser definierar (utgör idén) Objekt instantierar (utgör förekomsten) En klassdefinition Många
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
Grundkurs Programmering
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 = + - * / % ++ -- + - * / % & ^ > ==!= > < >=
Symboliska konstanter const
(5 oktober 2010 T11.1 ) Symboliska konstanter const Tre sätt som en preprocessormacro med const-deklaration med enum-deklaration (endast heltalskonstanter) Exempel: #define SIZE 100 const int ANSWER =
Funk%oner. Vad är det och hur definierar vi en Top- down- programmering lokala globala variabler void och flera inparametrar
Funk%oner Vad är det och hur definierar vi en Top- down- programmering lokala globala variabler void och flera inparametrar OBS! Till nästa gång läs igenom problemlösning 1 och skissa på lösningar! Problemlösning
Exempel ( )
Exempel Antag att vi vill ha en generell stack. En stack är en mekanism som man kan lagra i och hämta från enligt principen sist in, först ut (eng LIFO). Man skall alltså kunna Skapa en stack Lägga värden
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer C++ - en introduktion Eric Elfving Institutionen för datavetenskap 1 / 72 Översikt 1 Grunderna 2 Uttryck och satser 3 Funktioner 4 Poster 1 Grunderna Ett första
Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,
Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1 Fredagen den 11 mars 2011, 13.15 17.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika
Poster ( structar ) Postdeklarationer
Poster ( structar ) Exempel på en postdeklaration: struct person { int id; char namn[20]; int vikt, skonr; p1, p2; Detta definierar två variabler p1 och p2 som poster med termerna id, namn, vikt och skonr.
Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.
5(16) Tentamen på kurserna Programmeringsteknik med C och Matlab Programmering i C Tid: 2/11-11, kl. 9-13 Lärare: Jonny Pettersson Totalt: 60 poäng Betyg 3: 30 poäng Betyg 4: 39 poäng Betyg 5: 48 poäng
OOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)
TDDI82 - Projekt Christoffer Holm Institutionen för datavetenskap (IDA) 1 Projektkrav 2 Projektplannering 3 Spelutveckling 1 Projektkrav 2 Projektplannering 3 Spelutveckling 3 / 26 Upplägg Spåna projektidé
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
Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser
Innehåll EDAF30 Programmering i C++ Resurshantering. Objektorientering. Klasser. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Typdeklarationer och typomvandling 2 Resurshantering Stack-allokering Heap-allokering:
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
tentamensdags och lab 3
tentamensdags och lab 3 Större program delas normalt upp i flera filer/moduler vilket har flera fördelar: Programmets logiska struktur när man klumpar ihop funktioner som hör ihop (och ibland också struct-def
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,
Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman
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
Operativsystem (IS1350) :00-12:00
Operativsystem (IS1350) 2017-03-15 08:00-12:00 Namn: Instruktioner Betyg Du får endast ha med dig skrivmateriel. Mobiler etc skall lämnas till tentamensvakterna. Svaren skall lämnas på dessa sidor, använd
Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA
Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande