Mere om tilfældige tal

Størrelse: px
Starte visningen fra side:

Download "Mere om tilfældige tal"

Transkript

1 Denne guide er oprindeligt udgivet på Eksperten.dk Mere om tilfældige tal Denne artikel bygger oven på den forrige artikel om tilfældige tal. Den forudsætter at man har læst den forrige artikel og har et vist kendskab til matematik. Skrevet den 14. Feb 2010 af arne_v I kategorien Programmering / Generelt Historie: V1.0-23/05/ original V1.1-29/12/ tilføj links V1.2-12/02/ smårettelser Tænke sig godt om Forrige artikel "Tilfældige tal" har forhåbentligt gjordt det klart at man skal tænke sig godt om i forbindelse med bruge af tilfældige tal generatorer. Man skal: 1) vælge en god algoritme 2) vælge en fornuftig initialisering af algoritmen 3) undlade at ødelægge algoritmen med uheldige transformeringer Med hensyn til #1 så er det bedste at finde en kendt algoritme som diverse matematikere ha sagt god for, det næstbedste er at basere sig på at den indbyggede tilfældige tal generator i ens sprog er god nok mens det dårligste er at forsøge at brygge noget sammen selv. Med hensyn til #2 så skal man tænke sig godt om. Jeg kommer om lidt med yderligere et eksempel. Med hensyn til #3 så skal man lade være med at transformere mere en allerhøjest nødvendigt. Punktum. Når det drejer sig om initialisering så er det vigtigt at forstå at den rigtige initialisering afhænger af konteksten. I alle de foregående eksempler har jeg brugt tiden. Det er også meget godt til mange formål. Lad os tage et par eksempler fra Poker (det er jo meget moderne). Hvor stor er sandsynligheden for at få en flush (5 kort af samme farve)? For nemheds skyld inkluderer vi straight flush og royal straight flush

2 i statistikken. Poker1.java import java.util.arraylist; import java.util.list; import java.util.random; public class Poker1 private static Random rng = new Random(System.currentTimeMillis()); private List deck; public Poker1() deck = new ArrayList(); for(int i = 0; i < 52; i++) deck.add(new Integer(i)); public int takecard() Integer card = (Integer)deck.remove(rng.nextInt(deck.size())); return card.intvalue(); public int[] takehand() int[] res = new int[5]; for(int i = 0; i < 5; i++) res[i] = takecard(); return res; public static int getcolour(int card) return (card / 13); public static int getvalue(int card) return (card % 13); public static boolean isflush(int[] hand) if((getcolour(hand[0]) == getcolour(hand[1])) && (getcolour(hand[1]) == getcolour(hand[2])) && (getcolour(hand[2]) == getcolour(hand[3])) && (getcolour(hand[3]) == getcolour(hand[4]))) return true; else return false; private static final int REP = ; private static final int PLAYERS = 4; public static void main(string[] args) int nflush = 0; int[] hand = new int[5]; for(int i = 0; i < REP; i++) Poker1 game = new Poker1(); for(int j = 0; j < PLAYERS; j++) if(poker1.isflush(game.takehand()))

3 nflush++; System.out.println(PLAYERS*REP/(double)nflush); Programmet udskriver et tal som i de fleste tilfælde vil ligge mellem 500 og 510, hvilket passer meget fint da den ægte sandsynlighed er 1 ud af 505. Med andre ord virker vores tilfældige tal generator glimrende. Så er vi vel klar til at lave et poker spil? Poker2.java import java.util.arraylist; import java.util.list; import java.util.random; public class Poker2 private static Random rng = new Random(System.currentTimeMillis()); private List deck; public Poker2() deck = new ArrayList(); for(int i = 0; i < 52; i++) deck.add(new Integer(i)); public int takecard() Integer card = (Integer)deck.remove(rng.nextInt(deck.size())); return card.intvalue(); public int[] takehand() int[] res = new int[5]; for(int i = 0; i < 5; i++) res[i] = takecard(); return res; public static int getcolour(int card) return (card / 13); public static int getvalue(int card) return (card % 13); private static final int PLAYERS = 4; public static void main(string[] args) int[][] hand = new int[players][5];

4 Poker2 game = new Poker2(); for(int i = 0; i < PLAYERS; i++) hand[i] = game.takehand(); for(int j = 0; j < 5; j++) System.out.print(" " + hand[i][j]); System.out.println(); Eksempel på output: Forskellige statistiske test på de hænder vil se OK ud. Men prøv lige og check det her program. Poker3.java import java.util.arraylist; import java.util.arrays; import java.util.list; import java.util.random; public class Poker3 private Random rng; private List deck; public Poker3(long seed) rng = new Random(seed); deck = new ArrayList(); for(int i = 0; i < 52; i++) deck.add(new Integer(i)); public int takecard() Integer card = (Integer)deck.remove(rng.nextInt(deck.size())); return card.intvalue(); public int[] takehand() int[] res = new int[5]; for(int i = 0; i < 5; i++) res[i] = takecard();

5 return res; public static int getcolour(int card) return (card / 13); public static int getvalue(int card) return (card % 13); public static boolean issamehand(int[] h1, int[] h2) int[] h1x = (int[])h1.clone(); int[] h2x = (int[])h2.clone(); Arrays.sort(h1x); Arrays.sort(h2x); if((h1x[0] == h2x[0]) && (h1x[1] == h2x[1]) && (h1x[2] == h2x[2]) && (h1x[3] == h2x[3]) && (h1x[4] == h2x[4])) return true; else return false; private static final int PLAYERS = 4; public static void main(string[] args) int[] myhand = 8, 36, 4, 18, 16 ; int[][] hand; long seed = System.currentTimeMillis(); while(true) hand = new int[players][5]; Poker3 game = new Poker3(seed); for(int i = 0; i < PLAYERS; i++) hand[i] = game.takehand(); if(poker3.issamehand(myhand, hand[0])) break; seed--; for(int i = 0; i < PLAYERS; i++) for(int j = 0; j < 5; j++) System.out.print(" " + hand[i][j]); System.out.println(); Output:

6 Udfra sin egen hånd og kendskab til koden i Poker2.java kan man på få sekunder regne ud hvad de andre sidder med af kort. Ikke smart. Problemet er at initialisering med tid er godt nok til at give en pæn statistisk fordeling. Men det er ikke godt nok til at forhindre andre i at genskabe sekvensen af tilfældige tal. der er altså forskel på gode statistiske egenskaber og det at være svær/umulig at forudsige. Hvis man f.eks. kørte på Linux kunne man lave en: ps aux > md5.txt på serveren og så læse md5.txt ind og beregne MD5 hash af den. Den vil være meget sværere at gætte end tiden. De fleste større biblioteker (inkl. Java og.net) har såkaldte secure random number generatorer, som er svære at forudsige. De findes normalt sammen med kryptografi funktionerne. Lidt teori Langt den mest udbredte algoritme til generering af tilfældige tal er LCG (Linear Congruential Generator): x(i) = (a*x(i-1) + b) mod c Den har så en specialisering MLCG (Multiplicative Linear Congruential Generator): x(i) = (a*x(i-1)) mod c Og en generalisering MRG (Multiple Recursive Generator): x(i) = (a1*x(i-1) + a2*x(i-2) an*x(i-n) + b) mod c Når man skal generere et tilfældigt heltal 0..N-1 så kan man bruge x(i) direkte hvor N=c. Nogle gange vil man dog bruge x(i)>>m for at smide nogle af low bits væk. Det er en kendt svaghed ved LCG at low bits er mindre tilfældige end high bits. Når man skal generere et tilfældigt decimal tal (hvor 0.0 er inklusive og 1.0 eksklusive) så kan man bruge x(i)/n. Et nøgle begreb er cycle. Efter at have genereret et antal tilfældige

7 tal vil disse algoritmer altid starte forfra og gentage samme sekvens. Cycle angiver hvormange tilfældige tal de kan generere førend de begynder at gentage sig selv. Det er absolut nødvendigt at en cycle er stor nok for en given problem stilling. Men en algoritme er ikke nødvendigvis bedre fordi den har større cycle. Man kan betragte en algoritme som en serie af tal skrevet i en cirkel. Initialiseringen (seed) bestemmer hvor man starter i cirklen. Cycle fortæller hvor mange tal der er i cirklen. Det er indlysende at for en LCG kan cycle aldrig være større end c. Det er bevist at hvis c er en potens af 2, så vil cycle være c, hvis: - a mod 4 er 1 - b er ulige Nogle af de kendte navne indenfor tilfældige tal algoritmer er: Knuth, Marsaglia og L'Ecuyer. Inden vi kaster os over algoritmerne skal vi lige se en lille fix omskrivning som tit er nødvendig for LCG for at undgå integer overflow som enten kan give fejl eller negative tal. rewrite2.c #include <stdio.h> static long int seed1; void mysrand1(long int ss) seed1 = ss; return; long int myrand1() long long int tmp = seed1; tmp = (3125LL * tmp) % LL; seed1 = tmp; return seed1; static long int seed2; void mysrand2(long int ss) seed2 = ss; return;

8 long int myrand2() seed2 = (3125L * seed2) % L; return seed2; static long int seed3; void mysrand3(long int ss) seed3 = ss; return; long int myrand3() long int help1 = L % 3125L; long int help2 = L / 3125L; long int tmp = 3125L * (seed3 % help2) - help1 * (seed3 / help2); if(tmp >= 0) seed3 = tmp; else seed3 = tmp L; return seed3; int main() int i; mysrand1( ); mysrand2( ); mysrand3( ); for(i=0;i<20;i++) printf("%d %d %d\n",myrand1(),myrand2(),myrand3()); return 0; Output:

9 Nogle anerkendte algoritmer Nu vil jeg vise 4 af de rimeligt anerkendte tilfældige tal generatorer i objektorienteret framework i både Java og C#. RNG.java abstract public class RNG abstract public int getint(); abstract public int getmaxint(); public double getdouble() return (getint() / (double)getmaxint()); LCG.java public class LCG extends RNG private long a; private long b; private long c; private long seed; public LCG(int a, int b, int c, int seed) this.a = a; this.b = b; this.c = c; this.seed = seed; public int getint() seed = (a * seed + b) % c; return (int)seed; public int getmaxint() return (int)c;

10 MRG.java public class MRG extends RNG private long[] a; private long b; private long c; private long[] seed; public MRG(int[] a, int b, int c, int[] seed) this.a = new long[a.length]; for(int i = 0; i < a.length; i++) this.a[i] = a[i]; this.b = b; this.c = c; this.seed = new long[seed.length]; for(int i = 0; i < seed.length; i++) this.seed[i] = seed[i]; public int getint() long tmp = 0; for(int i = 0; i < a.length; i++) tmp = tmp + a[i] * seed[i]; tmp = tmp + b; tmp = tmp % c; for(int i = 1; i < seed.length; i++) seed[i] = seed[i-1]; seed[0] = tmp; return (int)seed[0]; public int getmaxint() return (int)c; MLCG.java public class MLCG extends LCG public MLCG(int a, int c, int seed) super(a, 0, c, seed); MinStd.java Minimal Standard algoritme Oprindeligt foreslået af Lewis, Goodman & Miller 1969, men populariseret af Park & Miller CACM Oct 1988.

11 Navnet har den fordi man aldrig bør vælge en algoritme som er dårligere end denne. cycle = = 2^31-1 public class MinStd extends MLCG public MinStd(int seed) super(16807, , seed); LEcuyer.java L'Ecuyer algoritme Ecuyer & Blouin & Coutre ACM Simulations cycle = ca. 1E46 public class LEcuyer extends MRG public LEcuyer(int[] seed) super(new int[] , 0, 0, 0, , 0, , seed); Combiner.java public interface Combiner public int combine(int[] num); public int getmaxint(); Combined.java public class Combined extends RNG private RNG[] g; private Combiner cmbn; public Combined(RNG[] g, Combiner cmbn) this.g = g; this.cmbn = cmbn; public int getint() int[] num = new int[g.length];

12 for(int i = 0; i < num.length; i++) num[i] = g[i].getint(); return cmbn.combine(num); public int getmaxint() return cmbn.getmaxint(); Uniform32.java Uniform32 algoritme L'Ecuyer CACM Jun cycle = ca. 2.31E18 public class Uniform32 extends Combined public Uniform32(int seed1, int seed2) super(new RNG[] new MLCG(40014, , seed1), new MLCG(40692, , seed2), new Uniform32Combiner()); class Uniform32Combiner implements Combiner public int combine(int[] num) long tmp = num[0] - num[1]; tmp = (tmp ) % ; return (int)tmp; public int getmaxint() return ; CMRG.java CMRG algoritme L'Ecuyer Operations Research cycle = 2^205 = 1E61 public class CMRG extends Combined public CMRG(int[] seed1, int[] seed2) super(new RNG[] new MRG(new int[] 0, 63308, , 0,

13 , seed1), new MRG(new int[] 86098, 0, , 0, , seed2), new CMRGCombiner()); class CMRGCombiner implements Combiner public int combine(int[] num) long tmp = num[0] - num[1]; tmp = (tmp ) % ; return (int)tmp; public int getmaxint() return ; Test.java public class Test public static void main(string[] args) testminstd(); testuniform32(); testlecuyer(); testcmrg(); private static void testminstd() MinStd rng = new MinStd( ); for(int i = 0; i < 10; i++) System.out.println(rng.getInt()); for(int i = 0; i < 10; i++) System.out.println(rng.getDouble()); private static void testuniform32() Uniform32 rng = new Uniform32( , ); for(int i = 0; i < 10; i++) System.out.println(rng.getInt()); for(int i = 0; i < 10; i++) System.out.println(rng.getDouble()); private static void testlecuyer() LEcuyer rng = new LEcuyer(new int[] , , , , ); for(int i = 0; i < 10; i++) System.out.println(rng.getInt());

14 for(int i = 0; i < 10; i++) System.out.println(rng.getDouble()); private static void testcmrg() CMRG rng = new CMRG(new int[] , , , new int[] , , ); for(int i = 0; i < 10; i++) System.out.println(rng.getInt()); for(int i = 0; i < 10; i++) System.out.println(rng.getDouble()); RNG.cs abstract public class RNG abstract public int GetInt(); abstract public int MaxInt get; public double GetDouble() return (GetInt() / (double)maxint); public class LCG : RNG private long a; private long b; private long c; private long seed; public LCG(int a, int b, int c, int seed) this.a = a; this.b = b; this.c = c; this.seed = seed; public override int GetInt() seed = (a * seed + b) % c; return (int)seed; public override int MaxInt

15 get return (int)c; public class MRG : RNG private long[] a; private long b; private long c; private long[] seed; public MRG(int[] a, int b, int c, int[] seed) this.a = new long[a.length]; for(int i = 0; i < a.length; i++) this.a[i] = a[i]; this.b = b; this.c = c; this.seed = new long[seed.length]; for(int i = 0; i < seed.length; i++) this.seed[i] = seed[i]; public override int GetInt() long tmp = 0; for(int i = 0; i < a.length; i++) tmp = tmp + a[i] * seed[i]; tmp = tmp + b; tmp = tmp % c; for(int i = 1; i < seed.length; i++) seed[i] = seed[i-1]; seed[0] = tmp; return (int)seed[0]; public override int MaxInt get return (int)c; public class MLCG : LCG public MLCG(int a, int c, int seed) : base(a, 0, c, seed) Minimal Standard algoritme

16 Oprindeligt foreslået af Lewis, Goodman & Miller 1969, men populariseret af Park & Miller CACM Oct Navnet har den fordi man aldrig bør vælge en algoritme som er dårligere end denne. cycle = = 2^31-1 public class MinStd : MLCG public MinStd(int seed) : base(16807, , seed) L'Ecuyer algoritme Ecuyer & Blouin & Coutre ACM Simulations cycle = ca. 1E46 public class LEcuyer : MRG public LEcuyer(int[] seed) : base(new int[] , 0, 0, 0, , 0, , seed) public interface Combiner int Combine(int[] num); int MaxInt get; public class Combined : RNG private RNG[] g; private Combiner cmbn; public Combined(RNG[] g, Combiner cmbn) this.g = g; this.cmbn = cmbn; public override int GetInt() int[] num = new int[g.length]; for(int i = 0; i < num.length; i++) num[i] = g[i].getint();

17 return cmbn.combine(num); public override int MaxInt get return cmbn.maxint; Uniform32 algoritme L'Ecuyer CACM Jun cycle = ca. 2.31E18 internal class Uniform32Combiner : Combiner public int Combine(int[] num) long tmp = num[0] - num[1]; tmp = (tmp ) % ; return (int)tmp; public int MaxInt get return ; public class Uniform32 : Combined public Uniform32(int seed1, int seed2) : base(new RNG[] new MLCG(40014, , seed1), new MLCG(40692, , seed2), new Uniform32Combiner()) CMRG algoritme L'Ecuyer Operations Research cycle = 2^205 = 1E61 internal class CMRGCombiner : Combiner public int Combine(int[] num)

18 long tmp = num[0] - num[1]; tmp = (tmp ) % ; return (int)tmp; public int MaxInt get return ; public class CMRG : Combined public CMRG(int[] seed1, int[] seed2) : base(new RNG[] new MRG(new int[] 0, 63308, , 0, , seed1), new MRG(new int[] 86098, 0, , 0, , seed2), new CMRGCombiner()) Test.cs using System; public class Test public static void Main(string[] args) TestMinStd(); TestUniform32(); TestLEcuyer(); TestCMRG(); private static void TestMinStd() MinStd rng = new MinStd( ); for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetInt()); for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetDouble()); private static void TestUniform32() Uniform32 rng = new Uniform32( , );

19 for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetInt()); for(int i = 0; i < 10; i++ ) Console.WriteLine(rng.GetDouble()); private static void TestLEcuyer() LEcuyer rng = new LEcuyer(new int[] , , , , ); for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetInt()); for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetDouble()); private static void TestCMRG() CMRG rng = new CMRG(new int[] , , , new int[] , , ); for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetInt()); for(int i = 0; i < 10; i++) Console.WriteLine(rng.GetDouble()); Ikke uniformt fordelte Alt hidtil har drejet sig om uniformt fordelte tal, men der er jo også sommetider brug for andre fordelinger. Imidlertid kan de som oftest laves udfra uniform fordelte tal. Hvis man f.eks. skal bruge et normal fordelt tal, så kan man bruge den såkaldte Box Mueller transformation. u1 og u2 er uniform fordelte h1 = sqrt(-2*log(u1)); h2 = 2*PI*u2

20 n1 = e + s*h1*sin(h2) n2 = e + s*h1*cos(h2) så vil n1 og n2 være normal fordelte N(e,s) Normal.cs using System; public class Normal public const int N = ; public static void Test(double e, double s) Random rng = new Random(); int[] one1 = new int[4]; int[] one2 = new int[4]; for(int i=0; i<n; i++) double u1 = rng.nextdouble(); double u2 = rng.nextdouble(); double h1 = Math.Sqrt(-2*Math.Log(u1)); double h2 = 2*Math.PI*u2; double n1 = e + s*h1*math.sin(h2); double n2 = e + s*h1*math.cos(h2); if(n1<e-1.96*s) one1[0]++; else if(n1<e) one1[1]++; else if(n1<e+1.96*s) one1[2]++; else one1[3]++; if(n2<e-1.96*s) one2[0]++; else if(n2<e) one2[1]++; else if(n2<e+1.96*s) one2[2]++;

21 else one2[3]++; for(int i=0; i<4; i++) Console.WriteLine(one1[i] + " " + one2[i]); public static void Main(string[] args) Test(0, 1); Test(7, 3); Output: Hvilket jo ser meget fornuftigt ud (det skal være 2.5% 47.5% 47.5% 2.5%). Videre Se artiklen: * "Endnu mere om tilfældige tal" som forklarer lidt mere teori og har nogle eksempler i PHP og ASP Kommentar af simonvalter d. 25. Apr meget interessant Kommentar af mikze d. 28. Apr interessant Kommentar af gaflen89 d. 03. May Selvom jeg ikke har forstand på java, så skal den da ikke have den værste karakter, da jeg kan se den beskriver det titlen.

22 Kommentar af hyberpreprocessor d. 25. Apr Kommentar af tobiasahlmo d. 10. Oct super

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Denne guide er oprindeligt udgivet på Eksperten.dk Tilfældige tal Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge. Den forudsætter

Læs mere

Endnu mere om tilfældige tal

Endnu mere om tilfældige tal Denne guide er oprindeligt udgivet på Eksperten.dk Endnu mere om tilfældige tal Denne artikel bygger oven på de to forrige artikler om tilfældige tal. Den indeholder lidt matematik og anvendelse på PHP

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Bits, bit operationer, integers og floating point

Bits, bit operationer, integers og floating point Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Denne guide er oprindeligt udgivet på Eksperten.dk Prepared Statements Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC. Skrevet den 18. Feb 2010

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter

Læs mere

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

Læs mere

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i C# Denne artikel vil vise lidt om hvordan man kan bruge XML i C#. Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

Læs mere

Hvilket sprog er hurtigst

Hvilket sprog er hurtigst Denne guide er oprindeligt udgivet på Eksperten.dk Hvilket sprog er hurtigst Denne artikel forsøger at aflive forskellige myter om hvilke sprog der er hurtigst. Den forudsætter ikke noget særligt. Skrevet

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET. Der findes en tilsvarende artikel med

Læs mere

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det.

Test med JUnit 3. Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Denne guide er oprindeligt udgivet på Eksperten.dk Test med JUnit 3 Denne artikel introducerer JUnit 3. Den forklarer ideen med JUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

At klippe en streng over på det mest hensigtsmæssige sted

At klippe en streng over på det mest hensigtsmæssige sted Denne guide er oprindeligt udgivet på Eksperten.dk At klippe en streng over på det mest hensigtsmæssige sted Formålet med denne artikel er at kaste lidt lys over, hvordan man klipper en streng over på

Læs mere

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 7 DM -. Obligatoriske Opgave Løsning af ligningssystem vha. fipunktmetoden Jacob Christiansen, 8 moffe@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense. Opgaven Der skal implementeres

Læs mere

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Send  fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende  fra Java. Denne guide er oprindeligt udgivet på Eksperten.dk Send email fra Java Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende email fra Java. Simple eksempler ikke noget vildt

Læs mere

Introduction til.net remoting i C#

Introduction til.net remoting i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i C# Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i C#. Den forudsætter kendskab

Læs mere

Kontrol-strukturer i PHP

Kontrol-strukturer i PHP Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende

Læs mere

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste Denne guide er oprindeligt udgivet på Eksperten.dk Indkøbsvogn i PHP I denne artikel vil jeg prøve at lave en indkøbskurv som let kan udvides, og som ikke er svær at forstå. Det er bedst med viden om OOP(klasser),

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Logging i Java. Den forudsætter kendskab til Java og noget generel udviklings erfaring. Denne guide er oprindeligt udgivet på Eksperten.

Logging i Java. Den forudsætter kendskab til Java og noget generel udviklings erfaring. Denne guide er oprindeligt udgivet på Eksperten. Denne guide er oprindeligt udgivet på Eksperten.dk Logging i Java Denne artikel beskriver baggrunden for logging frameworks og viser hvordan man bruger 2 af de mest almindelige: Apache Log4J og J2SE/Java

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af MySQL i C++ Denne artikel bygger ovenpå artiklen "MySQL C API" og forklarer hvordan man kan programmere mere objekt orienteret. Den forudsætter

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Nye features i Java 1.7/7.0

Nye features i Java 1.7/7.0 Denne guide er oprindeligt udgivet på Eksperten.dk Nye features i Java 1.7/7.0 Denne artikel beskriver nye features i Java 1.7/7.0, som blev releaset 28. juli 2011. Den forudsætter et vist kendskab til

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

Database design for begyndere

Database design for begyndere Denne guide er oprindeligt udgivet på Eksperten.dk Database design for begyndere Denne artikel beskriver hvordan man kommer fra ide til database design. Den stopper inden normal former. Den forudsætter

Læs mere

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET Denne guide er oprindeligt udgivet på Eksperten.dk Parameters Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til VB.NET og ADO.NET. Der findes en tilsvarende artikel

Læs mere

Undtagelseshåndtering i C#

Undtagelseshåndtering i C# Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave

Læs mere

XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM.

XML parsning i Java. Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM. Denne guide er oprindeligt udgivet på Eksperten.dk XML parsning i Java Denne artikel beskriver hvordan man parser XML i Java. Den beskriver W3C DOM, SAX og JDOM. Den forudsætter kendskab til Java og XML.

Læs mere

Nye features i Java 1.5/5.0

Nye features i Java 1.5/5.0 Denne guide er oprindeligt udgivet på Eksperten.dk Nye features i Java 1.5/5.0 Denne artikel beskriver nye features i Java 1.5/5.0, som lige er kommet i final (ikke-beta) udgave. Den forudsætter et vist

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

Introduction til.net remoting i VB.NET

Introduction til.net remoting i VB.NET Denne guide er oprindeligt udgivet på Eksperten.dk Introduction til.net remoting i VB.NET Denne artikel beskriver teorien bag.net remoting og viser nogle simple kode eksempler i VB.NET. Den forudsætter

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS.

Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS. Denne guide er oprindeligt udgivet på Eksperten.dk XML i ASP Denne artikel gennemgår kort nogle mulighederne for brug af XML i ASP. Det sker ved brug af eksempler. Eksemplerne vil være i VBS. Den forudsætter

Læs mere

Offset til terminalskærm i Java

Offset til terminalskærm i Java Denne guide er oprindeligt udgivet på Eksperten.dk Offset til terminalskærm i Java Ikke en atikkel - men en Classe til java der gør det nemt at skrive ud på avancerede måder når man kun opererer i dosvindue.

Læs mere

Introduktion til AOP i C#

Introduktion til AOP i C# Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til AOP i C# Denne artikel giver en introduktion AOP (Aspect Oriented Programming) i C#. Den forudsætter et pænt kendskab til programmering,

Læs mere

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET. Denne guide er oprindeligt udgivet på Eksperten.dk Brug af XML i VB.NET Denne artikel vil vise lidt om hvordan man kan bruge XML i VB.NET. Den forudsætter kendskab til XML og VB.NET men ikke til brug af

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Upload af billeder/filer for nybegyndere Del. 2

Upload af billeder/filer for nybegyndere Del. 2 Denne guide er oprindeligt udgivet på Eksperten.dk Upload af billeder/filer for nybegyndere Del. 2 I denne Del vil jeg ikke gaa saa dybt i fil upload som i sidste. Jeg vil i stedet forklare om funktioner

Læs mere

! "# $$ &'()*"* +*, & &"*0* & "# % %- %

! # $$ &'()** +*, & &*0* & # % %- % !"! "# $$ & &'()*"* +*, &- & &"./+0 & &"*0* & & & 1 2 ()))))$$" "# - " # $!&!!" 34 3((5(4 6()))))5 3((5# 7())))) 4 3((58 43((58 3((5#9! 3((5#4 3((584 6 9 # '"!&()!" * " 49 9-3 :; & Private Sub Workbook_Open()

Læs mere

Delphi - CrackMe og Keygen

Delphi - CrackMe og Keygen Denne guide er oprindeligt udgivet på Eksperten.dk Delphi - CrackMe og Keygen Dette er min første artikel! :) Men jeg synes nu den er blevet meget god! :D Jeg giver et et eksempel på hvordan man kan lave

Læs mere

Arkitektur for begyndere

Arkitektur for begyndere Denne guide er oprindeligt udgivet på Eksperten.dk Arkitektur for begyndere Denne artikel beskriver forskellige basale n-tier arkitekturer. Som man bør kende og have valgt inden man går igang med at udvikle

Læs mere

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

applikation----x----odbc driver manager----foobar ODBC driver----foobar database Denne guide er oprindeligt udgivet på Eksperten.dk ODBC i C/C++ Denne artikel beskriver hvordan man bruger ODBC i C/C++. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

Asymptotisk analyse af algoritmers køretider

Asymptotisk analyse af algoritmers køretider Asymptotisk analyse af algoritmers køretider Analyse af køretid Recall: Vi ønsker at vurdere (analysere) algoritmer på forhånd inden vi bruger lang tid på at implementere dem. De to primære spørgsmål:

Læs mere

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk

Database tips. Den forudsætter lidt kendskab til SQL men er for mindre erfarne. Denne guide er oprindeligt udgivet på Eksperten.dk Denne guide er oprindeligt udgivet på Eksperten.dk Database tips Denne artikel vil give nogle forskellige små praktiske råd om ting man skal tænke på når man arbejder med databaser og applikationer som

Læs mere

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det.

Test med NUnit. Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Denne guide er oprindeligt udgivet på Eksperten.dk Test med NUnit Denne artikel introducerer NUnit. Den forklarer ideen med NUnit. Og den viser hvordan man konkret bruger det. Den forudsætter kendskab

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode. Denne guide er oprindeligt udgivet på Eksperten.dk I gang med Python I denne artikel vil jeg forsøge at give et kort og hurtigt indblik i programmeringssproget Python, der desværre er alt for overset.

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP Denne guide er oprindeligt udgivet på Eksperten.dk Arrays i PHP De fleste som har skrevet omfattende scripts, er før eller siden stødt på problemet med at de bliver vanskelige at overskue hvis man bruger

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter.. 9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

Forskellige Java versioner

Forskellige Java versioner Denne guide er oprindeligt udgivet på Eksperten.dk Forskellige Java versioner Denne artikel beskriver lidt om de forskellige Java versioner. Den forklarer J2SE/J2ME/J2EE, plugin/jre/sdk og Sun Java/Microsoft

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen. Denne guide er oprindeligt udgivet på Eksperten.dk Grundlæggende PHP I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Læs mere

CVS som KS-værktøj E3-104. Branching, Merging m.v.

CVS som KS-værktøj E3-104. Branching, Merging m.v. CVS som KS-værktøj E3-104 Branching, Merging m.v. Gennemgang af Oprettelse af CVS-træ Tilføj filer Commit Fil forskelle Merging Branching Ekstra værktøjer Avanceret Oprettelse af CVS-træ report graphics

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999 sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid

Læs mere

Linguistic support for unit testing

Linguistic support for unit testing Linguistic support for unit testing Af K. E. Gray & M. Felleisen Mads Bach-Sørensen mbs@cs.aau.dk 1. november 2007 1 Indhold Forfatterne TestJava Traditionel Unit-testing Sproglige Konstruktioner i TestJava

Læs mere

Asymptotisk analyse af algoritmers køretider

Asymptotisk analyse af algoritmers køretider Asymptotisk analyse af algoritmers køretider Analyse af køretid (RAM-modellen vs. virkeligheden) public class Linear { public static void main(string[] args) { long time = System.currentTimeMillis(); long

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

Prioritetskøer ved»heap«, simulering

Prioritetskøer ved»heap«, simulering Datastrukturer & Algoritmer, Datalogi C Forelæsning 25/11-2003 Prioritetskøer ved»heap«, simulering Yet another teknik til at repræsentere mængder Hvor hashtabellen fremviste: Konstant tid for finde og

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition) Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 Datastrukturer og algoritmer Henning Christiansen henning@ruc.dk http://www.ruc.dk/~henning Formål: at kunne - forstå datastrukturer og algoritmer

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Hashing og hashtabeller

Hashing og hashtabeller Datastrukturer & Algoritmer, Datalogi C Forelæsning 12/11-2002 Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt

Læs mere

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script. Denne guide er oprindeligt udgivet på Eksperten.dk Register Globals Off Lad os slå en ting fast med det samme - register_globals = Off er en god ting, i hvert fald set ud fra et sikkerhedsmæssigt synspunkt.

Læs mere

Database programmerings tips

Database programmerings tips Denne guide er oprindeligt udgivet på Eksperten.dk Database programmerings tips Denne artikel vil introducere nogle problem stillinger med flere samtidige brugere, som man skal tænke på, når man udvikler

Læs mere

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er Programming 1999 KVL Side 19-2 Tidsforbruget, dvs asymptotisk proportionalt med Sorting af element: Tidsforbrug de mindste element, sortet øvrige element 0 Løkkeinvariant for udvalgssorting osv Find tredjemindste

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere