• Keine Ergebnisse gefunden

PG – Prüfung WS 2002 / 2003

N/A
N/A
Protected

Academic year: 2021

Aktie "PG – Prüfung WS 2002 / 2003"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

PG – Prüfung WS 2002 / 2003

1)(15) Funktion als Parameter

Entwerfen sie eine Funktion mystring, die drei Parameter akzeptiert. Die ersten beiden Parameter sind zwei Strings, die miteinander verglichen werden sollen, der dritte ist die Vergleichsfunktion selbst, die wiederum zwei Buchstaben als Parameter

akzeptieren muss. Mögliche Funktionen sind less, equal und greater. Für jeden Fall (<,==,>) soll 1 zurück, wenn der Vergleich beider Strings mit der Funktion mystring liefert 1 zurück, wenn der Vergleich der beiden Strings mit der übergebenen Funktion (<,==>) zutrifft. Benutzen sie dabei keine String-Funktionen aus der C-Standard Bibliothek.

a)(3) Entwickeln sie eine C- Implementierung der Funktion less.

b)(6) Implementieren sie die oben beschriebene Funktion mystring.

c)(6) Implementieren sie nun das Hauptprogramm, dass zwei Strings von der Konsole einliest und damit einen entsprechenden Vergleich mit den drei Funktionen durchführt, je nachdem, ob „e“ für equal, „l“ für less oder „g“ für greater als Kommandozeilen- Parameter angegeben ist.

2)(6) Rekursion

Für die Bearbeitung der Teilaufgabe sei folgende rekursive Funktion gegeben:

int wasbinich (int m, int n) {

if (n == 0) return m;

else return wasbinich (n, m%n);

}

a)(3) Verfolgen sie die Teilschritte der Funktion für den Aufruf wasbinich (630, 840) und bestimmen sie den Rückgabewert der Funktion.

b)(3) Was berechnet die Funktion für die beiden Parameter m und n?

3)(12) Bit-Operationen und Bit-Ausdrücke

Schreiben sie eine Funktion pack, die als Parameter vier ganzzahlige 8-Bit Werte zwischen 0 und 255 akzeptiert und einen 32-Bit Wert zurück gibt. In den untersten 8-Bit Wert soll der erste Parameter liegen, in den zweiten 8-Bit der zweite usw.

Gehen sie dabei davon aus, dass ein Integer-Wert 32-Bit belegt.

a)(6) Implementieren sie die Funktion pack.

(2)

b)(6) Das aufrufende Programm will feststellen, ob der dritte Parameter richtig gesetzt wurde. Implementieren sie die nötigen Schritte, um den dritten Parameter als 8-Bit Wert zu extrahieren.

4)(18) Gauß-Jordan Verfahren (nicht vollständig) (Code war gegeben)

a)(3) Was ist ein Pivot?

b)(6) if(row != col) { was muss in die Klammern? }

c)(9) Erweiterung des Programms, um ROWS X ROWS zu invertieren.

--- CODE Gauß-Jordan Verfahren gegeben --- j = fehlt (fehlt ist einzutragen)

#include <stdio.h>

#include <stdlib.h>

#define ROWS 3

float a[ROWS][ROWS], b[ROWS];

int main(void) {

int i, j, k, l, col;

float max, tmp, x, pivin;

int indcol[ROWS], indrow[ROWS], pivcol[ROWS];

for (i = 0; i < ROWS; i++) {

max = 0.0;

for (j = fehlt; j < ROWS; j++) {

if (pivcol [j] != 1)

for(k = 0; k < ROWS; k++) {

if(pivcol [k] == 0) {

für den Rest war keine Zeit mehr --- CODE Gauß-Jordan Verfahren gegeben --- 5)(16) Strukturen und Speicherallozierung mit Code stud.c

a)(4) Schreiben sie alle Änderungen im Programm nieder, um die Anzahl der Strukturen, die aufgefüllt werden müsse, in der Kommandozeile anzugeben.

Falls keine Zahl angegeben wird, wird ein Defaultwert von 4 Strukturen gesetzt.

(3)

b)(6) Modifizieren sie das Programm so, dass statt Zeichenketten für Namen in der

Stringtabelle stingtab zu platzieren eine Flatterreihung, deren Größe durch die Daten aus a) festgelegt wird, genommen wird. Jeder Eintrag in dieser Flatterreihung ist eine Zeichenkette, welche den eingegebenen Namen enthält. Wenn man einen Namen in die Struktur vom Typ studenttyp einfügen will, dann wird der Index dieses Eintrags aus der Flatterreihung in dieser Struktur gespeichert.

c)(6) Nun schreiben sie das ganze Programm so um, dass zwei verschiedene C-Quellcodes durch den Präprozessor erzeugt werden können, wobei das erste das ursprüngliche Programm ist und das zweite das Programm ist, das durch die Modifikation aus a) und b) entsteht. Bedingung ist dabei, dass der Quellcode der beiden Programme

gemeinsam ist, nur einmal gehalten wird. Schreiben sie die Compilierungs-

kommandos, die jedes der Programme aus einer gemeinsamen Quelle erzeugen und compilieren. Beide Programme ergeben natürlich die gleiche Funktionalität für den Anwender.

--- CODE gegeben ---

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define AnzStud 8

#define MAXLEN 5000 typedef struct student {

char *name;

int matnr;

float notdsch;

} studententyp;

char stringtab[MAXLEN];

char *q = stringtab;

studententyp *studentenliste[AnzStud];

studententyp *studentenptr;

void bubble () {

int i, j, k;

float tmp;

char *temp;

for ( i = 0; i < AnzStud; i++) for (j = AnzStud-1; j > i; j--)

if (strcmp(studentenliste[j-1]->name, studentenliste[j]->name) > 0) {

temp = studentenliste[j-1]->name;

studentenliste[j-1]->name = studentenliste[j]->name;

studentenliste[j]->name = temp;

(4)

studentenliste[j]->matnr =k;

} }

int main() {

int i, len;

for (i = 0; i < AnzStud; i++) {

studentenliste[i] = (studententyp*)malloc(sizeof(studententyp));

printf("\nStudenten Nachname bitte eingeben:");

scanf("%s", studentenliste[i]->name = q);

q = q + strlen(q) + 1;

printf("\nMatrikelnummer:");

scanf("%d", &(studentenliste[i]->matnr));

}

printf("Liste erstellen\n");

bubble();

for (i = 0; i < AnzStud; i++) {

printf("%s",studentenliste[i]->name);

printf("%d\n",studentenliste[i]->matnr);

}

/*dump the Stringtable*/

len = q - stringtab;

for (i = 0; i < len; i++) printf("%c",stringtab[i]);

printf("\n");

return 0;

}

--- CODE gegeben ---

6)(24) 8 Damen Problem (nicht vollständig) (Code war gegeben 3 Seiten) Backtraching und Objektorientierte Programmierung

d)(5) Vorgeschlagene Position der Dame ok? Überprüfung mit canAttack(int i, int j) schreibe dies rekursiv.

e)(2) undoPosition() (einzeiler) Funktion, die einen Vorwärtszug der Dame um eine Position rückgängig macht unter der Annahme, dass sich die Dame gerade in Reihe i und Spalte column befindet

zum abschreiben des kompletten Damen Problems hätte die Prüfung 4 Stunden dauern müssen

(5)

7)(9) STL – Programmierung und generische Algorithmen

a)(6) Entwerfen sie eine generische STL-Template Funktion, die alle Elemente eines sequenziellen Containers in einem Container des selben Typs kopiert. Die Parameter zum kopieren sollen Anfangs- und Endposition des Ausgangscontainers und

Startposition im Zielcontainer sein, ab der die Elemente kopiert werden.

b)(3) Zeigen sie die Anwendung ihrer Kopierfunktion auf C++ Arrays, indem sie die Elemente dein einen Arrays in ein anderes (der selben Größe) kopieren.

Das war die PG Prüfung WS 2002 / 2003. Komplette Anzahl der Seiten war ca. 12 MFG

Seite 5 von 5

Referenzen

ÄHNLICHE DOKUMENTE

für das Stak-Segment oder kann der Stak über die vorhandenen Seitentabellen zweiter.. Stufe adressiert

Ein Betriebssystem verwendet Paging, um für die vershiedenen Prozesse jeweils einen vir-.. tuellen Hauptspeiher

mentiert werden, dass es niht in einen Deadlok geraten kann; wenn ja, wie; wenn nein,.

mentiert werden, dass es niht in einen Deadlok geraten kann; wenn ja, wie; wenn nein,.. Aufgabe

A full 32 bit DMA Controller supporting data trans- fers to/from VMEbus memory as well as to/from local system RAM is provided by a FORCE specific 280 pin Gate

The following table shows the spare parts required to support the 210 diskette drive in the field... Page 1

Seiko Epson does not assume any liability of any kind arising out of any inaccuracies contained in this material or due to its application or use in any product or circuit and,

Input only : 12 bits (EXCL0 or EXCL1 is available by software) Output only : 30 bits (BZ, FOUT and TOUT are available by software) Bidirectional I/O : 26 bits (SRDY, SCLK, SIN and