rendered paste body#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#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 <tekst.txt> 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<j; 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++;
}
}
else // dodajemy od strony prawej
{
i = 1;
x = szerokosc;
y = j ;
for ( z=(j ); 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<szerokosc; i++) printf("%c", wiersz[i]);
printf("\n");
}
else // odczytywanie z tablicy pomocniczej
{
for ( i=1; i<= margines_lewy; i++ ) printf("%c", 32);
for ( i=0; i<szerokosc; i++) printf("%c", wiersz2[i]);
printf("\n");
}
// 4. DOPISANIE WYRAZU, KTÓRY NIE MIEŚCIŁ SIĘ W POPRZEDNIM WIERSZU DO NOWEGO WIERSZA
il_slow = 0;
w = 0;
ilosc_liter = 0;
ilosc_liter2 = 0;
for ( j=0; j<=dlugosc_slowa; j++ ) // dopisuje do nowego wiersza wyraz który nie zmieścił się w wierszu poprzednim
{
if ( j != dlugosc_slowa ) { wiersz[w] = tekst[j]; ilosc_liter++; ilosc_liter2++; }
if ( j == dlugosc_slowa ) { wiersz[w] = 32; ilosc_liter++; }
w++;
}
il_slow++;
}
}
// DOPISANIE OSTATNIEGO WIERSZA
for ( i=0; i<margines_lewy; i++ ) printf("%c", 32);
for ( i=0; i<ilosc_liter; i++ ) printf("%c", wiersz[i]);
return 0;
}