• Keine Ergebnisse gefunden

¨Ubungspaket 11 Schleifen

N/A
N/A
Protected

Academic year: 2021

Aktie "¨Ubungspaket 11 Schleifen"

Copied!
18
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungspaket 11 ¨ Schleifen

Ubungsziele: ¨

1. Umgang mit den Schleifen in C 2. Wahl des richtigen Schleifentyps

3. Umwandlung der Schleifen ineinander Skript:

Kapitel: 26 bis 28 Semester:

Wintersemester 2021/22 Betreuer:

Thomas, Tim und Ralf Synopsis:

Gegenstand dieses ¨ Ubungspakets ist das Ein¨ uben der Schleifenkon-

strukte, die in der Vorlesung erl¨ autert wurden. Dabei verfolgen die

Aufgaben zwei Ziele: erstens, das Automatisieren und routinierte An-

wenden der Schleifen-Befehle, und zweitens, das Erarbeiten grundle-

gender Entwurfs- bzw. Programmiermuster.

(2)

Teil I: Stoffwiederholung

Aufgabe 1: Syntax der Schleifenbefehle

Wie lauten die drei unterschiedlichen Schleifenkonstrukte/-befehle, wie lautet deren Syntax und wie sehen ihre zugeh¨ origen Struktogramme aus?

Befehl:

Struktogramm:

Syntaxdiagramm:

Befehl:

Struktogramm:

Syntaxdiagramm:

Befehl:

Struktogramm:

Syntaxdiagramm:

(3)

Aufgabe 2: Detailfragen zu Schleifen

1. Wann m¨ ussen die Anweisungen des Schleifenblocks, also diejenigen Anweisungen, die wiederholt werden sollen, in geschweifte Klammern {} gesetzt werden? Wann k¨ onnen diese Klammern entfallen?

2. Wie viele Anweisungen m¨ ussen mindestens im Anweisungsblock stehen?

Mindestens:

Hinweis:: Auch die Leeranweisung ist eine Anweisung. Wie wird diese Leeranweisung in C geschrieben? Leeranweisung:

3. Wo steht in den Schleifenbefehlen jeweils die Bedingung? Unterstreiche jeweils in der ersten Teilaufgabe.

4. Bei welchen Werten der Schleifenbedingung wird die Schleife beendet?

Ende wenn:

5. Bei welchen Werten der Schleifenbedingung wird die Schleife nicht abgebrochen?

Weiter wenn:

6. Erl¨ autere kurz, wann welche Teile der for-Schleife ausgef¨ uhrt werden?

1. Teil:

2. Teil:

3. Teil:

7. Wie viele Wertzuweisungen d¨ urfen im dritten Teil der for-Schleife stehen?

8. Wandle die Schleife for( exp1 ; exp2; exp3 ) Anweisung; in eine entsprechende while bzw. do-while-Schleife um:

while-Schleife: do-while-Schleife:

(4)

Teil II: Quiz

Aufgabe 1: Formatierte Ausgabe

Gegeben sei folgendes 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 , end ;

6 s c a n f ( " % d " , & end ) ;

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

8 {

9 for ( j = 0; j < end * 2; j = j + 1 )

10 p r i n t f ( " * " ) ; 11 p r i n t f ( " \ n " ) ;

12 }

13 r e t u r n 0;

14 }

In dieser Quizaufgabe sollt ihr herausfinden, was obiges Programmst¨ uck eigentlich macht;

ist also die ¨ ubliche Aufgabe eurer Betreuer ;-) F¨ uhre f¨ ur obiges Programm f¨ ur die Eingabe 1 eine Handsimulation durch:

Zeile Variablen Aktion Resultat/Effekt

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

(5)

Im Folgenden werden wir schrittweise, von innen nach außen, versuchen, uns die Funkti- onsweise des Programms zu erschließen. Beantworte dazu der Reihe nach folgende Fragen.

Beschreibe zun¨ achst, was die innere Schleifen macht, die sich in den Zeilen 9-11 befindet.

Beschreibe kurz, was die ¨ außere Schleife macht, die sich von Zeile 7-12 erstreckt.

Fasse die beiden obigen Erkl¨ arungen in einem kurzen, pr¨ agnanten Satz zusammen.

Warum wurden die for()-Schleifen gew¨ ahlt?

Aufgabe 2: Eingabeverarbeitung

Gegeben sei folgendes 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 in , cnt = 0;

6 s c a n f ( " % d " , & in ) ;

7 w h i l e ( in != 10 && in > 0 )

8 {

9 cnt = cnt + 1;

10 s c a n f ( " % d " , & in ) ;

11 }

12 p r i n t f ( " cnt = % d \ n " , cnt ) ;

13 r e t u r n 0;

14 }

(6)

Eingabe: 20 1 13 9 -1 2 10

Zeile Variablen Aktion Resultat/Effekt

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Beschreibe zun¨ achst, was die Schleife macht, die sich von Zeile 7 bis Zeile 11 erstreckt.

Beschreibe nun, was das ganze Programm macht.

Fasse die beiden obigen Erkl¨ arungen in einem kurzen, pr¨ agnanten Satz zusammen.

Warum wurde die while()-Schleife gew¨ ahlt?

(7)

Teil III: Fehlersuche

Aufgabe 1: Erstellen einer Ausgabezeile

Das folgende Programm soll eine Zeile ausgeben, in der genau zehn Sternchen zu sehen sind. Finde die Fehler und korrigiere direkt im 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 ;

6 for ( i = 2 , i <= 10; i ++ ) ;

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

9 }

Das folgende Programm soll solange Zahlen einlesen, wie diese ungleich 0 sind. Dabei soll gez¨ ahlt und ausgegeben werden, wie viele negative Zahlen im Eingabestrom vorkamen:

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 n , cnt ;

6 s c a n f ( " % d " ; n ) ;

7 w h i l e ( n = 0 )

8 {

9 if ( n < > 0 )

10 cnt + 1;

11 s c a n f ( % d , & n ) ;

12 }

13 p r i n t f ( % d n e g a t i v e Z a h l e n g e f u n d e n \ n " , cnt ) ;

14 }

(8)

Teil IV: Anwendungen

Aufgabe 1: Eine erste, einfachste Schleife

1. Aufgabenstellung

Schreibe ein Programm, das 46 mal den Satz Nur Uebung macht den Meister aus- gibt. ¨ Uberlege und begr¨ unde (bei der Implementierung), welche der obigen drei Schlei- fenkonstrukte problemad¨ aquat ist.

2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨ alle

3. Testdaten

Entf¨ allt, da keine Daten eingelesen werden m¨ ussen.

4. Implementierung

5. Kodierung

(9)

Aufgabe 2: Eine zweite, einfachste Schleife

1. Aufgabenstellung

Schreibe ein Programm, das die Zahlen von 1 bis 100 in einer Zeile ausgibt, wo- bei zwischen den Zahlen immer genau ein Leerzeichen stehen soll. ¨ Uberlege und begr¨ unde (bei der Implementierung), welche der obigen drei Schleifenkonstrukte pro- blemad¨ aquat ist.

2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨ alle

3. Testdaten

Entf¨ allt, da keine Daten eingelesen werden m¨ ussen.

4. Implementierung

5. Kodierung

(10)

Aufgabe 3:

” Rechnen“ mit Schleifen

Die folgenden Aufgaben ¨ ahneln sehr den beiden ersten kleinen Aufgaben. Daher kannst du i.d.R. gleich mit der Implementierung oder bei gen¨ ugend Sicherheit gleich mit der Kodierung anfangen. ¨ Uberlege auch, inwiefern du die einzelnen

” Grenzen“ fest kodierst oder mittels einer geeigneten Eingabeanweisung interaktiv vom Benutzer abforderst. F¨ uhre dies an mindestens zwei Aufgaben exemplarisch durch. Auf dieser und der n¨ achsten Seite ist hierf¨ ur gen¨ ugend Platz.

1. Schreibe ein Programm, das mittels einer Schleife die Summe der Zahlen von 1 bis 100 ermittelt; aus ¨ Ubungsgr¨ unden soll nicht die Gaußsche Formel verwendet werden.

2. Gib alle nat¨ urlichen Zahlen zwischen 1 und 100 aus, die durch 4 teilbar sind.

3. Gib alle nat¨ urlichen Zahlen zwischen 1 und 100 aus, die durch 3 und 16 teilbar sind.

4. Schreibe ein Programm, dass alle Schaltjahre zwischen 1900 und 2100 (jeweils ein- schließlich) ausgibt. Die Ausgabe sollte je Zeile eine Jahreszahl enthalten. Zur Erinne- rung: Schaltjahre lassen sich durch vier dividieren. Ein Jahr ist aber kein Schaltjahr, wenn es sich durch 100 teilen l¨ asst. Ausgenommen davon sind alle Jahre, die sich aber durch 400 teilen lassen.

5. Gib alle nat¨ urlichen Zahlen zwischen 1 und 100 aus, die durch 6 oder 8 teilbar sind.

Erweitere das Programm so, dass es nach jeweils 6 gedruckten Zahlen auf den Anfang der n¨ achsten Zeile springt.

Implementierung der Aufgabe . . . :

(11)

Kodierung der Aufgabe . . . :

Implementierung der Aufgabe . . . :

Kodierung der Aufgabe . . . :

(12)

Aufgabe 4:

” Formatierte“ Ausgabe

In vielen Anwendungen ist es unumg¨ anglich, dass die erzielten Ergebnisse geeignet auf- bereitet werden. Ein Teil der zur Verf¨ ugung stehenden M¨ oglichkeiten haben wir bereits in ¨ Ubungspaket 8 kennengelernt. Manchmal reichen diese M¨ oglichkeiten aber nicht aus, sodass man einige Details selbst programmieren muss. In diesem ¨ Ubungspaket besch¨ afti- gen wir uns mit einigen ausgew¨ ahlten Standardelementen. Bearbeite mindestens zwei der folgenden Aufgaben. Die eigentlichen Algorithmen sind wieder so einfach, dass ihr direkt mit der Implementierung bzw. Kodierung anfangen k¨ onnt.

1. Schreibe ein Programm, das die Zahlen von 0 bis 99 in Form einer 10×10 Matrix ausgibt. Die Ausgabe sollte also wie folgt aussehen:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

Hinweis: Die Formatierungsanweisung %2d sorgt daf¨ ur, dass eine nat¨ urliche Zahl mit

zwei Stellen ausgegeben wird. Sollte die Zahl einstellig sein, wird ihr ein Leerzeichen

vorangestellt.

(13)

2. Schreibe ein Program, das mittels einer Schleife acht Zeilen druckt, in der jeweils drei Sternchen stehen. Dabei sollen diese drei Sternchen aber in jeder Zeile um ein Leerzeichen mehr als in der vorangehenden Zeile einger¨ uckt werden. Die Ausgabe soll also wie folgt aussehen:

***

***

***

***

***

***

***

***

Implementierung:

Kodierung:

(14)

3. Schreibe ein Programm, das mittels mehrerer Schleifen folgendes

” Dreieck“ ausgibt:

**********

*********

********

*******

******

*****

****

***

**

*

Implementierung:

Kodierung:

(15)

Aufgabe 5: Eingabeverarbeitung

Bei Programmen, die interaktive Eingaben eines Nutzers verarbeiten, entsteht immer fol- gendes

” Problem“: Als Programmierer weiß man in der Regel nicht, wie viele Eingaben kommen. Daher muss man sich ein geeignetes

” Abbruchkriterium“ ¨ uberlegen, das das En- de der Eingabeverarbeitung angibt. Manchmal folgt so ein Abbruchkriterium unmittelbar aus der Ausgabenstellung, beispielsweise durch Eingabe eines Wertes, der außerhalb des G¨ ultigkeitsbereiches liegt, manchmal aber muss man dieses Abbruchkriterium als Pro- grammierer einfach sinnvoll definieren. Ferner sollte man vor einer Eingabeanweisung eine entsprechende Ausgabe machen, damit der Nutzer weiß, was das Programm von ihm will.

1. Aufgabenstellung

Entwickle ein Programm, das nat¨ urliche Zahlen (also Zahlen gr¨ oßer null) einliest und am Ende die Summe dieser Zahlen ohne das Abbruchkriterium ausgibt.

2. Pflichtenheft

Das Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨ alle

Definiere und begr¨ unde die Wahl eines geeigneten Abbruchkriteriums:

W¨ ahle und begr¨ unde ein Schleifenkonstrukt, das dir problemad¨ aquat erscheint:

3. Testdaten

Testreihe Zahlenfolge Summe Kommentar

1

. . . .

2

. . . .

3

. . . .

(16)

4. Implementierung

5. Kodierung

Aufgabe 6: Bestimmung eines indirekten Parameters

1. Aufgabenstellung

Entwickle ein Programm, das folgende Funktion hat: Der Nutzer muss eine ganze Zahl z eingeben. Das Programm soll dann denjenigen Index i bestimmen, f¨ ur den gilt: P i i 3 ≤ z. Neben dem Index soll das Programm auch die Kubikzahlen und deren Summe ausgeben.

Beispiel: Eingabe: 105

Ausgabe: Index= 4 Kubikzahlen= 1 8 27 64 Summe= 100

2. Pflichtenheft: Aufgabe, Eingabe, Ausgabe, Sonderf¨ alle

(17)

3. Testdaten

Zahl z Index i Kubiksumme s

. . . . . . . . . . . .

Zahl z Index i Kubiksumme s

. . . . . . . . . . . .

4. Implementierung

5. Kodierung

(18)

Referenzen

ÄHNLICHE DOKUMENTE

Eine gr¨oßte Zahl gibt es nicht, denn die Zahl 200 000 000 001 ist noch gr¨oßer, und durch weiteres Verdoppeln oder +1-Addieren kann man immer noch gr¨oßere Zahlen

Jahrhundert ist die Rei- he beil¨aufig erw¨ahnt worden (z.B. von Jakob Bernoulli), und einen N¨aherungswert der Summe der Reihe berechnete Stirling (1730), aber den exakten Wert π 6

Ein metrischer Raum (M , d ) heißt vollst¨ andig, wenn jede Cauchyfolge in M konvergiert.. Ist ein normierter Raum vollst¨ andig, so heißt

Auch die Scherungsinvarianz l¨asst sich aus (D1-3) herlei- ten.. Ent- sprechend hat man Linkssysteme f¨ur die linke Hand. Jedes unabh¨angige Tripel von Vek- toren bildet entweder

enum Wochentyp {Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag};.. enum

Schreibe ein Programm, das mittels einer Schleife die Summe der Zahlen von 1 bis 100 ermittelt; aus ¨ Ubungsgr¨ unden soll nicht die Gaußsche Formel verwendet werden.. Gib alle

 Idee: zwei orthogonale Schlitten, die hin- und herfahren und gemeinsam einen Stift führen.  Schlitten werden durch periodische Funktionen

Die Differenz aus 45 und 22 ist der Subtrahend in einer Differenz, wo der Minuend die Summe aller nat¨ urlichen Zahlen von 1 bis 20 ist.. Berechne die