• Keine Ergebnisse gefunden

¨Ubungspaket 7 Angemessenes Formatieren von C-Programmen

N/A
N/A
Protected

Academic year: 2021

Aktie "¨Ubungspaket 7 Angemessenes Formatieren von C-Programmen"

Copied!
10
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungspaket 7 ¨

Angemessenes Formatieren von C-Programmen

Ubungsziele: ¨

1. Gute Layout-Struktur durch Einr¨ ucken 2. Richtiges Verwenden von Kommentaren Skript:

Kapitel: 19 Semester:

Wintersemester 2021/22 Betreuer:

Thomas, Tim und Ralf Synopsis:

Das Kodieren eines Algorithmus in ein C-Programm und das Eintip- pen in den Rechner ist eigentlich gar nicht so problematisch. Schwierig wird’s nur bei der Fehlersuche, wenn das Programm nicht das macht, was es machen soll. Noch schwieriger wird es, wenn dann der Betreuer

” mal eben“ den Fehler finden soll. Hier helfen Kommentare und ange-

messenes Einr¨ ucken, was wir hier ein wenig ¨ uben wollen.

(2)

Teil I: Stoffwiederholung

Aufgabe 1: Kommentare

In der Programmiersprache C gibt es zwei M¨oglichkeiten, Kommentare zu verwenden.

Erkl¨are kurz die Syntax und zeige ein Beispiel.

M¨oglichkeit 1:

Syntax Die erste M¨oglichkeit erfordert sowohl ¨offnende /* als auch schließende */

”Klammern“ und kann sich ¨uber mehrere Zeilen erstrecken.

Beispiel int i /* hier ist ein kommentar

der hier zu ende ist */ = -1;

M¨oglichkeit 2:

Syntax Die zweite M¨oglichkeit besteht in //. Derartige Kommentare beginnen mit // und gehenimmer bis zum Ende der Zeile. Bei mehrzeiligen Kommentaren ist das // entsprechend in jeder Zeile zu wiederholen.

Beispiel int i = // variablendefinition -1; // initialisierung

Aufgabe 2: Geschachtelte Kommentare

Erkl¨are kurz, wie man Kommentare schachteln kann und was dabei passiert.

Nat¨urlich kann man Kommentare schachteln wie man will, nur muss man verstehen, was dabei passiert. Die wesentliche Frage ist immer, welche Kommentarform die ¨außere ist.

1. //-Kommentare:

Egal, was man hier hineinschreibt, der Kommentar endet am Zeilenende. Auch wenn die schließende Klammer fehlt, ist dieser am Zeilenende zu Ende.

Beispiel: // aeuesserer kommentar /* innerer kommentar 2. /* ... */-Kommentare:

Egal, was man hier hineinschreibt, der Kommentar ist beim Auftreten des ersten

*/ zu Ende, egal ob dies in der selben oder einer sp¨ateren Zeile der Fall ist.

Beispiel: /* aeusserer kommentar */ kein kommentar mehr */

7-1 Wintersemester 2021/22, Einf¨uhrung in die Praktische Informatik

(3)

Aufgabe 3: Angemessenes Einr¨ ucken

Erkl¨are kurz in eigenen Worten, warum wir als Lehrpersonal so sehr auf eine angemessene Form des Einr¨uckens Wert legen.

Ein C-Programm besteht in der Regel aus Variablendefinitionen und Anweisungsbl¨ocken.

Ein Charakteristikum von Anweisungsbl¨ocken ist, dass sie aus verschiedenen Elementen wie Fallunterscheidungen, Schleifen und weiteren Anweisungen bestehen, die ineinander verschachtelt sein k¨onnen. Daraus ergibt sich eine logische Strukur. F¨ur dasFinden m¨ogli- cher Fehler ist es f¨uralle sehr hilfreich, wenn man die intendierte Struktur auf den ersten Blick erfasst. Damit vermeidet man nicht nur Fehler, sondern sieht sehr schnell, wo m¨ogli- cherweise Klammern fehlen oder zu viele gesetzt sind.

Aufgabe 4: Recherche

Recherchiere etwa f¨unf bis zehn Minuten im Web zum Thema

”Einr¨ucken in C“ und notiere deine zwei Favoriten. M¨ogliche Schlagw¨orter sind: einruecken c programm

Die meisten von uns favorisieren einen Einr¨uckstil, der sehr stark dem Allman/BSD/

”East Coast“ Stil ¨ahnelt.

Ihr k¨onnt selbstverst¨andlich euren Einr¨uckstil frei w¨ahlen, solange er auch tats¨achlich einr¨uckt (also nicht linksb¨undig schreibt), konsistent ist und alle Beteiligten damit zurecht kommen.

(4)

Teil II: Quiz

Aufgabe 1: Finden von Kommentaren

Im folgenden (recht sinnfreien) Text befinden sich einige Kommentare. Schaue dir die Texte an und unterstreiche alle Kommentare einschließlich der

”Kommentarklammern“. Dabei ist jede Zeile f¨ur sich zu behandeln, d.h. eventuell noch nicht abgeschlossene Kommentare aus vorherigen Zeilen haben keinen Einfluss. Korrigiere die Kommentare, sofern dir dies sinnvoll, logisch oder naheliegend erscheint.

1 h e u t e ist ein /* s c h o e n e r */ tag

2 g e s t e r n s c h i e n die s o n n e // den g a n z e n tag

3 /* das */ l e r n e n der /* p r o g r a m m i e r s p r a c h e C */ ist a n s t r e n g e n d

4 // ich w u e n s c h t e , das s t u d i u m w a e r e s c h o n f e r t i g 5 ich h a b e /* s e h r /* n e t t e */ */ k o m m i l i t o n e n

6 b e i m h o c h s c h u l s p o r t f i n d e t man v i e l e /** g u t e */ k u r s e 7 im s o m m e r ist es warm , im w i n t e r /* n i c h t **/ i m m e r

8 m a t h e ist /* oft * / a n s t r e n g e n d , /* p h y s i k */ l e i d e r a u c h 9 das l e r n e n /* in der // g r u p p e */ m a c h t s p a s s

10 schoen , // b a l d */ ist w o c h e n e n d e

11 k o m m e n t a r e s i n d /* s e h r * / b l o e d // f i n d e ich

Im Text haben wir folgende Kommentare gefunden:

Zeile Kommentar 1 /* schoener */

2 // den ganzen Tag 3 /* das */

3 /* programmiersprache C */

4 // ich wuenschte, dass studium waere schon fertig 5 /* sehr /* nette */

6 /** gute */

7 /* nicht **/

8 /* oft * / anstrengend, /* physik */

9 /* in der // gruppe */

10 // bald */ ist wochenende 11 /* sehr * / bloed // finde ich

7-3 Wintersemester 2021/22, Einf¨uhrung in die Praktische Informatik

(5)

Die im Text verwendete Schreibweise legt nahe, dass einige Tippfehler passiert sind, die folgende Korrekturen nahelegen:

Zeile Korrektur Begr¨undung

5 /* sehr nette */ Kommentare kann man nicht schachteln 6 /* gute */ Vermutlich ein * zu viel

7 /* nicht */ Vermutlich ein * zu viel

8 /* oft */ vermutlich ein Leerzeichen zu viel 10 /* bald */ vermutlich Verwechslung von / und * 11 /* sehr */ vermutlich ein Leerzeichen zu viel Diese Korrekturen ergeben folgenden Text:

1 h e u t e ist ein /* s c h o e n e r */ tag

2 g e s t e r n s c h i e n die s o n n e // den g a n z e n tag

3 /* das */ l e r n e n der /* p r o g r a m m i e r s p r a c h e C */ ist a n s t r e n g e n d

4 // ich w u e n s c h t e , das s t u d i u m w a e r e s c h o n f e r t i g 5 ich h a b e /* s e h r n e t t e */ k o m m i l i t o n e n

6 b e i m h o c h s c h u l s p o r t f i n d e t man v i e l e /* g u t e */ k u r s e 7 im s o m m e r ist es warm , im w i n t e r /* n i c h t */ i m m e r

8 m a t h e ist /* oft */ a n s t r e n g e n d , /* p h y s i k */ l e i d e r a u c h 9 das l e r n e n /* in der // g r u p p e */ m a c h t s p a s s

10 schoen , /* b a l d */ ist w o c h e n e n d e

11 k o m m e n t a r e s i n d /* s e h r */ b l o e d // f i n d e ich

(6)

Teil III: Fehlersuche

Aufgabe 1: Fehlerhafte Kommentare finden

Im folgenden Programm befinden sich f¨ur seine Gr¨oße recht viele Kommentare. Leider hat der Programmierer hier und dort den einen oder anderen Fehler gemacht.

Fehlerhaftes Programm:

1 # i n c l u d e < s t d i o . h > /* k o m m e n t a r 2

3 int m a i n ( int argc , k o m m e n t a r c h a r ** a r g v ) 4 // h i e r ist g a n z /* v i e l

5 k o m m e n t a r s o g a r u e b e r */

6 // d r e i z e i l e n

7 { /* s c h o n w i e d e r ein /* e i n f a c h e r */ k o m m e n t a r */

8 int // k o m m e n t a r m i t t e n i ; d r i n

9 if ( i == 2 )

10 h i e r a u c h p r i n t f ( " t r u e \ n " ) ;

11 e l s e p r i n t f ( " f a l s e \ n " ) ; /* und j e t z t ist a b e r s c h l u s s

12 }

Viele dieser Kommentare sind v¨ollig sinnfrei. Aber dennoch, finde und korrigiere sie. Be- denke, dass es immer mehrere M¨oglichkeiten gibt, die Fehler zu korrigieren. Entscheide dich jeweils f¨ur eine. Bei richtig gesetzten Kommentaren sollte der Compiler folgendes Programm sehen, sofern er selbige entfernt hat:

Programm, wie es ohne Kommentare sein sollte:

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 int i ;

6 if ( i == 2 )

7 p r i n t f ( " t r u e \ n " ) ; 8 e l s e p r i n t f ( " f a l s e \ n " ) ;

9 }

Die Richtigkeit der durchgef¨uhrten Korrekturen l¨asst sich sehr einfach feststellen. Einfach mal das Kommandocpp <datei.c>ausf¨uhren, wobei<datei.c>nat¨urlich durch den rich- tigen Dateinamen zu ersetzen ist. Am Anfang steht sehr viel, das alles mit stdio.hzu tun hat. Am Ende jedoch sollte das Programm richtig erscheinen (unter Umst¨anden sind aber die Zeilen ein wenig verrutscht). Statt cppkann nat¨urlich auchgcc -Everwendet werden.

7-5 Wintersemester 2021/22, Einf¨uhrung in die Praktische Informatik

(7)

Fehlerbeschreibung:

Zeile Fehler Erl¨auterung Korrektur

1 */ fehlt Die schließende Kommentarklammer */ fehlt. */ erg¨anzen

. . . .

3 /*...*/

fehlen ”kommentar“ steht nicht in Kommentarklammern. /*. . . */

erg¨anzen

. . . .

4 Alles v¨ollig korrekt.

. . . .

5 /* oder //

fehlen

Der Kommentar wird zwar beendet, aber die ¨offnende Klammer fehlt.

/* oder //

erg¨anzen

. . . .

6 Alles v¨ollig korrekt

. . . .

7 falsche Schachtelung

Durch/*ist der hintere Teil kein Kommentar, da man Kommentare so nicht schachteln kann.

neu anfangen

. . . .

8 i ist im Kommentar

Die Variableiist leider im Kommentar. Hier muss der Kommentar vorher beendet und anschließend wieder angefangen werden.

*/ und //

erg¨anzen

. . . .

9 Alles v¨ollig korrekt.

. . . .

10 /*...*/

fehlen

Die ersten beiden W¨orter sind zu viel. Diese m¨ussen durch weitere Kommentarklammern

”entfernt“ wer- den.

/*...*/

erg¨anzen

. . . .

11 */ fehlt Die schließende Kommentarklammer */ fehlt entwe- der */ am Ende erg¨anzen oder // am Kommentaran- fang.

*/ erg¨anzen

Wir haben das schreckliche Programm jedenfalls wie folgt korrigiert:

Korrigiertes Programm:

1 # i n c l u d e < s t d i o . h > /* k o m m e n t a r */

2

3 int m a i n ( int argc , /* k o m m e n t a r */ c h a r ** a r g v ) 4 // h i e r ist g a n z /* v i e l

5 // k o m m e n t a r s o g a r u e b e r */

6 // d r e i z e i l e n

7 { /* s c h o n w i e d e r ein /* e i n f a c h e r */ /* k o m m e n t a r */

8 int /* k o m m e n t a r m i t t e n */ i ; // d r i n

9 if ( i == 2 )

10 /* h i e r a u c h */ p r i n t f ( " t r u e \ n " ) ;

11 e l s e p r i n t f ( " f a l s e \ n " ) ; // und j e t z t ist a b e r s c h l u s s

12 }

(8)

Teil IV: Anwendungen

In diesem Aufgabenteil sollt ihr schlecht formatierte Programme durch Verwenden von Leerzeichen und Zeilenumbr¨uchen so umwandeln, dass derenStruktur sofort erkennbar ist.

Aufgabe 1: Ein erstes, einfaches Programm

1 # include < 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 int i , j ; 6 if ( i < j )

7 for ( i =0; i < 1 0 ; i = i +1) 8 p r i n t f ( " ha ha \ n " ) ; 9 e l s e

10 if ( i == j )

11 for ( i =0; i <3; i = i +1) 12 for ( j =0; j < 1 0 ; j = j +1) 13 p r i n t f ( " ho ho \ n " ) ; 14 e l s e

15 p r i n t f ( " t o t a l b l o e d \ n " ) ; 16 }

Neue Formatierung:

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 int i , j ;

6 if ( i < j )

7 for ( i = 0; i < 10; i = i + 1 )

8 p r i n t f ( " ha ha \ n " ) ;

9 e l s e if ( i == j )

10 for ( i = 0; i < 3; i = i + 1 )

11 for ( j = 0; j < 10; j = j + 1 )

12 p r i n t f ( " ho ho \ n " ) ;

13 e l s e p r i n t f ( " t o t a l b l o e d \ n " ) ;

14 }

Dies ist nur eine von vielen M¨oglichkeiten. Hauptsache die Programmstrukur ist auf den ersten Blickerkennbar!

7-7 Wintersemester 2021/22, Einf¨uhrung in die Praktische Informatik

(9)

Aufgabe 2: Ein zweites, einfaches Programm

1 # include < 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 int i , j ; 6 if ( i < j )

7 for ( i =0; i < 1 0 ; i = i +1) 8 if ( i = = 3 )

9 for ( j =0; j <3; j = j +1) 10 p r i n t f ( " ha ha \ n " ) ; 11 e l s e

12 p r i n t f ( " ho ho \ n " ) ; 13 e l s e

14 p r i n t f ( " t o t a l b l o e d \ n " ) ; 15 }

Neue Formatierung: (Konsistent, aber mit vielen geschweiften Klammern) 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 int i , j ;

6 if ( i < j )

7 {

8 for ( i = 0; i < 10; i = i + 1)

9 {

10 if ( i == 3)

11 {

12 for ( j = 0; j < 3; j = j + 1)

13 {

14 p r i n t f ( " ha ha \ n " ) ;

15 }

16 }

17 e l s e {

18 p r i n t f ( " ho ho \ n " ) ;

19 }

20 }

21 }

22 e l s e {

23 p r i n t f ( " t o t a l b l o e d \ n " ) ;

24 }

25 }

(10)

Ohne alle nicht unbedingt notwendigen geschweiften Klammern h¨atten wir folgendes, recht kompaktes Programm:

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 int i , j ;

6 if ( i < j )

7 for ( i = 0; i < 10; i = i + 1)

8 if ( i == 3)

9 for ( j = 0; j < 3; j = j + 1)

10 p r i n t f ( " ha ha \ n " ) ; 11 e l s e p r i n t f ( " ho ho \ n " ) ; 12 e l s e p r i n t f ( " t o t a l b l o e d \ n " ) ;

13 }

Aufgabe 3: Ein drittes, einfaches Programm

1 # i n c l u d e /* e i n g a b 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 int i

6 ; if ( i

7 == 2 ) p r i n t f ( " t r u e \ n " ) ; e l s e p r i n t f 8 ( " f a l s e \ n " ) ;

9

10 }

Neue Formatierung:

1 # i n c l u d e < s t d i o . h > /* e i n g a b e */

2

3 int m a i n ( int argc , c h a r ** a r g v )

4 {

5 int i ;

6 if ( i == 2 )

7 p r i n t f ( " t r u e \ n " ) ; 8 e l s e p r i n t f ( " f a l s e \ n " ) ;

9 }

Bei diesem Programm haben wir zwecks ¨Ubersichtlichkeit und erkennbarer Programm- struktur zus¨atzlich die Inhalte zwischen den Zeilen hin- und hergeschoben.

7-9 Wintersemester 2021/22, Einf¨uhrung in die Praktische Informatik

Referenzen

ÄHNLICHE DOKUMENTE

Es ist ausdrücklich untersagt, das PDF, Ausdrucke des PDFs sowie daraus entstandene Objekte weiterzuverkaufen oder gewerblich zu

Die linke und die rechte Ecke komplett zur Unterkante falten und die Kanten kräftig nachziehen.. Das

[r]

Positionieren Sie dazu den Cursor vor dem ersten Buchstaben des Worts, des Satzes oder der Absätze, die Sie auswählen möchten.. Halten Sie die linke Maustaste gedrückt,

Klicken Sie auf Rechtsbündig ausrichten, damit der Text am rechten Rand ausgerichtet ist.. Rechtsbündig ausrichten wird für kurze

Überlege dir Satz für Satz, welche Schlüsselwörter eine wichtige Information über den Kontinent enthalten, und markiere diese Wörter.. Formatiere den Text so, dass man ihn

Überlege dir Satz für Satz, welche Schlüsselwörter eine wichtige Information über den Kontinent enthalten, und markiere diese Wörter.. Formatiere den Text so, dass man ihn

Hieraus folgt, daß auch bei dringendem Wohnbedarf eine Befreiung nicht in Betracht kommt, wenn mit ihr ein Berufungs- fall für die übrigen Eigentümer im Plangebiet geschaffen und