WolfgangKaier/MihaelMattes Blatt6
A
Systemnahe Software I
im Wintersemester 2009/2010
Abgabetermin:bis24.November2009
15 Modularisierung (4 Punkte)
AlskleinenEinstieg indie ModularisierungsollenSieIhre Implementationen(oder denLö-
sungsvorshlag)derStringfunktionenvomletztenBlattineineigenesModulmystr.oauslagern.
StellenSiehierbeieinepassendeHeaderdateimystr.hbereit,dieausshlieÿlihFunktionsdekla-
rationen(keineDenitionen!)enthält.DiedazugehörigenDenitionensollensihinderDatei
mystr.benden.
ÄndernSiedieDateistrfun.soab,dassIhreStringfunktionendortnurverwendet(niht
aberdeklariertoderdeniert)werden.ShlieÿlihsollenSienohinderLagesein,mitdemg
Objektdateienerzeugenzu lassenunddiesein einemweiterenShrittzueiner ausführbaren
Dateizusammenzubinden.
Hinweis1:DasKapitel12desSkriptsenthältallenötigenInformationenzumThemaMo-
dularisierung.
Hinweis 2: Wenn Siesize_t verwendenwollen, ohne string.heinzubinden, bindenSie
stddef.hein.
16 Sortieralgori thmenBibl i o thek (12 Punkte)
WennSiedieZusatzaufgabeweiteruntenlösen,habenSiedieseAufgabeautomatishmitgelöst.
ShreibenSieeinkleinesModul(d.h.eineHeaderdateimitentsprehendenFunktionenund
eineC-DateimitderenImplementierung)vonSortieralgorithmenfürints,dasmysort.oheiÿt.
StellenSiehierbeimindestenseinenSortieralgorithmusproGruppenmitgliedzurVerfügung.
TestenSiedieFunktionsweiseallerAlgorithmenanhandeinesselbstgeshriebenenTestpro-
gramms,welhesnihtTeildesModulsist.
17 Allgemeine Sortierbibliothek (12 Zusatzpunkte)
bigeDaten(z.B.ints,doubles,Strings,dieGeldanlagenvomletztenBlatt,sonstigeVerbünde,
et.)zusortieren.
MöglihwirddiesdurhdieVerwendungdesallgemeinenunspeziziertenZeigertypsvoid*,
deraufbeliebigeDaten(insbesonderemitbeliebigerGröÿe!)zeigenkann.EineallgemeineSor-
tierfunktionbenötigtdahernebendemZeigeraufdenAnfang derListeundder Anzahlder
ElementeauhdieAngabederGröÿeeines einzelnenElements.EineBeispielsignaturkönnte
daherwiefolgtaussehen:
sort(void *anfang, size_t anzahl, size_t groesse);
Dadiewenigsten Datenmiteinemeinfahen < verglihen werdenkönnen,mussdieSor-
tierfunktion auÿerdemwissen, wiedieElemente verglihen werden.Dies lässtsihmiteiner
Vergleihsfunktion(Komparator)bewerkstelligen,diezweiElementeübergebenbekommtund
analogzustrmpeinenint-WertalsErgebnisliefert.
DieSortierfunktionmussdenzuverwendendenKomparatornatürlihkennenermussalso
(als Funktionszeiger)mitübergebenwerden.Die SignaturderSortierfunktionmussalsowie
folgterweitertwerden:
sort(void *anfang, size_t anzahl, size_t groesse,
int (*omparator)(onst void *, onst void *));
ImplementierenSieeineigenesallgemeinesSortiermodul(miteinemAlgorithmusproGrup-
penmitglied)undtestenSieesmitmindestensdreivershiedenen TypenvonDaten,z.B.ein
Ganzahltyp,einGleitkommatyp,StringsoderdieGeldanlagenvomvorigenBlatt.
Hinweis1:ZumTestenmüssenSiefürjedenDatentypeinenKomparatorshreiben.
Hinweis 2: Die Funktion qsort aus der Standardbibliothek bietet ein ganz allgemeines
QuikSortan.Siesollendasnatürlihnihtverwenden,aberinderManpagedazu ndenSie
auhVerwendungsbeispiele.
VielErfolg!