Prof. Dr. R. Laue                                                                                                                                  SS00
                                Informatik II
                                Übungsblatt 1
                                Abgabe: 11.05.00 bis 10.00 Uhr

URL:         /axel/informatik2_ss00_blatt1.html
Dieses  Übungsblatt ist alleine zu bearbeiten.

Aufgabe 1 (5 Programmierpunkte - Abgabe per email)
Schreiben Sie eine C Funktion mit dem Namen my_sort_matrikelnummer(), welche mittels naiven Sortierens ein int-feld sortiert.
Die Deklaration der Funktion ist:

int my_sort_matrikelnummer(int *feld, int feld_laenge)

Der zweite Parameter ist die Anzahl der Einträge im zu sortierenden Feld. Beim Namen der Routine ist matrikelnummer durch Ihre Matrikelnummer zu ersetzen. Folgendes C Programm, bzw deren main-routine, soll nach Anpassung der Matrikelnummer als Testfunktion verwendet werden können.

Dabei wurde in diesem Beispiel die Systemfunktion qsort() verwendet. Sie sollen eine eigene Routine ohne Aufruf von Systemsortierroutinen schreiben. Sie müssen keine Sortierroutine für beliebige Felder (wie qsort) schreiben. Es müssen nur int-felder sortiert werden.

Aufgabe 2 (5 Programmierpunkte - Abgabe per email)
Schreiben Sie ein Programm, welches mittels binären Suchen in einem sortierten Feld einen Wert sucht. Die Deklaration der Funktion ist:

int my_bsearch_matrikelnummer(int *feld, int feld_laenge)

Es wird in einem int Feld gesucht mit positiven Einträgen. Der Rückgabewert ist -1 wenn nichts gefunden wurde. Folgendes C Programm, bzw deren main-routine, soll nach Anpassung der Matrikelnummer als Testfunktion verwendet werden können.
 

#include <stdlib.h>
#define nicht_da -1
int feld[] = {2,5,6,7,9,11,14,29};

main()
{
        int ergebnis, suchwert;
        scanf("%d",&suchwert);
        ergebnis = my_bsearch_000000(feld, sizeof(feld)/sizeof(int) , suchwert);

        if (ergebnis == nicht_da)
                printf("nicht gefunden \n");
        else
                printf("%d gefunden \n",ergebnis);
}

my_comp(const void *a, const void *b)
        /* rückgabe 0 bei gleichheit
                      <0 wenn a kleiner b
                       >0 sonst         */
         {
                 return *(int *)a - *(int *)b;
         }

my_bsearch_000000(int *feld, int size, int suchwert)
{
        int *ergebnis;
        ergebnis = bsearch(&suchwert,feld,size, sizeof(int),  my_comp);
        if (ergebnis == NULL)
                return nicht_da;
        else
                return  *ergebnis;
}


Dabei wurde in diesem Beispiel die Systemfunktion bsearch() verwendet. Sie sollen eine eigene Routine ohne Aufruf von Systemsuchroutinen schreiben. Es gibt die volle Punktzahl nur wenn die binäre Suchroutine rekursiv programmiert wird. Sie müssen keine Suchroutine für beliebige Felder (wie bsearch) schreiben. Es muß nur in int-feldern gesucht werden.