Typ znakowy – char Łańcuchy znaków – typ string

Transkrypt

Typ znakowy – char Łańcuchy znaków – typ string
Język C++
Typ znakowy – char
Typ char jest typem jednobajtowym służącym do przechowywania znaków
Deklaracja zmiennej typu char
char znak;
znak=’A’;
// dla zmiennej char znak musi być ujęty w apostrofy
W zmiennej char jest przechowywany tak naprawdę kod ASCII każdego znaku. Kod ASCII jest to pewne
umowne przyporządkowanie w którym liczbom naturalnym z zakresu 0… 255 odpowiadają znaki i na odwrót.
Np. znak ‘A’ ma numer o kodzie 65, ‘B’ – 66,… ‘Z’ – 90, ‘a’ – 97, etc
Więc zapis znak=’A’ jest równoważny zapisowi znak=65, zwiększenie zmiennej znak np. o jeden powoduje
zamianę na znak będący o jedno miejsce dalej od aktualnego.
Przydatną rzeczą podczas pisania programów jest możliwość konwersji znaków ‘0’, ‘1’, …, ‘9’ do liczb (cyfr),
którą wykonuje się w sposób następujący:
char Ccyfra; int Icyfra;
…
Icyfra=Ccyfra-'0';
I odwrotnie zamiana cyfry (zmienna int) na znak (zmienna char) wygląda następująco:
Ccyfra=ICyfra+'0';
Łańcuchy znaków – typ string
Do przechowywania napisów służy specjalny typ danych o nazwie string. Możemy sobie go wyobrazić
jako tablicę znaków, której ostatni element zakończony jest znakiem specjalnym „\0” oznaczającym koniec
słowa.
Deklaracja zmiennej typu string
string nazwa_zmiennej;
Przykład 1
string slowo;
slowo=”Programowanie”;
//Koniecznie wprowadzany napis musi być ujęty w cudzysłowia
Do poszczególnych liter w słowie odwołujemy się tak samo jak do elementów tablicy podając numer
indeksu znaku, do którego chcemy mieć dostęp, np.
slowo[0] == ‘P’
; slowo[5]==’a’;
Aby wyznaczyć długość napisu możemy użyć metody o nazwie length(), np.:
int x;
x=slowo.length();
Konkatenacja (łączenie) napisów
Jeśli chcemy połączyć ze sobą dwa lub więcej napisów możemy skorzystać z operatora +, np.:
string napis1, napis2, napis3;
napis1=”Ala ”;
napis2=”ma kota”;
napis3=napis1+napis2;
W zmiennej napis3 otrzymamy zdania: „Ala ma kota”
-1Rafaello
Język C++
Zadania
Zadanie 1
KiM
Napisz program, który wczyta imię użytkownika i stwierdzi, czy jest on kobietą, czy mężczyzną.
Uwaga: Przyjmij, że tylko imiona żeńskie kończą się na literę ‘a’.
Wejście
Pierwszy wiersz wejścia zawiera napis – imię użytkownika
Wyjście
Na wyjściu powinien pojawić się napis „Kobieta”, bądź „Mężczyzna”
Przykład
Dla danej wejściowej:
Alicja
poprawną odpowiedzią jest:
Kobieta
Zadanie 2
Wspak
Napisz program, który wczyta podane przez użytkownika słowo i wypisze je wspak
Wejście
Pierwszy wiersz wejścia zawiera dowolne słowo
Wyjście
Pierwszy wiersz wyjścia zawiera słowo zapisane wspak
Przykład
Dla danej wejściowej:
informatyka
poprawną odpowiedzią jest wynik:
akytamrofni
Zadanie 3
Palindrom
Utwórz program z użyciem funkcji, który sprawdzi, czy podane słowo jest palindromem.
Palindromem nazywamy słowo, które czytane „od lewej do prawej:” i „od prawej do lewej” jest takie same, np.
słowa kajak, ala są palindromami
Wejście
Pierwszy wiersz wejścia zawiera dowolne słowo
Wyjście
W pierwszym wierszu wyjścia ma pojawić się napis TAK lub NIE.
Przykład
Dla danej wejściowej:
programista
poprawną odpowiedzią jest napis
NIE
Zadanie 4
Małe litery
Napisz program, w którym zdefiniujesz funkcję: string male_litery(string napis), która będzie zmieniała
wszystkie duże litery podanego napisu na małe.
Wejście
Pierwszy wiersz zawiera dowolne słowo nie zawierające białych znaków
Wyjście
To samo słowo, w którym wszystkie litery zamienione są na małe
Przykład
Dla słowa:
InFOrmatykA
poprawną odpowiedzią jest napis:
informatyka
-2Rafaello
Język C++
Zadanie 5
Duże litery
Napisz program, w którym zdefiniujesz funkcję: string duze_litery(string napis), która będzie zmieniała
wszystkie małe litery podanego napisu na duże.
Wejście
Pierwszy wiersz zawiera dowolne słowo nie zawierające białych znaków
Wyjście
To samo słowo, w którym wszystkie litery zamienione są na małe
Przykład
Dla słowa:
InFOrmatykA
poprawną odpowiedzią jest napis:
INFORMATYKA
Zadanie 6
Szyfr płotkowy
Napisz program, który podane słowo zaszyfruje metodą płotu o dwóch rzędach.
Metoda Płotu:
Dla słowa szyfrowanie
s
y
z
r
f
w
o
n
a
e
i
Otrzymujemy zaszyfrowane słowo: syrwnezfoai
Wejście
Pierwszy wiersz wejścia zawiera słowo, które chcemy zaszyfrować
Wyjście
Słowo po zaszyfrowaniu
Przykład
Dla słowa szkola
Poprawną odpowiedzią jest sklzoa
Zadanie 7
Podzielność przez 3
Dana jest liczba całkowita dodatnia mająca maksymalnie 250 cyfr. Napisz program, który sprawdzi czy podana
liczba jest podzielna przez 3.
Przykład
Dla liczby:
123456789123456789 123456789123456789 123456789123456789 123456789123456789
Poprawną odpowiedzią jest napis: TAK
Zadanie 8
Szyfr Cezara
Przypuśćmy, że mamy tekst zapisany za pomocą 26 liter alfabetu łacińskiego: a, b, c, d, e, f, g, h, i,
j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z i chcemy ten tekst zaszyfrować. W tym celu
utożsamiamy zbiór liter z liczbami z zakresu { 0 .. 25 }: a = 0, b = 1, c = 2, ..., z = 25, wybieramy dwie liczby a,
b z przedziału od 0 do 25, tak że NWD(a,26) = 1, i szyfrujemy litera po literze według wzoru C(x) = ax+b (mod
26).
Wejście
W pierwszym wierszu standardowego wejścia zapisano trzy wartości L, a i b. L (2 ≤ L ≤ 200) jest liczbą
wierszy do zakodowania, natomiast a, b są współczynnikami równania do kodowania. W następnych L
wierszach zapisane są ciągi znaków do zakodowania
Wyjście
W L wierszach standardowego wyjścia zapisane są ciągi znaków nie dłuższe niż 250 znaków zakodowanych
równaniem liniowym o wczytanych współczynnikach z zachowaniem kolejności wczytania ze standardowego
wejścia.
Przykład
Dla danych
1 23 20
matematyka
poprawna odpowiedź to: kupikupaqu
-3Rafaello
Język C++
Zadanie 9
Deszyfrowanie liniowe (zadanie trudniejsze)
Przypuśćmy, że mamy tekst zapisany za pomocą 26 liter alfabetu łacińskiego: a, b, c, d, e, f, g, h, i, j, k, l, m, n,
o, p, q, r, s, t, u, v, w, x, y, z i chcemy ten tekst zaszyfrować. W tym celu utożsamiamy zbiór liter z liczbami z
zakresu { 0 .. 25 }: a = 0, b = 1, c = 2, ..., z = 25, wybieramy dwie liczby a, b z przedziału od 0 do 25, tak że
NWD(a,26) = 1, i szyfrujemy litera po literze według wzoru C(x) = ax+b (mod 26).
Wejście
W pierwszym wierszu standardowego wejścia zapisano trzy wartości L, a i b. L (2 ≤ L ≤ 200) jest liczbą
wierszy do rozkodowania, natomiast a, b są współczynnikami równania do kodowania. W następnych L
wierszach zapisane są ciągi znaków zakodowanych tym równaniem.
Wyjście
W L wierszach standardowego wyjścia zapisane są ciągi znaków nie dłuższe niż 250 znaków rozkodowanych
równaniem liniowym o wczytanych współczynnikach z zachowaniem kolejności wczytania ze standardowego
wejścia.
Przykład
Dla danych
2 23 20
kupikupaqu
pagu
poprawna odpowiedź to
matematyka
tywa
Zadanie 10
Własna arytmetyka – dodawanie
Opracuj program wczytujący ze standardowego wejścia dwie liczby, oblicza ich sumę, którą zapisuje do
standardowego wyjścia.
Wejście
W pierwszym wierszu zapisano liczbę do 200 cyfr. W drugim wierszu zapisano drugą liczbę do 200 cyfr.
Wyjście
Na wyjściu zapisano sumę wczytanych liczb.
Przykład
Dla danych
123
232
poprawna odpowiedź to
355
Zadanie 11
Ciężarówki
Mamy do dyspozycji n ciężarówek. Każda ciężarówka jest opisana za pomocą napisu złożonego z co najmniej
1 i co najwyżej 250 małych liter alfabetu angielskiego (od a do z). Masa ciężarówki jest podana jako długość
napisu. Wszystkie ciężarówki różnią się masami. Opracuj program, który wczytuje ze standardowego wejścia
liczbę ciężarówek oraz ich opis każdy w oddzielnym wierszu i zapisuje ten opis do standardowego wyjścia w
kolejności rosnącej.
Przykład
Dla danych
poprawną
4
odpowiedzią jest
aabbcc
klm
z
ns
z
ns
klm
aabbcc
-4Rafaello