program c++ jak napisac sortowanie

0

gdyby ktos wiedzial jak napisac sortowanie wg nazwiska i imienia przy pomocy funkcji qsort czyli opcja 4 to bylbym dozgonnie wdzieczny, ja nie mam pojecia

napiszcie cokolwiek dziekuje

oto program

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

typedef struct{ 
char imie[10]; 
char nazwisko[25]; 
char telefon[10]; 
} baza; 


int wczytaj_dane(baza *wsk){ 
fprintf(stdout,"\n\nPodaj dane osoby\n"); 
fprintf(stdout,"Podaj imie: "); gets(wsk->imie); 
fprintf(stdout,"Podaj nazwisko: "); gets(wsk->nazwisko); 
fprintf(stdout,"Podaj telefon: "); gets(wsk->telefon); 
return(0); 
} 


int zapisz_dane(baza *wsk){ 
FILE *wsk_pliku; 
if((wsk_pliku=fopen("baza.txt","a+"))!=NULL) { 
fprintf(wsk_pliku,wsk->imie); fprintf(wsk_pliku," "); 
fprintf(wsk_pliku,wsk->nazwisko); fprintf(wsk_pliku," "); 
fprintf(wsk_pliku,wsk->telefon); fprintf(wsk_pliku,"\n"); 
fclose(wsk_pliku); 
} 
return(0); 
} 

int wyswietl_dane(baza *wsk){ 
fprintf(stdout,"Imie: %s",wsk->imie); 
fprintf(stdout,"\tNazwisko: %s", wsk->nazwisko); 
fprintf(stdout,"\tTelefon: %s\n", wsk->telefon); 
return(0); 
} 


int pobierz_dane(baza *wsk, int x){ 
FILE *wsk_pliku; 
baza kopia; 
int i; 
char znak; 
strcpy(kopia.imie,wsk->imie); 
strcpy(kopia.nazwisko,wsk->nazwisko); 
strcpy(kopia.telefon,wsk->telefon); 

if((wsk_pliku=fopen("baza.txt","r"))!=NULL) { 
do { 
fscanf(wsk_pliku,"%s %s %s", wsk->imie, wsk->nazwisko, wsk->telefon); 
znak=fgetc(wsk_pliku); 
if(x==1) 
wyswietl_dane(wsk); 
if(x==2) { 
if((strcmp(kopia.imie,wsk->imie)==0) || (strcmp(kopia.nazwisko,wsk->nazwisko)==0) || (strcmp(kopia.telefon,wsk->telefon)==0)) 
wyswietl_dane(wsk); 
} 
} while(fscanf(wsk_pliku,&znak)!=EOF); 
fclose(wsk_pliku); 
} 
return(0); 
} 

int odp; 
int main() { 
baza *wsk_osoby; 
do 
{ clrscr(); 
textcolor(GREEN); 
gotoxy(30, 1); 
printf("1. Zapis do bazy\n"); 
gotoxy(30, 2); 
printf("2. Odczyt calej bazy\n"); 
gotoxy(30, 3); 
printf("3. Wyszukiwanie w bazie\n"); 
gotoxy(30, 4); 
printf("4. Sortowanie\n"); 
gotoxy(30, 5); 
printf("5. Wyjscie\n"); 
gotoxy(1, 6); 
printf("\nWybieram opcje: "); 
odp = getch(); 
switch(odp) 

{ 
case '1':{ 
wczytaj_dane(wsk_osoby); 
zapisz_dane(wsk_osoby); 
printf("\n\nNacisnij dowolny klawisz"); 
getch(); 
break;} 
case '2':{ 
fprintf(stdout,"\n\nPoczatek bazy\n"); 
pobierz_dane(wsk_osoby,1); 
fprintf(stdout,"Koniec bazy"); 
printf("\n\nNacisnij dowolny klawisz"); 
getch(); 
break;} 
case'3':{ 
wczytaj_dane(wsk_osoby); 
pobierz_dane(wsk_osoby,2); 
printf("\n\nNacisnij dowolny klawisz"); 
getch(); 
break;} 
case'4':{ 
printf("\nOpcja niedostepna"); 
getch(); 
break;} 
case '5':{ 
{ printf("Koniec programu\n"); 
} 
} 
} 
} 

while (odp != '5'); 
return 0; 
} 
0

Jezeli koniecznie chcesz to zrobic za pomoca qsort to nie mozesz sortowac najpierw wedlug nazwiska a potem imienia (lub odwrotnie) bo qsort nie jest stabilny i tzw. metoda radix tutaj odpada. Wiec jedyne co ci zostaje to przy sortowaniu "skleic" nazwisko i imie w jedna calosc przy porownywaniu w qsorcie. Nie wiem pod jakim systemem to piszesz i czy chcesz wykorzystac unixowy qsort, czy napisac wlasna procedure. Jezeli wlasna, to w serwisie jest kod quick sorta (w Delphi, ale nie powinno stanowic przerobienie go do C++, bo jest opisany).

0

jeszcze na <url>www.code-zone.org</url> jest o qsort.

0

cokolwiek dziekuje

:-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1