Sitzung: Jeden Freitag in der Vorlesungszeit ab 15 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/BubbleSortDebug: Unterschied zwischen den Versionen

Zeile 3: Zeile 3:
  
 
<pre>
 
<pre>
−
1 #include <stdio.h>
+
#include <stdio.h>
−
2
+
typedef struct
−
3 typedef struct
+
{
−
4 {
+
  char *data;
−
5    char *data;
+
  int key;
−
6    int key;
+
} item;
−
7 } item;
+
 
−
8
+
item array[] = {
−
9 item array[] =
+
  {"bill", 3},
−
10 {
+
  {"neil", 4},
−
11    {"bill", 3},
+
  {"john", 2},
−
12    {"neil", 4},
+
  {"rick", 5},
−
13    {"john", 2},
+
  {"alex", 1},
−
14    {"rick", 5},
+
};
−
15    {"alex", 1},
+
−
16 };
+
void sort(item *paItems, unsigned cItems) {
−
17
+
  int i = 0, j = 0;
−
18 void sort(item *paItems, unsigned cItems)
+
  int s = 1;
−
19 {
+
 
−
20    int i = 0, j = 0;
+
  for (i = 0; i < cItems && s != 0; i++) {
−
21    int s = 1;
+
    s = 0;
−
22
+
    for (j = 0; j < cItems; j++){
−
23    for (i = 0; i < cItems && s != 0; i++)
+
      if (paItems[j].key > paItems[j+1].key) {
−
24    {
+
        item Temp = paItems[j];
−
25        s = 0;
+
        paItems[j] = paItems[j+1];
−
26        for (j = 0; j < cItems; j++)
+
        paItems[j+1] = Temp;
−
27        {
+
        s++;
−
28            if (paItems[j].key > paItems[j+1].key)
+
      }
−
29            {
+
    }
−
30                item Temp = paItems[j];
+
    cItems--;
−
31                paItems[j] = paItems[j+1];
+
  }
−
32                paItems[j+1] = Temp;
+
}
−
33                s++;
+
 
−
34            }
+
int main(void) {
−
35        }
+
  int i = 0;
−
36        cItems--;
+
  sort(array, 5);
−
37    }
+
  for (i = 0; i < 5; i++) {
−
38 }
+
     printf("array[%d] == {%s, %d}\n", i, array[i].data, array[i].key);
−
39
+
  }
−
40 int main(void)
+
}
−
41 {
 
−
42    int i = 0;
 
−
43
 
−
44    sort(array, 5);
 
−
45    for (i = 0; i < 5; i++)
 
−
46     {
 
−
47        printf("array[%d] == {%s, %d}\n",
 
−
48                i, array[i].data, array[i].key);
 
−
49    }
 
−
50 }
 
 
</pre>
 
</pre>

Version vom 23. September 2009, 12:28 Uhr

Das folgende Programm, welches ein Array von Elementen mit Hilfe von Bubblesort sortiert enthält verschiedene Bugs: Debugge es mit printf,assert und/oder gdb, so dass es wie gewünscht funktioniert:

#include <stdio.h>
typedef struct
{
  char *data;
  int key;
} item;

item array[] = {
   {"bill", 3},
   {"neil", 4},
   {"john", 2},
   {"rick", 5},
   {"alex", 1},
};
 
void sort(item *paItems, unsigned cItems) {
  int i = 0, j = 0;
  int s = 1;

  for (i = 0; i < cItems && s != 0; i++) {
     s = 0;
     for (j = 0; j < cItems; j++){
       if (paItems[j].key > paItems[j+1].key) {
         item Temp = paItems[j];
         paItems[j] = paItems[j+1];
         paItems[j+1] = Temp;
         s++;
       }
     }
     cItems--;
  }
}

int main(void) {
  int i = 0;
  sort(array, 5);
  for (i = 0; i < 5; i++) {
    printf("array[%d] == {%s, %d}\n", i, array[i].data, array[i].key);
  }
}