URL: /axel/informatik2_ss00_blatt1.html
Dieses Übungsblatt ist
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:
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.
main()
{
int i;
my_sort_000000(feld,
sizeof(feld)/sizeof(int) );
for (i=0;
i<sizeof(feld)/sizeof(int); i++)
printf("%d ",feld[i]);
printf("\n");
}
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_sort_000000(int *feld, int feld_laenge)
{
qsort(feld,feld_laenge,
sizeof(int), my_comp);
}
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.