All pastes #977067 Raw Edit

Mine

public text v1 · immutable
·published 2008-04-08 16:38 UTC
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;
}