De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Reader en Writer leest en schrijft bytes leest string en char

Verwante presentaties


Presentatie over: "Reader en Writer leest en schrijft bytes leest string en char"— Transcript van de presentatie:

1 Reader en Writer leest en schrijft bytes leest string en char
schrijft string en char Object Stream TextReader TextWriter FileStream StreamReader StreamWriter store MemoryStream StringReader StringWriter NetworkStream BinaryReader BinaryWriter XmlReader XmlWriter BufferedStream leest XML-teksten leest int en double decorator GZipStream CryptoStream

2 Methoden van Stream abstract class FileStream Stream {
int Read (byte[] doel, int max) { for (int t=0; t<max; t++) { int b = this.ReadByte(); Stream if (b==–1) return t; FileStream doel[t] = (byte) b ; } MemoryStream return max; } NetworkStream abstract virtual int ReadByte ( ) ; } class FileStream : Stream { override int ReadByte ( ) { return } }

3 Abstracte methode/klasse
Abstracte methode: methode zonder body Abstracte klasse: bevat abstracte methode kun je geen new object van maken alleen bedoeld als superklasse Stream FileStream MemoryStream NetworkStream Brush SolidBrush HatchBrush

4 Implementaties van Collections
IEnumerable ICollection LinkedList Queue genummerd Stack IList List zonder dubbele ISet HashSet SortedSet IDictionary SortedList IEnumerator Sorted Dictionary IComparator

5 Hoe doorloop je een ? IEnumerable List Collection
for (int t=0; t<alles.Count; t++) doeIetsMet( alles[t] ); foreach (String s in alles) doeIetsMet( s ); opdracht for ) ( expr ; type expr in naam foreach ( ) opdracht

6 Commandline programma
$> date parameters voor het programma parameters voor het programma Wed Nov 2, 15:45 $> ls aap.txt hallo.doc prog.cs $> grep void prog.cs prog.cs, line 6: void Main() prog.cs, line 10: void teken() $> ls > files.txt $> output redirection

7 Grep: main class Grep { static void Main ( string [ ] params ) {
if (params.Length==0) System.out.println(“Usage: Grep pat file ...”); else for (int t=1; t<params.Length; t++) Grep.bewerk( params[0], params[t] ); }

8 Grep: bewerk static void bewerk (String pat, String naam) {
TextReader reader; String regel; try { if (naam=="") reader = Console.In; else reader = new StreamReader (naam); while ( for (int n=1; ( regel=reader.ReadLine() ) != null ; n++ ) if ( regel . IndexOf(pat) >= 0 ) Console.WriteLine( naam + n + regel ); } catch (Exception e) { Console.WriteLine(naam + e); }

9 Algoritmen: Zoeken in een netwerk
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk

10 Routeplanner Spoorwegkaart: Klik startpunt Klik eindpunt
Programma bepaalt route start Klik nieuw startpunt...

11 Modellering Zoek de “beste” route
elk traject heeft “kosten”; route met laagste totaalprijs is de beste Zoek de “beste” route Opbouw van het netwerk staat in een file, met: voor elke stad: naam en coördinaten voor elke weg: 2 steden, en de kosten stad Amersfoort stad Amsterdam stad Apeldoorn weg Amersfoort Apeldoorn 43 weg Amsterdam Hilversum 29 weg Hilversum Amersfoort 16

12 Specificatie Bij eerste muisklik: aangewezen stad is het beginpunt toon die in blauw Bij tweede muisklik: aangewezen stad is eindpunt bereken de route, en toon die in rood Bij klik buiten een stad: telt niet mee en 3e, 5e, 7e... en 4e, 6e, 8e...

13 Opdeling in klassen Interactieve interface Belangrijke object-typen
met EventHandler voor: teken klik class RouteZoeker : Form Belangrijke object-typen met in elke klasse: een constructor-methode een methode Teken om zichzelf te tekenen ... class Stad class Weg class Pad class Netwerk

14 Klasse-ontwerp wat is ... wat kan ... en hoe ? member- variabelen
methode- headers een object en hoe ? methode- bodies

15 De klasse RouteZoeker class RouterZoeker : Form { “het” netwerk
Netwerk netwerk; de “blauwe” stad Stad stad1; of null Pad pad; het “rode” pad of null Button b; TextBox t; Label lab; we tekenen alles zelf! Event-handlers void klik(..., MouseEventArgs mea) { } void teken(..., PaintEventArgs pea) { }

16 ICollection<Stad> Steden;
De klasse Netwerk class Netwerk { alle steden op de kaart alle steden op de kaart Stad [ ] Steden; ICollection<Stad> Steden; we gaan per stad alle uitgaande wegen bewaren ICollection<Weg> Wegen;

17 De klasse Stad class Stad { string Naam; Utrecht Point Plek;
ICollection<Weg> Wegen;

18 De klasse Weg class Weg { Stad Doel; int Kosten;

19 ongeveer een LinkedList,
De klasse Pad class Pad { IList<Stad> Steden; Stad Hier; Pad Rest; int Kosten; ongeveer een LinkedList, maar dan zelfgemaakt null

20 Methoden van Stad Utrecht class Stad { String Naam; Point Plek;
ICollection<Weg> wegen; static Font font = new ... Stad ( { } String s, Point p ) Naam = s; Plek = p; Wegen = new LinkedList<Weg> ( ); void Teken (Graphics gr, Brush br) { gr . FillRectangle(br , Plek.X-5, Plek.Y-5, 10, 10 ); Utrecht gr . DrawString (Naam, font, br , Plek + new Size(6,-15) ); }

21 Methoden van Weg class Weg { Stad Doel; int Kosten; wordt niet
getekend Weg ( { } Stad s, int k ) Doel =s; Kosten = k; void Teken (Graphics gr, Pen pen ) { } , Stad bron ) gr . DrawLine ( pen, bron.Plek, Doel.Plek );

22 Methoden van Pad class Pad { Stad Hier; Pad Rest; int Kosten;
totale kosten van het pad Pad ( { } Stad s, Pad r, int k ) Hier = s; Rest = r; Kosten = k; if (Rest != null) Kosten += Rest.Kosten; void Teken (Graphics gr, Brush br, Pen pen) { } Hier . Teken (gr, br); if (Rest != null) { } gr.DrawLine( pen, Hier.Plek, Rest.Hier.Plek ); Rest . Teken (gr, br, pen);

23 Methoden van Netwerk class Netwerk { ICollection<Stad> Steden;
} Steden = new LinkedList<Stad> ( ); void Teken (Graphics gr) { } foreach ( Stad stad in Steden ) { } stad . Teken (gr, Brushes.Black); bron foreach ( Weg w in stad.wegen ) w.Teken (gr, Pens.Black, stad)

24 Methoden van RouteZoeker
class RouteZoeker { Netwerk netwerk; Stad stad1; Pad pad; RouteZoeker ( ) { } netwerk = new Netwerk(); stad1=null; pad=null; void teken (object o, PaintEventArgs pea) { Graphics gr = pea.Graphics; } netwerk . Teken (gr); if (pad != null) pad . Teken(gr, Brushes.Red, Pens.Red); if (stad1 != null) stad1 . Teken(gr, Brushes.Blue);

25 Opbouw van het Netwerk Lees een file met regels zoals: locatie
stad Almelo stad Amersfoort stad Amsterdam stad Apeldoorn stad Arnhem weg Arnhem Zutphen 29 weg Zutphen Deventer 16 weg Deventer Zwolle 31 weg Amsterdam Weesp 14 weg Weesp Hilversum 15 weg Hilversum Amersfoort 16 locatie commando kosten

26 Opbouw van het Netwerk void Lees (string filenaam ) {
StreamReader sr = new StreamReader(filenaam); while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty ); if (r.Length==4) if (r[0] == "stad") { } else this . bouwStad (r[1] new Point( int.Parse(r[2]) , int.Parse(r[3]) ) ); this.bouwWeg( r[1], r[2], int.Parse(r[3]) ); } } }

27 Opbouw van het Netwerk void bouwStad (string naam, Point p) {
} Stad st = new Stad(naam, p); Steden . Add (st); Netwerk’s void bouwWeg (string van, string naar, int kosten) { } Stad st1 = this . vindStad (van); Stad st2 = this . vindStad (naar); st1 . BouwWeg (st2, kosten); st2 . BouwWeg (st1, kosten); class Stad { void BouwWeg(Stad doel, int k) { } Stad’s Wegen . Add ( new Weg(doel, k) );

28 Opbouw van het Netwerk Stad vindStad (String naam) { }
foreach ( Stad st in Steden ) { } if ( st.naam == naam ) return st ; return null ; Stad VindStad (Point p) { foreach ( Stad st in steden ) { } if ( p.X-st.Plek.X < 5 && p.Y-st.Plek.Y <5 ) Math.Abs( ) Math.Abs( ) return st ; return null ;

29 Interactie in RouteZoeker
class RouteZoeker : Form { Netwerk netwerk; Stad stad1; Pad pad; void klik (..., MouseEventArgs mea) { } Stad s = netwerk . VindStad( ); mea.Location if ( s != null ) { } eerste klik of tweede klik? if (stad1==null) else stad1 = s; { stad1 = null; } pad = netwerk . ZoekPad (stad1, s ); this . Invalidate ();

30 Het zoek-algoritme maak een stapel van nog-niet-complete,
maar veelbelovende paden Pad ZoekPad (Stad begin, Stad eind) { Stack<Pad> paden = new Stack<Pad>();

31 Het zoeken begint... Pad pad; pad = new Pad(begin, null, 0);
paden . push (pad); maar wel veelbelovend! hij is niet groot... null

32 Onderzoek paden uit stapel...
while ( paden.Count > 0 ) { Pad pad = paden . pop(); if (pad.Hier==eind) return pad; foreach ( Weg weg in pad . Hier . Wegen ) { beter = new Pad( paden . Push(beter); weg.Doel, pad, weg.Kosten); } } return null;

33 niet in een kringetje zoeken!
Pas op: niet in een kringetje zoeken! één van de wegen kom je net vandaan! foreach ( Weg weg in pad.Hier.Wegen ) { } if ( ! pad . Bevat (weg.Doel) ) { } beter = new Pad( paden . Push(beter); weg.Doel, pad, weg.Kosten);

34 Niet de eerste oplossing, maar de beste zoeken!
beste = null; while ( ... ) { pad = ... if (compleet) return pad; for (...) if ( !kring ) paden.Push(...) } return null; while ( ... ) { pad = ... if (compleet) return pad; for (...) if ( !kring ) paden.Push(...) } return null; beste=pad; if (beter) beste=pad; && !zinloos) return beste;

35 Uitwerking Wat is “beter” ? Wat is “niet zinloos” ? if ( beste==null
|| pad.Kosten < beste.Kosten ) beste = pad; if ( beste==null || pad.Kosten + weg.Kosten < beste.Kosten ) paden.Push (new Pad (...) );

36 Verbetering van het algoritme
De meest veelbelovende eerst onderzoeken Dus in volgorde van afstand tot naar pushen ordenen qua afstand tot doel moet een lComparer zijn wegen = new SortedSet<Weg>( pad.Hier.Wegen , naar ); class Stad : IComparer<Weg> { { int Compare( Weg a, Weg b) { return this.afstand(b.doel) – this.afstand(a.doel); }

37 Routezoeker compleet!


Download ppt "Reader en Writer leest en schrijft bytes leest string en char"

Verwante presentaties


Ads door Google