Instructie Programmeren Task 5

download Instructie Programmeren Task 5

If you can't read please download the document

description

Instructie Programmeren Task 5. 5JJ70. Task 5: Spelling checker. Het doel van deze opdracht is het schrijven van een kleine spelling checker Dit is de lastigste opdracht tot nu toe!. Task 5: Spelling checker - Hints. - PowerPoint PPT Presentation

Transcript of Instructie Programmeren Task 5

  • Instructie Programmeren

    Task 55JJ70

    / name of department

  • Task 5: Spelling checkerHet doel van deze opdracht is het schrijven van een kleine spelling checkerDit is de lastigste opdracht tot nu toe!PAGE *

  • Task 5: Spelling checker - HintsDe volgorde waarin je de verschillende correctie functies aanroept is van groot belang:Je gebruikt spaties om de grenzen van woorden te vinden, verwijder dus eerst dubbele spatiesJe vergelijkt aangrenzende woorden bij het verwijderen van dubbele woorden, zorg dus dat je eerst de spelling van de woorden verbeterdLeestekens en hoofdletters toevoegen kan helemaal op het eind, dus:Spaces > spelling > double words > capital & punctuationEen zin inlezen met scanf( %s, line) werkt niet!Gebruik getchar() of een variant hierop ( zie opdracht)PAGE *

  • Task 5: Spelling checker Spaties verwijderenEen functie die 1 karakter (of x karakters) vanaf een bepaalde locatie verwijdert is zeer nuttig bij deze opdracht!Realiseer je dat iedere keer dat je een karakter verwijdert, de stringlengte van je regel verandertBedenk goed wat je doet nadat je een spatie hebt weggehaald: Waar staat het eerstvolgende karakter dat eventueel een spatie zou kunnen zijn?PAGE *Gedetecteerde dubbele spatieWaar blijft deze pointer/index?

    Ditise

    Ditisee

  • Task 5: Spelling checker Spaties verwijderen2 (of meer) spaties achter elkaar is foutSpaties aan het begin van de zin zijn foutSpaties voor leestekens ( :,;!?.) zijn fout

    Er zijn functies die detecteren of een karakter een leesteken, spatie, hoofdletter etc. is:Header: ctype.hDocumentatie: http://www.cplusplus.com/reference/clibrary/cctypeVoorbeeld:if(ispunct(line[i])){// hier de acties als line[i] een leesteken is}else{// geen leesteken op plek i in string line}PAGE *

  • Task 5: Spelling checker SpellingsfoutenVoor ieder fout woord (teh, eb, si, ceratief, etc) moet je dezelfde acties uitvoeren, gebruik dus een loopje waar je n voor n je foute woorden afgaat.Het is handig je foute en verbeterde woorden op te slaan in een array van strings: char* errors[3] = {"teh", "eb", "si"};(Dit declareert een array van 3 poiners naar chars. Vervolgens worden deze pointers genitialiseerd met de adressen van de constantes "teh", "eb", en "si)Je kunt een tijdelijke variabele gebruiken om het huidige ingelezen woord in op te slaan, of je kan de begin en eindindex van het woord opslaanVergeet niet dat uit strcmp() nul komt wanneer de 2 strings gelijk zijn!Om zeker te weten dat je alle fouten vindt, kun je de ingelezen woorden naar lowercase of uppercase converteren voor je ze vergelijkt (tolower() en toupper(), of vergelijken met strcmpi() (die case insensitive is).

    PAGE *

  • Task 5: Spelling checker SpellingsfoutenDe procedure die je moet bouwen ziet er ongeveer zo uit:Detecteer het begin van een woord ( begin van de zin of een spatie)Detecteer het eind van een woord ( spatie, leesteken of eind van de zin)Vergelijk het woord met elk van de foute woordenKomt het woord overeen met een fout woord, kopieer dan het verbeterde woord naar de plaats van het foute woordGa terug naar stap 1, tot het eind van de zin bereikt is

    PAGE *

  • Task 5: Spelling checker Dubbele woordenPAGE *De dubbele-woorden-verwijder-routine komt erg overeen met de spelfouten routine ( kun je code hergebruiken? ):

    Detecteer het begin van een woord ( begin van de zin of een spatie)Detecteer het eind van een woord ( spatie, leesteken of eind van de zin)Vergelijk het woord met het vorige woord (indien aanwezig)Komt het woord overeen met het vorige woord, verwijder het dan uit de zin (of voeg het niet toe aan de output)Komt het woord niet overeen, dan wordt het vorige woord het huidige woordGa terug naar stap 1, tot het eind van de zin bereikt is

    Na een leesteken mag een woord herhaald worden! Bijvoorbeeld:It took a very, very long time to program this.

  • Task 5: Spelling checker - HintsEen string van lengte L mag je maar tot L-1 adresseren!char str[10]; s[10] = a;// FOUT!

    Gaat er iets mis, zet dan een breakpoint neer en stap door je programma heenHet is vaak handig en verhelderend op papier even uit te tekenen wat er gebeurt:

    Vergeet de \0 en de ruimte die dit karakter inneemt nooit!Access violations? Zie de hint slides over Debuggen

    PAGE *i strlen(Prev_Word)Line:Prev_Word:i == 9

    Ditisis

    is\0

    Ditisis

  • Task 5: Spelling checker - HintsJe spatie-verwijder functie 10x aanroepen omdat dan pas alle spaties weg zijn is niet toegestaan: schrijf degelijke functies die altijd werken!De output van je programma moet exact gelijk zijn als die bij de voorbeelden op het opdracht bladDaarnaast moet onderstaande zin goed worden verbeterd ( spaties worden ter illustratie weergegeven met -)---eb---eb--eb---be-eb-a--a--good--,---good-good-program--and---work---!---Corrected: Be a good, good program and work!

    Je programma mag niet crashen wanneer er geen input wordt ingegeven!Je programma is niet af voordat het aan de bovenstaande eisen voldoet. Proberen af te laten tekenen heeft geen zin, voordat alle voorbeelden en bovenstaande zin correct worden verbeterd.Tip: Laat je buur- man/vrouw je programma testen!

    PAGE *

    *