Strona główna » C++ » Zadania » Transpozycje - Zestaw Zadań
 

Transpozycje - Zestaw Zadań

Wstęp

Poniższy zestaw zadań ma za zadanie sprawdzić wiedzę dotyczącą przestawiania liter, liczb w tablicach oraz łańcuchach znaków. Zadania powinny być wykonywane w przedstawionej kolejności, ponieważ część zadań łączy się z poprzednimi.

Zadania

Założenia

Każda funkcja powinna zostać przetestowana. Można założyć, że wprowadzone dane są poprawne. Każdy argument funkcji powinien być pobierany ze standardowego strumienia w funkcji main().

Zadanie 0: Rozgrzewka

Napisz program string wspak(string s), która zwróci wspak przekazany w argumencie s tekst.

Przykładowo dla wartości s = "abc123" program ma wypisać "321cba".

Zadanie 1: Przesuwanie cykliczne

Napisz funkcję string przesun(string s, int ile), która wszystkie znaki przesunie o ile pozycji. Jeśli dany znak ma zostać przesunięty poza długość tekstu wejściowego s to znak należy przestawić na początek. Analogicznie jeśli znak ma się znaleźć na pozycji ujemnej to należy go ustawić na końcu tekstu.

Przykładowo dla wartości s = "abc123" i ile = 1 program ma wypisać "3abc12". Z kolei dla wartości s = "xyz456" i ile = -3 poprawnym wynikiem będzie "456xyz".

Zadanie 2: Zamiana kolejności

Szyfrowanie

Napisz funkcję string zmienKolejnoscPrawo(string s, unsigned int ile), która ma za zadanie zamienić miejscami znak na pozycji i z znakiem na pozycji i + ile w sposób cykliczny. Zakładamy, że zamianę rozpoczynamy od strony lewej do prawej.

Przykładowo dla tekstu s = "abc123" i ile = 2 otrzymamy "ab23c1".

Deszyfrowanie

Napisz funkcję string zmienKolejnoscLewo(string s, unsigned int ile), która ma za zadanie zamienić miejscami znaki jak poprzednio, ale zakładamy, że zamianę rozpoczynamy od strony prawej do lewej.

Przykładowo dla tekstu s = "abc123" i ile = 1 otrzymamy "a3bc12".

Testy

Napisz program, który przetestuje działanie obu napisanych funkcji. Program ma wczytać od użytkownika pewien tekst, a następnie liczbę o jaką będzie dokonywana zamiana. Wyświetl najpierw wynik działania funkcji zmienKolejnoscPrawo() jako szyfrogram, a następnie rozszyfruj wyświetlony tekst przy pomocy funkcji zmienKolejnoscLewo() i wyświetl go jako tekst rozszyfrowany.

Zadanie 3: Transponowanie kolumn

Szyfrowanie

Napisz funkcję string przestawKolumny(string s, unsigned int blok), która podzieli tekst s na fragmenty tekstu o długości blok, a następnie jakby ustawiwszy je jeden pod drugim przesunie w dół każdą z kolumn w sposób cykliczny. Podczas przesuwania należy przesunąć o tyle pozycji w dół jaki indeks ma kolumna (indeksujemy kolumny od 1). Wyniiem jest odczytanie znaków w kolejnych wierszach do lewej do prawej.

Przykładowo dla tekstu s = "123456789" i blok = 3 otrzymamy "753186429".

Deszyfrowanie

Napisz funkcję string przestawKolumnyOdwrotnie(string s, unsigned int blok), która będzie miała działanie przeciwne do funkcji przestawKolumny().

Przykładowo dla tekstu s = "123456" i blok = 3 otrzymamy "426153".

Testy

Napisz program, który przetestuje działanie obu napisanych funkcji. Program ma wczytać od użytkownika pewien tekst, a następnie liczbę o jaką będzie dokonywana zamiana. Wyświetl najpierw wynik działania funkcji przestawKolumny() jako szyfrogram, a następnie rozszyfruj wyświetlony tekst przy pomocy funkcji przestawKolumny() i wyświetl go jako tekst rozszyfrowany.

Zadanie 4A: Pierwszy z ostatnim

Napisz funkcję string pierwszyzOstatnim(string s, int ile), która utworzy nowy łańcych znaków. W celu utworzenia wyniku należy po kolei dopisywać do niego pierwszy niewybrany znak oraz ostatni niewybrany znak dotychczas. Proces powinien zostać przeprowadzony ile razy.

Przykładowo dla tekstu s = "abc123" i ile = 1 otrzymamy "a3b2c1". Jednak, gdyby parametr ile = 2 to wynikiem będzie "a13cb2".

Zadanie 4B: Pierwszy z ostatnim

Napisz funkcję int ileZamian(string s), która zwróci o jakiej wartości musi być parametr ile, aby po wywołaniu funkcji pierwszyzOstatnim(s, ile) wynik był taki sam jak tekst wejściowy s.

Przykładowo dla tekstu s = "abc123" poprawnym wynikiem jest 5.