-
[a] Analizom Uputstva za obeležavanje tekstova koje je
korišćeno za etiketiranje u 1. seminarskom radu, opisati sledeće
azbuke S koje su
upotrebljene u tekstu:
- A1: azbuka dozvoljenih kontrolnih i grafičkih karaktera;
- A2: azbuka dozvoljenih etiketa ograđenih zagradama < i >.
Razdvojiti prazne etikete od nepraznih (Napomena: Pod
praznom etiketom se podrazumeva etiketa koja ne mora
biti zatvorena (kao što je npr. <BR>)
- A3: azbuka atributa ograđenih zagradama [ i ];
- A4: azbuka specijalnih karaktera ograđenih karakterima
& i ; (npr. &emdash; ili &cy;)
- A5: azbuka posebnih etiketa u komentarima (komentari
iz zaglavlja i komentari za obeležavanje strane).
[b] Opisati na podesan način svaku od ovih azbuka u HTML-u
(kao skup tabela A1 - A5; kod tabele A1 navesti glif i njemu
pridruženu vrednost u dekadnom i heksadecimalnom brojnom sistemu).
[c] Za svaku od tabela sastaviti datoteku koja se sastoji od
rezultata analize. Datoteka A1 treba da se sastoji od
dozvoljenih karaketra u rastućem poretku ASCII-kolacione sekvencije
ispisanih jedan za drugim. Datoteke A2 - A5 treba da sadrže
etikete, svaka etiketa u zasebnom redu bez zagrada uređene u
u rastućem poretku ASCII-kolacione sekvencije. Datoteku A2 razložiti
i na datoteke A21 (složene etikete) i A22 (proste etikete).
Datoteka A3 (dopušteni atributi) u svakom redu sadrži prvo atribut, a
za njim odvojene tabulatorom etikete u kojima se javlja ovaj
atribut.
[d] Sa HTML-strane koja opisuje etikete, napraviti hiper-veze
na datoteke A1 do A5 (omogućiti download)
(dva studenta -
datum objavljivanja: 30.01.2001.)
-
Sastaviti u jeziku C sledeće funkcije:
- funkcija sa imenom VadiRed
(prototip
char *VadiRed( void )
)
koja iz ulazne struje učitava red (red je
ograničen Uputstvom na najviše sedamdeset karaktera).
Povratna vrednost funkcije je niska koja sadrži
pročitani red. Karakteri koji obeležavaju kraj reda mogu biti ili
konstanta '\n' (kombinacija karaktera CR+LF) ili etikete
<BR> ili </BR>.
U slučaju da je red predugačak, funkcija treba samo jednom
da javi poruku o grešci koju ispisuje preko
stderr
.
Poruka treba da je oblika "Predugacak red n: niska"
gde je n broj reda, a niska prva reč u redu.
U takvom slučaju "preseći" red na prvom separatoru pre
sedamdesetog karaktera, vratiti pročitani red, a sačuvati
poziciju do koje se došlo u čitanju ulazne datoteke
(razmotriti deklaraciju static
).
Niska koju funkcija vraća se završava sa '\0'.
Funkcija treba da nastavi sa radom prilikom sledećeg poziva
od pozicije u ulaznoj datoteci na kojoj je red bio prekinut.
funkcija sa imenom Kodovi
(void Kodovi( char *red, int n[])
) koja
kao ulazni argument prima nisku red iz funkcije
VadiRed, a u nizu n
vraća broj različitih upotrebljenih karaktera u redu (Voditi
računa da karakteri mogu biti između 0 i 255).
funkcija main, koja koristeći
funkcije VadiRed
i
Kodovi
, formira
matricu mat[256][3] gde je za karakter i
Î[0,255],
mat[i][1] = broju pojavljivanja karaktera i u
ulaznom tekstu.
Vrednost mat[i][2] se popunjava na osnovu
analize upotrebe karaktera iz 1. zadatka i imaće vrednosti:
0, ako karakter i nije dozvoljen;
-1, ako je karakter i dozvoljen, ali "sumnjiv"
(npr. više otvorenih nego zatvorenih zagrada, i sl.);
1, ako je karakter i dozvoljen (bez ograničenja na način
upotrebe, npr. alfabetski karakteri)
Pretpostavke o izboru "sumnjivih" karaktera obuhvataju samo nužne
veze koje proističu iz Uputstva (npr.
mat[&][2] <= mat[;][2], itd).
Ove pretpostavke se ne moraju iscrpno navesti! Kao
vrednost mat[i][3] upisuje se kod uslova koji je
određeni karakter načinio "sumnjivim". Uslove formirati samo na
osnovu frekvencije pojedinačnih karaktera, ne ispitujući da li je
"sumnja" opravana ili ne!
- Rezultat rada programa ispisati u obliku tabele koja ima sledeće
kolone za karaktere koji su se pojavili u tekstu:
Redni broj | Glif, ako ga ima |
Dekadna vrednost |
Broj pojaljivanja | Status karaktera |
Razlog "sumnje" |
---|
|
(dva studenta -
datum objavljivanja: 30.01.2001.)
-
Sastaviti u jeziku C program koji analizira komentare u
zaglavlju teksta iz Uputstva, opisane u tački 2. i
komentare za obeležavanje strane (oblika ).
Program treba da štampa:
- izveštaj o greškama (npr. "nekorektno ime datoteke",
"nedostaje ime studenta", itd.);
- "dokumentacioni list" sa sledećim informacijma:
Ime i prezime studenta |
e-mail adresa |
Broj dosijea |
Naziv datoteke |
Početna strana |
Završna strana |
Dužina datoteke u broju karaktera |
Dužina datoteke u broju redova |
---|
|
- Spisak brojeva strana iz komentara oblika
(Strane ne moraju biti uzastopne!)
Za proveru imena datoteke koristiti argumente komandne linije.
Glavna funkcija se poziva sa
main( int argc, char argv[] )
gde argv[1]
sadrži ime datoteke. Ime preusmerene datoteke
nije u argv[1]
, tako da poziv programa treba da bude
oblika
zadatak3 <ime_datoteke ime_datoteke
(dva studenta -
datum objavljivanja: 30.01.2001.)
-
Prema tački 3. Uputstva, tekst treba da bude unet
koristeći kodnu stranu ISO-8859-1 (Videti "Alphabet Soup").
Šta više, za unos teksta je dovoljan 7-bitni ASCII-kod. Ipak, izvestan
broj tekstova je unet koristeći druge kodne šeme (npr.
ISO-8859-2 [centralnoevropska latinica],
ISO-8859-5 [ćirilice], CP-1250 [latinica] i CP-1251 [ćirilice], pa
čak i Unicode [UTF]). Po pravilu, informacija o kodnoj šemi je
eksplicitno data u zaglavlju datoteke preko META-etikete.
Sastaviti program DEKODER.C
koji će na osnovu META-etikete, identfikovati kodnu šemu dokumenta i
izdati odgovarajuću poruku oblika
"Tekst je kodiran prema šemi ..."
Program zatim vrši prevođenje na format opisan Uputstvom
(tj. zamenjuje neophodne karaktere na način opisan u Uputstvu.
Rešavanje zadatka ograničiti na ISO-8859-2, ISO-8859-5, CP-1250 i
CP-1251. U prilogu o formatima teksta su date potrebne informacije
o kodnim tabelama. Organizovati prevođenje iz svake od ovih šema
u ISO-8859-1 kao zasebnu funkciju sa imenom izvorne kodne šeme.
Voditi računa o tome da su kod ćiriličnih kodnih šema
HTML-etikete zapisane prema 7-bitnom ASCII-kodu ("donjih
128 karaktera") dok su ostali karakteri u "gornjem" skupu
karaktera.
Za potrebe testiranja programa ovde su dati uzorci
tekstova u pojedinim kodnim šemama.
(tri studenta -
datum objavljivanja: 30.01.2001.)
-
U tekstu koji je unet u skladu sa Uputstvom jednoznačno
su kodirana slova azbuka koje koristi naš jezik (ćirilica ili latinica).
Sastaviti funkcije iso8859_2
i iso8859_5
koje zamenjuju
obeležja slova oblika &ss; (tačka 3. Uputstva)
odgovarajućim kodovima prema kodnim rasporedima
ISO-8859-2 i
ISO-8859-5.
Voditi računa o:
- zamenom ne treba da budu obuhvaćene ni HTML-etikete,
ni etikete između zagrada [ i ].
- pri zameni ćiriličnih slova, izvršiti transliteraciju i
svih ostalih karaktera koji nisu obuhvaćeni prethodnom tačkom.
Sastaviti funkciju shema
koja identifikuje meta-etiketu kojom je definisan kodni raspored
i menja je na odgovarajući način
Sastaviti glavnu funkciju koja prema datom argumentu
komandne linije (videti 3. zadatak) vrši transliteraciju teksta.
Argument komandne linije može biti L (za latinicu) i
C (za ćirilicu). U slučaju greške, ispisati odgovarajući
komentar i zaustaviti izvršavanje programa.
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
U tekstu Uputstva (tačka 5.)
je naznačen sistem obeležavanja naslova. Ali, s obzirom na način
raspodele tekstova, predložena konvencija nije mogla uvek da bude
ispoštovana (npr. u slučaju kada je student imao nenaslovljeni
nastavak teksta). Potrebno je sastaviti skup funkcija koje ispituju
sledeća svojstva naslovljavanja u datom tekstu:
- Funkcija
VadiNaslov
analizira ulaznu struju karakera i identifikuje naslove
na osnovu H-etikete. Nisku karaktera, ne dužu od 200
karaktera, koja čini naslov
(između etiketa <Hn> i </Hn>,
uključujući i ove etikete) predaje
funkciji main
sa povratnom vrednošću 0, ako je naslov uspešno
izdvojen, a sa kodom !=0 ako se pojavila greška.
Greška je:
- = 1; ako je naslov predugačak
(ima više od 200 karaktera)
- = -1; ako se naslov ne pojavljuje u tekstu
Za korektno izdvojeni naslov (povratni kod 0 iz prethodne
funkcije), sastaviti funkciju
Analiza
koja preuzima nisku naslova i analizira njenu
korektnost. Uslovi korektnosti su
- "Dubina naslova" (karakter n) mora biti
između 2 i 6. Ostali karakteri su nedozvoljeni.
- "Dubine" moraju odgovarati logičkoj strukturi teksta.
(Iza naslova dubine 2, sledi ili naslov dubine 2 ili
dubine 3; iza naslova dubine 3 sledi naslov dubine 2,
dubine 3 ili dubine 4; itd.)
- Naslovi koji zvezdicama (npr. ***) razdvajaju
delove poglavlja su naslovi najveće dubine u datom
tekstu.
- U numerisanim naslovima (tj. slučaj kada etiketa [broj]
sledi neposredno iza otvorene H-etikete) sadržaj
etikete broj mora biti zapisan alfabetskim znacima:
npr. <H3>[Pet]Neki naslov</H3>
Za svaki od uslova korektnosti sastaviti posebnu funkciju koja
ispituje korektnost.
-
Na izlazu, program ispisuje rezultate analiza u vidu
razumljivih komentara o greškama (ukoliko ih ima) i
identifikovanu strukturu naslovljavanja u obliku
uređene liste naslova poravnatih na odgovarajući način.
Na primer:
red = 0010 2 Uvod
red = 0047 2 [Jedan] deo
red = 0128 3 Legende
red = 0294 3 Mitovi
red = 0397 4 ***
red = 0495 4 ***
red = 0505 3 Snovi
red = 1000 2 [Dva] deo ...
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
Sastaviti funkciju prevodilac
koja kao ulazne argumente prima naslov označen brojem (videti 6. zadatak i
tačku 5. Uputstva) i kôd koji određuje kako treba
konvertovati nisku između uglastih zagrada. Vrednosti kôda
mogu biti:
A ili a, za arapske brojeve
R ili r, za rimske brojeve
D ili d, za doslovni prenos
Ova funkcija vraća nisku koja predstavlja broj upotrebljen u naslovu
pretvoren, prema vrednosti kôda, u odgovarajući zapis, kao i
vrednost broja u promenljivoj tipa integer. Na primer,
za naslov oblika<H3>[Pet] glava</H3>, funkcija
prevodilac
vraća:
Kôd |
Povratna vrednost niske |
Vrednost broja |
A ili a |
<H3>5. glava </H3> |
5 (u formatu %d) |
R ili r |
<H3>V glava </H3> |
5 (u formatu %d) |
D ili d |
<H3>Pet# glava </H3> |
5 (u formatu %d) |
|
Broj koji se koristi u naslovu je manji od 100! U slučaju
da naslov čini samo oznaka broja, isključena je opcija D.
Znak # za opciju D ukazuje na problem slaganja u rodu prepoznatog
broja i teksta koji sledi (npr. "petA glava",
"petU poglavlje", "petI deo",...). Kako bi se mogao
rešiti ovaj problem?
Sastaviti glavnu funkciju koja testira funkciju
prevodilac
. (Mogu se
koristiti funkcije iz rešenja zadatka 6.). Konverziju niske
u arapske ili rimske brojeve ili njen doslovni prenos
organizovati u zasebnim funkcijama!
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
U nekim tekstovima, suprotno Uputstvu, pojavili su se
atributi HTML-etiketa (boja pozadine, boja slova, poravnavanje, itd).
Polazeći od analize iz zadatka 1. (azbuka A2), sastaviti funkciju
koja ispituje da li je HTML-etiketa "opremljena" nedozvoljenim
atributima i, ako jeste, briše atribute, ostavljajući samu
etiketu.
Voditi računa da su HTML-etikete samo u nekim tekstovima navedene
korektno (između simbola < i >). U drugim tekstovima su
načinjene "vidljivim": navedene su kao niske < i >.
U ovakvom slučaju korigovati etikete u "nevidljivi" oblik.
Sastaviti program za testiranje konstruisane funkcije.
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
Pretpostavimo da je tekst kodiran u skladu sa Uputstvom.
Neprazne HTML-etikete (videti zadatak 1.) se ponašaju kao različite
vrste zagrada. Polazeći od analize iz zadatka 1 (azbuka A2),
sastaviti program koji ispisuje samo neprazne HTML-etikete iz
ulaznog teksta na takav način da struktura "ograđivanja" bude
pregledno prikazana.
Pojednostavljeni
primer iz W3C-validatora pokazuje okvirno
kako bi trebao da izgleda izlaz. U ovaj primer je uključena i obrada
praznih etiketa kao što su BR ili HR.
Uputstvo: Formirati niz čiji su elementi niske koje čine
etikete. Organizovati ga na takav način da se efikasno pretražuje.
Svakoj etiketi pridružiti brojač koji se povećava za 1 prilikom
otvaranja, a smanjuje za 1 prilikom zatvaranja etikete. U slučaju
umetnutih etiketa, zatvara se prvo poslednja otvorena etiketa.
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
Sastaviti program koji proverava da li su ispunjeni uslovi
iz tačke 4. Uputstva. Program treba da proveri važenje
sledećih uslova:
- Red se ne završava crticom (tačka 2. Uputstva)
- Između dva alfabetska karaktera se ne pojavljuje separator
- Iza oznake za početak pasusa sledi niz od 6 blanko-karaktera
- Iza interpunkcijskih znakova obavezno sledi blanko-karakter
(osim za polusloženice; npr. dan-i-noć)
- Eventualnu pojavu etikete <BR> zameniti karakterom
za novi red (U C-u: "\n", u DOS-u: CR+LF)
Otkloniti one od navedenih grešaka koje se mogu automatski
otkloniti. Za ostale greške, na standardnom izlazu izpisivati
poruke oblika:
Kôd greške --- Broj reda u tekstu: niska koja čini red
^^^
gde je simbolom "^" obeležena pozicija na kojoj se pojavila greška.
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
Sastaviti program koji izračunava sledeće parametre teksta:
- Frekvencija karaktera u tekstu (videti zadatak 2.)
- Frekvencija dužine reči izražene brojem karaktera
- Frekvencija dužine rečenice izražene brojem reči
(korititi S-etiketu).
Rezultate prikazati u obliku odgovarajućeg histograma
(videti i zadatke 1-13 i 1-14 u K&R).
(Napomena: Prema Oksfordskom rečniku računarstva, NOLIT,
Beograd, 1990, histogram je
dijagram (grafik) koji prikazuje relativne frekvencije s kojima
neka merljiva veličina uzima vrednost u skupu susednih veličina.
Dijagram se sastoji od pravougaonika čije su površine proporcionalne
relativnim frekvencijama, a širine - klasi intervala.)
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
Jedan od osnovnih nedostataka HTML-a je što su logička i grafička
struktura "izmešane": boje, veličina i oblik slova, itd, nisu od
značaja za logički izgled dokumenta. Ovi nedostaci su otklonjeni
u složenijim sistemima obeležavanja kao što su SGML ili XML. Deo
HTML-etiketa je u Uputstvu bio upotrebljen da bi omogućio
konverziju teksta u SGML-format. To su:
- — … [QU] [SQ] iz tačke 3. Uputstva
- etikete iz tačaka 8. i 9. Uputstva
- etiketa [S] za rečenicu
Cilj ovog zadatka je da se sastavi, oslanjajući se na rezultat rada
programa iz zadatka 5, program koji formira "skromnu" HTML-reprezentaciju
teksta tako što će biti izbrisane ili na odgovarajući način
zamenjene gore navedene etikete. Na primer, etiketu — zameniti sa
--, a zagrade <def> sa atributima izbrisati.
Atributi etikete <BODY> (BGCOLOR, TEXT, LINK, ALINK, VLINK)
se učitavaju tim redom kao parametri iz komandne linije (videti
3. zadatak).
Rezultat ove transformacije bi trebalo da bude "razumno"
čitljiv pod uobičajenim navigatorima.
(dva studenta -
datum objavljivanja: 12.02.2001.)
-
Sastaviti program koji se poziva nalik na
DOS-komandu type
type /x <ime_datoteke>
ali sa sledećim razlikama:
- parametar x može imati vrednosti t (za
tekstuelni režim čitanja) i b (za binarni
režim čitanja);
- program koristi fnkcionalne dirke
Home, End, PgUp i
PgDn za navigaciju kroz tekst.
Program treba konstruisati tako da se tokom izvršavanja gradi
dvostruko olančana lista čiji poslednji element pokazuje na početak
tekuće izlistane strane.
(dva studenta -
datum objavljivanja: 25.04.2001.)
-
Sastaviti program veze koji se iz komande
linije poziva sa
veze kljucna_rec <ime_datoteke>
gde je:
- kljucna_rec niska ASCII-grafičkih karaktera
koja ne zadrži blanko-karakter, a
- ime_datoteke ime neke datoteke dobijene kao
rezultat prvog seminarskog rada
Program veze
treba da uspostavi hiper-veze između
svih pojavljivanja niske kljucna_rec u zadatom tekstu
na takav način da kroz tekst bude moguće kretanje "skokom"
sa jednog pojavljivanja ključne reči na njeno sledeće
pojavljivanje. Polazna sidra u hiper-vezama prikazati crvenom
bojom.
(dva studenta -
datum objavljivanja: 25.04.2001.)
-
Sastaviti program koji se poziva iz komandne linije sa:
popis etiketa <ime_datoteke>
gde je ime_datoteke kao u prethodnom zadatku, a
etiketa OPCIONI parametar čija je vrednost neka od
etiketa iz tačaka 9. i 10. Uputstva.
Program popis treba da ispiše pod naslovom koji je
jednak parametru etiketa spisak svih
niski koje su "ograđene" ovom etiketom. Ukoliko se ovaj
parametar ne navede, program ispisuje pod odvojenim naslovima
sve etikete iz tačaka 9. i 10. koje pronađe u tekstu.
Napomena: Razmotriti upotrebu hash-funkcija.
(dva studenta -
datum objavljivanja: 25.04.2001.)