#include #include #include #define MAX 30 int main(int argc, char* argv[]) { int margines_lewy, margines_prawy, szerokosc, ilosc_liter = 0, ilosc_liter2 = 0, kolejnosc = 1; int il_slow=0, dlugosc_slowa, przerwy = 0 /* miedzy wyrazami w wierszu */, spacje = 0, spacje2 = 0, spacje3 = 0; int i=0, j=0, w=0, z, x, y; // zmienne potrzebne w pętli i do ustalania pozycji w tabeli margines_lewy = atoi(argv[1]); margines_prawy = atoi(argv[2]); szerokosc = margines_prawy - margines_lewy; char tekst[MAX], wiersz[szerokosc], wiersz2[szerokosc] /* tablica pomocnicza */; // justowanie2.exe 5 40 wynik.txt // 1. ODCZYT Z PLIKU while (scanf("%s", tekst) != EOF ) // pobieram wyrazy { dlugosc_slowa = strlen(tekst); ilosc_liter = ilosc_liter + dlugosc_slowa; // ilosc pobranych liter łącznie // 2. PRZYPISYWANIE WYRAZOW DO WIERSZA if (ilosc_liter <= szerokosc) // sprawdzam czy iloś liter nie przekroczyła szerokości wiersza { for ( j=0; j<=dlugosc_slowa; j++ ) { if ( j != dlugosc_slowa ) { wiersz[w] = tekst[j]; ilosc_liter2++; } if ( j == dlugosc_slowa ) { wiersz[w] = 32; ilosc_liter++; }// jezeli dojdziemy do miejsca o jeden wiekszego niż iloś liter w tablicy to dodajemy spacje w++; } il_slow++; // ilosc wyrazow w jednym wierszu } // 3. JUSTOWANIE else { kolejnosc++; j = 0; przerwy = il_slow-1; spacje = szerokosc - ilosc_liter2; spacje2 = spacje % przerwy; // reszta spacji spacje3 = (spacje - spacje2)/przerwy; // ilośc spacji, ktorych przerwy beda mialy po rowno // 3.1 TUTAJ DODAJEMY SPACJE PO RÓWNO W KAŻDEJ PRZEDWIE MIĘDZY WYRAZAMI for ( i=0; i<(ilosc_liter-dlugosc_slowa-1); i++ ) { if ( wiersz[i] != 32 ) { wiersz2[j] = wiersz[i]; j++; } else { for ( w = 1; w <= spacje3; w++ ) { wiersz2[j] = 32; j++; } } } // 3.2 TUTAJ DODAJEMY BRAKUJĄCE SPACJE DO PIERWSZYCH W KOLEJNOŚCI PRZERW MIĘDZY WYRAZAMI if ( (kolejnosc % 2) == 0 ) // dodajemy od strony lewej { i = 1; x = 0; y = 0; for ( z=0; z=0; z-- ) { if ( wiersz2[y] != 32 ) { wiersz[x] = wiersz2[y]; x--; } if (( wiersz2[y] == 32 ) && ( wiersz2[y-1] == 32 )) { wiersz[x] = wiersz2[y]; x--; } if ( i <= spacje2 ) { // dodajemy spacje w miejsce między istniejącymi już spacjami a kolejnym wyrazem if (( wiersz2[y] == 32 ) && ( wiersz2[y-1] != 32 )) { wiersz[x] = wiersz2[y]; x--; wiersz[x] = 32; x--; i++;} } else { if (( wiersz2[y] == 32 ) && ( wiersz2[y-1] != 32 )) { wiersz[x] = wiersz2[y]; x--; } } y--; } } // 3.3 WYPISUJEMY WYJUSTOWANE WIERSZE DO PLIKU ( W ZALEŻNOŚCI CZY DO WIERSZA DOPISYWALIŚMY DODATKOWE SPACJE CZY NIE ) // założenie potrzebne, ponieważ przy braku dopisywanych spacji wiersz odczytywany jest z tablicy pomocniczej if ( spacje2 != 0 ) { for ( i=1; i<= margines_lewy; i++ ) printf("%c", 32); for ( i=0; i