You are on page 1of 11

BOSNA I HERCEGOVINA

FEDERACIJA BOSNE I HERCEGOVINE


SREDNJOBOSANSKI KANTON
MINISTARSTVO OBRAZOVANJA, NAUKE, KULTURE I SPORTA

KANTONALNO TAKMIČENJE IZ
INFORMATIKE
UČENIKA SREDNJIH ŠKOLA

Mješovita srednja tehnička škola Travnik

07.04.2018. godine
Informatika
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

Napomene. Kreirati folder sa nazivom dobijene šifre (primjer: pp001). Unutar kreiranog foldera
sačuvati izvorni i izvršni fajl pod odgovarajućim nazivom (pp001-Z1, pp001-Z2, pp001-Z3, pp001-Z4).
1. (20 bodova) Napisati program koji od korisnika zahtijeva unos prirodnog broja n. Nakon toga, korisnik
unosi n prirodnih brojeva jedan ispod drugog. Program ispisuje zbir posljednjih cifara svakog od n
unesenih brojeva. U narednom primjeru n ima vrijednost 5, pa korisnik unosi pet prirodnih brojeva.
Posljednja cifra prvog broja je 3, drugog je 4, trećeg je 5, četvrtog je 1 i petog je 8. Kada se ove cifre
saberu, dobijamo vrijednost 21. Primjer:

Unos: Ispis:
5 21
123
24
15
231
8

2. (20 bodova) Napisati program koji od korisnika traži unos prirodnih brojeva jedan ispod drugog. Kraj
unosa korisnik označava brojem -1. Za svaki uneseni broj m program provjerava da li broj u sebi sadrži
sve jednocifrene neparne brojeve. U slučaju da broj m ispunjava ovaj uslov, program ispisuje tekst
”Sadrzi”, a u suprotnom slučaju ispisuje tekst ”Ne sadrzi”. Na primjer, broj 45781923 sadrži sve
neparne jednocifrene brojeve, dok broj 1234 ne sadrži sve neparne jednocifrene brojeve. Pretpostavite
da korisnik neće unositi više od 100 brojeva.
Primjer:

Unos: Ispis:
45781923 Sadrzi
1234 Ne sadrzi
-1

3. (30 bodova) Korisnik unosi stringove jedan ispod drugog. Kraj unosa označava unosom stringa "KRAJ".
Program ispisuje string koji se najviše razlikuje od svih ostalih stringova. Razliku dva stringa
odredujemo kao razliku dužina stringova, gdje uvijek oduzimamo dužinu kraćeg stringa od dužine dužeg
stringa. Ukupnu razliku računamo kao zbir razlika nekog stringa od svih ostalih u nizu.
Ukoliko je ukupna razlika jednaka za više stringova, a ujedno je i najviša, program ispisuje najduži od
tih stringova. Ukoliko i dalje imamo više stringova jednake dužine, uzimamo proizvoljan od njih.
Na primjer, ukoliko imamo stringove aaa, cccc i abcdefg, a, string abcdefg ima najveću udaljenost od
ostalih stringova u nizu, jer je od prvog stringa udaljen za 4, od drugog za 3, te od posljednjeg za 6.
Ukupna udaljenost je 13. Na isti način, string aaa ima udaljenost 7. String cccc ima ukupnu udaljenost
takoder 7, te string a ima ukupnu udaljenost 11.
Pretpostavite da korisnik neće unijeti više od 100 stringova.

Unos: Ispis:
aaa abcdefg
cccc
abcdefg
a
KRAJ

1 http://www.smsfojnica.com
Informatika
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

4. (30 bodova) Postoje mnogi načini za šifriranje teksta kako se ne bi mogao pročitati ukoliko dospije u
pogrešne ruke. Ovaj zadatak zahtijeva pisanje programa koji će dešifrovati poruke koje su šifrirane kako
je opisano u narednom primjeru. Dat je šifrirani tekst: saoreecessinntfi. Potrebno je primjetiti da
se sastoji od šesnaest slova. Tekst je moguće postaviti u matricu veličine 4 × 4 čime se dobije:
s a o r
e e c e
s s i n
n t f i

Tekst će se dešifrovati ukoliko se znakovi poredaju na osnovu kolona odozgo prema dolje, tj. prvo znakovi
iz prve kolone, potom znakovi iz druge kolone itd. Na osnovu navedenog, tražena riječ u primjeru je:
sesnaestocifreni.
Program otvara fajl pod nazivom ”test.in”. U fajlu se nalaze šifrirani tekstovi jedan ispod drugog.
Program treba ispisati dešifrovane tekstove svaki u zasebnoj liniji. Ukoliko broj znakova ulaznog teksta
nije kvadrat nekog broja program ispisuje riječ GRESKA.

test.in Output:
saoreecessinntfi sesnaestocifreni
pmrrj ie2 primjer 2
dobar tekst GRESKA
borj broj
Bjsr aoOm Broj Osam

2 http://www.smsfojnica.com
Informatika Rješenja C++
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

1. (20 bodova) Napisati program koji od korisnika zahtijeva unos prirodnog broja n. Nakon toga, korisnik
unosi n prirodnih brojeva jedan ispod drugog. Program ispisuje zbir posljednjih cifara svakog od n
unesenih brojeva. U narednom primjeru n ima vrijednost 5, pa korisnik unosi pet prirodnih brojeva.
Posljednja cifra prvog broja je 3, drugog je 4, trećeg je 5, četvrtog je 1 i petog je 8. Kada se ove cifre
saberu, dobijamo vrijednost 21.
# include < iostream >

using namespace std ;

int main () {
unsigned int n ;
cout << " Unesite broj n : " ;
cin >> n ;

int x ;
int suma = 0;
for ( int i =0; i < n ; i ++) {
cout << " Unesite " << i +1 << " . broj : " ;
cin >> x ;
suma += x %10;
}
cout << suma ;
return 0;
}

3 http://www.smsfojnica.com
Informatika Rješenja C++
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

2. (20 bodova) Napisati program koji od korisnika traži unos prirodnih brojeva jedan ispod drugog. Kraj
unosa korisnik označava brojem -1. Za svaki uneseni broj m program provjerava da li broj u sebi sadrži
sve jednocifrene neparne brojeve. U slučaju da broj m ispunjava ovaj uslov, program ispisuje tekst
”Sadrzi”, a u suprotnom slučaju ispisuje tekst ”Ne sadrzi”. Na primjer, broj 45781923 sadrži sve
neparne jednocifrene brojeve, dok broj 1234 ne sadrži sve neparne jednocifrene brojeve. Pretpostavite
da korisnik neće unositi više od 100 brojeva.
# include < iostream >
using namespace std ;

int main () {
int n ;
while ( true ) {
cout << " Unesite broj : " ;
cin >> n ;
if ( n == -1) break ;

bool sadrzi1 = false ;


bool sadrzi3 = false ;
bool sadrzi5 = false ;
bool sadrzi7 = false ;
bool sadrzi9 = false ;

while (n >0) {
int cifra = n %10;
n = n /10;
if ( cifra == 1) sadrzi1 = true ;
if ( cifra == 3) sadrzi3 = true ;
if ( cifra == 5) sadrzi5 = true ;
if ( cifra == 7) sadrzi7 = true ;
if ( cifra == 9) sadrzi9 = true ;
}

if ( sadrzi1 && sadrzi3 && sadrzi5 && sadrzi7 && sadrzi9 ) {


cout << " Sadrzi " << endl ;
} else {
cout << " Ne sadrzi " << endl ;
}
}
return 0;
}

4 http://www.smsfojnica.com
Informatika Rješenja C++
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

3. (30 bodova) Korisnik unosi stringove jedan ispod drugog. Kraj unosa označava unosom stringa "KRAJ".
Program ispisuje string koji se najviše razlikuje od svih ostalih stringova. Razliku dva stringa
odredujemo kao razliku dužina stringova, gdje uvijek oduzimamo dužinu kraćeg stringa od dužine dužeg
stringa. Ukupnu razliku računamo kao zbir razlika nekog stringa od svih ostalih u nizu.
Ukoliko je ukupna razlika jednaka za više stringova, a ujedno je i najviša, program ispisuje najduži od
tih stringova. Ukoliko i dalje imamo više stringova jednake dužine, uzimamo proizvoljan od njih.
Na primjer, ukoliko imamo stringove aaa, cccc i abcdefg, a, string abcdefg ima najveću udaljenost od
ostalih stringova u nizu, jer je od prvog stringa udaljen za 4, od drugog za 3, te od posljednjeg za 6.
Ukupna udaljenost je 13. Na isti način, string aaa ima udaljenost 7. String cccc ima ukupnu udaljenost
takoder 7, te string a ima ukupnu udaljenost 11.
Pretpostavite da korisnik neće unijeti više od 100 stringova.
# include < iostream >
using namespace std ;

int main () {
string niz [100];
int n = 0;

string s ;
while ( true ) {
cout << " Unesite string : " ;
getline ( cin , s );
if ( s == " KRAJ " ) break ;
niz [ n ] = s ;
n ++;
}

int max_udaljenost = 0;
string max_string = " " ;
for ( int i =0; i < n ; i ++) {
int suma = 0;
int l1 = niz [ i ]. length ();

for ( int j =0; j < n ; j ++) {


int l2 = niz [ j ]. length ();
if ( l1 > l2 )
suma += l1 - l2 ;
else
suma += l2 - l1 ;
}
if ( suma > max_udaljenost ) {
max_udaljenost = suma ;
max_string = niz [ i ];
} else if ( suma == max_udaljenost ) {
if ( max_string . length () > niz [ i ]. length ())
max_string = niz [ i ];
}
}
cout << max_string ;
return 0;
}

5 http://www.smsfojnica.com
Informatika Rješenja C++
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

4. (30 bodova) Postoje mnogi načini za šifriranje teksta kako se ne bi mogao pročitati ukoliko dospije u
pogrešne ruke. Ovaj zadatak zahtijeva pisanje programa koji će dešifrovati poruke koje su šifrirane kako
je opisano u narednom primjeru. Dat je šifrirani tekst: saoreecessinntfi. Potrebno je primjetiti da
se sastoji od šesnaest slova. Tekst je moguće postaviti u matricu veličine 4 × 4 čime se dobije:
s a o r
e e c e
s s i n
n t f i

Tekst će se dešifrovati ukoliko se znakovi poredaju na osnovu kolona odozgo prema dolje, tj. prvo znakovi
iz prve kolone, potom znakovi iz druge kolone itd. Na osnovu navedenog, tražena riječ u primjeru je:
sesnaestocifreni.
Program otvara fajl pod nazivom ”test.in”. U fajlu se nalaze šifrirani tekstovi jedan ispod drugog.
Program treba ispisati dešifrovane tekstove svaki u zasebnoj liniji. Ukoliko broj znakova ulaznog teksta
nije kvadrat nekog broja program ispisuje riječ GRESKA.
# include < iostream >
# include < fstream >
# include < sstream >
using namespace std ;

int main () {
ifstream file ;
file . open ( " test . in " );
string s ;

while ( getline ( file , s )){


int len = s . length ();
int dim = -1;
for ( int i =0; i < len ; i ++) {
if ( len == i * i ) {
dim = i ;
break ;
}
}
if ( dim > -1) {
string recenica = " " ;
for ( int i =0; i < dim ; i ++) {
for ( int j =0; j < len / dim ; j ++) {
recenica += s [ j * dim + i ];
}
}
cout << recenica << endl ;
} else {
cout << " GRESKA " << endl ;
}
}

file . close ();


return 0;
}

6 http://www.smsfojnica.com
Informatika Rješenja Pascal
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

1. (20 bodova) Napisati program koji od korisnika zahtijeva unos prirodnog broja n. Nakon toga, korisnik
unosi n prirodnih brojeva jedan ispod drugog. Program ispisuje zbir posljednjih cifara svakog od n
unesenih brojeva. U narednom primjeru n ima vrijednost 5, pa korisnik unosi pet prirodnih brojeva.
Posljednja cifra prvog broja je 3, drugog je 4, trećeg je 5, četvrtog je 1 i petog je 8. Kada se ove cifre
saberu, dobijamo vrijednost 21.
Program zadatak1 ;

Var
suma : Integer ;
n : Integer ;
m : Integer ;

Begin
writeln ( ’ Unesite broj : ’ );
readln ( n );

suma := 0;
repeat
Writeln ( ’ Unesite broj : ’ );
Readln ( m );

suma := suma + ( m mod 10);


n := n - 1;
until n = 0;

Writeln ( suma );

End .

7 http://www.smsfojnica.com
Informatika Rješenja Pascal
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

2. (20 bodova) Napisati program koji od korisnika traži unos prirodnih brojeva jedan ispod drugog. Kraj
unosa korisnik označava brojem -1. Za svaki uneseni broj m program provjerava da li broj u sebi sadrži
sve jednocifrene neparne brojeve. U slučaju da broj m ispunjava ovaj uslov, program ispisuje tekst
”Sadrzi”, a u suprotnom slučaju ispisuje tekst ”Ne sadrzi”. Na primjer, broj 45781923 sadrži sve
neparne jednocifrene brojeve, dok broj 1234 ne sadrži sve neparne jednocifrene brojeve. Pretpostavite
da korisnik neće unositi više od 100 brojeva.
Program zadatak2 ;
Var
n : Longint ;
sadrzi1 : Boolean ;
sadrzi3 : Boolean ;
sadrzi5 : Boolean ;
sadrzi7 : Boolean ;
sadrzi9 : Boolean ;
c : Integer ;
Begin

repeat
Writeln ( ’ Unesite broj ’ );
Readln ( n );

If n <> -1 Then
begin
sadrzi1 := False ;
sadrzi3 := False ;
sadrzi5 := False ;
sadrzi7 := False ;
sadrzi9 := False ;

While n > 0 Do
begin
c := n mod 10;
n := n div 10;
if c = 1 then
sadrzi1 := True ;
if c = 3 then
sadrzi3 := True ;
if c = 5 then
sadrzi5 := True ;
if c = 7 then
sadrzi7 := True ;
if c = 9 then
sadrzi9 := True ;
End ;
if ( sadrzi1 and sadrzi3 and sadrzi5 and sadrzi7 and sadrzi9 ) then
Writeln ( ’ Sadrzi ’)
else
Writeln ( ’ Ne sadrzi ’ );
end ;
until n = -1;
End .

8 http://www.smsfojnica.com
Informatika Rješenja Pascal
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

3. (30 bodova) Korisnik unosi stringove jedan ispod drugog. Kraj unosa označava unosom stringa "KRAJ".
Program ispisuje string koji se najviše razlikuje od svih ostalih stringova. Razliku dva stringa
odredujemo kao razliku dužina stringova, gdje uvijek oduzimamo dužinu kraćeg stringa od dužine dužeg
stringa. Ukupnu razliku računamo kao zbir razlika nekog stringa od svih ostalih u nizu.
Ukoliko je ukupna razlika jednaka za više stringova, a ujedno je i najviša, program ispisuje najduži od
tih stringova. Ukoliko i dalje imamo više stringova jednake dužine, uzimamo proizvoljan od njih.
Na primjer, ukoliko imamo stringove aaa, cccc i abcdefg, a, string abcdefg ima najveću udaljenost od
ostalih stringova u nizu, jer je od prvog stringa udaljen za 4, od drugog za 3, te od posljednjeg za 6.
Ukupna udaljenost je 13. Na isti način, string aaa ima udaljenost 7. String cccc ima ukupnu udaljenost
takoder 7, te string a ima ukupnu udaljenost 11.
Pretpostavite da korisnik neće unijeti više od 100 stringova.
program zadatak3
var
x : string ;
s : array [0..99] of string ;
k , i , l , maxu , cu , dist : integer ;
maxs : string ;
begin
i := 0;
repeat
begin
readln ( x );
if x <> ’ KRAJ ’ then
begin
s [ i ] := x ;
i := i + 1;
end
end
until x = ’ KRAJ ’;
maxs := ’ ’;
maxu := 0;
for k := 0 to i -1 do
begin
cu := 0;
for l := 0 to i -1 do
begin
dist := Length ( s [ l ]) - Length ( s [ k ]);
if dist < 0 then dist := - dist ;
cu := cu + dist ;
end ;
if cu = maxu then
begin
if Length ( s [ k ]) > Length ( maxs ) then maxs := s [ k ];
end ;
if cu > maxu then
begin
maxu := cu ; maxs := s [ k ];
end ;
end ;
writeln ( maxs );
end .

9 http://www.smsfojnica.com
Informatika Rješenja Pascal
Srednjobosanski kanton Kantonalno takmičenje 7. 4. 2018.

4. (30 bodova) Postoje mnogi načini za šifriranje teksta kako se ne bi mogao pročitati ukoliko dospije u
pogrešne ruke. Ovaj zadatak zahtijeva pisanje programa koji će dešifrovati poruke koje su šifrirane kako
je opisano u narednom primjeru. Dat je šifrirani tekst: saoreecessinntfi. Potrebno je primjetiti da
se sastoji od šesnaest slova. Tekst je moguće postaviti u matricu veličine 4 × 4 čime se dobije:
s a o r
e e c e
s s i n
n t f i

Tekst će se dešifrovati ukoliko se znakovi poredaju na osnovu kolona odozgo prema dolje, tj. prvo znakovi
iz prve kolone, potom znakovi iz druge kolone itd. Na osnovu navedenog, tražena riječ u primjeru je:
sesnaestocifreni.
Program otvara fajl pod nazivom ”test.in”. U fajlu se nalaze šifrirani tekstovi jedan ispod drugog.
Program treba ispisati dešifrovane tekstove svaki u zasebnoj liniji. Ukoliko broj znakova ulaznog teksta
nije kvadrat nekog broja program ispisuje riječ GRESKA.
program zadatak4
var
s , rez : string ;
len , dim , i , j : integer ;
df : text ;
begin
assign ( df , ’ test . in ’ );
reset ( df );

while not eof ( df ) do


begin
readln ( df , s );
len := Length ( s );
dim := -1;

for i := 0 to len do
begin
if i * i = len then
dim := i ;
end ;

if dim = -1 then writeln ( ’ GRESKA ’)


else
begin
rez := ’ ’;
for i := 1 to dim do
for j := 0 to dim -1 do
begin
rez := rez + s [ j * dim + i ];
end ;

writeln ( rez );
end ;
end ; readln ();
end .

10 http://www.smsfojnica.com

You might also like