Lezen en schrijven van tekst

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 6: Controle structuren
Advertisements

Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Hoofdstuk 14.2 Algoritmen: Automatische taalherkenning.
Programma zonder window commandline interface. Commandline programma public static void main (String [ ] params) { System. out. println (“Hoi allemaal!”);
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het.
Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
GUI & classes Een Gui in een class steken en het object gebruiken.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Objectgeoriënteerd Programmeren (2)
…is eigenlijk overbodig!
Aanroep van een methode voert opdrachten uit in de body daarvan
Lezen en schrijven van tekst
2e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Voortborduren op eerder gedaan werk
ISensorEventListener
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Lists en interfaces
Hoofdstuk 9.2 Strings.
string versus char string char klasse primitief type
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
vandaag èn vrijdag deadline maandag 12 dec.
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Tiles in Tick Tick
Gameprogrammeren: Herhalingen
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
OOS Object geOrienteerd Software-ontwerp - 5
Arjan Egges & Paul Bergervoet
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Practicum: schets-editor
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Gameprogrammeren: Abstracte klassen
Gameprogrammeren: Interfaces
Arjan Egges Paul Bergervoet Wouter van Toll
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Tiles en File I/O in Tick Tick
Arjan Egges & Paul Bergervoet
Implementatie Zoekboom
Object Communication (Jewel Jam)
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Transcript van de presentatie:

Lezen en schrijven van tekst class Tekst : Form { TextBox invoer; void lees (string naam) { StreamReader sr = new StreamReader (naam); this.invoer.Text = sr . ReadToEnd ( ) ; sr . Close ( ) ; } void schrijf (string naam) { StreamWriter sw = new StreamWriter (naam); sw . Write ( this.invoer.Text ) ; sw . Close ( ) ; } }

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 . Contains (pat) ) Console.WriteLine( naam + n + regel ); } catch (Exception e) { Console.WriteLine(naam + e); }

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

List Gebruik van: array class Voorbeeld : Form { } TextBox in; Button b; List<String> alles; String [] alles; int n; Voorbeeld ( ) { } void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; int y = 50; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t], ......, y ); y+=20; } alles.Count ;t++) alles[t] alles = new List<String>( ); alles = new String[100]; n = 0; void klik(object o, AE ae) { } if (n<100) { String s = in.Text; alles[n] = s; n++; alles.Add(s); this.Invalidate(); }

Hoe is List gemaakt? class List<Elem> { } Elem [] elems; int n; { elems = new Elem[10]; n = 0; } void Add(Elem e) { } if (n>=elems.Length) vergroot(); elems[n]=e; n++; Elem Get (int p) { return elems[p]; } this [int p] private void vergroot() { } get { } Elem [] kopie; kopie= new Elem[2*n]; for (int t=0; t<n; t++) kopie[t] = elems[t] int Count { get { return n; } } elems = kopie;

Wat is er nodig om een List te zijn? class AndereList<Elem> { } interface IList<Elem> { } …… int Count { get; } ; void Clear(); void Add(Elem e) ; Elem this [int p] { get; set; }; void Insert (int p, Elem e); © AndereList<Elem>() { …… } Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… }

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

Schets-tools (1) interface ISchetsTool { } void muisVast ( SchetsControl s, Point p) ; void muisLos ( SchetsControl s, Point p) ; void muisDrag ( Schetscontrol s, Point p ) ; void Letter ( SchetsControl s, char k) ;

Schets-tools (2) abstract class StartpuntTool : ISchetsTool { } Point startpunt ; Brush kwast ; virtual void MuisVast ( SchetsControl s, Point p) { startpunt = p; } virtual void MuisLos ( SchetsControl s, Point p) { kwast = new SolidBrush( s.Penkleur ); } abstract void MuisDrag ( SchetsControl s, Point p) ; abstract void Letter ( SchetsControl s, Point p) ;

Tool gebruiken class SchetsWin interface ISchetsTool : Form SchetsControl sc; { MenuStrip strip; ISchetsTool huidig; { SchetsWin ( ) void MuisVast( { sc = new SchetsControl ( ); SchetsControl s, sc.MousePress += this.muis; } Point p); void muis ( object o, MEA mea) { huidig.MuisVast( sc, mea.Location) } void klikTool ( object obj, AE ae ) { huidig = (ISchetsTool) ( (Button) obj ) . Tag } } }

Tool gebruiken class SchetsWin interface ISchetsTool anonieme methode : Form SchetsControl sc; { MenuStrip strip; ISchetsTool huidig; { SchetsWin ( ) void MuisVast( { sc = new SchetsControl ( ); SchetsControl s, sc.MousePress += ( object o, MEA mea) => Point p); anonieme methode { huidig.MuisVast( sc, mea.Location); } } void klikTool ( object obj, AE ae ) { huidig = (ISchetsTool) ( (Button) obj ) . Tag } } }

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

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]) ); } } }

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 ;

Algoritmen: Automatische taalherkenning Hoofdstuk 11.2 Algoritmen: Automatische taalherkenning

Programmeer-cyclus Modelleer Specificeer Implementeer Edit Compile Run

Modelleren gedicht “Jabberwocky” (Lewis Carroll) 'Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. Es brillig war. Die schlichten Toven Wirrten un wimmelten in Waben; Und aller-mümsigen Burggroven Die mohmen Räth' ausgraben. en de Il brigue: les tôves libricilleux Se gyrent en vrillant dans la guave. Enmîmés sont les goubebosqueux Et le mômerade horsgrave. 't Was bradig en de slijp'le torfs Driltolden op de wijde weep. Misbrozig stonden borogorfs 't Verdwoolde grasvark schreep. fr nl Hoe herken je de taal?

Modelleren patronen in woorden en uitgangen je kunt de taal herkennen zonder de woorden te begrijpen! patronen in woorden en uitgangen relatieve frequenties van de letters die kan een computer ook tellen...

Modelleren Bepaal de letterfrequentie van de onbekende tekst Vergelijk die met opgeslagen frequentie- tabellen van diverse talen De “best passende” is het! misschien

Modelleren Ja. we stoppen er niet kant-en-klare tabellen in... ...maar voorbeeldteksten, waarvan het programma de letters zelf mag turven is dit nou AI? Ja. subsymbolische AI

Specificeren voorbeeld- talen en -teksten onbekende tekst

Specificeren Hoe vergelijk je frequentietabellen? Alle letters zijn belangrijk Totaliseer de verschillen voor alle letters Tekstlengte mag niet van invloed zijn Gebruik de relatieve frequentie Tekort mag overschot niet compenseren Tel het verschil altijd positief

uit System.Windows.Forms Ontwerpen Klassen in dit programma class Form class TurfTab class RelTurfTab : TurfTab class Taal : Form uit System.Windows.Forms uit LetterTeller voegt toe: - relatieve telling - lezen vanaf WWW voegt toe: - interactie

Implementatie: GUI class Taal : Form { const int aantal = 10; TextBox invoer; Label uitvoer; TextBox [ ] taal; TextBox [ ] url; Label [ ] score; TableLayoutPanel paneel, talen, alles;

Implementatie: actie void herken_klik (object o, ActionEvent ae) { RelTurfTab onbekend, voorbeeld; onbekend = new RelTurfTab(); onbekend . Turf ( invoer.Text ); double kleinste; string antwoord; kleinste = 1.0; antwoord = "onbekend"; for (int t=0; t<aantal; t++) { } voorbeeld = new RelTurfTab(); voorbeeld . Lees (url[t].Text ); d = onbekend . Verschil (voorbeeld); if (d<kleinste) kleinste = d; { antwoord = taal[t].Text; } uitvoer . Text = antwoord;

De klasse TurfTab klasse-ontwerp: wat is ... & wat kan ... & hoe? public class TurfTab { int [ ] tellers; int totaal; public TurfTab ( ) { ... } public void Turf (string s){ ... } public string ToString ( ) { ... } private void turf (char c) { ... } }

De klasse RelTurfTab public class RelTurfTab : TurfTab { public void Lees (string s) { ... } public double Verschil (RelTurfTab ander ) private double relatief (int i) { ... } }

Specificeren Hoe vergelijk je frequentietabellen? Alle letters zijn belangrijk Totaliseer de verschillen voor alle letters Tekstlengte mag niet van invloed zijn Gebruik de relatieve frequentie Tekort mag overschot niet compenseren Tel het verschil altijd positief

De klasse RelTurfTab public class RelTurfTab : TurfTab { private double relatief (int i) { } return ; (double) tellers[i] / totaal public double Verschil (RelTurfTab ander ) { } double totaal = 0.0; return totaal; for (int t=0; t<26; t++) totaal += Math.Abs ( ); this.relatief(t) – ander.relatief(t)

De klasse RelTurfTab public class RelTurfTab : TurfTab { public void Lees (string naam) { TextReader reader; string regel; if (naam.StartsWith("http://")) reader = new StreamReader( new WebClient( ) . OpenRead(naam) ); else reader = new StreamReader(naam); while ( ( regel = reader.ReadLine() ) != null ) this.Turf (regel); }

Modelleren geplukt van het internet we stoppen er niet kant-en-klare tabellen in... ...maar voorbeeldteksten, waarvan het programma de letters zelf mag turven <tags> verstoren taalbeeld! <html> <a href=www.cs.uu.nl>Klik hier</a> <img src=picture.jpg>

De klasse TurfTab class TurfTab { int [ ] tellers; int totaal; public TurfTab ( ) { ... } public void Turf (String s){ ... } public String ToString ( ) { ... } deze methode herdefiniëren in RelTurfTab virtual private void turf (char c){ ... } protected }

extra member-variabele De klasse RelTurfTab class RelTurfTab : TurfTab { extra member-variabele bool teltMee = true; override protected void turf (char c) { } herdefinitie if (c== ‘<’) teltMee = false; if (c== ‘>’) teltMee = true; if (teltMee) doe de oorspronkelijke versie base . turf (c);

Implementatie af! Implementeer Edit Compile Run Specificeer Modelleer

Modelleren Bepaal de letter- frequentie van de onbekende tekst we stoppen er niet kant-en-klare tabellen in... Bepaal de letter- frequentie van de onbekende tekst Vergelijk die met opgeslagen frequentie- tabellen van diverse talen De “best passende” is het! misschien ...maar voorbeeldteksten, waarvan het programma de letters zelf mag turven

Specificeren Hoe vergelijk je frequentietabellen? Alle letters zijn belangrijk Totaliseer de verschillen voor alle letters Tekstlengte mag niet van invloed zijn Gebruik de relatieve frequentie Tekort mag overschot niet compenseren Tel het verschil altijd positief

uit System.Windows.Forms Ontwerpen Klassen in dit programma class Frame class TurfTab class RelTurfTab : TurfTab class Taal : Frame uit System.Windows.Forms hadden we al voegt toe: - relatieve telling - lezen vanaf WWW voegt toe: - interactie