Drugi domaći
Niska statistike
Napisati program koji kroz argumente komandne linije dobija nisku i karakter, a zatim ispisuje traženu statistiku: broj pojavljivanja datog karaktera (C), indeks prvog (FF) ili poslednjeg (FL) pojavljivanja datog karaktera. Ukoliko se unese i dodatna opcija ignorecase, tada se ignoriše razlika između malih i velikih slova.
Ulaz
Program se pokreće komandnom linijom oblika
./a.out <op> <c> <str> [ignorecase]
gde je <op> jedna od vrednosti C, FF ili FL, <c> je karakter, a <str> je niska.
Izlaz
Na standardni izlaz ispisati traženu vrednost statistike.
U slučaju greške, na standardni izlaz za greške ispisati -1 i završiti program sa statusom neuspeha (1).
Primer
command line
./a.out C a Abrakadabra
stdout
4
Primer
command line
./a.out C a Abrakadabra ignorecase
stdout
5
Primer
command line
./a.out FF e Kameleon
stdout
3
Primer
command line
./a.out FL e Kameleon
stdout
5
Primer
command line
./a.out FP n Banana
stderr
-1
Filitrirani filmovi
U fajlu čija se putanja prosleđuje kao argument komandne linije nalazi se katalog sa filmovima. Za svaki film je u jednoj liniji dat naslov, godina i ocena, a u sledećoj liniji kratak opis. U fajl filtrirano.txt ispisati naslove filmova koji su izašli date godine i imaju ocenu veću od prosleđene. Filmove ispisati istim redosledom kao što su zadati u katalogu.
Ulaz
Program se pokreće komandnom linijom oblika
./a.out <putanja_do_fajla> <godina> <ocena>
pri čemu je <putanja_do_fajla> putanja do fajla u kom se nalazi katalog, a <godina> i <ocena> su godina i ocena po kojima se filtrira.
Naslov je niska bez belina maksimalne dužine
Izlaz
U fajl filtrirano.txt ispisati, svaki u svom redu, naslove filmova koji ispunjavaju uslove zadatka.
U slučaju greške, na standardni izlaz za greške ispisati -1 i završiti program sa statusom neuspeha (1).
Primer
command line
./a.out katalog.txt 2010 8.0
katalog.txt
Inception 2010 8.8
A mind-bending thriller about dreams within dreams.
Avatar 2010 7.8
A visually stunning sci-fi adventure.
ShutterIsland 2010 8.2
A psychological mystery set on a remote island.
Joker 2019 8.5
An origin story of the infamous Batman villain.
Interstellar 2014 8.6
A journey through space and time to save humanity.
filtrirano.txt
Inception
ShutterIsland
Primer
command line
./a.out filmovi.txt 2012 8.0
filmovi.txt
Inception 2010 8.8
A mind-bending thriller about dreams within dreams.
Avatar 2010 7.8
A visually stunning sci-fi adventure.
ShutterIsland 2010 8.2
A psychological mystery set on a remote island.
Joker 2019 8.5
An origin story of the infamous Batman villain.
Interstellar 2014 8.6
A journey through space and time to save humanity.
filtrirano.txt
Primer
command line
./a.out filmovi.txt 2010 8.0
katalog.txt
Inception 2010 8.8
A mind-bending thriller about dreams within dreams.
Avatar 2010 7.8
A visually stunning sci-fi adventure.
ShutterIsland 2010 8.2
A psychological mystery set on a remote island.
Joker 2019 8.5
An origin story of the infamous Batman villain.
Interstellar 2014 8.6
A journey through space and time to save humanity.
stderr
-1
Objašnjenje
Fajl filmovi.txt ne postoji.
Primer
command line
./a.out filmovi.txt 2010
filmovi.txt
Inception 2010 8.8
A mind-bending thriller about dreams within dreams.
Avatar 2010 7.8
A visually stunning sci-fi adventure.
ShutterIsland 2010 8.2
A psychological mystery set on a remote island.
Joker 2019 8.5
An origin story of the infamous Batman villain.
Interstellar 2014 8.6
A journey through space and time to save humanity.
stderr
-1
Objašnjenje
Broj argumenata komandne linije nije dobar.
Usamljeni bit
Za bit u zapisu broja kažemo da je usamljen ako se sa obe njegove strane nalaze suprotni bitovi u odnosu na njega. Na primer, u zapisu broja 10011010, usamljeni su bitovi na pozicijama
Napisati program koji ispisuje sve pozicije na kojima se nalaze usamljeni bitovi u zapisu datog neoznačenog celog broja.
Ulaz
Sa standardnog ulaza se učitava neoznačen ceo broj. Podrazumevati da je ulaz ispravno zadat.
Izlaz
Na standardni izlaz ispisati sve pozicije na kojima se nalaze usamljeni bitovi u zapisu datog broja.
Primer
Ulaz
10
Izlaz
1 2 3
Primer
Ulaz
412412
Izlaz
8 9 10 11 14
Primer
Ulaz
12
Izlaz
Rasporedi opseg
Napisati funkciju:
template <typename ForwardIt, typename T>
void rasporedi_opseg(ForwardIt begin, ForwardIt end, const T &value);koja sve elemente u opsegu [begin, end) jednake prosleđenom parametru value postavlja na početak opsega. Poredak ostalih elemenata treba da ostane nepromenjen. Pretpostaviti da tip na koji pokazuje iterator podržava opeartor==.
Napomena: Dozvoljeno je koristiti pomoćni vektor. Sav studentski kod treba da se nađe u naznačenom delu rešenja.
Ulaz
Sa standardnog ulaza se učitava broj elemenata niza, zatim elementi niza (celi brojevi), zatim broj elemenata niza stringova, zatim elementi niza stringova, zatim broj elemenata niza realnih brojeva i na kraju elementi niza realnih brojeva.
Izlaz
Na standardni izlaz ispisati tri reda. U prvom redu ispisati elemente celobrojnog niza nakon poziva funkcije rasporedi_opseg sa vrednošću 42. U drugom redu ispisati elemente niza stringova nakon poziva funkcije rasporedi_opseg sa vrednošću "Hello". U trećem redu ispisati elemente niza realnih brojeva nakon poziva funkcije rasporedi_opseg sa vrednošću 3.14. Elementi u svakom redu treba da budu razdvojeni jednim razmakom.
Kod
#include <iostream>
#include <vector>
namespace matf {
template <typename ForwardIt, typename T>
void rasporedi_opseg(ForwardIt begin, ForwardIt end, const T &value)
{
//Vas kod ide ovde
}
} // namespace matf
int main(void)
{
int n;
std::cin >> n;
std::vector<int> vec(n);
for(int i = 0; i < n; i++)
std::cin >> vec[i];
matf::rasporedi_opseg(vec.begin(), vec.end(), 42);
for (const auto &val : vec) {
std::cout << val << " ";
}
std::cout << std::endl;
int m;
std::cin >> m;
std::vector<std::string> str_vec(m);
for(int i = 0; i < m; i++)
std::cin >> str_vec[i];
matf::rasporedi_opseg(str_vec.begin(), str_vec.end(), std::string("Hello"));
for (const auto &str : str_vec) {
std::cout << str << " ";
}
std::cout << std::endl;
int k;
std::cin >> k;
std::vector<double> dvec(k);
for(int i = 0; i < k; i++)
std::cin >> dvec[i];
matf::rasporedi_opseg(dvec.begin(), dvec.end(), 3.14);
for (const auto &d : dvec) {
std::cout << d << " ";
}
std::cout << std::endl;
return 0;
}Primer
Ulaz
8
10 42 22 32 42 42 65 42
5
Hello Hi Good Morning Hello
7
3.14 2.71 1.41 3.14 0.577 3.14 1.73
Izlaz
42 42 42 42 10 22 32 65
Hello Hello Hi Good Morning
3.14 3.14 3.14 2.71 1.41 0.577 1.73
Šifrovanje
Neoznačeni broj se može šifrovati primenom ekskluzivne disjunkcije gde je drugi operand tajni ključ. Napisati funktor cypher koji čuva neoznačen broj koji predstavlja ključ za šifrovanje. Pozivom funktora cypher se šifruje prosleđeni neoznačen broj uz pomoć ključa.
Pored toga, napisati funktore count_ones i count_zeros koji za prosleđeni neoznačen broj vraćaju broj jedinica, odnosno nula, u binarnom zapisu.
Najzad, napisati funkciju:
template <typename Count>
void cypher_array(std::vector<unsigned>& vec, const cypher& cyph, Count cnt, unsigned n);koja šifruje svaki od elemenata vektora vec za koji funktor cnt vrati kao rezultat broj veći ili jednak od n. Za šifrovanje se koristi prosleđeni funktor cyph.
Napomena: Sav studentski kod treba da se nađe u naznačenom delu rešenja.
Ulaz
Sa standardnog ulaza se učitava broj elemenata niza, a zatim i elementi niza (neoznačeni celi brojevi).
Izlaz
Na standardni izlaz ispisati niz nakon šifrovanja unetog niza ključem
Kod
#include <iostream>
#include <vector>
namespace matf {
//Ovde ide vas kod
template <typename Count>
void cypher_array(std::vector<unsigned> &vec, cypher cyph, Count cnt, unsigned n)
{
//Ovde ide vas kod
}
} // namespace matf
// -----------------------------------------------------
int main()
{
using namespace matf;
unsigned m;
std::cin >> m;
std::vector<unsigned> a(m);
for (unsigned i = 0; i < m; i++)
std::cin >> a[i];
cypher_array(a, cypher(42), count_ones(), 5);
for (unsigned x : a) std::cout << x << " ";
std::cout << "\n";
cypher_array(a, cypher(123), count_zeros(), 20);
for (unsigned x : a) std::cout << x << " ";
std::cout << "\n";
return 0;
}
Primer
Ulaz
5
1231 3212 2312 3221 2113
Izlaz
1253 3238 2312 3263 2113
1182 3293 2419 3263 2106