Übungspaket 12 Der Datentyp char Übungsziele: 1. 2. 3. 4. Umgang mit dem Datentyp char, Deklarationen von char-Variablen, char-Konstanten und char-Rechenoperationen. Skript: Kapitel: 29 bis 31 sowie 24, 25 und 27 Semester: Wintersemester 2017/18 Betreuer: Kevin, Theo, Thomas und Ralf Synopsis: In diesem Übungspaket gibt es einiges zum Thema Zeichen. Die Struktur der Aufgaben ähnelt sehr den vorherigen. Neben der eigentlichen Zeichenverarbeitung ist die Umwandlung von Werten des Datentyps char in Werte des Datentyps int und umgekehrt Teil dieses Übungspaketes. 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önnen. Vervollständige folgende Tabelle: C-Notation Zeichen Großbuchstabe A Semikolon Ziffer 3 Nullbyte ............ .................................... .............. .................... ............ .................................... .............. .................... ............ .................................... .............. .................... ............ .................................... .............. .................... ............ .................................... .............. .................... Aufgabe 2: Ein- und Ausgabe Erläuter anhand von zwei Beispielen, wie Zeichen ein und ausgelesen werden können? Format: Eingabe: Ausgabe: Aufgabe 3: Zeichen und deren ASCII-Werte Schreibe ein kleines Testprogramm, das die Zeichen ’A’ bis ’Z’ nebst ihrer zugehörigen 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? 12-1 Wintersemester 2017/18, Einführung in die Praktische Informatik Teil II: Quiz Aufgabe 1: Datentyp char vs. Datentyp int Der Datentyp char gehört zu den Ganzzahldatentypen, da die einzelnen Zeichen einzeln aufgeführt werden können. Aber dennoch gibt es einige Unterschiede zum Datentyp int. Diese Unterschiede betreffen in erster Linie die Zahl der verwendeten Bytes im Arbeitsspeicher und damit die Zahl der verfügbaren Bits und dem daraus resultierenden Wertebereich. Ergänze folgende Tabelle: Datentyp int char # der Bytes # der Bits Wertenbereich ................... ................ ..................................................... ................... ................ ..................................................... Aufgabe 2: Ausdrücke Welche Werte erhalten die Variablen char c und int i durch die angegebenen Ausdrücke? Ausdruck c c c c = = = = ’a’ ’m’ ’a’ ’m’ + + - 1 1 4 ’a’ + ’A’ Resultat Ausdruck c c c c c c i i = = = = ...... ...... ...... ...... = = = = ’n’ ’P’ ’z’ ’9’ Resultat - ’z’ + ’Z’ ’A’ + ’a’ + 1 ’a’ ’0’ c c i i = = = = ...... ...... ...... ...... Aufgabe 3: Datentypen Im Zusammenhang mit Variablen und Werten vom Typ char gibt es immer wieder Fragen bezüglich des resultierenden Datentyps. In den folgenden Ausdrücken gilt folgende Variablendefinition: char c und int i Ausdruck c ’a’ ’\101’ Datentyp .............. .............. .............. Ausdruck c + 1 c - ’0’ c + i Datentyp .............. .............. .............. 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ührung in die Praktische Informatik, Wintersemester 2017/18 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 # include ’ stdio . h ’ 2 3 int main ( int argc , char ** argv ) 4 { 5 char 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 printf ( " summe = % d \ n ’, s ) ; 14 ] 12-3 Wintersemester 2017/18, Einführung in die Praktische Informatik 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 # include < stdio .h > 2 3 int main ( int argc , char 4 { 5 char zeichen ; 6 int zahl ; 7 zeichen = ’5 ’; 8 switch ( zeichen ) 9 { 10 case ’0 ’: zahl 11 case ’1 ’: zahl 12 case ’2 ’: zahl 13 case ’3 ’: zahl 14 case ’4 ’: zahl 15 case ’5 ’: zahl 16 case ’6 ’: zahl 17 case ’7 ’: zahl 18 case ’8 ’: zahl 19 case ’9 ’: zahl 20 } 21 printf ( " Zeichen = 22 } ** argv ) = = = = = = = = = = 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; break ; break ; break ; break ; break ; break ; break ; break ; break ; break ; ’% c ’ Zahl = % d \ n " , zeichen , zahl ) ; Eine derartige Umwandlung geht mit einer einfachen Anweisung. Überlege zunächst, in welchem Zusammenhang die ASCII-Zeichen und deren Kodierung zueinander stehen. Formuliere und erkläre die entsprechende C-Anweisung, und schreibe ein entsprechendes Testprogramm: Einführung in die Praktische Informatik, Wintersemester 2017/18 12-4 Testprogramm zur einfachen Wandlung von Ziffern in Zahlenwerte: Aufgabe 2: Klassifizierung von Zeichen: <ctype.h> Die Include-Datei <ctype.h> stellt eine Reihe von nützlichen Makros zur Klassifizierung von Zeichen zur Verfügung. 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älle 12-5 Wintersemester 2017/18, Einführung in die Praktische Informatik 3. Testdaten Alle Ziffern von ’0’ bis ’9’, ’A’ bis ’F’ und ’a’ bis ’f’ 4. Implementierung 5. Kodierung Einführung in die Praktische Informatik, Wintersemester 2017/18 12-6 Aufgabe 4: Umwandlung von Klein in Großbuchstaben 1. Aufgabenstellung Enwickle ein Programmstückchen, das Kleinbuchstaben in Großbuchstaben umwandeln kann und umgekehrt. Auch diese Umwandlung geht wieder in einer Zeile. 2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderfälle 3. Testdaten Alle Buchstaben von ’a’ bis ’z’ und ’A’ bis ’Z’. 4. Implementierung Da diese Aufgabe eigentlich keine größeren Schwierigkeiten bereiten sollte, konzentrieren 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ür die beiden obigen Anweisungen: 12-7 Wintersemester 2017/18, Einführung in die Praktische Informatik Aufgabe 5: Zeichen-Matrix 1. Aufgabenstellung Zur Wiederholung: Eine Variable vom Typ char besitzt in der Regel acht Bits, womit sich 256 verschiedene Werte darstellen lassen. Entwickle ein Programm, das diese 256 Möglichkeiten in Form einer 16×16 Matrix darstellt, und zwar nicht als Zahlenwerte sondern als Zeichen. Da einige Zeichen merkwürdig“ aussehen, ist es günstig " %2c" ” als Formatierung zu nehmen. Mit etwas Glück wird folgende Matrix ausgegeben. Gewünschte Ausgabe: 2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderfälle 3. Implementierung Einführung in die Praktische Informatik, Wintersemester 2017/18 12-8 4. Kodierung 12-9 Wintersemester 2017/18, Einführung in die Praktische Informatik