Historia wymaga pasterzy, nie rzeźników.


4.2.13 (*,r,!) Napisz funkcję, która otrzymuje jako argument dodatnią liczbę całkowitą n, a następnie tworzy dynamiczną n-elementową tablicę
o elementach typu int i zwraca jako wartość wskaźnik do jej pierw-
szego elementu.
4.2.14 (*) Napisz funkcję, która otrzymuje jako argument dodatnią liczbę całkowitą n, a następnie tworzy dynamiczną n-elementową tablicę
o elementach typu double i zwraca jako wartość wskaźnik do jej pierw-
szego elementu.
4.2.15 (*,r,!) Napisz funkcję, która dostaje jako argument wskaźnik do jed-
4.2. Zadania
21
nowymiarowej dynamicznej tablicy o elementach typu int i zwalnia
pamięć zajmowaną przez przekazaną w argumencie tablicę.
4.2.16 (*) Napisz funkcję, która dostaje jako argument wskaźnik do jedno-wymiarowej dynamicznej tablicy o elementach typu double i zwalnia
pamięć zajmowaną przez przekazaną w argumencie tablicę.
4.2.17 (*) Napisz funkcję, która otrzymuje dwa argumenty: dodatnią liczbę całkowitą n oraz n-elementową tablicę tab o elementach typu double
a następnie tworzy kopię tablicy tab i zwraca jako wartość wskaźnik
do nowo utworzonej kopii.
4.2.18 (*) Napisz funkcję, która otrzymuje trzy argumenty: dodatnią liczbę całkowitą n oraz dwie tablice n-elementowe o elementach typu int
przechowujące współrzędne wektorów i zwraca jako wartość wskaźnik
do pierwszego elementu nowo utworzonej tablicy przechowujÄ…cej sumÄ™
wektorów otrzymanych w argumentach.
4.2.19 (*) Napisz funkcję, która dostaje w argumentach dodatnią liczbę cał-
kowitą n oraz n-elementową tablicę liczb całkowitych tab1 o elemen-
tach typu int i przepisuje do nowo utworzonej tablicy tab2 elementy
tablicy tab1 o wartości różnej od zera. Rozmiar tablicy tab2 powinien
być równy liczbie niezerowych elementów tablicy tab1. Jako wartość
funkcja powinna zwrócić wskaźnik na pierwszy element tablicy tab2.
Rozdział 5
Napisy
5.1.
Wprowadzenie . . . . . . . . . . . . . . . . . . . . . .
24
5.2.
Zadania . . . . . . . . . . . . . . . . . . . . . . . . . .
25
24
5. Napisy 5.1. Wprowadzenie
Operacje na napisach, nazywanych też łańcuchami lub z języka angiel-
skiego stringami, to jedna z najsłabszych stron języka C. Operacje te wymagają od programisty szczególnej ostrożności. Z tego powodu, pomimo iż napisy są zwykłymi tablicami jednowymiarowymi o elementach typów znako-
wych,
to poświęcamy im oddzielny rozdział. W języku C++ można używać napi-
sów takich jak w C, jednak w C++ istnieją specjalne klasy służące do ich przechowywania: string i wstring. Klasy te są znacznie wygodniejsze w użyciu od tablic znaków.
Na początku podrozdziału 5.2 są zadania, które należy rozwiązać bez używania funkcji bibliotecznych. Tą część uczący się języka C++ mogą pomi-
nąć, mogą ją też potraktować jako ćwiczenia z operacji na tablicach jednowymiarowych. W drugiej części podrozdziału 5.2 są zadania, w których można używać funkcji bibliotecznych. Znajdują się tam także zadania, przeznaczo-ne specjalnie dla uczących się C++, w których należy użyć typów string
i wstring.
Napisy w języku C są przechowywane w jednowymiarowych tablicach
o elementach typów znakowych. W języku C są dwa podstawowe typy znako-
we char i wchar_t oraz modyfikacje typu char: unsigned char
i signed char. Standard języka C nie określa długości zmiennych o typach char i wchar_t. Typ char jest określony jako typ wystarczający do przechowywania podstawowego zestawu znaków na danym komputerze (w praktyce
char jest typem jednobajtowym), zaś typ wchart_t powinien wystarczyć
do przechowywania pełnego zestawu znaków dostępnego na danym kompu-
terze.
Na końcu poprawnego napisu w języku C (niezależnie od typu znaków
z których się składa) znajduje się znak o kodzie 0. Służy on do zaznaczenia końca napisu. Tablica przechowująca n-znakowy napis musi mieć co najmniej n + 1 elementów (może mieć więcej), aby móc przechować kończący
napis znak o kodzie 0. Konieczność dbania o to, żeby na końcu napisu zawsze był znak o kodzie 0, jest jedną z dwóch głównych niedogodności przy operowaniu na napisach w języku C.
Operacje na napisach o elementach typu char można znaleźć w biblio-
tece string, zaś niektóre operacje na znakach tego typu także w bibliotece ctype. Typ wchar_t oraz funkcje operujące na zmiennych tego typu, odpowiadające operacjom z innych bibliotek standardowych (w tym z biblioteki string) znajdują się w bibliotece wchar. Odpowiedniki funkcji z bibliotek ctype operujące na typie wchar_t znajdują się w bibliotece wctype. Opisy funkcji z powyższych bibliotek czytelnik znajdzie w literaturze. Funkcje z bibliotek standardowych wymagają dbania o to, żeby używane tablice znaków
5.2. Zadania
25
były wystarczających rozmiarów. Jest to druga ze wspomnianych wcześniej dwóch najważniejszych niedogodności przy operowaniu na napisach w języ-ku C.
W języku C++ do przechowywania napisów służą klasy string i wstring.
Jedyną różnicą pomiędzy tymi klasami jest typ znaków, z których składają się napisy. W obiektach klasy string znaki są typu char, natomiast napisy przechowywane w obiektach klasy wstring składają się ze znaków typu
wchart_t. Klasy string i wstring sÄ… zdefiniowane w bibliotece string
języka C++.
Uwaga! Biblioteka string języka C++ i biblioteka o tej samej nazwie
z języka C to dwie różne biblioteki. Biblioteka string języka C jest dostępna w języku C++ pod nazwą cstring.
Używanie klas string i wstring znacznie ułatwia operowanie na na-
pisach. W szczególności operowanie na tych klasach uwalnia nas od wspo-
mnianych wcześniej dwóch głównych mankamentów operacji na napisach
w języku C, czyli konieczności dbania o obecność znaku o kodzie 0 na koń-
cu napisu i o odpowiedni rozmiar używanych tablic. Napisy przechowywane w obiektach klas string i wstring mogą zawierać znaki o kodzie 0 jako nor-malne znaki w napisie, zaś metody zdefiniowane dla tych klas dbają za nas o przydział pamięci dla przechowywanych napisów. O różnicy w łatwości
operowania na różnych rodzajach napisów można się przekonać analizując
rozwiązania zadań z następnego podrozdziału. Opis klas string i wstring czytelnik znajdzie w literaturze.
5.2. Zadania
Następujące zadania rozwiąż nie używając funkcji bibliotecznych:

Podstrony