Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avBarbro Andersson
1
1 Objektorienterad programmering för ingenjörer, VT04 Kort repetition av C-programmering och nyttiga verktyg. Tomas Larsson tomasl@cs.umu.se B439
2
2 Innehåll Grundläggande C. Grundläggande DOA. Kompilering. Debuggers. UML-verktyg. Problemlösningsuppgifter – gruppövning. Palindrom. Rekursiv/Iterativ fibonacci. Kö implementerat med en array. Summera en sekvens av tal.
3
3 Grundläggande C Förkunskaper C Operatorer. Datatyper. Villkorssatser. Funktioner och separatkompilering. Arrayer, pekare, strängar. Strukturer.
4
4 Grundläggande C Repetition structs. typedef struct { double re; double im; } complex; complex c1, *c2; /* Åtkomst */ c1.re = 2.3; c2->re = 3.4; (*c2).im = 3.6;
5
5 Grundläggande C Repetition enum. typedef enum {hearts, spades, diamonds, clubs} suit_name; Typedef card { int val; suit_name suit; } card; /* Tilldelning */ card deck[52]; deck[0].val = 1; deck[0].suit = hearts; deck[0].suit += 5; /* Giltigt, men indexerar utanför enum */
6
6 Grundläggande C Rekursion. Fyra grundregler: Basfall: Basfall som löses utan rekursion. Framsteg: För alla steg som ska lösas rekursivt är strävan att nå basfallet. Designregel: Alla rekursiva anrop fungerar (induktion). Samansatta intresseregeln: Lös aldrig samma instans av ett problem i separata rekursiva anrop (fibonacci). Rekursion vs. Induktion. Rekursion ger enkla algoritmer. Rekursion ej lämpligt för numeriska beräkningar.
7
7 Grundläggande C Pekare. complex* test(complex* x) { /* Imaginärt test */ ; } /*Tips: Pekarvariabler börjar på p */ complex *p_cmp cmp; *p_cmp = &cmp; /* Call by reference */ p_cmp = test(p_cmp); p_cmp = test(&cmp); /* Skicka in adressen av cmp. */
8
8 Grundläggande C Minnesallokering. #include complex *p_cmp; p_cmp = malloc(sizeof(complex));... free(p_cmp); /* Glöm ej frigöra minnet! */ Dynamiska datastrukturer.
9
9 DOA ADTs. (Listor, stackar, köer.). Träd. Hashing. Prioritetsköer (Heaps). Sortering. Grafalgoritmer.
10
10 DOA Träd. En rot, flera noder. Binärt träd. Varje nod kan ha max två barn. Exempel: Binärt sökträd. Operationer: find, findMax, findMin, insert, remove.
11
11 DOA AVL-träd. Problem med binära träd: Obalans som ger linjär sökning. Lösning: AVL-träd. Avstånd mellan grundaste och djupaste noden är max 1. AVL-träd == binärt sökträd med en balansfunktion. Single rotation och Double rotation.
12
12 DOA Hashing. Utföra insert, delete och find i konstant tid. (findMin, findMax, printSorted kan ej utföras i linjär tid). Hashtabell och hashfunktion. Ex: hash(x) = x mod 10. Separate chaining.
13
13 DOA Hashing (forts) Open addressing. OBS! Tabellstorleken bör vara primtal! Effektivare än Separate Chaining eftersom listor ej används. Rehash. Olika funktioner för att klara av krockar. Linear probing, Quadratic probing, Double hashing. EmptyAfter 1After 38After 18After 25After 71 0 1 11111 2 71 3 4 5 25 6 7 8 38 9 18
14
14 DOA Prioritetskö (heap). Definition: A heap is a tree for which any node v has a key that is smaller (or equal) than the keys of all its children (if any). Mycket enkelt hitta minsta elementet i trädet. Går implementera som array. delete(node v) if v has no children, then remove v and return; else, let w be the child of v with the smallest key; set v = w; delete(w); Insert(node v) Create a hole in the next available location. If v can be placed without violating the heap order, then done. Otherwise, while the parent u > v; swap(u,v);
15
15 DOA Sorteringsalgoritmer. Bubble sort – Enkel att implementera. Oeffektiv. O(N^2). Merge sort – O(N * log N). Quicksort – O(N * log N) [ worst case O(N^2)]. 1 Om elementen i en array S är 0 eller 1, return. 2 Välj ett pivotelement v i S. 3 Partitionera S – {v} i två disjunkta grupper S1 och S2. 4 Return { quicksort(S1) v quicksort(S2) }. Insertion sort – Enkel algoritm. Ex insertionsort(int a[10]). for (int i=1; i < 10; i++){ int tmp = a[i]; for (int j=i; j > 0 && (tmp < a[j-1]); j--) a[j] = a[j-1]; a[j] = tmp; }
16
16 DOA Grafalgoritmer. G(V,E) Graf med hörn (vertices) och kanter (edges). Representeras med adjacency list eller adjacency matrix. Algoritmer: Unweighted shortest path. Dijkstra (weighted shortest path). v1v2v3v4 v10 1 v240 5 v3 20 v4 0
17
17 Kompilering g++ / gcc. Flaggor: gcc -Wall –g -pedantic -o hello hello.c Separatkompilering: gcc –c hello.c gcc –o hello hello.o Programkörning:./hello !!! gcc –o hello.c hello.c == Förstör hello.c !!!
18
18 Kompilering (forts) Makefiles: CC = g++ CFLAGS = -g -Wall OBJS = prime.o hash.o filehandler.o simulate.o PROG = p1 p1 : $(OBJS) $(CC) $(CFLAGS) -o p1 $(OBJS) prime.o : prime.cpp prime.h $(CC) $(CFLAGS) -c prime.cpp filehandler.o : filehandler.cpp filehandler.h $(CC) $(CFLAGS) -c filehandler.cpp hash.o : hash.cpp hash.h $(CC) $(CFLAGS) -c hash.cpp simulate.o : simulate.cpp simulate.h $(CC) $(CFLAGS) -c simulate.cpp clean : rm -f $(OBJS) $(PROG) core
19
19 Debuggers GDB. Debugga c/c++ kod. Kompilera med –g flaggan. DDD. Grafisk front-end till GDB.
20
20 UML UML-verktyg. Violet. Class diagrams. Sequence diagrams. State diagrams. Object diagrams. Dia. A diagram drawing program. Rational Rose. Kommersiellt. Import/export. Reverse engineering. ArgoUML. Gratis.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.