#include #include #include #define M 2000 #define N 80 void swap_strings(char a[],char b[]); int isorder(char names[M][N],int n); void sort(char names[M][N],int n); void prn(char names[M][N],int n); double value(char name[]); main() { FILE* f; char names[M][N]; int i=0,n; f = fopen("data_h09t4.txt","r+"); while(!feof(f)) { fscanf(f,"%s",names[i]); i++; } n=i-1; printf("The original order:\n "); prn(names,n); sort(names,n); printf("Alphabetized:\n "); prn(names,n); } double value(char name[]) { /* merkkijonojen järjestäminen aakkosjärjestykseen perustuu tässä seuraavaan ideaan: määritetään jokaista jonon merkkiä vastaava ascii-koodi ja painotetaan näitä lukuja merkin järjestysnumerolla merkkijonossa, s.e. 1. merkkiä painotetaan luvulla 1, 2. merkkiä luvulla 1/100, 3. merkkiä luvulla 1/10000, jne. lasketaan nämä painotetut ascii-koodit yhteen ja saadaan luku, joka on sitä suurempi, mitä myöhäisempänä aakkosissa tutkittava merkkijono on. luku 100 valittiin siksi, että pieniä kirjaimia vastaavat ascii-koodit ovat välillä 97...126 (kannattaisi ehkä pelata varman päälle ja valita 100:n sijasta 1000, sillä nämä ovat >100) */ double val=0.0; int i=0; while(name[i] != '\0') { val += (double)name[i]*pow(100,-i); i++; } return val; } int isorder(char names[M][N],int n) { int i,order=1; for(i=0;ivalue(names[i+1]) ) { swap_strings(names[i],names[i+1]); } } } void prn(char names[M][N],int n) { int i; for(i=0;i