Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Zadaci za vježbu (zadatak)
WWW:
Idite na 1, 2, 3  Sljedeće
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji diplomskih i starih studija -> Objektno programiranje (C++)
Prethodna tema :: Sljedeća tema  

Kako ocjenjujete težinu zadataka za vježbu?
Ne razumijem što zadaci hoće.
0%
 0%  [ 0 ]
Shvaćam zadatak, ali ne znam odakle početi.
10%
 10%  [ 1 ]
Okvirno znam što napraviti, ali ne uspijevam iskodirati.
30%
 30%  [ 3 ]
Vrlo teško, ali ipak dobivam program koji donekle radi.
10%
 10%  [ 1 ]
Treba truda ali mogu ih riješiti u razumnom vremenu.
40%
 40%  [ 4 ]
Teški trivić, hoću prave stvari!
0%
 0%  [ 0 ]
Ma kakvi zadaci, ne da mi se ni pogledati!
10%
 10%  [ 1 ]
Ukupno glasova : 10

Autor/ica Poruka
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 14:58 pon, 9. 10. 2006    Naslov: Zadaci za vježbu Citirajte i odgovorite

Ovdje će se s vremena na vrijeme ukazati zadaci za vježbu. Njihovo rješavanje posve je na dobrovoljnoj bazi. Tu su zato da isprobate stvari koje čujete na vježbama a možda vam fali ideje što s njima napraviti.

EDIT: Dodah anketicu pa odgovorite kako bi se ustanovilo ima li ovaj topic uopce smisla...

EDIT': direktni linkovi na zadatke u topicu
[url=http://degiorgi.math.hr/forum/viewtopic.php?p=63759#63759]zadatak 0.[/url] 09.10.2006.
[url=http://degiorgi.math.hr/forum/viewtopic.php?p=64372#64372]zadatak 1.[/url] 18.10.2006.
[url=http://degiorgi.math.hr/forum/viewtopic.php?p=64470#64470]zadaca za vjezbe[/url] 20.10.2006.
[url=http://degiorgi.math.hr/forum/viewtopic.php?p=64497#64497]zadatak 2.[/url] 20.10.2006.
[url=http://degiorgi.math.hr/forum/viewtopic.php?p=64631#64631]zadatak 3.[/url] 23.10.2006.
[url=http://degiorgi.math.hr/forum/viewtopic.php?p=65711#65711]zadatak 4.[/url] 13.11.2006.

--

Zadatak 0.

Kažemo da je tekst dobro formatiran ako vrijedi:
a) Riječi su odvojene točno jednim razmakom.
b) Rečenice istog paragrafa odvojene su najviše dvama razmacima.
(Smatramo da rečenica završava interpunkcijskim znakovima . ! ? iza kojih slijede barem dva razmaka.)
c) Paragrafi su odvojeni točno jednom praznom linijom.
d) Zadan je N kao maksimalna duljina linijâ teksta. Niti jedna linija nije dulja od N i za svaku liniju vrijedi da je potpuno ispunjena.

Linija L je potpuno ispunjena ako je prazna ili joj se ne može nadopisati početna riječ (ili više njih) iz sljedeće linije, tako da je L još uvijek duljine najviše N.

Neka je 66 <= N <= 132.
Napišite program myFmt, koji prima N kao opcionalni parametar.
Validni su pozivi, dakle:
myFmt 72
myFmt 80
myFmt
Poziv "myFmt 54" nije validan jer krši dogovor o dozvoljenom rasponu od N. Ako opcionalni parametar N nije naveden, podrazumijeva se da iznosi 75.

Program učitava tekst sa standardnog ulaza, liniju po liniju, do EOF i potom ispisuje taj tekst dobro formatiran.
Ovdje će se s vremena na vrijeme ukazati zadaci za vježbu. Njihovo rješavanje posve je na dobrovoljnoj bazi. Tu su zato da isprobate stvari koje čujete na vježbama a možda vam fali ideje što s njima napraviti.

EDIT: Dodah anketicu pa odgovorite kako bi se ustanovilo ima li ovaj topic uopce smisla...

EDIT': direktni linkovi na zadatke u topicu
zadatak 0. 09.10.2006.
zadatak 1. 18.10.2006.
zadaca za vjezbe 20.10.2006.
zadatak 2. 20.10.2006.
zadatak 3. 23.10.2006.
zadatak 4. 13.11.2006.



Zadatak 0.

Kažemo da je tekst dobro formatiran ako vrijedi:
a) Riječi su odvojene točno jednim razmakom.
b) Rečenice istog paragrafa odvojene su najviše dvama razmacima.
(Smatramo da rečenica završava interpunkcijskim znakovima . ! ? iza kojih slijede barem dva razmaka.)
c) Paragrafi su odvojeni točno jednom praznom linijom.
d) Zadan je N kao maksimalna duljina linijâ teksta. Niti jedna linija nije dulja od N i za svaku liniju vrijedi da je potpuno ispunjena.

Linija L je potpuno ispunjena ako je prazna ili joj se ne može nadopisati početna riječ (ili više njih) iz sljedeće linije, tako da je L još uvijek duljine najviše N.

Neka je 66 ⇐ N ⇐ 132.
Napišite program myFmt, koji prima N kao opcionalni parametar.
Validni su pozivi, dakle:
myFmt 72
myFmt 80
myFmt
Poziv "myFmt 54" nije validan jer krši dogovor o dozvoljenom rasponu od N. Ako opcionalni parametar N nije naveden, podrazumijeva se da iznosi 75.

Program učitava tekst sa standardnog ulaza, liniju po liniju, do EOF i potom ispisuje taj tekst dobro formatiran.




Zadnja promjena: venovako; 23:57 pon, 13. 11. 2006; ukupno mijenjano 5 put/a.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 18:06 pon, 9. 10. 2006    Naslov: Re: Zadaci za vježbu Citirajte i odgovorite

[quote="venovako"]
c) Paragrafi su odvojeni točno jednom praznom linijom.[/quote]

po cemu prepoznajemo paragrafe na unosu?
koliko korisnik moze biti glup?
venovako (napisa):

c) Paragrafi su odvojeni točno jednom praznom linijom.


po cemu prepoznajemo paragrafe na unosu?
koliko korisnik moze biti glup?



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 22:34 pon, 9. 10. 2006    Naslov: Re: Zadaci za vježbu Citirajte i odgovorite

[quote="GauSs_"]po cemu prepoznajemo paragrafe na unosu?[/quote]

Isto kao u TeX-u: barem jedna prazna linija predstavlja granicu dvaju paragrafa.
Eventualne prazne linije na pocetku i kraju teksta tretirajte kako god, mozete ih i ostaviti na miru.

[quote="GauSs_"]koliko korisnik moze biti glup?[/quote]

[latex]+\infty[/latex]

P.S. Zadatak je varijacija na temu [tt]fmt(1)[/tt] utility-a.
Lupiti [tt]man fmt[/tt] na nekom *nixu za iluminaciju...
GauSs_ (napisa):
po cemu prepoznajemo paragrafe na unosu?


Isto kao u TeX-u: barem jedna prazna linija predstavlja granicu dvaju paragrafa.
Eventualne prazne linije na pocetku i kraju teksta tretirajte kako god, mozete ih i ostaviti na miru.

GauSs_ (napisa):
koliko korisnik moze biti glup?




P.S. Zadatak je varijacija na temu fmt(1) utility-a.
Lupiti man fmt na nekom *nixu za iluminaciju...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 0:00 uto, 10. 10. 2006    Naslov: Re: Zadaci za vježbu Citirajte i odgovorite

[quote="venovako"]
[quote="GauSs_"]koliko korisnik moze biti glup?[/quote]
[latex]+\infty[/latex]
[/quote]
Odnosno, ideja je sto bolje simulirati stvarne probleme s korisnicima. :-)
venovako (napisa):

GauSs_ (napisa):
koliko korisnik moze biti glup?



Odnosno, ideja je sto bolje simulirati stvarne probleme s korisnicima. Smile



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 9:21 uto, 10. 10. 2006    Naslov: Re: Zadaci za vježbu Citirajte i odgovorite

[quote="mdoko"]Odnosno, ideja je sto bolje simulirati stvarne probleme s korisnicima. :-)[/quote]

Upravo tako, preciznim i politički korektnim rječnikom rečeno.

Ako (mislite da :twisted:) ste rijesili zadatak, slobodno se pohvalite!
mdoko (napisa):
Odnosno, ideja je sto bolje simulirati stvarne probleme s korisnicima. Smile


Upravo tako, preciznim i politički korektnim rječnikom rečeno.

Ako (mislite da Twisted Evil) ste rijesili zadatak, slobodno se pohvalite!


[Vrh]
Korisnički profil Pošaljite privatnu poruku
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 9:48 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

nije mi bas jasan ovaj [b]fmt[/b]

na primjeru:
[code:1]
ovo je zakon. ma daj. evo nesto sam tako.
prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad? .


ovo je ludnica.[/code:1]

za [code:1]# fmt -u test.txt [/code:1]

vraca:
[code:1]
ovo je zakon. ma daj. evo nesto sam tako. prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad? .


ovo je ludnica.
[/code:1]

i ocito mi ne odvoji recenice sa dva space-a.
nije mi bas jasan ovaj fmt

na primjeru:
Kod:

ovo je zakon. ma daj.   evo nesto sam tako.
prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad?  .


ovo je        ludnica.


za
Kod:
# fmt -u test.txt


vraca:
Kod:

ovo je zakon. ma daj.  evo nesto sam tako.  prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad?  .


ovo je ludnica.


i ocito mi ne odvoji recenice sa dva space-a.



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 10:11 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

[code:1][vsego@degiorgi tmp]$ cat > test.txt

ovo je zakon. ma daj. evo nesto sam tako.
prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad? .


ovo je ludnica.
[vsego@degiorgi tmp]$ fmt -u test.txt

ovo je zakon. ma daj. evo nesto sam tako. prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad? .


ovo je ludnica.
[vsego@degiorgi tmp]$ fmt --version
fmt (coreutils) 5.2.1
Written by Ross Paterson.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.[/code:1]

Cini mi se da [tt]fmt[/tt] samo mice viskove (newlineova i razmaka), ali ne dodaje nista. 8) Drugim rijecima, separator recenica mu je [tt]/[.?!] {2,}/[/tt], cime se postize da ne grijesi kod rednih brojeva, kratica, faktorijela i sl. 8)
Kod:
[vsego@degiorgi tmp]$ cat > test.txt

ovo je zakon. ma daj.   evo nesto sam tako.
prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad?  .


ovo je        ludnica.
[vsego@degiorgi tmp]$ fmt -u test.txt

ovo je zakon. ma daj.  evo nesto sam tako.  prica jedna. hehe.

nije normalna! zar ne? hehehe.

??! !!?? a sta sad?  .


ovo je ludnica.
[vsego@degiorgi tmp]$ fmt --version
fmt (coreutils) 5.2.1
Written by Ross Paterson.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Cini mi se da fmt samo mice viskove (newlineova i razmaka), ali ne dodaje nista. Cool Drugim rijecima, separator recenica mu je /[.?!] {2,}/, cime se postize da ne grijesi kod rednih brojeva, kratica, faktorijela i sl. Cool



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 10:12 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

Pogledah [tt]info fmt[/tt] na Sistemu i za opciju [tt]-u[/tt] veli "[b]Reduce[/b] spacing between words to one space, and spacing between sentences to two spaces."

Isprobah i doista reducira bjeline ako ih ima > 2, ali ne dupla jednostruke bjeline...

Kad se malo razmisli, to cak ima smisla :)
Tako npr. prolaze skracenice i redni brojevi.

Modificirat cu zadatak tako da uvazi tu cinjenicu.
Svejedno je sto pise, ovo je ionako vjezba.
Tko je radio po starom, isto OK.

Ideja zadatka nije reimplementirati [tt]fmt[/tt] (sto bi definitivno bio overkill).

P.S. vsego je, as usual, superbrz na okidacu :)
Pogledah info fmt na Sistemu i za opciju -u veli "Reduce spacing between words to one space, and spacing between sentences to two spaces."

Isprobah i doista reducira bjeline ako ih ima > 2, ali ne dupla jednostruke bjeline...

Kad se malo razmisli, to cak ima smisla Smile
Tako npr. prolaze skracenice i redni brojevi.

Modificirat cu zadatak tako da uvazi tu cinjenicu.
Svejedno je sto pise, ovo je ionako vjezba.
Tko je radio po starom, isto OK.

Ideja zadatka nije reimplementirati fmt (sto bi definitivno bio overkill).

P.S. vsego je, as usual, superbrz na okidacu Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 10:25 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

ovaj [b]fmt[/b] je stvarno malo glupast

evo za:
[code:1]
pimuf@pr1-19 ~/c_c++/rp4 0 :: fmt -u -w 98 beta.txt
The parameters index and num have default values, which means that erase() can be called with
just index to erase all characters after index or with no arguments to erase all characters.
Druga recenica. Treca recenica.

Cetvrta recenica?
pimuf@pr1-19 ~/c_c++/rp4 0 :: fmt -u -w 104 beta.txt
The parameters index and num have default values, which means that erase() can be called with
just index to erase all characters after index or with no arguments to erase all characters.
Druga recenica. Treca recenica.

Cetvrta recenica?
[/code:1]

a ocito je da just moze stati u prvu liniju kada podignemo broj znakova na 104
ovaj fmt je stvarno malo glupast

evo za:
Kod:

pimuf@pr1-19 ~/c_c++/rp4 0 :: fmt -u -w 98 beta.txt
The parameters index and num have default values, which means that erase() can be called with
just index to erase all characters after index or with no arguments to erase all characters.
Druga recenica.  Treca recenica.

Cetvrta recenica?
pimuf@pr1-19 ~/c_c++/rp4 0 :: fmt -u -w 104 beta.txt
The parameters index and num have default values, which means that erase() can be called with
just index to erase all characters after index or with no arguments to erase all characters.
Druga recenica.  Treca recenica.

Cetvrta recenica?


a ocito je da just moze stati u prvu liniju kada podignemo broj znakova na 104



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?


Zadnja promjena: GauSs_; 12:46 uto, 10. 10. 2006; ukupno mijenjano 2 put/a.
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3560)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 10:39 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

Ocito radi tako da zadnji stupac ostane prazan, da se izbjegne nepotrebne skokove u novi red. 8)

@venovako: tvoj originalni zadatak je implementacija okljastrenog

[code:1]cat "$1" | sed 's/ / /g' | fmt -u[/code:1]

;)
Ocito radi tako da zadnji stupac ostane prazan, da se izbjegne nepotrebne skokove u novi red. Cool

@venovako: tvoj originalni zadatak je implementacija okljastrenog

Kod:
cat "$1" | sed 's/ /  /g' | fmt -u


Wink



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 10:40 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

evo:
[code:1]
#include <iostream>
#include <string>

#include <cctype>

using std::cin;
using std::cout;
using std::endl;
using std::string;

bool kriterij_paragraf( string const &pomoc){
// provjerava da li se dani string sastoji samo
// od space-ova te da li je prazan
if( pomoc.size()==0) return true;
if( pomoc.find_first_not_of(' ')==string::npos ) return true;

return false;
}

void modificiraj( string &tekst){

// modificira string tako da mijenja:
// '. ' -> '. ' , '? ' -> '? ' , '! ' -> '! '
for( string::size_type i=0; i<tekst.size()-1; ++i){
if( tekst[i]=='.' && tekst[i+1]==' ' ){
tekst.replace( i, 1, ". ", 0, 2);
}
else if( tekst[i]=='?' && tekst[i+1]==' ' ){
tekst.replace( i, 1, "? ", 0, 2);
}
else if( tekst[i]=='!' && tekst[i+1]==' ' ){
tekst.replace( i, 1, "! ", 0, 2);
}
}

// modificira string tako da "ubija" visetruke
// uzastopne space-ove
// kod pocetka recenice ostavlja 2 inace 1
string::size_type brojac=0;
while ( ( brojac=tekst.find(" ", brojac) ) != string::npos ){
if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
tekst.replace( brojac, 2, " ", 0, 1);
continue;
}
++brojac;
}

// modificira string tako da mijenja ' \n\n' -> '\n\n'
brojac=0;
while ( ( brojac=tekst.find(" \n\n", brojac) ) != string::npos ){
tekst.replace( brojac, 3, "\n ", 0, 1);
++brojac;
}

// brise posljednj dva znaka u stringu koji su space-ovi
// zbog nacina stvaranja stringa "tekst"
// u main-u ( tekst+=pomoc+" " )
// i gore izvedene konverzije
tekst.erase(tekst.size()-2, 2);

}

int main( int argc, char *argv[]){

if(argc>2){
cout << "Nepravilan poziv programa!!!\n> Previse argumenata." << endl;
return 1;
}

int broj=75;
if( argc==2 ){
string pomoc(argv[1]);
for( string::size_type i=0; i<pomoc.size(); ++i){
if( !isdigit(pomoc[i]) ){
cout << "Nepravilan poziv programa!!!\n> Drugi argument nije broj." << endl;
return 2;
}
}

broj=atoi(argv[1]);
}

if( broj<66 || broj>132){
cout << "Nepravilan poziv programa!!!\n> Drugi argument mora biti broj izmedju 66 i 132." << endl;
return 3;
}

// ucitiva tekst sa standardong ulaza liniju po liniju
// te ga lijepi na vec prije uneseni tekst
string pomoc, tekst;
bool paragraf=false;
while( getline( cin, pomoc) ){

// ako zadovoljava kriterije za paragraf
// tj. sadrzi samo praznine ili je prazan
if( kriterij_paragraf( pomoc) ){

// ako je do sada uneseni tekst velicine 0, tj. na pocetku smo
// onda zanemari sve prazne linije
if( tekst.size()==0 ) continue;
else{
// inace vec postoji tekst pa je prazna
// linija oznaka za novi paragraf
paragraf=true;
continue;
}
}

// ako smo ucitali tekst (ne zadovoljava kriterije paragrafa,
// pogledati gore funkciju) i prije je bila unesena prazna
// linija (ili vise), tj. paragraf=true
// onda lijepi '\n\n' na kraj "tekst"-a
if( pomoc.size()!=0 && paragraf==true){
tekst+="\n\n";
paragraf=false;
}

// lijepi unesenu liniju na prije ucitani tekst
tekst+=pomoc+" ";
}

// pogledati opis funkcije
modificiraj( tekst);

// "kida" tekst na linije velicine varijable broj
// dodajuci '\n' character
// prethodni pamti polozaj najblizeg space-a kojeg smo prosli
// brojac broji koliko smo karaktera prosli
string::size_type brojac=0, prethodni=0;
for( string::size_type i=0; i<tekst.size(); ++i){

// ako smo prosli broj karaktera a nismo se prebacili
// u novu liniju onda se prebacujemo
// dodavanjem '\n' charactera na mjesto
// sa indeksom prethodni, tj. na najblizi prodjen space
if( brojac==broj ){
tekst.replace( prethodni, 1, "\n", 0, 1);
brojac=0;

// vracamo se na indeks prethodni+1
// jer smo na indeksu prethodni prekinuli liniju
i=prethodni+1;

continue;
}

// ako je trenutni character space postavi prethodni
if( tekst[i]==' ' ) prethodni=i;
// ako je trenutni character '\n' resetiraj brojac
// jer se tu prebacujemo u novu liniju
else if( tekst[i]=='\n' ) brojac=0;

++brojac;
}

cout << tekst << endl;

return 0;
}

[/code:1]

za pocetnika u C++ valjda nije lose

EDIT: dodani komentari u kod i modificirao [b]modificiraj[/b]
evo:
Kod:

#include <iostream>
#include <string>

#include <cctype>

using std::cin;
using std::cout;
using std::endl;
using std::string;

bool kriterij_paragraf( string const &pomoc){
  // provjerava da li se dani string sastoji samo
  // od space-ova te da li je prazan
  if( pomoc.size()==0) return true;
  if( pomoc.find_first_not_of(' ')==string::npos ) return true;

  return false;
}

void modificiraj( string &tekst){
 
  // modificira string tako da mijenja:
  // '. ' -> '.  ' , '? ' -> '?  ' , '! ' -> '!  '
  for( string::size_type i=0; i<tekst.size()-1; ++i){
    if( tekst[i]=='.' && tekst[i+1]==' ' ){
      tekst.replace( i, 1, ". ", 0, 2);
    }
    else if( tekst[i]=='?' && tekst[i+1]==' ' ){
      tekst.replace( i, 1, "? ", 0, 2);
    }
    else if( tekst[i]=='!' && tekst[i+1]==' ' ){
      tekst.replace( i, 1, "! ", 0, 2);
    }
  }
 
  // modificira string tako da "ubija" visetruke
  // uzastopne space-ove
  // kod pocetka recenice ostavlja 2 inace 1
  string::size_type brojac=0;
  while ( ( brojac=tekst.find("  ", brojac) ) != string::npos ){
    if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
      tekst.replace( brojac, 2, " ", 0, 1);
      continue;
    }
    ++brojac;
  }
 
  // modificira string tako da mijenja '  \n\n' -> '\n\n'
  brojac=0;
  while ( ( brojac=tekst.find("  \n\n", brojac) ) != string::npos ){
    tekst.replace( brojac, 3, "\n ", 0, 1);
    ++brojac;
  }

  // brise posljednj dva znaka u stringu koji su space-ovi
  // zbog nacina stvaranja stringa "tekst"
  // u main-u ( tekst+=pomoc+" " )
  // i gore izvedene konverzije
  tekst.erase(tekst.size()-2, 2);

}

int main( int argc, char *argv[]){

  if(argc>2){
    cout << "Nepravilan poziv programa!!!\n> Previse argumenata." << endl;
    return 1;
  }

  int broj=75;
  if( argc==2 ){
    string pomoc(argv[1]);
    for( string::size_type i=0; i<pomoc.size(); ++i){
      if( !isdigit(pomoc[i]) ){
   cout << "Nepravilan poziv programa!!!\n> Drugi argument nije broj." << endl;
   return 2;
      }
    }

    broj=atoi(argv[1]);
  }

  if( broj<66 || broj>132){
    cout << "Nepravilan poziv programa!!!\n> Drugi argument mora biti broj izmedju 66 i 132." << endl;
    return 3;
  }

  // ucitiva tekst sa standardong ulaza liniju po liniju
  // te ga lijepi na vec prije uneseni tekst
  string pomoc, tekst;
  bool paragraf=false;
  while( getline( cin, pomoc) ){

    // ako zadovoljava kriterije za paragraf
    // tj. sadrzi samo praznine ili je prazan
    if( kriterij_paragraf( pomoc) ){

      // ako je do sada uneseni tekst velicine 0, tj. na pocetku smo
      // onda zanemari sve prazne linije
      if( tekst.size()==0 ) continue;     
      else{
   // inace vec postoji tekst pa je prazna
   // linija oznaka za novi paragraf
   paragraf=true;
   continue;
      }
    }

    // ako smo ucitali tekst (ne zadovoljava kriterije paragrafa,
    // pogledati gore funkciju) i prije je bila unesena prazna
    // linija (ili vise), tj. paragraf=true
    // onda lijepi '\n\n' na kraj "tekst"-a
    if( pomoc.size()!=0 && paragraf==true){     
      tekst+="\n\n";
      paragraf=false;
    }

    // lijepi unesenu liniju na prije ucitani tekst
    tekst+=pomoc+" ";
  }
 
  // pogledati opis funkcije
  modificiraj( tekst);
 
  // "kida" tekst na linije velicine varijable broj
  // dodajuci '\n' character
  // prethodni pamti polozaj najblizeg space-a kojeg smo prosli
  // brojac broji koliko smo karaktera prosli
  string::size_type brojac=0, prethodni=0;
  for( string::size_type i=0; i<tekst.size(); ++i){

    // ako smo prosli broj karaktera a nismo se prebacili
    // u novu liniju onda se prebacujemo
    // dodavanjem '\n' charactera na mjesto
    // sa indeksom prethodni, tj. na najblizi prodjen space
    if( brojac==broj ){
     tekst.replace( prethodni, 1, "\n", 0, 1);
     brojac=0;

     // vracamo se na indeks prethodni+1
     // jer smo na indeksu prethodni prekinuli liniju
     i=prethodni+1;
     
     continue;
    }
   
    // ako je trenutni character space postavi prethodni
    if( tekst[i]==' ' ) prethodni=i;
    // ako je trenutni character '\n' resetiraj brojac
    // jer se tu prebacujemo u novu liniju
    else if( tekst[i]=='\n' ) brojac=0;
   
    ++brojac;
  }

  cout << tekst << endl;

  return 0;
}



za pocetnika u C++ valjda nije lose

EDIT: dodani komentari u kod i modificirao modificiraj



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?


Zadnja promjena: GauSs_; 12:24 uto, 10. 10. 2006; ukupno mijenjano 5 put/a.
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 10:46 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

@GauSs_:

Za C++ pocetnika ovo je, na prvi pogled, i vise nego dobro, samo mi je malo komplicirano snaci se bez ijednog komentara. Na ono sto sam dosad skuzio imam pokoju primjedbicu, ali komentari slijede kad proucim sve.

Sto se fmt-a tice, info za -w opciju veli:
"Fill output lines up to WIDTH characters (default 75). `fmt' initially tries to make lines about 7% shorter than this, to give it room to balance line lengths."
Ako to ne pise u tvom infu, moj fmt je iz coreutils-a 6.3 (da, bleeding edge, ali se isplati).
Zato i nije ideja reimplementirat fmt, jer ima toliko carolija...

Napomena: Od velike pomoci pri kodiranju mogu biti string streamovi.
@GauSs_:

Za C++ pocetnika ovo je, na prvi pogled, i vise nego dobro, samo mi je malo komplicirano snaci se bez ijednog komentara. Na ono sto sam dosad skuzio imam pokoju primjedbicu, ali komentari slijede kad proucim sve.

Sto se fmt-a tice, info za -w opciju veli:
"Fill output lines up to WIDTH characters (default 75). `fmt' initially tries to make lines about 7% shorter than this, to give it room to balance line lengths."
Ako to ne pise u tvom infu, moj fmt je iz coreutils-a 6.3 (da, bleeding edge, ali se isplati).
Zato i nije ideja reimplementirat fmt, jer ima toliko carolija...

Napomena: Od velike pomoci pri kodiranju mogu biti string streamovi.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 11:54 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

@GauSs_:

Ovako, na prvi pogled, i ako zanemarimo sitnije primjedbe, muci me ovaj komad koda:
[code:1]
void modificiraj( string &tekst){
string::size_type end=tekst.size()-1;
for( string::size_type i=0; i<end; ++i){
[/code:1]

Unutar for petlje mozebitno modificiras duljinu stringa tekst, ali ti se petlja vrti do konstante granice...
Mozda bi bilo bolje ovako:
[code:1]
void modificiraj( string &tekst) {
for (string::size_type i = 0; i < tekst.size() - 1; ++i) {
[/code:1]

Ispravi me ako sam u krivu...
@GauSs_:

Ovako, na prvi pogled, i ako zanemarimo sitnije primjedbe, muci me ovaj komad koda:
Kod:

void modificiraj( string &tekst){
  string::size_type end=tekst.size()-1;
  for( string::size_type i=0; i<end; ++i){


Unutar for petlje mozebitno modificiras duljinu stringa tekst, ali ti se petlja vrti do konstante granice...
Mozda bi bilo bolje ovako:
Kod:

void modificiraj( string &tekst) {
  for (string::size_type i = 0; i < tekst.size() - 1; ++i) {


Ispravi me ako sam u krivu...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 12:07 uto, 10. 10. 2006    Naslov: Citirajte i odgovorite

[quote="venovako"]
Ispravi me ako sam u krivu...[/quote]

Nisi :lol: , moja greska.

evo dodao sam komentare i promjenio taj dio koda
venovako (napisa):

Ispravi me ako sam u krivu...


Nisi Laughing , moja greska.

evo dodao sam komentare i promjenio taj dio koda



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 6:52 sri, 11. 10. 2006    Naslov: Citirajte i odgovorite

hmmm. nasao sam nesto sto bi sam promijenio.

[code:1]
// modificira string tako da "ubija" visetruke
// uzastopne space-ove
// kod pocetka recenice ostavlja 2 inace 1
string::size_type brojac=0;
while ( ( brojac=tekst.find(" ", brojac) ) != string::npos ){
if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
tekst.replace( brojac, 2, " ", 0, 1);
continue;
}
++brojac;
}

[/code:1]

sa

[code:1]
// modificira string tako da "ubija" visetruke
// uzastopne space-ove
// kod pocetka recenice ostavlja 2 inace 1
string::size_type brojac=0;
while ( ( brojac=tekst.find(" ", brojac) ) != string::npos ){
if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
tekst.erase( brojac, 1); // prije bijase tekst.replace( brojac, 2, " ", 0, 1);
continue;
}
++brojac;
}
[/code:1]
hmmm. nasao sam nesto sto bi sam promijenio.

Kod:

// modificira string tako da "ubija" visetruke
// uzastopne space-ove
// kod pocetka recenice ostavlja 2 inace 1
string::size_type brojac=0;
while ( ( brojac=tekst.find("  ", brojac) ) != string::npos ){
  if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
    tekst.replace( brojac, 2, " ", 0, 1);
    continue;
  }
  ++brojac;
}



sa

Kod:

// modificira string tako da "ubija" visetruke
// uzastopne space-ove
// kod pocetka recenice ostavlja 2 inace 1
string::size_type brojac=0;
while ( ( brojac=tekst.find("  ", brojac) ) != string::npos ){
  if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
    tekst.erase( brojac, 1); // prije bijase tekst.replace( brojac, 2, " ", 0, 1);
    continue;
  }
  ++brojac;
}



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 13:25 sri, 11. 10. 2006    Naslov: Citirajte i odgovorite

danas je profesor rekao na predavanjima da nije pametno pisati:
[code:1]
for( ... i=0; i<nesto.size() ; ++i){
...
}
[/code:1]
i u tijelu petlje mijenjati string nesto.

pa sam modificirao program prema profesorovoj primjedbi i jos ga malo preuredio.

sada imam dvije funkcije za istu stvar pri cemu je verzija1 stara a verzija2 nova (kao ispravnija).

onaj dio sam "kidanjem" teksta sam sada stavio kao funkciju razlomi.
kod te funkcije nije mi se dalo prepravljati po gornjoj (profesorovoj) primjedbi ( jer kod mene radi :) ).

evo i mala [url=http://www.iugrina.com/tmp/test.txt]datoteka[/url] za testiranje. nemojte samo kopirati tekst
iz datoteke vec ju download-ajte. ("Save Link As")

za one koji rade pod *nix-om program mogu pokrenuti ovako:
[code:1]$ cat test.txt | ime_programa [/code:1]


[code:1]
#include <iostream>
#include <string>

#include <cctype>

using std::cin;
using std::cout;
using std::endl;
using std::string;

bool kriterij_paragraf( string const &pomoc){
// provjerava da li se dani string sastoji samo
// od space-ova te da li je prazan
if( pomoc.size()==0) return true;
if( pomoc.find_first_not_of(' ')==string::npos ) return true;

return false;
}

void verzija1( string &tekst){
// modificira string tako da mijenja:
// '. ' -> '. ' , '? ' -> '? ' , '! ' -> '! '
for( string::size_type i=0; i<tekst.size()-1; ++i){
if( tekst[i]=='.' && tekst[i+1]==' ' ){
tekst.replace( i, 1, ". ", 0, 2);
}
else if( tekst[i]=='?' && tekst[i+1]==' ' ){
tekst.replace( i, 1, "? ", 0, 2);
}
else if( tekst[i]=='!' && tekst[i+1]==' ' ){
tekst.replace( i, 1, "! ", 0, 2);
}
}
}

void verzija2( string &tekst){
string novi;

// modificira string tako da mijenja:
// '. ' -> '. ' , '? ' -> '? ' , '! ' -> '! '
string::size_type prethodni=0;
string::size_type end=tekst.size()-1;
for( string::size_type i=0; i<end; ++i){
if( ( tekst[i]=='.' || tekst[i]=='!' || tekst[i]=='?' ) && tekst[i+1]==' '){
novi+=tekst.substr( prethodni, i+1 - prethodni )+" ";
prethodni=i+1;
++i;
}
}

novi+=tekst.substr( prethodni);

tekst=novi;
}

bool modificiraj( string &tekst, int verzija=2){

if( verzija!=1 && verzija!=2 ) return false;
verzija==1 ? verzija1( tekst) : verzija2( tekst);

// modificira string tako da "ubija" visetruke
// uzastopne space-ove
// kod pocetka recenice ostavlja 2 inace 1
string::size_type brojac=0;
while ( ( brojac=tekst.find(" ", brojac) ) != string::npos ){
if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
tekst.erase( brojac, 1);
continue;
}
++brojac;
}

// modificira string tako da mijenja ' \n\n' -> '\n\n'
brojac=0;
while ( ( brojac=tekst.find(" \n\n", brojac) ) != string::npos ){
tekst.replace( brojac, 3, "\n ", 0, 1);
++brojac;
}

// modificira string tako da mijenja '\n ' -> '\n'
brojac=0;
while ( ( brojac=tekst.find("\n ", brojac) ) != string::npos ){
tekst.replace( brojac, 2, "\n", 0, 1);
++brojac;
}

// brise posljednj dva znaka u stringu koji su space-ovi
// zbog nacina stvaranja stringa "tekst"
// u main-u ( tekst+=pomoc+" " )
// i gore izvedene konverzije
if( tekst[tekst.size()-2]==' ' ){
tekst.erase( tekst.size()-2, 2 );
}
// odnosno samo zadnji znak ako korisnik nije zavrsio s . ? !
else{
tekst.erase( tekst.size()-1, 1);
}

// brise prvi znak teksta ako je space
if( tekst[0]==' ' ){
tekst.erase( 0, 1);
}

return true;
}

void razlomi( string &tekst, int broj){
// "kida" tekst na linije velicine varijable broj
// dodajuci '\n' character
// prethodni pamti polozaj najblizeg space-a kojeg smo prosli
// brojac broji koliko smo karaktera prosli
string::size_type brojac=0, prethodni=0;
for( string::size_type i=0; i<tekst.size(); ++i){

// ako smo prosli broj karaktera a nismo se prebacili
// u novu liniju onda se prebacujemo
// dodavanjem '\n' charactera na mjesto
// sa indeksom prethodni, tj. na najblizi prodjen space
if( brojac==broj ){
tekst.replace( prethodni, 1, "\n", 0, 1);
brojac=0;

// vracamo se na indeks prethodni+1
// jer smo na indeksu prethodni prekinuli liniju
i=prethodni+1;

continue;
}

// ako je trenutni character space postavi prethodni
if( tekst[i]==' ' ) prethodni=i;
// ako je trenutni character '\n' resetiraj brojac
// jer se tu prebacujemo u novu liniju
else if( tekst[i]=='\n' ) brojac=0;

++brojac;
}
}

int main( int argc, char *argv[]){

if(argc>2){
cout << "Nepravilan poziv programa!!!\n> Previse argumenata." << endl;
return 1;
}

int broj=75;
if( argc==2 ){
string pomoc(argv[1]);
for( string::size_type i=0; i<pomoc.size(); ++i){
if( !isdigit(pomoc[i]) ){
cout << "Nepravilan poziv programa!!!\n> Drugi argument nije broj." << endl;
return 2;
}
}

broj=atoi(argv[1]);
}

if( broj<66 || broj>132){
cout << "Nepravilan poziv programa!!!\n> Drugi argument mora biti broj izmedju 66 i 132." << endl;
return 3;
}

// ucitiva tekst sa standardong ulaza liniju po liniju
// te ga lijepi na vec prije uneseni tekst
string pomoc, tekst;
bool paragraf=false;
while( getline( cin, pomoc) ){

// ako zadovoljava kriterije za paragraf
// tj. sadrzi samo praznine ili je prazan
if( kriterij_paragraf( pomoc) ){

// ako je do sada uneseni tekst velicine 0, tj. na pocetku smo
// onda zanemari sve prazne linije
if( tekst.size()==0 ) continue;
else{
// inace vec postoji tekst pa je prazna
// linija oznaka za novi paragraf
paragraf=true;
continue;
}
}

// ako smo ucitali tekst (ne zadovoljava kriterije paragrafa,
// pogledati gore funkciju) i prije je bila unesena prazna
// linija (ili vise), tj. paragraf=true
// onda lijepi '\n\n' na kraj "tekst"-a
if( pomoc.size()!=0 && paragraf==true){
tekst+="\n\n";
paragraf=false;
}

// lijepi unesenu liniju na prije ucitani tekst
tekst+=pomoc+" ";
}

modificiraj( tekst);
razlomi( tekst, broj);

cout << tekst << endl;

return 0;
}

[/code:1]
danas je profesor rekao na predavanjima da nije pametno pisati:
Kod:

for( ... i=0; i<nesto.size() ; ++i){
  ...
}

i u tijelu petlje mijenjati string nesto.

pa sam modificirao program prema profesorovoj primjedbi i jos ga malo preuredio.

sada imam dvije funkcije za istu stvar pri cemu je verzija1 stara a verzija2 nova (kao ispravnija).

onaj dio sam "kidanjem" teksta sam sada stavio kao funkciju razlomi.
kod te funkcije nije mi se dalo prepravljati po gornjoj (profesorovoj) primjedbi ( jer kod mene radi Smile ).

evo i mala datoteka za testiranje. nemojte samo kopirati tekst
iz datoteke vec ju download-ajte. ("Save Link As")

za one koji rade pod *nix-om program mogu pokrenuti ovako:
Kod:
$ cat test.txt | ime_programa



Kod:

#include <iostream>
#include <string>

#include <cctype>

using std::cin;
using std::cout;
using std::endl;
using std::string;

bool kriterij_paragraf( string const &pomoc){
  // provjerava da li se dani string sastoji samo
  // od space-ova te da li je prazan
  if( pomoc.size()==0) return true;
  if( pomoc.find_first_not_of(' ')==string::npos ) return true;

  return false;
}

void verzija1( string &tekst){
  // modificira string tako da mijenja:
  // '. ' -> '.  ' , '? ' -> '?  ' , '! ' -> '!  '
  for( string::size_type i=0; i<tekst.size()-1; ++i){
    if( tekst[i]=='.' && tekst[i+1]==' ' ){
      tekst.replace( i, 1, ". ", 0, 2);
    }
    else if( tekst[i]=='?' && tekst[i+1]==' ' ){
      tekst.replace( i, 1, "? ", 0, 2);
    }
    else if( tekst[i]=='!' && tekst[i+1]==' ' ){
      tekst.replace( i, 1, "! ", 0, 2);
    }
  }
}

void verzija2( string &tekst){
  string novi;

  // modificira string tako da mijenja:
  // '. ' -> '.  ' , '? ' -> '?  ' , '! ' -> '!  '
  string::size_type prethodni=0;
  string::size_type end=tekst.size()-1;
  for( string::size_type i=0; i<end; ++i){
    if( ( tekst[i]=='.' || tekst[i]=='!' || tekst[i]=='?' ) && tekst[i+1]==' '){
      novi+=tekst.substr( prethodni, i+1 - prethodni )+" ";
      prethodni=i+1;
      ++i;
    }
  }

  novi+=tekst.substr( prethodni);

  tekst=novi;
}

bool modificiraj( string &tekst, int verzija=2){

  if( verzija!=1 && verzija!=2 ) return false;
  verzija==1 ? verzija1( tekst) : verzija2( tekst);

  // modificira string tako da "ubija" visetruke
  // uzastopne space-ove
  // kod pocetka recenice ostavlja 2 inace 1
  string::size_type brojac=0;
  while ( ( brojac=tekst.find("  ", brojac) ) != string::npos ){
    if( tekst[brojac-1]!='.' && tekst[brojac-1]!='?' && tekst[brojac-1]!='!' ){
      tekst.erase( brojac, 1);
      continue;
    }
    ++brojac;
  }
 
  // modificira string tako da mijenja '  \n\n' -> '\n\n'
  brojac=0;
  while ( ( brojac=tekst.find("  \n\n", brojac) ) != string::npos ){
    tekst.replace( brojac, 3, "\n ", 0, 1);
    ++brojac;
  }

  // modificira string tako da mijenja '\n ' -> '\n'
  brojac=0;
  while ( ( brojac=tekst.find("\n ", brojac) ) != string::npos ){
    tekst.replace( brojac, 2, "\n", 0, 1);
    ++brojac;
  }

  // brise posljednj dva znaka u stringu koji su space-ovi
  // zbog nacina stvaranja stringa "tekst"
  // u main-u ( tekst+=pomoc+" " )
  // i gore izvedene konverzije
  if( tekst[tekst.size()-2]==' ' ){
    tekst.erase( tekst.size()-2, 2 );
  }
  // odnosno samo zadnji znak ako korisnik nije zavrsio s . ? !
  else{
    tekst.erase( tekst.size()-1, 1);
  }

  // brise prvi znak teksta ako je space
  if( tekst[0]==' ' ){
    tekst.erase( 0, 1);
  }

  return true;
}

void razlomi( string &tekst, int broj){
  // "kida" tekst na linije velicine varijable broj
  // dodajuci '\n' character
  // prethodni pamti polozaj najblizeg space-a kojeg smo prosli
  // brojac broji koliko smo karaktera prosli
  string::size_type brojac=0, prethodni=0;
  for( string::size_type i=0; i<tekst.size(); ++i){

    // ako smo prosli broj karaktera a nismo se prebacili
    // u novu liniju onda se prebacujemo
    // dodavanjem '\n' charactera na mjesto
    // sa indeksom prethodni, tj. na najblizi prodjen space
    if( brojac==broj ){
     tekst.replace( prethodni, 1, "\n", 0, 1);
     brojac=0;

     // vracamo se na indeks prethodni+1
     // jer smo na indeksu prethodni prekinuli liniju
     i=prethodni+1;
     
     continue;
    }
   
    // ako je trenutni character space postavi prethodni
    if( tekst[i]==' ' ) prethodni=i;
    // ako je trenutni character '\n' resetiraj brojac
    // jer se tu prebacujemo u novu liniju
    else if( tekst[i]=='\n' ) brojac=0;
   
    ++brojac;
  }
}

int main( int argc, char *argv[]){

  if(argc>2){
    cout << "Nepravilan poziv programa!!!\n> Previse argumenata." << endl;
    return 1;
  }

  int broj=75;
  if( argc==2 ){
    string pomoc(argv[1]);
    for( string::size_type i=0; i<pomoc.size(); ++i){
      if( !isdigit(pomoc[i]) ){
   cout << "Nepravilan poziv programa!!!\n> Drugi argument nije broj." << endl;
   return 2;
      }
    }

    broj=atoi(argv[1]);
  }

  if( broj<66 || broj>132){
    cout << "Nepravilan poziv programa!!!\n> Drugi argument mora biti broj izmedju 66 i 132." << endl;
    return 3;
  }

  // ucitiva tekst sa standardong ulaza liniju po liniju
  // te ga lijepi na vec prije uneseni tekst
  string pomoc, tekst;
  bool paragraf=false;
  while( getline( cin, pomoc) ){

    // ako zadovoljava kriterije za paragraf
    // tj. sadrzi samo praznine ili je prazan
    if( kriterij_paragraf( pomoc) ){

      // ako je do sada uneseni tekst velicine 0, tj. na pocetku smo
      // onda zanemari sve prazne linije
      if( tekst.size()==0 ) continue;     
      else{
   // inace vec postoji tekst pa je prazna
   // linija oznaka za novi paragraf
   paragraf=true;
   continue;
      }
    }

    // ako smo ucitali tekst (ne zadovoljava kriterije paragrafa,
    // pogledati gore funkciju) i prije je bila unesena prazna
    // linija (ili vise), tj. paragraf=true
    // onda lijepi '\n\n' na kraj "tekst"-a
    if( pomoc.size()!=0 && paragraf==true){     
      tekst+="\n\n";
      paragraf=false;
    }

    // lijepi unesenu liniju na prije ucitani tekst
    tekst+=pomoc+" ";
  }
 
  modificiraj( tekst);
  razlomi( tekst, broj);
 
  cout << tekst << endl;

  return 0;
}




_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 15:31 sri, 11. 10. 2006    Naslov: Citirajte i odgovorite

[quote="GauSs_"]za one koji rade pod *nix-om program mogu pokrenuti ovako:
[code:1]$ cat test.txt | ime_programa [/code:1][/quote]

Zasto ovo ne valja?
[code:1]ime_programa < text.txt[/code:1]
GauSs_ (napisa):
za one koji rade pod *nix-om program mogu pokrenuti ovako:
Kod:
$ cat test.txt | ime_programa


Zasto ovo ne valja?
Kod:
ime_programa < text.txt


[Vrh]
Korisnički profil Pošaljite privatnu poruku
GauSs_
Moderator
Moderator


Pridružen/a: 28. 01. 2004. (21:01:17)
Postovi: (53C)16
Spol: muško
Sarma = la pohva - posuda
72 = 110 - 38
Lokacija: 231

PostPostano: 17:47 sri, 11. 10. 2006    Naslov: Citirajte i odgovorite

[quote="venovako"]
Zasto ovo ne valja?
[code:1]ime_programa < text.txt[/code:1][/quote]

Pa valja. Nitko te ne sili na moj nacin 8)

----------------------------

tek sad vidjeh. pa ovo tvoje radi i pod windozama. Zakon
venovako (napisa):

Zasto ovo ne valja?
Kod:
ime_programa < text.txt


Pa valja. Nitko te ne sili na moj nacin Cool

----------------------------

tek sad vidjeh. pa ovo tvoje radi i pod windozama. Zakon



_________________
The purpose of life is to end
Malo sam lose volje...

Prosle su godine kolokviji bili laksi, zar ne?
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 23:18 pet, 13. 10. 2006    Naslov: Citirajte i odgovorite

[quote="GauSs_"]tek sad vidjeh. pa ovo tvoje radi i pod windozama. Zakon[/quote]

Zasto je tako cudno da normalna stvar radi pod Windozama?

Inace, ne bih htio da se ovaj topic pretvori u GauSs_ov i moj show, s nekolicinom lurkera sa strane...
GauSs_ (napisa):
tek sad vidjeh. pa ovo tvoje radi i pod windozama. Zakon


Zasto je tako cudno da normalna stvar radi pod Windozama?

Inace, ne bih htio da se ovaj topic pretvori u GauSs_ov i moj show, s nekolicinom lurkera sa strane...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 16:03 sub, 14. 10. 2006    Naslov: Citirajte i odgovorite

[quote="venovako"]
Zasto je tako cudno da normalna stvar radi pod Windozama?
[/quote]
Zar to nije cudno? :grebgreb:
venovako (napisa):

Zasto je tako cudno da normalna stvar radi pod Windozama?

Zar to nije cudno? Kotacici rade 100 na sat



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji diplomskih i starih studija -> Objektno programiranje (C++) Vremenska zona: GMT + 01:00.
Idite na 1, 2, 3  Sljedeće
Stranica 1 / 3.

 
Forum(o)Bir:  
Možete otvarati nove teme.
Možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You can attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan