#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h> // na potrzeby tolower
#define DLUGOSC_NAPISU 30
#define ILOSC_NAPISOW 5
#define ZAKRES_WARTOSCI_A 128
char **A; // wejsciowa tablica do posortowania
char **B; // wynikowa tablica, juz posortowana
char **pom;
// Sortowanie pozycyjne - tablice indeksowane od 1
void sortPrzezZliczanie(char **A, char **B, int ilosc, int pozycja){
int i,j;
int C[2048]; // pomocnicza tablica 'licznikow', ile razy wystepuje jaki znak w A
for (i=0;i<=ZAKRES_WARTOSCI_A;i++) C[i]=0;
for (j=1;j<=ilosc;j++)
C[A[j][pozycja]] +=1;
for (i=1;i<=ZAKRES_WARTOSCI_A;i++)
C[i]=C[i]+C[i-1];
for (j=ilosc;j>0;j--){
B[C[A[j][pozycja]]]=A[j];
C[A[j][pozycja]]=C[A[j][pozycja]]-1;
}
}
void sortPozycyjne(char **A, char **B, int NAJDLUZSZY){ // wywoluje sortowanie przez zliczanie po kolei dla kazdej pozycji
int i;
for (i=NAJDLUZSZY; i>=0; i--){
sortPrzezZliczanie(A,B,ILOSC_NAPISOW,i);
pom=A;A=B;B=pom; // tablica wynikowa staje sie wejsciowa
}
}
void drukuj(char **tablica, int ilosc){
int i;
for (i=1;i<=ilosc;i++)
//tablica[i]=toupper(tablica[i]); // jako ze drukujemy naziwska, zmiana pierwszej litery na Wielka
}
void czytaj(char **tablica, int ilosc){
char slowo[DLUGOSC_NAPISU];
int i,j;
for (i=1;i<=ilosc; i++){
slowo
[j
] = tolower(slowo
[j
]); // zmniejszam wielkosc litery tablica
[i
] = (char*) malloc(sizeof(char)*DLUGOSC_NAPISU
); }
}
int najdluzszyNapis(char **tablica, int ilosc){ // znajduje dlugosc najdluzszego napisu
int i,max=0;
for (i=1;i<=ilosc;i++)
return max;
}
void taSamaDlugosc(char **tablica, int ilosc, int NAJDLUZSZY){ // jesli dany string jest krotszy, niz najdluzszy
// to uzupelnia brakujace miejsca nullami
int i,j;
for (i=1; i<=ilosc; i++)
for (j=0; j<=NAJDLUZSZY; j++)
if (!(96 < (int)tablica[i][j] && (int)tablica[i][j] < 123)) tablica[i][j]=0;
}
int main(){
A
=(char**) malloc(ILOSC_NAPISOW
*sizeof(char*)); B
=(char**) malloc(ILOSC_NAPISOW
*sizeof(char*)); pom
=(char**) malloc(ILOSC_NAPISOW
*sizeof(char*)); int NAJDLUZSZY; // dlugosc najdluzszego napisu w tablicy A
printf("Wpisz napisy do tablicy A:\n"); czytaj(A,ILOSC_NAPISOW);
NAJDLUZSZY=najdluzszyNapis(A,ILOSC_NAPISOW);
taSamaDlugosc(A,ILOSC_NAPISOW,NAJDLUZSZY);
sortPozycyjne(A,B,NAJDLUZSZY);
printf("\nSlownikowo posortowana tablica:\n"); drukuj(B,ILOSC_NAPISOW);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8Y3R5cGUuaD4gICAgICAvLyBuYSBwb3RyemVieSB0b2xvd2VyCgojZGVmaW5lIERMVUdPU0NfTkFQSVNVIDMwCiNkZWZpbmUgSUxPU0NfTkFQSVNPVyA1CiNkZWZpbmUgWkFLUkVTX1dBUlRPU0NJX0EgMTI4CgpjaGFyICoqQTsgLy8gd2Vqc2Npb3dhIHRhYmxpY2EgZG8gcG9zb3J0b3dhbmlhCmNoYXIgKipCOyAvLyB3eW5pa293YSB0YWJsaWNhLCBqdXogcG9zb3J0b3dhbmEKY2hhciAqKnBvbTsKCi8vIFNvcnRvd2FuaWUgcG96eWN5am5lIC0gdGFibGljZSBpbmRla3Nvd2FuZSBvZCAxCgp2b2lkIHNvcnRQcnplelpsaWN6YW5pZShjaGFyICoqQSwgY2hhciAqKkIsIGludCBpbG9zYywgaW50IHBvenljamEpewogICAgICAgIGludCBpLGo7CiAgICAgICAgaW50IENbMjA0OF07IC8vIHBvbW9jbmljemEgdGFibGljYSAnbGljem5pa293JywgaWxlIHJhenkgd3lzdGVwdWplIGpha2kgem5hayB3IEEKCgogICAgICAgIGZvciAoaT0wO2k8PVpBS1JFU19XQVJUT1NDSV9BO2krKykgQ1tpXT0wOwogICAgICAgIGZvciAoaj0xO2o8PWlsb3NjO2orKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDW0Fbal1bcG96eWNqYV1dICs9MTsKICAgICAgICBmb3IgKGk9MTtpPD1aQUtSRVNfV0FSVE9TQ0lfQTtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1tpXT1DW2ldK0NbaS0xXTsKICAgICAgICBmb3IgKGo9aWxvc2M7aj4wO2otLSl7CiAgICAgICAgICAgICAgICBCW0NbQVtqXVtwb3p5Y2phXV1dPUFbal07CiAgICAgICAgICAgICAgICBDW0Fbal1bcG96eWNqYV1dPUNbQVtqXVtwb3p5Y2phXV0tMTsKICAgICAgICB9Cn0KCnZvaWQgc29ydFBvenljeWpuZShjaGFyICoqQSwgY2hhciAqKkIsIGludCBOQUpETFVaU1pZKXsgICAgICAgICAvLyB3eXdvbHVqZSBzb3J0b3dhbmllIHByemV6IHpsaWN6YW5pZSBwbyBrb2xlaSBkbGEga2F6ZGVqIHBvenljamkKICAgICAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICAgICAgZm9yIChpPU5BSkRMVVpTWlk7IGk+PTA7IGktLSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRQcnplelpsaWN6YW5pZShBLEIsSUxPU0NfTkFQSVNPVyxpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9tPUE7QT1CO0I9cG9tOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhYmxpY2Egd3luaWtvd2Egc3RhamUgc2llIHdlanNjaW93YQogICAgICAgICAgICAgICAgfQp9Cgp2b2lkIGRydWt1aihjaGFyICoqdGFibGljYSwgaW50IGlsb3NjKXsKICAgICAgICBpbnQgaTsKICAgICAgICBmb3IgKGk9MTtpPD1pbG9zYztpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGFibGljYVtpXT10b3VwcGVyKHRhYmxpY2FbaV0pOyAgICAgICAgICAgICAgIC8vIGpha28gemUgZHJ1a3VqZW15IG5heml3c2thLCB6bWlhbmEgcGllcndzemVqIGxpdGVyeSBuYSBXaWVsa2EKICAgICAgICAgICAgICAgIHByaW50ZigiJXMgXG4iLCB0YWJsaWNhW2ldKTsKfQoKdm9pZCBjenl0YWooY2hhciAqKnRhYmxpY2EsIGludCBpbG9zYyl7CiAgICAgICAgY2hhciBzbG93b1tETFVHT1NDX05BUElTVV07CiAgICAgICAgaW50IGksajsKICAgICAgICBmb3IgKGk9MTtpPD1pbG9zYzsgaSsrKXsKICAgICAgICAgICAgICAgIHNjYW5mKCIlcyIsc2xvd28pOwogICAgICAgICAgICAgICAgZm9yIChqPTA7ajxzdHJsZW4oc2xvd28pO2orKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dvW2pdID0gdG9sb3dlcihzbG93b1tqXSk7IC8vIHptbmllanN6YW0gd2llbGtvc2MgbGl0ZXJ5CiAgICAgICAgICAgICAgICB0YWJsaWNhW2ldID0gKGNoYXIqKSBtYWxsb2Moc2l6ZW9mKGNoYXIpKkRMVUdPU0NfTkFQSVNVKTsKICAgICAgICAgICAgICAgIHN0cmNweSh0YWJsaWNhW2ldLHNsb3dvKTsKICAgICAgICB9Cn0KCmludCBuYWpkbHV6c3p5TmFwaXMoY2hhciAqKnRhYmxpY2EsIGludCBpbG9zYyl7ICAgICAgICAgLy8gem5hamR1amUgZGx1Z29zYyBuYWpkbHV6c3plZ28gbmFwaXN1CiAgICAgICAgICAgICAgICBpbnQgaSxtYXg9MDsKICAgICAgICAgICAgICAgIGZvciAoaT0xO2k8PWlsb3NjO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0YWJsaWNhW2ldKT5tYXgpIG1heD1zdHJsZW4odGFibGljYVtpXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbWF4Owp9Cgp2b2lkIHRhU2FtYURsdWdvc2MoY2hhciAqKnRhYmxpY2EsIGludCBpbG9zYywgaW50IE5BSkRMVVpTWlkpeyAgICAgICAgICAvLyBqZXNsaSBkYW55IHN0cmluZyBqZXN0IGtyb3RzenksIG5peiBuYWpkbHV6c3p5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdXp1cGVsbmlhIGJyYWt1amFjZSBtaWVqc2NhIG51bGxhbWkKICAgICAgICAgICAgICAgIGludCBpLGo7CiAgICAgICAgICAgICAgICBmb3IgKGk9MTsgaTw9aWxvc2M7IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8PU5BSkRMVVpTWlk7IGorKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISg5NiA8IChpbnQpdGFibGljYVtpXVtqXSAmJiAoaW50KXRhYmxpY2FbaV1bal0gPCAxMjMpKSB0YWJsaWNhW2ldW2pdPTA7Cn0KCmludCBtYWluKCl7CiAgICAgICAgQT0oY2hhcioqKSBtYWxsb2MoSUxPU0NfTkFQSVNPVypzaXplb2YoY2hhciopKTsKICAgICAgICBCPShjaGFyKiopIG1hbGxvYyhJTE9TQ19OQVBJU09XKnNpemVvZihjaGFyKikpOwogICAgICAgIHBvbT0oY2hhcioqKSBtYWxsb2MoSUxPU0NfTkFQSVNPVypzaXplb2YoY2hhciopKTsKICAgICAgICAgICAgICAgIGludCBOQUpETFVaU1pZOyAvLyBkbHVnb3NjIG5hamRsdXpzemVnbyBuYXBpc3UgdyB0YWJsaWN5IEEKCiAgICAgICAgcHJpbnRmKCJXcGlzeiBuYXBpc3kgZG8gdGFibGljeSBBOlxuIik7CiAgICAgICAgY3p5dGFqKEEsSUxPU0NfTkFQSVNPVyk7CiAgICAgICAgICAgICAgICBOQUpETFVaU1pZPW5hamRsdXpzenlOYXBpcyhBLElMT1NDX05BUElTT1cpOwogICAgICAgICAgICAgICAgdGFTYW1hRGx1Z29zYyhBLElMT1NDX05BUElTT1csTkFKRExVWlNaWSk7CgogICAgICAgICAgICAgICAgc29ydFBvenljeWpuZShBLEIsTkFKRExVWlNaWSk7CgogICAgICAgIHByaW50ZigiXG5TbG93bmlrb3dvIHBvc29ydG93YW5hIHRhYmxpY2E6XG4iKTsKICAgICAgICBkcnVrdWooQixJTE9TQ19OQVBJU09XKTsKCiAgICAgICAgcmV0dXJuIDA7Cn0K