Übungspaket 7 Angemessenes Formatieren von C-Programmen

Ähnliche Dokumente
Übungspaket 7 Angemessenes Formatieren von C-Programmen

Übungspaket 9 Logische Ausdrücke

Übungspaket 10 Fallunterscheidungen

Übungspaket 12 Der Datentyp char

Übungspaket 17 Der gcc Compiler

Übungspaket 12 Der Datentyp char

Übungspaket 20 Zeiger und Zeigervariablen

Übungspaket 14 Eindimensionale Arrays

Übungspaket 25 Kommandozeilenargumente

Übungspaket 22 Rekursive Funktionsaufrufe

Übungspaket 3 Mein erstes Programm: Fläche eines Rechtecks

Übungspaket 4 Klassifikation von Dreiecken

Übungspaket 23 Mehrdimensionale Arrays

Übungspaket 8 Datentyp int

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Übungspaket 23 Mehrdimensionale Arrays

Übungspaket 13 Der Datentyp double

Übungspaket 17 Der gcc Compiler

Übungspaket 8 Datentyp int

Übungspaket 13 Der Datentyp double

Übungspaket 5 Abstrakte Programmierung

Übungspaket 20 Zeiger und Zeigervariablen

Übungspaket 1 Grundlagen: von der Hardware zum Programmieren

Übungspaket 1 Grundlagen: von der Hardware zum Programmieren

Übungspaket 28 Module und getrenntes Übersetzen

Übungspaket 11 Schleifen

Bedingte Anweisungen

Einführung in die Programmierung Wintersemester 2011/12

Übungspaket 6 Arbeiten mit Syntaxdiagrammen

Objektorientierte Programmierung - Was ist Programmieren?

Übungspaket 32 Einfach verkettete, sortierte Liste

Einführung in die Programmierung

Einführung Java Programmieren in Java Arrays Schleifen Fehler. Einführung in Java. Arne Hüffmeier. Michelle Liebers, Dennis Hoffmann

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Übungspaket 3 Mein erstes Programm: Fläche eines Rechtecks

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Java Ablaufsteuerung (Beispiele)

Übungspaket 21 Funktionen mit Zeigern und Arrays als Parameter

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 22 Rekursive Funktionsaufrufe

Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung Anleitung

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

Java Anweisungen und Ablaufsteuerung

Einstieg in die Informatik mit Java

C# - Einführung in die Programmiersprache Bedingte Anweisungen und Schleifen

Übungspaket 24 Zeichenketten

II ELEMENTARES PROGRAMMIEREN IN C++

Einstieg in die Informatik mit Java

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Syntax der Sprache PASCAL

Schleifen: Immer wieder dasselbe tun

06 While-Schleifen. While-Schleifen 1/7 Wiederholung: Schleifen

2.5 Programmstrukturen Entscheidung / Alternative

Einführung in die Informatik I

Übungspaket 5 Abstrakte Programmierung

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"

GI Vektoren

Schleifen in Javascript

PIC16 Programmierung in HITECH-C

Schöner Programmieren

Schöner Programmieren

Peter Prinz. Das Übungsbuch. CTestfragen und Aufgaben mit Lösungen

Einstieg in die Informatik mit Java

Kompaktkurs Einführung in die Programmierung. 4. Kontrollstrukturen

Kapitel 4. Kontrollstrukturen

Übungspaket 30 Kopieren von Dateien

Kapitel 4. Kontrollstrukturen

1.8.5 Wiederholungen. Beispiele Unendliche Schleife: 1.8 Kontrollstrukturen 75. ( Bedingung ) AnweisungOderBlock. ja Anweisung. Bedingung erfüllt?

Übungspaket 19 Programmieren eigener Funktionen

C-Propädeutikum Anweisungen

Übungen zu Programmieren - Code-Formatierung -

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Grundlegende Programmstrukturen sind Sequenzen, Schleifen und Entscheidungen.

<? $ZeilenMax = 9; $SpaltenMax = 9; echo "<pre>";

Schleifen in C/C++/Java

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Programmierstarthilfe SS 2010 Fakultät für Ingenieurwissenschaften und Informatik 2. Blatt Für die Woche vom 3.5. bis zum 7.5.

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Einführung in die Programmierung II. 3. Kontrollstrukturen

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Programmierkurs Java

Aufgabe 1.90: Ein Geschäft gibt ihren Kunden unterschiedliche Rabatte. Schreiben ein Programm, das folgende Rabattklassen vorsieht:

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Programmieren I + II Regeln der Code-Formatierung

Arithmetik in der tcsh

hue12 January 24, 2017

Transkript:

Übungspaket 7 Angemessenes Formatieren von C-Programmen Übungsziele: Skript: 1. Gute Layout-Struktur durch Einrücken. Richtiges Verwenden von Kommentaren Kapitel: 19 Semester: Wintersemester 018/19 Betreuer: Thomas, Tim und Ralf Synopsis: Das Kodieren eines Algorithmus in ein C-Programm und das Eintippen 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 angemessenes Einrücken, was wir hier ein wenig üben wollen.

Teil I: Stoffwiederholung Aufgabe 1: Kommentare In der Programmiersprache C gibt es zwei Möglichkeiten, Kommentare zu verwenden. Erkläre kurz die Syntax und zeige ein Beispiel. Möglichkeit 1: Syntax Die erste Möglichkeit erfordert sowohl öffnende /* als auch schließende */ Klammern und kann sich über mehrere Zeilen erstrecken. Beispiel int i /* hier ist ein kommentar der hier zu ende ist */ = -1; Möglichkeit : Syntax Die zweite Möglichkeit besteht in //. Derartige Kommentare beginnen mit // und gehen immer bis zum Ende der Zeile. Bei mehrzeiligen Kommentaren ist das // entsprechend in jeder Zeile zu wiederholen. Beispiel int i = // variablendefinition -1; // initialisierung Aufgabe : Geschachtelte Kommentare Erkläre kurz, wie man Kommentare schachteln kann und was dabei passiert. Natürlich kann man Kommentare schachteln wie man will, nur muss man verstehen, was dabei passiert. Die wesentliche Frage ist immer, welche Kommentarform die äuß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. /*... */-Kommentare: Egal, was man hier hineinschreibt, der Kommentar ist beim Auftreten des ersten */ zu Ende, egal ob dies in der selben oder einer späteren Zeile der Fall ist. Beispiel: /* aeusserer kommentar */ kein kommentar mehr */ 7-1 Wintersemester 018/19, Einführung in die Praktische Informatik

Aufgabe 3: Angemessenes Einrücken Erkläre kurz in eigenen Worten, warum wir als Lehrpersonal so sehr auf eine angemessene Form des Einrückens Wert legen. Ein C-Programm besteht in der Regel aus Variablendefinitionen und Anweisungsblöcken. Ein Charakteristikum von Anweisungsblöcken ist, dass sie aus verschiedenen Elementen wie Fallunterscheidungen, Schleifen und weiteren Anweisungen bestehen, die ineinander verschachtelt sein können. Daraus ergibt sich eine logische Strukur. Für das Finden möglicher Fehler ist es für alle sehr hilfreich, wenn man die intendierte Struktur auf den ersten Blick erfasst. Damit vermeidet man nicht nur Fehler, sondern sieht sehr schnell, wo möglicherweise Klammern fehlen oder zu viele gesetzt sind. Aufgabe 4: Recherche Recherchiere etwa fünf bis zehn Minuten im Web zum Thema Einrücken in C und notiere deine zwei Favoriten. Mögliche Schlagwörter sind: einruecken c programm Die meisten von uns favorisieren einen Einrückstil, der sehr stark dem Allman/BSD/ East Coast Stil ähnelt. Ihr könnt selbstverständlich euren Einrückstil frei wählen, solange er auch tatsächlich einrückt (also nicht linksbündig schreibt), konsistent ist und alle Beteiligten damit zurecht kommen. Einführung in die Praktische Informatik, Wintersemester 018/19 7-

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ür 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 heute ist ein /* schoener */ tag gestern schien die sonne // den ganzen tag 3 /* das */ lernen der /* pro gr am mi er sp ra ch e C */ ist anstrengend 4 // ich wuenschte, das studium waere schon fertig 5 ich habe /* sehr /* nette */ */ kommilitonen 6 beim hochschulsport findet man viele /** gute */ kurse 7 im sommer ist es warm, im winter /* nicht **/ immer 8 mathe ist /* oft * / anstrengend, /* physik */ leider auch 9 das lernen /* in der // gruppe */ macht spass 10 schoen, // bald */ ist wochenende 11 kommentare sind /* sehr * / bloed // finde ich Im Text haben wir folgende Kommentare gefunden: Zeile Kommentar 1 /* schoener */ // 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 018/19, Einführung in die Praktische Informatik

Die im Text verwendete Schreibweise legt nahe, dass einige Tippfehler passiert sind, die folgende Korrekturen nahelegen: Zeile Korrektur Begründung 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 heute ist ein /* schoener */ tag gestern schien die sonne // den ganzen tag 3 /* das */ lernen der /* pro gr am mi er sp ra ch e C */ ist anstrengend 4 // ich wuenschte, das studium waere schon fertig 5 ich habe /* sehr nette */ kommilitonen 6 beim hochschulsport findet man viele /* gute */ kurse 7 im sommer ist es warm, im winter /* nicht */ immer 8 mathe ist /* oft */ anstrengend, /* physik */ leider auch 9 das lernen /* in der // gruppe */ macht spass 10 schoen, /* bald */ ist wochenende 11 kommentare sind /* sehr */ bloed // finde ich Einführung in die Praktische Informatik, Wintersemester 018/19 7-4

Teil III: Fehlersuche Aufgabe 1: Fehlerhafte Kommentare finden Im folgenden Programm befinden sich für seine Größe recht viele Kommentare. Leider hat der Programmierer hier und dort den einen oder anderen Fehler gemacht. Fehlerhaftes Programm: 1 # include < stdio. h > /* kommentar 3 int main ( int argc, kommentar char ** argv ) 4 // hier ist ganz /* viel 5 kommentar sogar ueber */ 6 // drei zeilen 7 { /* schon wieder ein /* einfacher */ kommentar */ 8 int // kommentar mitten i; drin 9 if ( i == ) 10 hier auch printf ( " true \n" ); 11 else printf ( " false \ n" ); /* und jetzt ist aber schluss 1 } Viele dieser Kommentare sind völlig sinnfrei. Aber dennoch, finde und korrigiere sie. Bedenke, dass es immer mehrere Möglichkeiten gibt, die Fehler zu korrigieren. Entscheide dich jeweils für eine. Bei richtig gesetzten Kommentaren sollte der Compiler folgendes Programm sehen, sofern er selbige entfernt hat: Programm, wie es ohne Kommentare sein sollte: 1 # include <stdio.h> 5 int i; 6 if ( i == ) 7 printf ( " true \n" ); 8 else printf ( " false \n" ); 9 } Die Richtigkeit der durchgeführten Korrekturen lässt sich sehr einfach feststellen. Einfach mal das Kommando cpp <datei.c> ausführen, wobei <datei.c> natürlich durch den richtigen Dateinamen zu ersetzen ist. Am Anfang steht sehr viel, das alles mit stdio.h zu tun hat. Am Ende jedoch sollte das Programm richtig erscheinen (unter Umständen sind aber die Zeilen ein wenig verrutscht). Statt cpp kann natürlich auch gcc -E verwendet werden. 7-5 Wintersemester 018/19, Einführung in die Praktische Informatik

Fehlerbeschreibung: Zeile Fehler Erläuterung Korrektur 1 */ fehlt Die schließende Kommentarklammer */ fehlt. */ ergänzen 3 /*...*/ kommentar steht nicht in Kommentarklammern. /*... */ fehlen ergänzen 4 Alles völlig korrekt. 5 /* oder // Der Kommentar wird zwar beendet, aber die öffnende /* oder // ergänzen fehlen Klammer fehlt. 6 Alles völlig korrekt 7 falsche Durch /* ist der hintere Teil kein Kommentar, da man Schachtelung Kommentare so nicht schachteln kann. neu anfangen 8 i ist im Kommentar Die Variable i ist leider im Kommentar. Hier muss der Kommentar vorher beendet und anschließend wieder angefangen werden. */ und // ergänzen 9 Alles völlig korrekt. 10 /*...*/ fehlen Die ersten beiden Wörter sind zu viel. Diese müssen durch weitere Kommentarklammern entfernt werden. /*...*/ ergänzen 11 */ fehlt Die schließende Kommentarklammer */ fehlt entweder */ am Ende ergänzen oder // am Kommentaranfang. Wir haben das schreckliche Programm jedenfalls wie folgt korrigiert: Korrigiertes Programm: */ ergänzen 1 # include < stdio. h > /* kommentar */ 3 int main ( int argc, /* kommentar */ char ** argv ) 4 // hier ist ganz /* viel 5 // kommentar sogar ueber */ 6 // drei zeilen 7 { /* schon wieder ein /* einfacher */ /* kommentar */ 8 int /* kommentar mitten */ i; // drin 9 if ( i == ) 10 /* hier auch */ printf ( " true \n" ); 11 else printf ( " false \ n" ); // und jetzt ist aber schluss 1 } Einführung in die Praktische Informatik, Wintersemester 018/19 7-6

Teil IV: Anwendungen In diesem Aufgabenteil sollt ihr schlecht formatierte Programme durch Verwenden von Leerzeichen und Zeilenumbrüchen so umwandeln, dass deren Struktur sofort erkennbar ist. Aufgabe 1: Ein erstes, einfaches Programm 1 # include < stdio.h> 5 int i, j; 6 if(i<j) 7 for (i =0;i <10; i=i +1) 8 printf ("ha ha\n"); 9 else 10 if(i==j) 11 for (i =0;i <3; i=i +1) 1 for (j =0;j <10; j=j +1) 13 printf ("ho ho\n"); 14 else 15 printf (" total bloed \n"); 16 } Neue Formatierung: 1 # include <stdio.h> 5 int i, j; 6 if (i < j ) 7 for ( i = 0; i < 10; i = i + 1 ) 8 printf ( "ha ha\n" ); 9 else if( i == j ) 10 for ( i = 0; i < 3; i = i + 1 ) 11 for ( j = 0; j < 10; j = j + 1 ) 1 printf ( "ho ho\n" ); 13 else printf ( " total bloed \n" ); 14 } Dies ist nur eine von vielen Möglichkeiten. Hauptsache die Programmstrukur ist auf den ersten Blick erkennbar! 7-7 Wintersemester 018/19, Einführung in die Praktische Informatik

Aufgabe : Ein zweites, einfaches Programm 1 # include < stdio.h> 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 printf ("ha ha\n"); 11 else 1 printf ("ho ho\n"); 13 else 14 printf (" total bloed \n"); 15 } Neue Formatierung: (Konsistent, aber mit vielen geschweiften Klammern) 1 # include <stdio.h> 5 int i, j; 6 if (i < j) 7 { 8 for ( i = 0; i < 10; i = i + 1) 9 { 10 if (i == 3) 11 { 1 for ( j = 0; j < 3; j = j + 1) 13 { 14 printf ("ha ha\n"); 15 } 16 } 17 else { 18 printf ("ho ho\n"); 19 } 0 } 1 } else { 3 printf (" total bloed \n"); 4 } 5 } Einführung in die Praktische Informatik, Wintersemester 018/19 7-8

Ohne alle nicht unbedingt notwendigen geschweiften Klammern hätten wir folgendes, recht kompaktes Programm: 1 # include <stdio.h> 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 printf ("ha ha\n"); 11 else printf ("ho ho\n"); 1 else printf (" total bloed \n"); 13 } Aufgabe 3: Ein drittes, einfaches Programm 1 # include /* eingabe */ < stdio. h > 5 int i 6 ; if ( i 7 == ) printf ( " true \n" ); else printf 8 ( " false \n" ); 9 10 } Neue Formatierung: 1 # include <stdio.h> /* eingabe */ 5 int i; 6 if ( i == ) 7 printf ( " true \n" ); 8 else printf ( " false \n" ); 9 } Bei diesem Programm haben wir zwecks Übersichtlichkeit und erkennbarer Programmstruktur zusätzlich die Inhalte zwischen den Zeilen hin- und hergeschoben. 7-9 Wintersemester 018/19, Einführung in die Praktische Informatik