Ubungspaket 12 ¨ Der Datentyp char
Ubungsziele: ¨
1. Umgang mit dem Datentyp char, 2. Deklarationen von char-Variablen, 3. char-Konstanten
4. und char-Rechenoperationen.
Skript:
Kapitel: 29 bis 31 sowie 24, 25 und 27 Semester:
Wintersemester 2021/22 Betreuer:
Thomas, Tim und Ralf Synopsis:
In diesem ¨ Ubungspaket gibt es einiges zum Thema Zeichen. Die Struk-
tur der Aufgaben ¨ ahnelt sehr den vorherigen. Neben der eigentlichen
Zeichenverarbeitung ist die Umwandlung von Werten des Datentyps
char in Werte des Datentyps int und umgekehrt Teil dieses ¨ Ubungs-
paketes.
Teil I: Stoffwiederholung
Aufgabe 1: Notation von Zeichenkonstanten
In Vorlesung und Skript haben wir gesehen, dass in der Programmiersprache C Zeichen in drei verschiedenen Formen angeben k¨onnen. Vervollst¨andige folgende Tabelle:
C-Notation
Zeichen . . . . . . . . . . . . . . . .
Großbuchstabe A . . . . . . . . . . . . . . . .
Semikolon . . . . . . . . . . . . . . . .
Ziffer 3 . . . . . . . . . . . . . . . .
Nullbyte . . . . . . . . . . . . . . . .
Aufgabe 2: Ein- und Ausgabe
Erl¨auter anhand von zwei Beispielen, wie Zeichen ein und ausgelesen werden k¨onnen?
Format: Eingabe: Ausgabe:
Aufgabe 3: Zeichen und deren ASCII-Werte
Schreibe ein kleines Testprogramm, das die Zeichen ’A’ bis ’Z’ nebst ihrer zugeh¨origen ASCII Werte in tabellarischer Form ausgibt. Frage: Muss man bei der Aufgabe die konkrete ASCII-Kodierung der einzelnen Zeichen selber in der ASCII-Tabelle nachschlagen oder kann das der Compiler dies erledigen?
Teil II: Quiz
Aufgabe 1: Datentyp char vs. Datentyp int
Der Datentyp char geh¨ort zu den Ganzzahldatentypen, da die einzelnen Zeichen einzeln aufgef¨uhrt werden k¨onnen. Aber dennoch gibt es einige Unterschiede zum Datentyp int.
Diese Unterschiede betreffen in erster Linie die Zahl der verwendeten Bytes im Arbeitsspei- cher und damit die Zahl der verf¨ugbaren Bits und dem daraus resultierenden Wertebereich.
Erg¨anze folgende Tabelle:
Datentyp # der Bytes # der Bits Wertebereich
int . . . . . . . . . . . .
char . . . . . . . . . . . .
Aufgabe 2: Ausdr¨ ucke
Welche Werte erhalten die Variablenchar cundint idurch die angegebenen Ausdr¨ucke?
Ausdruck Resultat
c = ’a’ + 1 c = ...
c = ’m’ - 1 c = ...
c = ’a’ + 4 c = ...
c = ’m’ - ’a’ + ’A’ c = ...
Ausdruck Resultat
c = ’n’ - ’z’ + ’Z’ c = ...
c = ’P’ - ’A’ + ’a’ + 1 c = ...
i = ’z’ - ’a’ i = ...
i = ’9’ - ’0’ i = ...
Aufgabe 3: Datentypen
Im Zusammenhang mit Variablen und Werten vom Typ char gibt es immer wieder Fra- gen bez¨uglich des resultierenden Datentyps. In den folgenden Ausdr¨ucken gilt folgende Variablendefinition: char c und int i
Ausdruck Datentyp
c . . . .
’a’ . . . .
’\101’ . . . .
Ausdruck Datentyp c + 1 . . . .
c - ’0’ . . . .
c + i . . . .
Hinweis: Die Anweisung printf("%d\n", Ausdruck) gibt einen Hinweis auf den resultierenden Typ.Ausdruck kann eine Variable, ein Ausdruck oder ein Typ sein.
Einf¨uhrung in die Praktische Informatik, Wintersemester 2021/22 12-2
Teil III: Fehlersuche
Aufgabe 1: Summenberechnung mit kleinen Fehlern
Das folgende Programm soll die Summe der Zeichen ’a’ bis ’z’, ’A’ bis ’Z’ und ’0’
bis ’9’ bestimmen. Leider sind dem Programmierer wieder einmal ein paar kleine Fehler unterlaufen. Finde die 14 Fehler und korrigiere sie:
1 # i n c l u d e ’ s t d i o . h ’ 2
3 int m a i n ( int argc , c h a r ** a r g v )
4 {
5 c h a r c ,
6 int s .
7 for ( s = ’ a ’ , c = ’ b ’ ; c < ’ z ’ ; c = c + 1 )
8 s = c ;
9 for ( c = ’ A ’ ; c >= ’ Z "; c = + 1 )
10 s = s + c ;
11 for ( c "9 ’ ; c > ’ 0 ’ , c = c + 1 )
12 s = s + c ;
13 p r i n t f ( " s u m m e = % d \ n ’ , s ) ;
14 ]
Teil IV: Anwendungen
Aufgabe 1: Umwandlung von Ziffern in Zahlen
Ein echter Klassiker: Schreibe ein kleines Programm, das eine einzelne Ziffer, also die Zeichen von ’0’ bis ’9’, in ihren entsprechenden Zahlenwerte, also ints von 0 bis 9, umwandelt. Das folgende Programmschnipsel zeigt, wie ihr es nicht machen sollt . . .
1 # i n c l u d e < s t d i o . h >
2
3 int m a i n ( int argc , c h a r ** a r g v )
4 {
5 c h a r z e i c h e n ;
6 int z a h l ;
7 z e i c h e n = ’ 5 ’ ; 8 s w i t c h ( z e i c h e n )
9 {
10 c a s e ’ 0 ’ : z a h l = 0; b r e a k ; 11 c a s e ’ 1 ’ : z a h l = 1; b r e a k ; 12 c a s e ’ 2 ’ : z a h l = 2; b r e a k ; 13 c a s e ’ 3 ’ : z a h l = 3; b r e a k ; 14 c a s e ’ 4 ’ : z a h l = 4; b r e a k ; 15 c a s e ’ 5 ’ : z a h l = 5; b r e a k ; 16 c a s e ’ 6 ’ : z a h l = 6; b r e a k ; 17 c a s e ’ 7 ’ : z a h l = 7; b r e a k ; 18 c a s e ’ 8 ’ : z a h l = 8; b r e a k ; 19 c a s e ’ 9 ’ : z a h l = 9; b r e a k ;
20 }
21 p r i n t f ( " Z e i c h e n = ’% c ’ Z a h l = % d \ n " , zeichen , z a h l ) ;
22 }
Eine derartige Umwandlung geht mit einer einfachen Anweisung. Uberlege zun¨¨ achst, in welchem Zusammenhang die ASCII-Zeichen und deren Kodierung zueinander stehen. For- muliere und erkl¨are die entsprechende C-Anweisung, und schreibe ein entsprechendes Test- programm:
Testprogramm zur einfachen Wandlung von Ziffern in Zahlenwerte:
Einf¨uhrung in die Praktische Informatik, Wintersemester 2021/22 12-4
Aufgabe 2: Klassifizierung von Zeichen: <ctype.h>
Die Include-Datei <ctype.h> stellt eine Reihe von n¨utzlichen Makros zur Klassifizierung von Zeichen zur Verf¨ugung. Nenne mindestens sechs von ihnen:
Bedeutung Makroname
. . . . . . . . . . . . . . . . . . . . . . . .
Bedeutung Makroname
. . . . . . . . . . . . . . . . . . . . . . . .
Aufgabe 3: Wandeln von hexadezimalen Ziffern
1. Aufgabenstellung
Erweiter das Programm aus Aufgabe 1 dieses Teils so, dass es auch hexadezimale Ziffern, ’A’bis ’F’bzw. ’a’ bis’f’ korrekt wandelt.
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨alle
3. Testdaten
Alle Ziffern von ’0’bis ’9’, ’A’ bis’F’ und ’a’bis ’f’
4. Implementierung
5. Kodierung
Einf¨uhrung in die Praktische Informatik, Wintersemester 2021/22 12-6
Aufgabe 4: Umwandlung von Klein in Großbuchstaben
1. Aufgabenstellung
Enwickle ein Programmst¨uckchen, das Kleinbuchstaben in Großbuchstaben umwan- deln kann und umgekehrt. Auch diese Umwandlung geht wieder in einer Zeile.
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨alle
3. Testdaten
Alle Buchstaben von ’a’ bis’z’ und ’A’bis ’Z’.
4. Implementierung
Da diese Aufgabe eigentlich keine gr¨oßeren Schwierigkeiten bereiten sollte, konzen- trieren wir uns hier auf die eigentliche Umwandlung der Zeichen. Wie lautet die jeweiligen Anweisungen zum Umwandeln der Buchstaben?
Klein- in Großbuchstaben:
Groß- in Kleinbuchstaben:
5. Kodierung
Schreibe ein entsprechendes Testprogramm f¨ur die beiden obigen Anweisungen:
Aufgabe 5: Zeichen-Matrix
1. Aufgabenstellung
Zur Wiederholung: Eine Variable vom Typcharbesitzt in der Regel acht Bits, womit sich 256 verschiedene Werte darstellen lassen. Entwickle ein Programm, das diese 256 M¨oglichkeiten in Form einer 16×16 Matrix darstellt, und zwar nicht als Zahlenwerte sondern als Zeichen. Da einige Zeichen
”merkw¨urdig“ aussehen, ist es g¨unstig" %2c"
als Formatierung zu nehmen. Mit etwas Gl¨uck wird folgende Matrix ausgegeben.
Gew¨unschte Ausgabe:
2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨alle
3. Implementierung
Einf¨uhrung in die Praktische Informatik, Wintersemester 2021/22 12-8
4. Kodierung