B
Bruno Rosenau
Hallo alle zusammen, bin neu hier und habe ein Problem (was sonst).
Ich habe eine Einsendeaufgabe von SGD (C/C++ in Windows) mit der ich
einfach nicht klar komme.
Es sollen die fehlenden Zeilen eingetragen werden, die ich hier mit
xxxxxx gekennzeichnet habe eingetragen werden.
Es ist zwar lang, aber vielleicht blickt das ja einer.
Zum Programm gehört noch eine Headerdatei mit der Variable (char
*meldung[]) in der die Strings zum sortieren sind.
Für jede Hilfe wäre ich echt dankbar.
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* E3_5 Sortieren mit Bubblesort. Programm zur Einsendeaufgabe 3 CWI5
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<time.h>
#include"c:\cwi\_lbx\e3_5.h"
#define ZEICHEN
//#define BIL clrscr()
/*@@@@@@@@@@@@@@@@@@@@@@@@@ Deklarationen
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
xxxxxx /* char Zeiger auf Zeiger auf Text */
/*@@@@@@@@@@@@@@@@@@@ Funktionsprototypen
@@@@@@@@@@@@@@@@@@@@@@@*/
void bubble_sort(char *zeiger[], long anzahl, int(*vergl)(char *a,
char *b));
void array_ausgabe(char **zz_zeiger,long anzahl);
void tausch_zeiger(char *zeiger[],int x, int y);
void tausch_zeichen(char *zeiger[],int x, int y);
int kleiner(char *a, char *b);
/*@@@@@@@@@@@@@@@@@@@@@* Hauptfunktion
@@@@@@@@@@@@@@@@@@@@@@@*/
void main(void)
{
size_t stueck;
clock_t old_time, new_time, time_dif;
stueck = sizeof(meldung)/sizeof(char *); /* F"ngt bei null an
*/
puts("@@* Demonstration von Bubbelsort mit Zeigern auf Funktionen
@@*");
//BIL;
xxxxxx /* char Zeiger auf
Arrayanfang */
puts("@@@ Ausgabe der unsortierten Strings @@@");
array_ausgabe(zz_text,stueck);
getch();
puts("@@@ Sortierung durch lexikographischen Stringvergleich @@@");
old_time = clock();
bubble_sort(meldung,stueck,kleiner); /* Sortierung */
new_time = clock();
zz_text = meldung; /* char Zeiger auf Arrayanfang
*/
array_ausgabe(zz_text,stueck);
time_dif = new_time - old_time ;
printf("Die Sortierung hat %ld clocktic gedauert!",
time_dif );
getch();
}
/*@@@@@@@@@@@@@@@@@@@@@ Sortierfunktion
@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion:
*/
/* Sortiert ein Array von Zeigern auf Zeichenketten
*/
/* Dadurch wird die Sortierung schneller ,weil nur noch Zeiger
*/
/* getauscht werden und die Daten im Array stehen bleiben!
*/
/*
*/
/* Rueckgabewert: void
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void bubble_sort(char *zeiger[],long anzahl, int (*vergl)(char *a,
char *b))
{
int durchgang; /* Zaehlt die Durchgaenge
*/
int position; /* Merkt sich d. Pos.im Array
*/
int vergleichswert; /* Enthaelt Ergebnis des Vergleichs zweier
Werte*/
for( durchgang = 1; durchgang < anzahl; durchgang++)
{
for( position = 0; position < (anzahl - durchgang); position++)
{
vergleichswert = (*vergl)( zeiger[position],
zeiger[position+1]);
if(vergleichswert)
{
#ifdef ZEICHENz
xxxxxx
#else
xxxxxx
#endif
}
} /* Position
*/
} /* Durchgang
*/
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion: Soll die 'Zeiger auf das Array' tauschen
*/
/* Dazu muss es einen Zeiger in einer temporaeren Variablen zwischen-
*/
/* speichern
*/
/*
*/
/* Rueckgabewert: void
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void tausch_zeiger(char *array[], int x, int y) /* Vertausche Pointer
*/
{
char *temp;
xxxxxx
array[x] = array[y];
xxxxxx
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion: Soll die Strings auf die die Zeiger zeigen
*/
/* tauschen. Dazu muss es einen kompletten String in einem temporaeren
*/
/* String zwischenspeichern
*/
/*
*/
/* Rueckgabewert: void
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void tausch_zeichen(char *array[], int x, int y) /* Vertausche Strings
*/
{ /* zeichenweise durch
*/
char temp[300]; /* umkopieren.
*/
xxxxxx
strcpy(array[x], array[y]);
xxxxxx
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion: Gibt das Array zeilenweise aus.
*/
/* Besonderheit : Es wird ein Zeiger auf ein Zeigerarray verwendet
*/
/*
*/
/* Rueckgabewert: keiner
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void array_ausgabe(char **zz_zeiger,long anzahl)
{
int index;
for( index = 0; index < anzahl ; index++, zz_zeiger++)
{
printf("%2d : %s \n",index,*zz_zeiger);
}
printf("\n");
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Funktion "Vergleichen", hier: Ist Wert a kleiner als Wert b?
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
int kleiner(char *a, char *b)
{
int rueck = 0;
for ( ; *a == *b && *a != 0; a++, b++);
xxxxxx
rueck = 1;
return(rueck);
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
Ich habe eine Einsendeaufgabe von SGD (C/C++ in Windows) mit der ich
einfach nicht klar komme.
Es sollen die fehlenden Zeilen eingetragen werden, die ich hier mit
xxxxxx gekennzeichnet habe eingetragen werden.
Es ist zwar lang, aber vielleicht blickt das ja einer.
Zum Programm gehört noch eine Headerdatei mit der Variable (char
*meldung[]) in der die Strings zum sortieren sind.
Für jede Hilfe wäre ich echt dankbar.
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* E3_5 Sortieren mit Bubblesort. Programm zur Einsendeaufgabe 3 CWI5
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<time.h>
#include"c:\cwi\_lbx\e3_5.h"
#define ZEICHEN
//#define BIL clrscr()
/*@@@@@@@@@@@@@@@@@@@@@@@@@ Deklarationen
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
xxxxxx /* char Zeiger auf Zeiger auf Text */
/*@@@@@@@@@@@@@@@@@@@ Funktionsprototypen
@@@@@@@@@@@@@@@@@@@@@@@*/
void bubble_sort(char *zeiger[], long anzahl, int(*vergl)(char *a,
char *b));
void array_ausgabe(char **zz_zeiger,long anzahl);
void tausch_zeiger(char *zeiger[],int x, int y);
void tausch_zeichen(char *zeiger[],int x, int y);
int kleiner(char *a, char *b);
/*@@@@@@@@@@@@@@@@@@@@@* Hauptfunktion
@@@@@@@@@@@@@@@@@@@@@@@*/
void main(void)
{
size_t stueck;
clock_t old_time, new_time, time_dif;
stueck = sizeof(meldung)/sizeof(char *); /* F"ngt bei null an
*/
puts("@@* Demonstration von Bubbelsort mit Zeigern auf Funktionen
@@*");
//BIL;
xxxxxx /* char Zeiger auf
Arrayanfang */
puts("@@@ Ausgabe der unsortierten Strings @@@");
array_ausgabe(zz_text,stueck);
getch();
puts("@@@ Sortierung durch lexikographischen Stringvergleich @@@");
old_time = clock();
bubble_sort(meldung,stueck,kleiner); /* Sortierung */
new_time = clock();
zz_text = meldung; /* char Zeiger auf Arrayanfang
*/
array_ausgabe(zz_text,stueck);
time_dif = new_time - old_time ;
printf("Die Sortierung hat %ld clocktic gedauert!",
time_dif );
getch();
}
/*@@@@@@@@@@@@@@@@@@@@@ Sortierfunktion
@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion:
*/
/* Sortiert ein Array von Zeigern auf Zeichenketten
*/
/* Dadurch wird die Sortierung schneller ,weil nur noch Zeiger
*/
/* getauscht werden und die Daten im Array stehen bleiben!
*/
/*
*/
/* Rueckgabewert: void
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void bubble_sort(char *zeiger[],long anzahl, int (*vergl)(char *a,
char *b))
{
int durchgang; /* Zaehlt die Durchgaenge
*/
int position; /* Merkt sich d. Pos.im Array
*/
int vergleichswert; /* Enthaelt Ergebnis des Vergleichs zweier
Werte*/
for( durchgang = 1; durchgang < anzahl; durchgang++)
{
for( position = 0; position < (anzahl - durchgang); position++)
{
vergleichswert = (*vergl)( zeiger[position],
zeiger[position+1]);
if(vergleichswert)
{
#ifdef ZEICHENz
xxxxxx
#else
xxxxxx
#endif
}
} /* Position
*/
} /* Durchgang
*/
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion: Soll die 'Zeiger auf das Array' tauschen
*/
/* Dazu muss es einen Zeiger in einer temporaeren Variablen zwischen-
*/
/* speichern
*/
/*
*/
/* Rueckgabewert: void
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void tausch_zeiger(char *array[], int x, int y) /* Vertausche Pointer
*/
{
char *temp;
xxxxxx
array[x] = array[y];
xxxxxx
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion: Soll die Strings auf die die Zeiger zeigen
*/
/* tauschen. Dazu muss es einen kompletten String in einem temporaeren
*/
/* String zwischenspeichern
*/
/*
*/
/* Rueckgabewert: void
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void tausch_zeichen(char *array[], int x, int y) /* Vertausche Strings
*/
{ /* zeichenweise durch
*/
char temp[300]; /* umkopieren.
*/
xxxxxx
strcpy(array[x], array[y]);
xxxxxx
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Aufgabe der Funktion: Gibt das Array zeilenweise aus.
*/
/* Besonderheit : Es wird ein Zeiger auf ein Zeigerarray verwendet
*/
/*
*/
/* Rueckgabewert: keiner
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void array_ausgabe(char **zz_zeiger,long anzahl)
{
int index;
for( index = 0; index < anzahl ; index++, zz_zeiger++)
{
printf("%2d : %s \n",index,*zz_zeiger);
}
printf("\n");
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
/* Funktion "Vergleichen", hier: Ist Wert a kleiner als Wert b?
*/
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
int kleiner(char *a, char *b)
{
int rueck = 0;
for ( ; *a == *b && *a != 0; a++, b++);
xxxxxx
rueck = 1;
return(rueck);
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/