HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Ähnliche Dokumente
HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Musterlösung. Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Hinweise zur Prüfung Programmieren WS0304 Seite 1. Schreiben Sie folgende For-Schleife in eine äquivalente While-Schleife um.

Probeklausur Name: (c)

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Klausur Informatik WS 2012/13

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

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

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

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

4.2 Programmiersprache C

Martin Unold INFORMATIK. Geoinformatik und Vermessung

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Informatik I Einführung in die Informatik und Programmierung. Klausur

Datum, Uhrzeit: , Uhr Semester: IN1 Note:... Prof. Dr. G. Meixner

Klausur Einführung in die Informatik I für Elektrotechniker 16. Juli 2003

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 18. April 2012

Probeklausur: Programmieren I

Prüfung Informatik D-MATH/D-PHYS :00 11:00

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Praxis der Programmierung

Klausur zu Grundlagen der Programmierung in C

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Repetitorium Programmieren I + II

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

Klausur Programmiertechnik (Probeklausur 1)

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

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

Einstieg in die Informatik mit Java

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Nachname:... Vorname:... MatrNr.:... Klausur PR2. int main() { char Text[] = "Sehr geehrte Damen und Herren!"; char *tmp=text;

Informatik I (D-ITET)

Herzlich willkommen!

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

einlesen n > 0? Ausgabe Negative Zahl

Einführung in die Programmierung

Kontrollfragen Mikrocontroller Programmiersprache C H1203 Felix Rohrer

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

Programmierung für Mathematik (HS13)

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Klausur Programmieren 2 SS 2016

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

1. Aufgabe (6 Punkte)

Technische Universität Braunschweig Institut für Programmierung und Reaktive Systeme

Algorithmen und Datenstrukturen

Klausur Grundlagen der Programmierung

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

WS2018/ Oktober 2018

Klausur Programmiersprachen SS 2005

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Lesen Sie alle Aufgabenstellungen sorgfältig durch, bevor Sie mit der Bearbeitung der ersten Aufgabe beginnen.

Einstieg in die Informatik mit Java

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Kurzeinführung in C99

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

RO-Tutorien 3 / 6 / 12

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Angewandte Mathematik und Programmierung

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Alle Aufgaben beziehen sich auf Java.

Dateizugriff unter C

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Übungspaket 32 Einfach verkettete, sortierte Liste

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

Grundlagen der Informatik

Zusammenfassung des Handzettels für Programmieren in C

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

Welche Informatik-Kenntnisse bringen Sie mit?

printf("%c \n", 'd'); printf("%lx \n", 32L); printf("%o \n", 64); printf("%f \n", 1.0E-2); printf("%d \n", '\r'); printf("%f \n", 1.0/2.

RO-Tutorien 15 und 16

Informatik A WS 2007/08. Nachklausur

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

GI Vektoren

Programmierung und Angewandte Mathematik

Transkript:

HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit, 08:00 10:00 Uhr (120 min) Aufgabenblätter 16 Seiten (einschl. Deckblatt) erreichbare Punktzahl 58 zugelassene Hilfsmittel A (s. Prüfungsplan) Studiengang Prf. Nr. Raum AI 1804 C004 IK 2138 C004 WI 4004 D002 Matrikelnummer: Hinweise: Schreiben Sie bitte Name und Matrikelnummer auf jedes Aufgabenblatt. Schreiben Sie Ihre Lösung zu den Aufgaben auf den freien Platz, direkt anschließend an die Fragestellungen. Wenn Sie zusätzliche Blätter verwenden, so schreiben Sie bitte Name und Matrikelnummer auf jedes Blatt. Schreiben Sie lesbar! Falls Sie es wünschen, dass Ihr Prüfungsergebnis auf einer Liste mit Matrikelnummern und Zensuren ausgehängt bzw. per Internet veröffentlicht wird, unterschreiben Sie bitte folgende Erklärung. Ich bin damit einverstanden, dass mein Klausurergebnis auf diese Weise veröffentlicht wird. Unterschrift: Bitte haben Sie dafür Verständnis, dass aus Gründen das Datenschutzes keine telefonischen Auskünfte gegeben werden können. Vom Prüfer auszufüllen: Aufgabe 1 2 3 4 5 Summe Max. Punkte 13 6 7 22 10 58 Punkte

Seite 2 (16) Vorbemerkung 1. Die Klausur ist ziemlich umfangreich. Lassen Sie sich nicht verunsichern, Sie benötigen nicht alle Punkte für die Note 1.0; Sie benötigen weniger als die Hälfte der Punkte für die Note 4,0. Tipp: Aufgabe 2 ist m.e. relativ schwierig evtl. sollten Sie sie zuletzt bearbeiten. 2. Bitte nehmen Sie sich sofern noch nicht geschehen in den nächsten Tagen ein paar Minuten Zeit und bewerten Sie die Vorlesung und das Praktikum Programmieren. Die Zugangsdaten zum Umfragesystem der FH wurden Ihnen vor einigen Wochen (28.06.2005) per E-Mail zugesendet. Aufgabe 1 Die Funktion countchar() zählt bestimmte Buchstaben in einem String. Die Funktion hat drei Parameter: start: Der Wert dieses Parameter gibt die Stelle im String line an, ab dem die Funktion zählen soll. cntchar: Der Vergleichsbuchstabe line: Der String in dem die Funktion suchen soll Die Funktion soll im String line nach dem Buchstaben cntchar suchen, aber erst ab der durch start angegebenen Stelle. Wenn start den 4 hat und cntchar den Wert a, soll die Funktion feststellen, wie oft der Buchstabe a ab dem 4.(!) Buchstaben des Strings line vorkommt. Die Funktion zählt also, wie oft der Buchstabe cntchar im Rest von line enthalten ist und gibt diesen Wert zurück (s. Bsp. unten). Das Programm: #include <stdio. h> int countchar( int start, char cntchar, char l i n e [ ] ) { : int main(void){ char testchar = a ; int result ; result = countchar (4, testchar, aabaabab ) ; printf ( \n es sind %d Buchstaben %c enthalten \n, result, testchar ) ; return 0; Ausgabe des Programms: es sind 3 Buchstaben a enthalten

Seite 3 (16) 1.1 (5 Punkte) Vervollständigen Sie die Funktion. Sie dürfen annehmen, dass der String line stets mehr als start Buchstaben enthält. int countchar( int start, char cntchar, char l i n e [ ] ) { int countchar( int start, char cntchar, char l i n e [ ] ) { int sum = 0; int i = start 1; while ( l i n e [ i ]!= 0){ if ( l i n e [ i ] == cntchar ){ sum++; i++; return sum ; 1.2 switch-anweisung (4 Punkte) Ersetzen Sie folgende switch-anweisung durch äquivalente if-anweisungen. Die Variable testchar ist definiert (Datentyp char). switch-anweisung: switch ( testchar ){ case a : printf ( \n found an a ); break ; case b : printf ( \n found a b ); default : printf ( \n found nothing ); Äquivalentes Programmstück mit if-anweisung(en): if ( testchar == a ){

Seite 4 (16) if ( testchar == a ){ printf ( \n found an a ) ; else { if ( testchar == b ){ printf ( \n found a b ) ; printf ( \n found nothing );

Seite 5 (16) 1.3 if-anweisung (4 Punkte) Gegeben ist folgende Formel der Aussagenlogik: (a > b) (b = c) Schreiben Sie eine if-anweisung, die diesen Ausdruck auswertet und entsprechend verzweigt. D. h. wenn die Formel den Wert true liefert, soll das Programmstück den String true auf dem Bildschirm ausgeben, ansonsten den String false. Die Variablen a, b und c sind als int definiert. if { printf ( \n true ) ; else { printf ( \n f a l s e ); if (! ( ( a > b) && (b == c ))){... Schreiben Sie die if-anweisung um, so dass kein!-zeichen vor einer Klammer steht. Die Anweisung soll aber ebenfalls die oben gegebene logische Formel realisieren. if { printf ( \n true ) ; else { printf ( \n f a l s e ); if (( a <= b) (b!= c )) {...

Seite 6 (16) Aufgabe 2 Gegeben ist folgendes C-Programm: #include <stdio. h> char mark = B ; float boo( int num, char test ){ float result = num / test ; printf ( \n result = %f, result ) ; test = mark ; test = NULL; return result ; char far (char mark, int values [ ] ) { float test = boo( values [ 1 ], &mark ) ; printf ( \n test = %f, mark = %c, test, mark ) ; if ( test > 0.5){ values [ 1 ] = 99; else { values [ 1 ] = 1; return mark + 1; int main(void){ char mark = a ; int numbers [ ] = {1, 2, 3, 4 ; int i ; mark = far (mark, numbers ) ; printf ( \n main : mark = %c \n, mark ) ; for ( i = 0; i < 4; i++){ printf ( %d,, numbers [ i ] ) ; return 0; Der ASCII-Code von a ist 97, der von A ist 65. 2.1 (6 Punkte) Welche Ausgabe erzeugt das Programm?

Seite 7 (16) result = 0.0000 test = 0.0000, mark = B Main: mark = C 1, -1, 3, 4

Seite 8 (16) Aufgabe 3 Eine Funktion test() erhält drei int-werte als Parameter. Die Funktion soll die Summe der drei Parameter berechnen und den Durchschnitt. Außerdem soll die Funktion prüfen, ob alle drei Parameter gleich groß sind. Die Funktion soll drei Werte an die aufrufende Funktion zurückliefern: die Summe als int-wert der Durchschnitt als float-wert ein char-wert, der angibt ob alle drei Parameter gleich groß sind ( g für gleich groß, u für ungleich). 3.1 (7 Punkte) Definieren Sie eine geeignete Datenstruktur für den Rückgabewert der Funktion test() und ergänzen Sie die Funktion testresult(). struct testresult { ; typedef struct testresult T RESULT; T RESULT test ( int num1, int num2, int num3){ T RESULT result ; return result ;

Seite 9 (16) struct testresult { int sum ; float average ; char equal ; ; typedef struct testresult T RESULT; T RESULT test ( int num1, int num2, int num3){ T RESULT result ; result. sum = num1 + num2 + num3; result. average = ( float ) result. sum / 3; result. equal = u ; if ((num1 == num2) && (num2 == num3)){ result. equal = g ; return result ;

Seite 10 (16) Aufgabe 4 Gegeben ist folgendes Programm: #include <stdio. h> struct persdata { char name [ 3 0 ] ; int matrnr ; char std gang [ 3 0 ] ; ; typedef struct persdata PERS DATA; struct ergebnis { char fach [ 1 0 ] ; float bewertung ; struct ergebnis rest ; ; typedef struct ergebnis ERGEBNIS; struct student { PERS DATA person ; ERGEBNIS noten ; ; typedef struct student STUDENT; void printstud (STUDENT student ){ : : int main (void){ PERS DATA pers = { Anna, 12345, AI ; ERGEBNIS erg1 = { PROG, 1.7, NULL; ERGEBNIS erg2 = { MATH1, 2.7, NULL; ERGEBNIS erg3 = { ENGL, 3.3, NULL; ERGEBNIS erg4 = { INET1, 2.0, &erg1 ; STUDENT stud = {pers, &erg2 ; erg2. rest = &erg4 ; erg1. rest = &erg3 ; printstud ( stud ) ; p r intf ( \n ) ; return 0;

Seite 11 (16) 4.1 (4 Punkte) Skizzieren Sie die Datenstruktur, die in der Funktion main() angelegt wird. Zeichnen Sie für jede Variable, die eine Struktur darstellt ein Kästchen, für jede Komponente der Struktur ein Fach innerhalb des Kästchens. Zeichnen Sie für jeden Pointer einen Pfeil. Es genügt, wenn Sie die Namen der Variablen und die Namen der Komponenten eintragen. Sie müssen nicht für jede Komponenten den Wert eintragen. Beispiel für ein Variable name der Variable Komponente Komponente : : : 4.2 (5 Punkte) Die folgenden Ausdrücke bezeichnen entweder einen Datentyp oder eine Variable. Kreuzen Sie jeweils an, ob es sich bei dem Ausdruck um einen Typ oder um eine Variable handelt. Wenn es sich um eine Variable handelt, so geben Sie auch den Typ der Variablen an. Ausdruck Typ Variable wenn Variable, welcher Typ? ERGEBNIS pers.std_gang erg1.bewertung &pers PERS_DATA

Seite 12 (16) Ausdruck Typ Variable wenn Variable, welcher Typ? ERGEBNIS X pers.std_gang X char [] erg1.bewertung X float &pers X PERS DATA * PERS_DATA X 4.3 (5 Punkte) Ergänzen Sie die Funktion printstud() gemäß dem vorgegebenen Prototyp. Die Funktion soll zu einem Studenten folgendes auf dem Bildschirm ausgeben: Name und Matrikelnummer zu jedem gespeicherten Prüfungsergebnis den Namen des Faches und die Note Die Datenstruktur darf dabei nicht verändert werden. void printstud (STUDENT student ){ void printstud (STUDENT student ){ ERGEBNIS currenterg = student. noten ; printf ( \n %s,, student. person. name ) ; printf ( Matr. Nr : %d, student. person. matrnr ) ; while ( currenterg!= NULL){ printf ( \n Fach : %s,, currenterg >fach ) ; printf ( Note : %3.1 f, currenterg >bewertung ) ; currenterg = currenterg >rest ;

Seite 13 (16) return ; 4.4 (5 Punkte) Nehmen Sie an, die Prüfungsergebnisse eines Studenten werden in einem Array gespeichert ERGEBNIS ergebnisse[]; bis sie auf eine Datei geschrieben werden. Ergänzen Sie die Funktion saveergs() gemäß dem unten angegebenen Rahmen. Die Funktion soll folgendes leisten: Sie öffnet eine Datei. Der Datei-Name ist der Wert des Parameters filename. Sie schreibt so viele Ergebnisse aus dem Array in die Datei, wie im Parameter cnt angegeben. Sie schließt die Datei wieder. Beispiel: Bei einem Aufruf saveergs(ergebnisse, 3, myfile.dat ); soll die Funktion die ersten 3 Ergebnisse aus dem Array ergebnisse in die Datei myfile.dat schreiben. void saveergs (ERGEBNIS erg [ ], int cnt, char filename [ ] ) { int savecnt ; FILE outfile = fopen (......,... ) ; if (..........){ printf ( \n can t open f i l e %s,...... ) ; savecnt = fwrite (...,......,...,...... ) ; f c l ose (... ) ; return ; void saveergs (ERGEBNIS erg [ ], int cnt, char filename [ ] ) { int savecnt ; FILE outfile = fopen ( filename, wb ); if ( outfile == NULL){ printf ( \n can t open f i l e %s, filename ) ; savecnt = fwrite ( erg, sizeof (ERGEBNIS), cnt, outfile ) ; if ( savecnt < cnt ){

Seite 14 (16) printf ( \n Fehler beim Schreiben ); f c l ose ( outfile ) ; return ; Wie können/sollten Sie prüfen, ob ein Schreibvorgang erfolgreich war? 4.5 (3 Punkte) Das Programm soll nun dynamische Speicherverwaltung einsetzen. Im folgenden Programmfragment sind die Variablen myname, mynum, mystdgang, myfach und mynote passend definiert und mit Werten belegt. Das Programmfragment soll die Daten eines Studenten, der genau eine Prüfung geschrieben hat, in einer dynamischen Variable anlegen. STUDENT mystud = (STUDENT ) malloc ( sizeof (STUDENT) ) ; strncpy (mystud >person. name, myname, 30); mystud >person. matrnr = mynum; strncpy (mystud >person. std gang, mystdgang, 30); mystud >noten >bewertung = mynote ; strncpy (mystud >noten >fach, myfach, 10); Enhält das Programmfragment einen grundsätzlichen Fehler? Wenn ja, welchen, wie lässt er sich beheben? Für die Variable, die das Prüfungsergebnis aufnehmen soll, wird kein Speicherplatz reserviert. Lösung: mystud >noten = (ERGEBNIS ) malloc ( sizeof (ERGEBNIS) ) ;

Seite 15 (16) Aufgabe 5 Folgendes Programm mit einer rekursiven Funktion ist gegeben: #include <stdio. h> void bar ( int start, int end, char l i n e [ ] ) { if ( start >= end ){ return ; printf ( \n bar : %c, %c, l i n e [ start ], l i n e [ end ] ) ; bar ( start + 1, end, l i n e ) ; bar ( start, end 1, l i n e ) ; return ; int main(void){ bar (2, 5, abcdef ); printf ( \n ); return 0; 5.1 (5 Punkte) Welche Ausgabe erzeugt das Programm? Ergänzen Sie die folgenden Zeilen; die ersten 5 Zeilen genügen. bar: bar: bar: bar: bar: bar: XXX bar: XXX bar: c, f bar: d, f bar: e, f bar: d, e

Seite 16 (16) bar: c, e bar: d, e bar: c, d 5.2 (5 Punkte) Gegeben ist die Definition einer rekursiven Funktion: foo(0) = 1 foo(k) = 1 + foo(k 1)/k k N Schreiben Sie eine rekursiven Funktion in C, die die Funktion foo() realisiert. float foo ( int k){ float foo ( int k){ if (k == 0){ / foo (0) = 1 / return 1; return 1 + foo (k 1)/k ; / foo (k) = 1 + foo (k 1)/k /