Stringovi

Stgringovi su tip podataka u Pythonu koji se bavi tekstom. Python ima puno moćnih načina manipulacije stringovima, o kojima ćemo ovde govoriti.

Osnovne operacije sa stringovima

Kreiranje stringa

String se kreira stavljanjem teksta unutra navodnika. Mogu se koristiti jednostruki, ‘, ili dvostruki, ” navodnici. Trostruki navodnici se koriste kada se string proteže na više od jedne linije. Evo nekoliko primera:

s = 'Hello'
t = "Hello"
m = """Ovo je jedan dugačak string
koji se proteže na dve linije."""

Ulaz

Setimo se iz predhodnih poglavlja da kada smo želeli da input naredbom unesemo brojčanu vrednost, morali smo da koristimo eval funkciju. Za stringove nam to nije potrebno. Ovu razliku ilustrujemo sledećim naredbama:

num = eval(input('Unesite broj: '))
string = input('Unesite string: ')

Prazan string

Prazan string ‘’ je string čiji brojčani ekvivalent je 0. To je string koji ne sadrži ništa ( ni jedno slovo ). Mi smo ga već videli u sep=’‘opciji print naredbe.

Dužina stringa (length)

Da dobijemo dužinu stringa ( broj slova u stringu ), koristimo built-in funkciju len. Na primer, len(‘Hello’) je 5.

Spajanje i ponavljanje (concatenation, repetition)

Operatori + i * mogu se koristiti sa stringovima. Operator + služi za kombinovanje dva stringa. Ova operacija se naziva spajanje (concatenation) .Operator * ponavlja string određen broj puta. Evo nekoliko primera.

Izraz Rezultat
‘AB’+’cd’ ‘ABcd’
‘A’+‘7’+’B’ ‘A7B’
‘Hi’*4 ‘HiHiHiHi’

Primer 1

Ako želimo da štampamo dugačak red crtica, to možemo da uradimo na sledeći način:

print('-'*75)

Primer 2

Operator + može da posluži da izgradimo string deo po deo, analogno sumiranju sa brojevima. Evo jednog primera u kojem tražimo od korisnika da unese 10 slova, pa formiramo string samo od unetih samoglasnika.

s = '';
for i in range(10):
    t = input('Enter a letter: ')
    if t=='a' or t=='e' or t=='i' or t=='o' or t=='u':
        s = s + t
print(s)

Ova tehnika je veoma korisna u mnogim situacijama.

Operator in

Operator in je koristan kada treba da znamo da li string sadrži nešto što tražimo. Na primer:

if 'a' in string:
    print('String sadrži slovo a.')

Možete da kombinujete operator in sa operatorom not da zaključite da string ne sadrži nešto:

if ';' not in string:
    print('String ne sadrži znak ;')

Niste ograničeni da ispitujete samo slova. Možete pitati da li neki string sadrži proizvoljan tekst kao u sledećem primeru:

if 'Kraljević Marko' in pesma:
    print('Kraljević Marko se pominje u pesmi.')

Primer

U predhodnom poglavlju smo imali jedan dugačak if uslov:

if t=='a' or t=='e' or t=='i' or t=='o' or t=='u':

Korišćenjem in operatora gornju naredbu možemo zameniti sa:

if t in 'aeiou':

Mnogo elegantnije zar ne?

Indeksiranje

Često nam treba neko pojedninačno slovo iz stringa. U tu svrhu Python koristimo ugaone zagrade. Sledeća tabela daje neke primere indeksiranja stringa s=’Python’.

Naredba Opis Rezultat
s[0] Prvo slovo u s P
s[1] Drugo slovo u s y
s[-1] Poslednje slovo u s n
s[-2] Pretposlednje slovo u s o

Prvo slovo u s je s[0], a ne s[1]. Setite se da u programiranju brojanje počinje od 0 a ne od 1. Negativni indeksi broje unazad od kraja string-a.

Česta greška

Prepostavimo da je s=’Python’ i da pokušavmo da dobijemo s[12]. Pošto u stringu s ima samo šest slova, Python će prikazati sledeću grešku:

IndexError: string index out of range

Sigurno ćete videti ovu grešku ponovo. Zapamtite da se ona javlja kad god pokušamo da čitamo (indeksiramo) iza kraja stringa.

Segmentacija stringa (slices)

Segment (slice) se koristi za uzimanje dela stringa. Segment se ponaša kao kombinacija indeksa i range funkcije. Dole su prikazani primeri segmentacije sa stringom s=’abcdefghij’.

index:     0 1 2 3 4 5 6 7 8 9
slova:     a b c d e f g h i j
Kod Rezultat Opis
s[2:5] cde Slova sa ideksom 2, 3, 4
s[ :5] abcde Prvih pet slova
s[5: ] fghij Slova od indeksa 5 do kraja
s[-2: ] ij Poslednja dva slova
s[ : ] abcdefghij Čitav string
s[1:7:2] bdf Slova od indeksa 1 do 6, svako drugo
s[ : :-1] jihgfedcba Negativan korak unazad

Osnovna struktura za segmentaciju je naziv_stringa[početna pozicija : krajnja pozicija+1] Segment ima istu specifičnost kao i range funkcija, odnosno ne uključuje krajnju poziciju. Na primer s[2:5] za gornji string daje slova sa indeksom 2, 3, and 4, ali ne slovo sa indeksom 5.

Možemo ostaviti praznom početnu ili krajnju poziciju. Ako ostavimo praznom startnu poziciju, podrazumeva se da počinjemo od prvog slova ( sa indeksom 0 ). Tako će nam s[:5] dati prvih pet slova iz stringa s. Ako ostavimo praznom krajnju poziciju, podrazumeva se da idemo do kraja string. Tako će nam s[5:] dati sva slova počev od indeksa 5 pa do kraja stringa. Ako koristimo negativne indekse dobijamo krajnja slova stringa. Na primer s[-2:] će nam dati zadnja dva slova.

Postoji i opcioni treći argument, kao i kod range funkcije, kojim se specificira korak. Na primer s[1:7:2] korača kroz niz korakom 2, i na taj način selektiraju slova sa indeksom 1, 3 i 5 ( ali ne i 7 jer nije uključeno zbog pomenute specifičnosti). Najkorisniji je korak -1, kojim se kroz string prolazi natraške, pa se slova dobijaju u obrnutom redosledu ( palindromski ).

Promena pojedinačnih slova u stringu

Pretpostavimo da imamo string s i da želimo da promenimo slovo sa indeksom 4 tako da bude ‘X’. Jedan mogući pokušaj bio bi da probamo naredbom s[4]=’X’, ali na žalost to neće da radi. Python stringovi su nepromenjljivi (immutable) , što znači da ne možemo modifikovatni nijedan njihov deo. O tome će više biti reči kasnije. Ovde dajemo kod kojiim se menja slovo stringa s na ispravan način:

s = s[:4] + 'X' + s[5:]

Ideja ovde je da uzmemo sva slova do indeksa 4, dodamo X, a odna dodamo ostatak posle indeksa 4.

Petlje sa stringovima

Često puta treba da skeniramo string slovo po slovo. U tu svrhu možemo da koristimo for petlju kao što je prikazano dole. Petlja prolazi kroz string s, i štampa string slovo po slovo, svako slovo u posebnoj liniji:

for i in range(len(s)):
    print (s[i])

U range funkciji imamo len(s) naredbu koja nam daje dužinu stringa s. Tako ako je s dugačak 5 slova, to će biti kao da smo upotrebili range(5) i varijabla petlje će ići od 0 do 4. Ovo znači da će s[i] proći kroz sva slova stringa s. Ovaj način je koristan ako treba da pratimo poziciju ( indeks ) dok prolazimo kroz petlju.

Ako ne treba da partimo poziciju, onda je jednostavnije da koristimo prostiju verziju petlje:

for c in s:
    print(c)

Ova petlja prolazi kroz s, slovo po slovo, gde c sadrži tekuće slovo. Ovo se moše doslovno shvatiti sledećom rečenicom:, “Za svako slovo c u s, štampaj slovo.”

String metode

Stringovi dolaze sa mnoštvom metoda, funkcija koje nam daju razne informacije o stringu ili vraćaju nove stringove koji su modifikacija originala. Evo nekih korisnih metoda:

Metod Opis
lower() Vraća string sa svim slovima konvertovanim u mala slova
upper() Vraća string sa svim slovima konvertovanim u velika slova
replace(x,y) Vraća string u kojem su izmenjena sva pojavljivanja x sa y
count(x) Prebrojava koliko se puta x pojavljuje u stringu
index(x) Vraća indeks pozicije prvog pojavljivanja x u stringu
isalpha() Vraća True ako je svako slovo u stringu alfa tipa

Važna napomena

Jedna važna napomena za metode lower, upper, and replace je da one ne menjaju originalni string. Ako želite da promenite string s, recimo na sva mala slova, nije dovoljno da samo koristite s.lower(). Potrebno je da napišete

s = s.lower()

Kratki primeri

Ovde su dati neki primeri string metoda u akciji:

Naredba Opis
print(s.count(‘ ‘)) Štampa broj blanko znakova u stringu
s = s.upper() Menja string tako da ima sva velika slova
s = s.replace(‘Hi’, ‘Hello’) Menja svako ‘Hi’ u s sa ‘Hello’
print(s.index(‘a’)) Štampa poziciju prvog pojavljivanja slova a u s

isalpha

Metoda isalpha se koristi da kaže da li je neki znak u stringu slovo ili nešto drugo ( cifra, interpunkcija, ...). Metod vraća True ako je znak slovo a False ako nije. Kada se koristi nad čitavim nizom metod vraća True ako je svaki znak u nizu slovo. Vrednosti True i False se nazivaju Bulovskim (booleans) vrednostima i o njima će još biti reči. Za sada upamtite samo da isalpha možete koristiti u if uslovima. Evo jedan prost primer:

s = input('Unesite string')

if s[0].isalpha():
    print('Vaš string počinje slovom')

if not s.isalpha():
    print('Vaš string sadrži znake koji nisu slova.')

Napomena u vezi indeksa

Ako pokušate da odredite indeks nečega što nije u stringu, Python će dati grešku. Na primer, ako je s=’abc’ i pokušate s.index(‘z’), dobićete grešku. Jedan način da to zaobiđete je da izvršite prethodnu proveru, kao što je dole prikazano:

if 'z' in s:
    pozicija = s.index('z')

Ostale string metode

Postoji mnogo string metoda. Na primer postoje metode isdigit i isalnum, koje su analogne metodi isalpha. Neke druge korisne metode o kojima ćemo učiti kasnije su join and split. Da vidite listu svih string metoda otkucajte dir(str) u Python shell-u. Ako uradite tako videćete gomilu imena koja počinju sa __. Možete ih zanemariti. Da pročitate Python dokumentaciju o nekoj od metoda, recimo isdigit metodi, otkucajte help(str.isdigit).

Escape znak

Kosa crta unazad, , se koristi da se dobiju neki specijalni znaci, naziva se iskejop ( escape ). Postoji niz escape znakova, a evo nekoliko najčešće korišćenih:

\n je znak za novu liniju (newline character). Koristi se za prelaz na novu liniju. Evo primer:

print('Hi\n\nthere!')

Hi
There!

\’ služi za dodavanje apostrofa u stringu. Recimo da hoćete sledeći string:

s = 'I can't go'

Ovo bi proizvelo greški jer je apostrof znak za kraj stringa. U takvoj situaciji možete da koristite escape znak ‘ da izbegnete pojavu greške:

s = 'I can\'t go'

Druga mogučnost je da koristite dvostruki navodnik:

s = "I can't go"

\” je analogno sa \’.

\\ Ovo se koristi da se dobije sama kosa crta. Na primer:

filename = 'c:\\programs\\file.py'

\t je oznaka za TAB

Primeri

Primer 1

Jedan lagan način da se štampa prazan red je print(). Međutim, ako hoćemo deset praznih redova, brz način za to je sledeća naredba:

print('\n'*9)

Puta 9 je zbog toga što sama print naredba dodaje jedanu praznu liniju.

Primer 2

Napišite program koji traži od korisnika da unese string a onda štampa sve pozicije na kojima se nalazi slovo’a’ u stringu.

s = input('Unestite neki tekst: ')
for i in range(len(s)):
    if s[i]=='a':
        print(i)

Ovde koristimo petlju da skeniramo string slovo po slovo. Varijable petlje i prati poziciju u stringu, a s[i] daje slovo na toj poziciji. U trećoj liniji programa se proverava da li je na tekućoj poziciji slovo ‘a’, pa ako jeste štampa se i, to jest pozicija na kojoj je nađemo slovo ‘a’.

Primer 3

Napišite program koji traži od korisnika da unese string, a zatim kreira novi string kojim se duplira svako slovo iz originalnog stringa. Na primer, ako je korisnik uneo Hello, izlaz bi trebao da bude HHeelllloo.

s = input('Unesite neki tekst: ')
doubled_s = '';
for c in s:
    doubled_s = doubled_s + c*2

Ovde smo koristili drugi oblik petlje za stringove. Varijabla c prolazi kroz sva slova stringa s. Koristimo operator za ponavljanje, *, da dupliramo svako slovo.

Primer 4

Napišite program koji traži od korisnika da unesu svoje ime a onda štampa to ime na sledeći smešan način:

E El Elv Elvi Elvis

Trebaće nam petlja jer ćemo štampati deo po deo imena, a u tu svrhu koristićemo segmentaciju stringa:

ime = input('Unesite vaše ime: ')
for i in range(len(ime)):
    print(ime[:i+1], end=' ')

Trik je u tome da iskoristite varijablu petlje i za segmentiranje. Pošto se broj slova koja su nam potrebna za štampanje menja, varijabla i nam je potrebna pri segmentiranju. Mi želimo da najpre štampamo prvo slovo imena, zatim prva dva slova, i tako dalje. Varijabla petlje, i, počinje od 0, zatim se povečava na 1, i tako dalje. Zato koristimo ime[:i+1] da štampamo prvih i+1 slova unetog imena. Na kraju da bi svi segmenti bili štampani u istoj liniji koristimo print funkciju sa opcionim argumentom end=’ ‘.

Primer 5

Napišite program koji smanjuje sva velika slova i uklanja sve znake interpunkcije iz stringa s.

s = s.lower()
for c in ',.;:-?!()\'"':
    s = s.replace(c, '';)

Način na koji ovo radi je da se za svaki znak interpunkcije izvrši zamena tog znaka sa praznim slovom ‘’;. Jedna tehnička napomena: Treba nam znak ‘ u stringu. Kao što je opisano u predhodnom poglavlju mi taj znak dodajemo u string pomoću escape znaka ‘.

Primer 6

Napišite program koji, za dati string koji sadrži decimalan broj, štampa decimalni deo tog broja. Na primer, ako je dat string ‘3.14159’, program štampa 14159.

s = input('Unesite decimalan broj: ')
print(s[s.index('.')+1:])

Ključna stvar ovde je korišćenje index methoda pomoću kojeg nalazimo gde se nalazi decimalna tačka. Decimalni deo broja počinje odmah iza toga i ide do kraja stringa, pa zato koristimo izraz s.index(‘.’)+1 da označimo početak segmenta koji se štampa.

Evo još jedan, više matematički način kako se postiže isti rezultat:

from math import floor
num = eval(input('Unesite decimalan broja: ')
print(num - floor(num))

Jedna od razlika između ova dva načina je što prvi proizvodi string a drugi broj.

Primer 7

Jednostavan i veoma star metod slanja tajnih poruka je zamena slova putem šifarnika. U osnovi, svako slovo azbuke se zamenjuje nekim drugim slovom, recimo svako a se zamenjuje sa x, svako b sa z, i tako dalje. Napišite program kojim se implementira ovaj metod.

azbuka = 'abcdefghijklmnopqrstuvwxyz'
kljuc =  'xznlwebgjhqdyvtkfuompciasr'

tajna_poruka = input('Unesite poruku: ')
tajna_poruka = tajna_poruka.lower()

for c in tajna_poruka:
    if c.isalpha():
        print(kljuc[azbuka.index(c)],end='';)
    else:
        print(c, end='';)

String kljuc je neki slučajan redosled azbučnih slova (tajna šifra ).

Jedini interesantan deo ovog programa je for petlja. Ono što se u njoj radi je da ona prolazi kroz sva slova poruke i za svako slovo na koje naiđe zamenjuje odgovarajućim slovom iz ključa. To se postiže korišćenjem index methoda da se nađe pozicija slova u azbuci koje se onda zamenjuje slovom iz ključa koje se nalazi na istoj takvoj poziciji. Svi znaci koji nisu slova se kopiraju kao što jesu ( bez zamene ). Program koristi metod isalpha za proveru da li je tekući znak slovo ili ne.

Program koji vrši obrnutu operaciju dešifrovanja je skoro isti. Treba samo promeniti kljuc[azbuka.index(c)] u azbuka[kljuc.index(c)].

Vežbe

6.1 Napišite program koji traži od korisnika da unese string. Program zatim treba da štampa sledeće:

  • Ukupan broj znakova u stringu
  • Sting ponovljen 10 puta
  • Prvi znak u stringu (setite se da string indeks počinje sa 0)
  • Prva tri znaka iz stringa
  • Zadnja tri znaka iz stringa
  • Ceo string unazad ( palindrom )
  • Sedmi znak u stringu ako string ima dovoljnu dužinu, a u suprotnom odgovarajuću poruku
  • String kod koga su odstranjeni prvi i poslednji znak
  • String sa svim velikim slovima
  • String u kome je svako a zamenjeno sa e
  • String u kome je svako slovo ( alpha znak ) zamenjeno sa blanko znakom

6.2 Jedan jednostavan način da se proceni broj reči u stringu je da se prebroji broj blanko znakova (space) u stringu. Napišite program koji traži od korisnika da unese tekst, a onda mu vraća procenjeni broj reči u tom stringu.

6.3 Ljudi često zaborave da zatvore zagradu u formulama. Napišite program koji traži od korisnika da unese formulu i štampa poruku da li formula ima isti broj levih i desnih zagrada.

6.4 Napišite program koji traži od korisnika da unese reč i štampa da li ta reč sadrži samoglasnike ili ne.

6.5 Napišite program koji traži od korisnika da unese string. Program treba da kreira novi string novi_string od unetog stringa tako da se drugi znak unetog stringa zameni sa zvezdicom i da se na kraj stringa dodaju tri znaka uzvika. Na kraju treba štampati novi_string. Tipičan izlaz može da izgleda ovako:

Unesite string: Qbert
Q*ert!!!

6.6 Napišite program koji traži od korisnika da unese string s pa konvertuje s u mala slova, da iz s ukloni sve tačke i zareze, i da štampa rezlultat.

6.7 Napišite program koji traži od korisnika da unese reč pa odredi da li je uneta reč palindrom ili ne. Palindrom je reč koja se čita jednako sleva na desno kao s desna na levo ( na primer: anavolimilovana).

6.8 U nekoj školi email adrese studenata se završavaju sa @student.college.edu, dok se adrese profesora završavaju sa @prof.college.edu. Napišite program koji najpre traži od korisnika koliko će email adresa uneti, a zatim korisnik unosi te adrese. Nakon što su sve adrese unete program treba da štampa poruku da li su sve adrese bile studentske ili je bilo i nekih profesorskih adresa.

6.9 Tražite od korisnika da unese broj, a zatim štampajte po sledećoj mustri tako da poslednji broj bude onaj koji je korisnik uneo:

1
 2
  3
   4

6.10 Napišite program koji traži od korisnika da unese string, a zatim štampa svako slovo iz stringa duplirano i u posebnom redu. Na primer ako je korisnik uneo HEY, izlaz treba da bude ovakav

HH
EE
YY

6.11 Napišite program koji traži od korisnika da unese reč koja sadrži slovo a. Program treba da štampa sledeće dve linije: U prvoj liniji treba da štampa deo stringa do pojavljivanja prvog slova a uključujući i slovo a, a u drugoj treba da štampa ostatak stringa. Sledi primer izlaza.

Unesite reč koja sadrži slovo a: buffalo
buffa
lo

6.12 Napišite program koji traži od korsnika da unese reč a onda kapitalizuje ( konvertuje u veliko slovo ) svako drugo slovo iz reči. Tako ako korisnik unese reč rhinoceros, program će eštampati rHiNoCeRoS.

6.13 Napišite program koji traži od korisnika da unese dva stringa iste dužine. Program treba da proveri da li su stvarno uneti stringovi iste dužine. Ako nisu, program štampa odgovarajuću poruku i završava rad. Ako jesu iste dužine program treba da štampa alternativno slova iz oba stringa. Na primer ako je korisnik uneo stringove abcde i ABCDE program će štampati AaBbCcDdEe.

6.14 Napišite program koji traži od korisnika da unesu svoje ime i prezime malim slovima, pa kapitalizuje prva slova svakog dela imena.

6.15 Kada sam bio dečak igrali smo igru „Smešna priča“. Način na koji smo igrali bio je da bi me drug pitao da mu kažem neke reči koje bi on ubacivao u neku priču. Priča bi na taj način postajala smešna sa rečima koje sam mu dao, jer ja nisam znao o čemu se u priči radi. Reči su bile obično iz nekoliko kategorija kao na primer mesta, životinje, i tako dalje.Vi treba da napišete program za igranje „Smešne priče“. Prvo treba da napravite priču u kojoj ćete da izostavite neke reči. Vaš program treba da traži od korisnika da unese te reči iz kategorija koje mu saopštite. Zatim štampate čitavu priču sa dodatim rečima. Evo jednog jednostavnog primera, a vi možete koristiti vašu priču.

Enter a college class: PROGRAMMING
Enter an adjective: HAPPY
Enter an activity: PLAY BASKETBALL
PROGRAMMING class was really HAPPY today.  We learned how to
PLAY BASKETBALL today in class.  I can't wait for tomorrow's class!

6.16 Kompanije često pokušavaju da personalizuju svoje ponude tako da ih učine atraktivnijim za klijente. Jedan jednostavan način je da ubace ime osobe na različita mesta u ponudi. Naravno, kompanije ne ukucavaju sva ta imena ručno, sve se generiše pomoću računara. Napišite program koji će da traži od korisnika da unese svoje ime i prezime a onda generiše ponudu kao što je ona prikazana dole.

Enter name: George Washington

Dear George Washington,

I am pleased to offer you our new Platinum Plus Rewards
card at a special introductory APR of 47.99%.  George,
an offer like this does not come along every day, so I
urge you to call now toll-free at 1-800-314-1592. We
cannot offer such a low rate for long, George, so call
right away.

6.17 Napišite program koji generiše 26-linijski blok parcijalno prikazan dole. Koristite petlju koja sadrži jednu ili dve print naredbe.

abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyza
cdefghijklmnopqrstuvwxyzab
itd.
yzabcdefghijklmnopqrstuvwx
zabcdefghijklmnopqrstuvwxy

6.18 Cilj ove vežbe je da proveri da li možete da rešite neke zadatke bez upotrebe in operatora i count i index methoda, koriščenjem samo varijabli, for petlji i if naredbi.

  1. Bez korišćenja in operatora, napišite program koji traži od korisnika da unese string i jedna znak, pa da štampa da li se taj znak pojavljuje u stringu.
  2. Bez korišćenja count metode, napišite program koji traži od korisnika da unese string i jedan znak, pa da prebroji koliko se puta znak pojavljuje u stringu.
  3. Bez upotrebe index metoda, napišite program koji traži od korisnika da unese string, pa da štampa indeks prvog pojavljivanja znaka u stringu. Ako se znak ne pojavljuje u stringu program treba to i da kaže.

6.19 Napišite program koji traži od korisnika da unese jedan veliki ceo broj, pa se tom broju dodaju zarezi kao kada se zapisuju iznosi novca. Na primer, ako korisnik unese 1000000, izlaz će biti 1,000,000.

6.20 Anagram neke reči je reč koja se dobija kada se ispremeštaju slova te reči. Na primer dva anagrama reči idle su deli i lied. Napišite program koji traži od korisnika da unese string pa štampa jedan slučajan anagram, drugim rečima slučajan raspored slova originalnog stringa.

6.21 Jedan jednostavan način za šifriranje poruka je premeštanje slova. Jedan način premeštanja je da se najpre uzmu sva slova na parnim pozicijama a zatim sva slova na neparnim pozicijama. Na primer string message bi bio kodiran kao msaeesg jer su slova na parnim pozicijama m, s, a, e (sa indeksima 0, 2, 4, and 6) a slova sa neparnim pozicijama e, s, g (sa indeksima 1, 3, and 5).

a.Napišite program koji traži od korisnika da unese string, pa korišćenjem ovog metoda štampa šifrovanu verziju stringa.

  1. Napravite program koji dešifruje string koji je bio šifrovan na gornji način.

6.22 Generalnija verzija gornje tehnike šifriranja je takozvana „cik-cak“ šifra, u kojoj se umesto razdvajanja parnih i neparnih pozicija, razdvajanje vrši na tri, četiri ili više grupa. Na primer, u slučaju razdvajanja na tri grupe, string „secret message“ bi bila podeljena u tri grupe. Prva grupa bi bila „sr sg“, odnosno slova sa indeskima 0, 3, 6, 9 i 12. Druga grupa „eemse“, od slova sa indeksima 1, 4, 7, 10, i 13. Poslednja, treća grupa „ctea“ od slova sa indeksima 2, 5, 8, i 11. Šifrovana poruka bi bila „sr sgeemsectea“.

a.Napišite program koji traži od korisnika da unese string, pa korišćenjem „cik-cak“ metode šifrira uneti tekst podelom na tri grupe.

  1. Napišite program za dešifrovanje podele na tri grupe.
  2. Napišite program koji traži od korisnika da unese string i jedan ceo broj kojim se kazuje na koliko grupa će biti podeljena poruka ( tri, četiri, ili bilo koji drugi broj ). Šifrovati string „cik-cak“ metodom.
  3. Napišite program koji dešifruje „cik-cak“ u generalnom slučaju.

6.23 U matematičkoj analizi izvod od x4 je 4x3. Izvod od x5 je 5x4. Izvod od x6 je 6x5. Ova šema se nastavlja. Napišite program koji traži od korisnika da unese izraze kao što su x3 ili x5 i da štampa njihov izvod. Na primer ako korisnik unese x3, program treba da štampa 3x2.

6.24 U algebarskim izrazima simbol za množenje se često izostavlja, kao naprimer 3x+4y ili 3(x+5). Računari preferiraju izraze kod kojih je prisutan simbol za množenje 3*x+4*y or 3*(x+5). Napišite program koji traži od korisnika da unese algebarski izraz a onda insertuje simbol za množenje tamo gde je potrebno.

6.25 Napišite program koji traži od korisnika da unese naziv varijable, i štampa „Ispravan naziv varijable“ ako je naziv varijable u skladu sa pravilima, a štampa „Neispravan naziv varijable“ ako naziv nije u skladu sa pravilima.