• Keine Ergebnisse gefunden

Aufgabe2:ArbeitsweisedesPr¨aprozessorsverstehen Aufgabe1:Schleifen ¨Ubungsblatt8:ProgrammiereninC(WS2018/19) TUKaiserslautern

N/A
N/A
Protected

Academic year: 2022

Aktie "Aufgabe2:ArbeitsweisedesPr¨aprozessorsverstehen Aufgabe1:Schleifen ¨Ubungsblatt8:ProgrammiereninC(WS2018/19) TUKaiserslautern"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Dr. habil. Bernd Sch¨urmann Dr. Annette Bieniusa pinc-support@cs.uni-kl.de

TU Kaiserslautern

Fachbereich Informatik

Ubungsblatt 8: Programmieren in C (WS 2018/19) ¨

Abgabe: Montag, 17.12.18, 12:00

1. Zur Beantwortung von Fragen und Hilfe bei Problemen stehen wir Ihnen immer in der Praktische ¨Ubung, Mittwoch 15:30, Raum 32-410-PC zur Verf¨ugung sowie per Email an pinc-support@cs.uni-kl.de!

2. Sie k¨onnen sich im Exclaim System unterhttps://softech.cs.uni-kl.de/exclaimmit Ihrem pers¨onlichen STATS-Account einloggen und Dateien zu den einzelnen ¨Ubungen hochladen.

3. Die Aufgaben auf diesem ¨Ubungsblatt sind alle freiwillig zu bearbeiten.

Aufgabe 1: Schleifen

Abgabe: schleifen.c in Exclaim

Schreiben Sie ein Programm, das als Eingabe eine ungerade Zahl N einliest und folgende Aus- gaben erstellt (hier f¨ur N=9):

000010000 000111000 001111100 011111110 111111111

N ist dabei die Anzahl der Zeichen pro Zeile. Schreiben Sie Ihre L¨osung in zwei Varianten: mit einerfor- und mit einerwhile- Schleife. [Warum ist eine L¨osung mit einerdo-whileSchleife nicht gut umsetzbar?]. Die Ausgabe soll dann das Muster zweimal enthalten, mit einer Leerzeile getrennt.

Aufgabe 2: Arbeitsweise des Pr¨ aprozessors verstehen

Abgabe: -

Gegeben sei folgender Programmcode vor dem Pr¨aprozessorlauf:

1 #i n c l u d e <s t d i o.h>

2 #d e f i n e E I N S 1

3 #d e f i n e Z W E I 2

4 #d e f i n e D R E I 3

5 #d e f i n e Z W E I _ M A L _ D R E I Z W E I *D R E I

6 #d e f i n e M A L _ Z W E I(x) x * 2

7 #d e f i n e S T A R T m a i n

8

9 int S T A R T(v o i d)

10 {

11 int i, j, k, l, m, x;

12 i = E I N S;

13 j = Z W E I * 5;

14 k = E I N S + Z W E I;

15 l = Z W E I _ M A L _ D R E I;

16 #u n d e f Z W E I

17 #d e f i n e Z W E I 6

18 m = j - Z W E I _ M A L _ D R E I;

19 p r i n t f(" Die Z a h l E I N S \ n ") ;

20 if (2 * M A L _ Z W E I(3 + 1) != 16)

21 {

(2)

22 p r i n t f(" ??? ")

23 }

24

25 r e t u r n (0) ;

26 }

Notieren Sie, wie der Programmcode nach dem Pr¨aprozessorlauf aussehen wird. Wie muss man die Pr¨aprozessor-Direktiven ¨andern, damit die Ausgabe in Zeile 22 verhindert wird?

Aufgabe 3: Noch mehr Arrays

Abgabe: gemeinsam.c in Exclaim

Schreiben Sie ein C-Programm, das zwei Folgen von N int-Werten einliest und die Anzahl der Zahlen ausgibt, die in beiden Folgen vorkommen. Sie k¨onnen davon ausgehen, dass keine Zahl in einer der Folgen mehrmals vorkommt.

Hinweis: Definieren Sie N als Pr¨aprozessor-Konstante N mit Wert 10 f¨ur die Testf¨alle in Ex- claim. F¨uhren Sie Ihre Implementierung vongemeinsam.cschrittweise im Debugger aus, wie in der Vorlesung vorgef¨uhrt. Setzen Sie dazu geeignet Breakpoints an die jeweiligen Schleifen, um die Ver¨anderung der Variablenwerte in den einzelnen Schleifendurchlaufen nachzuvollziehen.

Beispiel: Bei Eingabe von

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 3 2 1 soll folgende Ausgabe3 erfolgen.

Aufgabe 4: Noch mehr Strings

Abgabe: str.c in Exclaim

Schreiben Sie ein C-Programm, das einen String von der Konsole einliest und folgende Infor- mation ermittelt:

• L¨ange des Strings

• Ist der String ein Palindrom?

Verwenden Sie dazukeineBibliotheksfunktionen aus der String-Bibliothek. Definieren die max- imale L¨ange des Strings als Pr¨aprozessor-Konstante mit Wert 61, um gen¨ugend Speicherplatz f¨ur max. 60 Zeichen plus dem Stringterminalsymbol\0bereitzuhalten.

Beispiel: Bei Eingabe vonC ist die beste Programmiersprache der Weltsoll folgende Ausgabe er- folgen:

Der String hat die Laenge 43 und ist kein Palindrom.

Bei Eingabe vonRELIEFPFEILERsoll folgende Ausgabe erfolgen:

Der String hat die Laenge 13 und ist ein Palindrom.

Hinweis: Bei der Eingabe von Strings auf der Kommandozeile wird bei Verwendung vonfgets

der Zeilenumbruch als letztes Zeichen dem Eingabestring hinzugef¨ugt. Um Ihre L¨osung lokal zu testen, sollten Sie Ihren Eingabestring in einer Textdatei (z.B.eingabe.txt abspeichern und diese bei der Ausf¨uhrung auf Kommandozeile folgendermaßen als Eingabe nutzen:

gcc str.c

./a.out < eingabe.txt

Referenzen

ÄHNLICHE DOKUMENTE

Bernd Sch¨

Schreiben Sie eine Funktion bool list_is_sorted(linked_list_t *ll) , welche pr¨ uft ob die in der Liste ll gespeicherten Werte aufsteigend sortiert sind. Aufgabe 5 Duplikate

• Wenn Code von anderen Teams kopiert wurde, werden die Abgaben von beiden Teams mit 0 Punkten bewertet.. • Wir behalten uns vor Punkte auch nachtr¨ aglich abzuziehen, wenn ein

Andern Sie das Programm ab, dass es die ¨ Sekundenanzahl von der Konsole einliest und ¨ andern Sie die Ausgabe, so dass bei Eingabe von 1543165768 folgendes ausgegeben wird:..

Falls ja, werden alle Vorkom- men von ch in searchString eingesetzt; andernfalls soll der Galgen erweitert und aus- gegeben werden (siehe Funktion updateGallow ) und

Your parser should produce an abstract syntax tree built using the classes generated from minijava.ast.. Use the static methods defined in the generated class minijava.ast.MJ to

Annette Bieniusa M.Sc. To construct the automaton for !a, first construct the DFA for a and then invert the final states.?. a) Construct a DFA for each of the given

When type-checking a class or method, this must be entered with the correct type in the typing context Γ, as well as all fields of the class and the respective formal parameters