Pytania pomocnicze - INF.04

Projektowanie, programowanie i testowanie aplikacji

Pytania pomocnicze rozwijające tematy z pytań egzaminacyjnych. Każde pytanie ma krótką odpowiedź, która pomaga utrwalić wiedzę i przygotować się do egzaminu. Łącznie: 1207.
Strona 10 z 11.

Jak rozpoznać na zrzucie ekranu, że użyto kontrolki ListBox, a nie ComboBox?

ListBox pokazuje kilka elementów listy jednocześnie w osobnym prostokącie. ComboBox zwykle wyświetla jedno pole z listą rozwijaną po kliknięciu.

Jak rozpoznać kontrolkę ListBox w oknie WPF?

ListBox wyświetla listę kilku elementów jednocześnie i pozwala zaznaczyć jeden lub więcej z nich. W pytaniu lista z pozycjami „Pies”, „Kot”, „Świnka morska” odpowiada właśnie kontrolce ListBox.

Po czym poznać, że w formularzu zastosowano CheckBox, a nie RadioButton?

CheckBox ma zwykle kształt kwadratu i służy do niezależnego zaznaczania opcji. RadioButton jest okrągły i najczęściej oznacza wybór jednej opcji z grupy.

Czym różni się ListBox od ComboBox?

ListBox pokazuje wiele pozycji od razu w obszarze listy. ComboBox jest listą rozwijaną, która zwykle pokazuje tylko aktualnie wybraną wartość i rozwija się po kliknięciu.

Jakie kontrolki można zidentyfikować w pokazanym oknie dialogowym?

Na ilustracji widać ListBox z listą zwierząt, TextBox do wpisania imienia oraz dwa pola CheckBox dotyczące cech zwierzęcia.

Do czego służy TextBox w XAML?

TextBox służy do wprowadzania lub wyświetlania tekstu. Na ilustracji jest nim pole z tekstem „Imię zwierzątka”.

Dlaczego poprawna odpowiedź zawiera dwa elementy CheckBox zamiast RadioButton?

Opcje „Zaszczepiony?” i „Na diecie?” są niezależne, więc mogą być zaznaczone jednocześnie. RadioButton byłby właściwy przy wyborze tylko jednej opcji z grupy.

Jak wygląda CheckBox i kiedy się go stosuje?

CheckBox ma postać małego kwadratu, który można zaznaczyć lub odznaczyć. Stosuje się go przy opcjach niezależnych, np. „Zaszczepiony?” oraz „Na diecie?”.

Na czym polega uproszczony zapis kontrolek w XAML?

Uproszczony zapis pokazuje tylko nazwy znaczników kontrolek, np. <ListBox />, <TextBox />, <CheckBox />. Pomija szczegóły takie jak rozmiary, pozycje czy style.

Czym różni się CheckBox od RadioButton?

CheckBox pozwala zaznaczyć wiele niezależnych opcji. RadioButton służy zwykle do wyboru jednej opcji z grupy wzajemnie wykluczających się możliwości.

Jakie znaczenie ma kolejność kontrolek w uproszczonym kodzie XAML?

Kolejność powinna odpowiadać elementom widocznym w formularzu lub strukturze kontenera. Dzięki temu łatwiej dopasować kod do układu interfejsu.

Dlaczego poprawny uproszczony kod to ListBox, TextBox, CheckBox, CheckBox?

W oknie widać listę zwierząt, pole tekstowe oraz dwa pola wyboru. Nie ma tam listy rozwijanej ComboBox ani przycisków RadioButton.

Dlaczego Label nie jest najlepszym dopasowaniem do pola z napisem „Imię zwierzątka” na tej ilustracji?

Na obrazie widać pole do wpisywania tekstu, a nie sam statyczny napis. To wskazuje na TextBox, a nie Label.

Co oznacza uproszczona wersja kodu XAML?

Uproszczona wersja pokazuje tylko typy kontrolek, bez ich właściwości, takich jak rozmiar, położenie, marginesy, nazwy czy teksty etykiet.

Co oznacza znacznik <Switch> w układzie XML aplikacji Android?

Oznacza kontrolkę przełącznika, czyli element interfejsu pozwalający wybrać jeden z dwóch stanów: włączony lub wyłączony.

Co oznacza znacznik <Switch> w układzie Android XML?

Znacznik <Switch> definiuje kontrolkę przełącznika, czyli element interfejsu pozwalający wybrać jeden z dwóch stanów, np. włączone/wyłączone.

Po czym w kodzie można rozpoznać, że chodzi o przełącznik, a nie o listę rozwijaną lub suwak?

Decyduje nazwa znacznika, czyli <Switch>. Lista rozwijana ma inne kontrolki, np. Spinner, a suwak to zwykle SeekBar.

Do czego służy atrybut android:id w kontrolce Androida?

Atrybut android:id nadaje elementowi unikalny identyfikator. Dzięki temu można odwołać się do kontrolki w kodzie aplikacji, np. przez findViewById.

Jaką rolę pełni atrybut android:text w pokazanym kodzie?

Ustawia tekst widoczny przy kontrolce. W tym przykładzie obok przełącznika będzie wyświetlany napis „Switch”.

Co oznaczają wartości wrap_content dla layout_width i layout_height?

Wartość wrap_content oznacza, że szerokość lub wysokość kontrolki zostanie dopasowana do jej zawartości, zamiast zajmować stały rozmiar lub całą dostępną przestrzeń.

Co oznacza zapis android:background="#00ffff"?

Ustawia kolor tła kontrolki za pomocą zapisu szesnastkowego HEX. Wartość #00ffff odpowiada kolorowi cyjan.

Jaką rolę pełni atrybut android:background w definicji kontrolki?

Atrybut android:background określa tło elementu interfejsu. W przykładzie wartość #00ffff oznacza kolor cyjanowy zapisany w formacie szesnastkowym RGB.

Do czego służy atrybut android:id="@+id/switch1"?

Nadaje kontrolce identyfikator, dzięki któremu można odwołać się do niej w kodzie programu, np. w Javie lub Kotlinie.

Czym różni się Switch od listy rozwijanej?

Switch służy do wyboru jednego z dwóch stanów, np. tak/nie lub włącz/wyłącz. Lista rozwijana pozwala wybrać jedną pozycję z większej liczby dostępnych opcji.

Co oznaczają wartości wrap_content przy szerokości i wysokości kontrolki?

Oznaczają, że rozmiar kontrolki zostanie dopasowany do jej zawartości, a nie ustawiony na sztywno.

Czym różni się Switch od suwaka?

Switch przełącza między dwoma stanami logicznymi. Suwak zwykle pozwala wybrać wartość z pewnego zakresu, np. głośność od 0 do 100.

Jaka jest praktyczna funkcja kontrolki Switch w aplikacjach mobilnych?

Służy do włączania i wyłączania opcji, np. Wi-Fi, powiadomień, trybu ciemnego lub zgody na określone ustawienie.

Do czego służy atrybut android:text w kontrolce Switch?

Atrybut android:text określa tekst wyświetlany przy kontrolce. Może on informować użytkownika, czego dotyczy dany przełącznik.

Czym charakteryzuje się licencja Open Source?

Pozwala użytkownikom korzystać z programu, kopiować go, rozpowszechniać oraz modyfikować jego kod źródłowy zgodnie z warunkami danej licencji.

Po czym rozpoznać licencję Open Source w treści zadania egzaminacyjnego?

Najważniejsze wskazówki to dostęp do kodu źródłowego oraz prawo do modyfikowania, kopiowania i rozpowszechniania programu.

Dlaczego w opisie tej licencji kluczowe jest prawo do modyfikacji i rozbudowy programu?

To cecha odróżniająca Open Source od licencji zamkniętych i wielu darmowych licencji. Użytkownik nie tylko używa programu, ale może też rozwijać jego kod.

Czym różni się Open Source od Freeware?

Freeware oznacza zwykle darmowe używanie programu, ale bez prawa do modyfikacji kodu. Open Source daje dodatkowo dostęp do kodu źródłowego i możliwość jego zmieniania.

Czym jest licencja Shareware?

Shareware to model, w którym program można wypróbować, ale często ma ograniczenia czasowe, funkcjonalne albo wymaga późniejszej zapłaty.

Czym różni się Open Source od Shareware?

Shareware to najczęściej wersja próbna lub ograniczona czasowo/funkcjonalnie. Open Source nie opiera się na modelu testowym, lecz na otwartym dostępie do kodu i prawie modyfikacji.

Na czym polega licencja OEM?

Licencja OEM jest zwykle przypisana do konkretnego sprzętu, np. system operacyjny dostarczony razem z komputerem.

Czym różni się Open Source od licencji OEM?

OEM jest zwykle przypisana do konkretnego sprzętu lub urządzenia i ma ograniczenia przenoszenia. Open Source dotyczy otwartego udostępniania programu i jego kodu.

Czy każde darmowe oprogramowanie jest Open Source?

Nie. Program może być darmowy, ale zamknięty, czyli bez dostępu do kodu źródłowego i bez prawa do jego modyfikacji.

Czy Open Source zawsze oznacza, że program jest całkowicie bez ograniczeń?

Nie. Program jest udostępniany na określonej licencji, która może nakładać warunki, np. obowiązek zachowania informacji o autorze lub udostępnienia zmian na tej samej licencji.

Dlaczego dostęp do kodu źródłowego jest ważny w Open Source?

Dostęp do kodu umożliwia analizę działania programu, poprawianie błędów, rozwijanie funkcji i tworzenie własnych wersji zgodnie z licencją.

Co oznacza zapis 0x73 w języku C++?

Prefiks 0x oznacza, że liczba jest zapisana w systemie szesnastkowym. Wartość 0x73 to liczba 73 w zapisie hex, czyli 115 w systemie dziesiętnym.

Co oznacza przedrostek 0x w zapisie liczby w C++?

Przedrostek `0x` oznacza, że liczba jest zapisana w systemie szesnastkowym. Przykład: `0x10` to dziesiętnie `16`.

Dlaczego instrukcja cout << a; wyświetla 115, a nie 73?

Zmienna a przechowuje wartość liczbową, a cout domyślnie wypisuje liczby całkowite w systemie dziesiętnym. Dlatego literał zapisany jako 0x73 zostaje pokazany jako 115.

Jak przeliczyć liczbę 0x73 na system dziesiętny?

Należy pomnożyć kolejne cyfry przez potęgi liczby 16: `7 * 16 + 3 = 115`. Dlatego `0x73` ma wartość dziesiętną `115`.

Jak przeliczyć liczbę szesnastkową 0x73 na system dziesiętny?

Cyfra 7 oznacza 7×16, a 3 oznacza 3×1. Po zsumowaniu 112 + 3 otrzymujemy 115.

Dlaczego cout wypisuje 115, a nie 0x73?

`cout` domyślnie wypisuje liczby całkowite w systemie dziesiętnym. Zapis `0x73` dotyczy tylko sposobu zapisania wartości w kodzie źródłowym.

Jaka jest różnica między zapisem liczby a jej wartością w programie?

Zapis to forma podania liczby w kodzie, np. dziesiętna, binarna lub szesnastkowa. Wartość przechowywana w pamięci jest taka sama niezależnie od sposobu zapisu literału.

Jakie cyfry występują w systemie szesnastkowym?

W systemie szesnastkowym używa się cyfr `0-9` oraz liter `A-F`, gdzie `A` oznacza 10, a `F` oznacza 15.

Jak w C++ można wypisać liczbę w systemie szesnastkowym zamiast dziesiętnym?

Można użyć manipulatora strumienia hex, np. cout << hex << a;. Wtedy liczba zostanie wyświetlona w systemie szesnastkowym.

Jak wymusić wypisywanie liczby w systemie szesnastkowym w C++?

Można użyć manipulatora `hex`, np. `cout << hex << a;`. Wtedy liczba zostanie wypisana w systemie szesnastkowym.

Czym jest klasa w programowaniu obiektowym?

Klasa to definicja typu danych opisująca, jakie pola i metody będą miały tworzone na jej podstawie obiekty. Jest jak szablon lub wzorzec obiektu.

Jaka jest różnica między klasą a obiektem?

Klasa jest projektem lub typem danych, a obiekt jest konkretną instancją tej klasy utworzoną w pamięci programu. Na przykład klasa `Samochod` opisuje cechy samochodu, a obiekt to konkretny samochód.

Dlaczego w odpowiedzi egzaminacyjnej klasa jest uznawana za typ danych?

Bo określa zestaw cech i operacji dostępnych dla obiektów danego rodzaju. W wielu językach programowania obiektowego klasa definiuje własny, złożony typ danych.

Dlaczego klasa jest uznawana za typ danych?

Ponieważ po zdefiniowaniu klasy można deklarować zmienne tego typu i tworzyć obiekty należące do tej klasy. Podobnie jak `int` oznacza liczbę całkowitą, tak `Uczen` może oznaczać typ reprezentujący ucznia.

Co może zawierać klasa?

Klasa może zawierać pola przechowujące dane oraz metody wykonujące operacje na tych danych. Może też zawierać konstruktory, właściwości i modyfikatory dostępu.

Jak tworzy się obiekt na podstawie klasy?

Tworzy się instancję klasy, zwykle za pomocą konstruktora. W efekcie powstaje konkretny obiekt mający własne wartości pól.

Do czego służy konstruktor klasy?

Konstruktor służy do tworzenia i inicjalizowania obiektu klasy. Najczęściej ustawia początkowe wartości pól obiektu.

Czy klasa jest tym samym co zmienna, wskaźnik albo instrukcja?

Nie. Zmienna przechowuje wartość, wskaźnik odnosi się do adresu w pamięci, instrukcja steruje wykonaniem programu, a klasa definiuje typ danych.

Czy klasa jest zmienną?

Nie. Klasa nie jest zmienną, tylko typem danych lub szablonem. Zmienna może natomiast przechowywać referencję do obiektu utworzonego na podstawie klasy.

Jak działa funkcja wykonaj() krok po kroku?

Funkcja tworzy tablicę 5 liczb, następnie przechodzi po niej pętlą for i porównuje każdy element z argumentem. Jeśli znajdzie zgodność, od razu zwraca true, a jeśli nie znajdzie żadnego dopasowania, zwraca false.

Co sprawdza funkcja zwracająca wartość typu bool w podanym kodzie?

Sprawdza, czy wartość przekazana jako argument występuje w tablicy. Jeśli znajdzie taką wartość, zwraca `true`, w przeciwnym razie `false`.

Dlaczego poprawna odpowiedź mówi o obecności elementu w tablicy?

Warunek T[i] == argument sprawdza równość aktualnego elementu tablicy z przekazanym argumentem. To oznacza wyszukiwanie konkretnej wartości w tablicy, a nie sprawdzanie wszystkich elementów naraz.

Dlaczego w kodzie użyto pętli for?

Pętla `for` pozwala przejść kolejno przez wszystkie indeksy tablicy od `0` do `4`. Dzięki temu można porównać każdy element z argumentem funkcji.

Jaką rolę pełni instrukcja return true wewnątrz pętli?

Powoduje natychmiastowe zakończenie działania funkcji po znalezieniu szukanego elementu. Dzięki temu program nie przeszukuje reszty tablicy niepotrzebnie.

Jaką rolę pełni instrukcja if w tej funkcji?

Instrukcja `if` porównuje aktualny element tablicy `T[i]` z wartością `argument`. Jeśli wartości są równe, funkcja natychmiast zwraca `true`.

Co oznacza return false na końcu funkcji?

Oznacza, że pętla sprawdziła wszystkie elementy tablicy i żaden nie był równy argumentowi. Innymi słowy, szukana wartość nie występuje w tablicy.

Dlaczego funkcja zwraca false dopiero po zakończeniu pętli?

Dopiero po sprawdzeniu wszystkich elementów wiadomo, że szukanej wartości nie ma w tablicy. Dlatego `return false` znajduje się za pętlą.

Jaki algorytm wyszukiwania został tu zastosowany?

To wyszukiwanie liniowe. Program sprawdza elementy tablicy kolejno od początku do końca, aż znajdzie wartość albo dojdzie do końca.

Czy ta funkcja sprawdza, czy wszystkie elementy tablicy są równe argumentowi?

Nie. Funkcja kończy działanie po znalezieniu pierwszego elementu równego argumentowi, więc sprawdza obecność wartości, a nie równość wszystkich elementów.

Jaka jest złożoność obliczeniowa tej funkcji?

W najgorszym przypadku jest to O(n), bo trzeba sprawdzić wszystkie elementy tablicy. W najlepszym przypadku jest O(1), gdy szukana wartość znajduje się na początku.

Dla jakich argumentów funkcja zwróci true?

Funkcja zwróci `true` dla argumentów: `4`, `15`, `-2`, `9` oraz `202`, ponieważ te wartości znajdują się w tablicy.

Dlaczego odpowiedź A jest błędna?

Funkcja nie sprawdza, czy wszystkie elementy tablicy są równe argumentowi. Wystarczy znalezienie jednego pasującego elementu, aby zwrócić true.

Co oznacza warunek i < 5 w pętli?

Oznacza, że pętla wykona się dla indeksów `0`, `1`, `2`, `3` i `4`. Są to poprawne indeksy pięcioelementowej tablicy.

Dlaczego odpowiedź D jest błędna, mimo że w pętli występują liczby od 0 do 4?

Zakres 0–4 dotyczy indeksów tablicy, czyli pozycji elementów, a nie wartości argumentu. Argument jest porównywany z wartościami zapisanymi w tablicy: 4, 15, -2, 9, 202.

Po czym rozpoznać poprawną definicję konstruktora w C++ poza klasą?

Nazwa przed operatorem zakresu i po nim musi być taka sama jak nazwa klasy, np. Owoc::Owoc(...). Konstruktor nie ma typu zwracanego.

Dlaczego poprawna definicja konstruktora poza klasą ma postać `Owoc::Owoc(...)`?

Pierwsze `Owoc` oznacza nazwę klasy, do której należy konstruktor, a drugie `Owoc` jest nazwą konstruktora. Konstruktor musi mieć dokładnie taką samą nazwę jak klasa.

Dlaczego w poprawnej definicji użyto zapisu this->waga, a nie this.waga?

W C++ this jest wskaźnikiem na bieżący obiekt, więc do pól i metod odwołujemy się przez operator ->. Zapis z kropką stosuje się dla zwykłych obiektów, nie wskaźników.

Dlaczego deklaracja z `Construct::Owoc(...)` jest błędna?

Klasa w zadaniu nazywa się `Owoc`, więc definicja jej konstruktora musi być poprzedzona `Owoc::`. Nazwa `Construct` sugeruje inną klasę, której w kodzie nie zdefiniowano.

Po co w konstruktorze stosuje się this->, skoro nazwy parametrów i pól są takie same?

Pozwala to odróżnić pole klasy od parametru funkcji. this->waga oznacza pole obiektu, a samo waga oznacza parametr konstruktora.

Czym różni się `this->waga` od samego `waga` w konstruktorze?

`this->waga` wskazuje na pole obiektu, natomiast samo `waga` oznacza parametr konstruktora, jeśli parametr ma tę samą nazwę. Dzięki `this->` unika się niejednoznaczności.

Dlaczego deklaracje z Construct::Owoc(...) są błędne?

Ponieważ Construct nie jest nazwą klasy pokazanej w zadaniu. Definicja konstruktora musi być powiązana z właściwą klasą, czyli Owoc.

Dlaczego w C++ używa się `this->`, a nie `this.`?

W C++ `this` jest wskaźnikiem do bieżącego obiektu. Do dostępu do pól przez wskaźnik używa się operatora `->`, a nie kropki.

Jaką rolę pełni konstruktor w klasie?

Konstruktor inicjalizuje nowo tworzony obiekt. Ustawia wartości pól i przygotowuje obiekt do użycia zaraz po utworzeniu.

Czy konstruktor w C++ może mieć typ zwracany?

Nie. Konstruktor nie ma typu zwracanego, nawet `void`. Jego zadaniem jest inicjalizacja obiektu, a nie zwracanie wartości.

Czy konstruktor w C++ może mieć typ zwracany, na przykład void?

Nie. Konstruktor nie ma żadnego typu zwracanego, nawet void.

Kiedy konstruktor jest wywoływany?

Konstruktor wywołuje się automatycznie podczas tworzenia obiektu klasy. Na przykład `Owoc jablko(0.2, "jabłko");` wywoła konstruktor z parametrami `double` i `string`.

Jak można utworzyć obiekt klasy Owoc z użyciem tego konstruktora?

Przykładowo: Owoc jablko(0.25, "Jabłko");. Spowoduje to przypisanie wartości do pól waga i nazwa.

Skąd wiadomo, że funkcja `zamien` oczekuje adresów zmiennych, a nie ich wartości?

Wskazuje na to zapis parametrów `int *a, int *b`. Gwiazdka przy typie oznacza, że parametry są wskaźnikami, czyli mają przechowywać adresy zmiennych typu `int`.

Co oznacza zapis `int *a` w parametrze funkcji?

Oznacza, że parametr `a` jest wskaźnikiem na zmienną typu `int`. Funkcja oczekuje więc adresu zmiennej całkowitej, a nie samej wartości.

Jaką rolę pełni operator `&` przy wywołaniu `zamien(&a, &b)`?

Operator `&` zwraca adres zmiennej. Dzięki temu do funkcji trafiają wskaźniki zgodne z typami parametrów `int*`.

Jaką rolę pełni operator `&` przy wywołaniu funkcji w tym zadaniu?

Operator `&` zwraca adres zmiennej. Dzięki temu zwykłe zmienne całkowite `a` i `b` mogą zostać przekazane do funkcji oczekującej wskaźników.

Dlaczego w poprawnym wywołaniu używa się `&a` i `&b`?

Operator `&` pobiera adres zmiennej. Funkcja `zamien(int *a, int *b)` wymaga adresów, ponieważ jej parametry są wskaźnikami.

Dlaczego wywołanie `zamien(12, 34)` jest niepoprawne?

Liczby `12` i `34` są wartościami typu `int`, a funkcja oczekuje adresów zmiennych. Nie można przekazać literałów tam, gdzie wymagany jest wskaźnik do `int`.

Do czego służy operator `*` wewnątrz funkcji `zamien`?

Operator `*` dereferencjonuje wskaźnik, czyli pozwala odczytać lub zmienić wartość przechowywaną pod wskazanym adresem. Dzięki temu funkcja zamienia wartości oryginalnych zmiennych.

Co robi operator `*` użyty przed nazwą wskaźnika wewnątrz funkcji?

Operator `*` wykonuje dereferencję, czyli odwołuje się do wartości znajdującej się pod adresem przechowywanym we wskaźniku. Dzięki temu można zmienić oryginalną zmienną.

Dlaczego zapis `zamien(*a, *b)` nie pasuje do opisu, że `a` i `b` są zmiennymi całkowitymi?

Jeśli `a` i `b` są zwykłymi zmiennymi typu `int`, to nie można ich dereferencjonować operatorem `*`. Taki zapis miałby sens tylko wtedy, gdyby `a` i `b` były wskaźnikami.

Dlaczego wywołanie `zamien(12, 34)` jest błędne?

Liczby `12` i `34` są wartościami stałymi, a funkcja oczekuje adresów zmiennych typu `int`. Nie można przekazać ich jako `int *`.

Co oznacza operator `*` wewnątrz funkcji `zamien`?

To dereferencja wskaźnika, czyli dostęp do wartości zapisanej pod wskazanym adresem. Dzięki temu funkcja zmienia rzeczywiste wartości zmiennych przekazanych z programu głównego.

Dlaczego wywołanie `zamien(m, n)` nie pasuje, jeśli `m` i `n` są zmiennymi całkowitymi?

Przekazywane są wtedy same wartości zmiennych, a nie ich adresy. Poprawnie należałoby użyć `zamien(&m, &n)`.

Czym różni się przekazanie zmiennej przez wartość od przekazania przez wskaźnik?

Przy przekazaniu przez wartość funkcja otrzymuje kopię danych. Przy przekazaniu przez wskaźnik funkcja otrzymuje adres i może zmienić oryginalną zmienną.

Po co w funkcji `zamien` używana jest zmienna pomocnicza `tmp`?

Służy do chwilowego przechowania jednej z wartości podczas zamiany. Bez niej jedna wartość zostałaby nadpisana, zanim dałoby się ją przypisać do drugiej zmiennej.

Jaki będzie efekt działania funkcji `zamien(&a, &b)`?

Wartości zmiennych `a` i `b` zostaną zamienione miejscami. Funkcja modyfikuje oryginalne zmienne, bo działa na ich adresach.

Jaki efekt daje funkcja `zamien` po wywołaniu `zamien(&a, &b)`?

Funkcja zamienia miejscami wartości zmiennych `a` i `b`. Dzieje się tak, ponieważ operuje na ich adresach.

Jaki efekt daje przekazanie argumentów przez wskaźnik w porównaniu z przekazaniem przez wartość?

Przy przekazaniu przez wskaźnik funkcja może zmienić oryginalne zmienne. Przy przekazaniu przez wartość modyfikowane są tylko lokalne kopie parametrów.

Po co w funkcji `zamien` użyto zmiennej pomocniczej `tmp`?

Bez zmiennej tymczasowej jedna z wartości zostałaby nadpisana przed zakończeniem zamiany. `tmp` przechowuje chwilowo starą wartość `*a`.

Do czego służy typ double w języku C++?

Typ double służy do przechowywania liczb rzeczywistych, czyli takich, które mogą mieć część ułamkową, np. 3.14 lub 0.5.

Do czego służy typ `double` w języku C++?

Typ `double` służy do przechowywania liczb rzeczywistych, czyli takich, które mogą mieć część ułamkową, np. `2.5` albo `-7.125`.

Dlaczego typ int nie nadaje się do przechowywania wartości rzeczywistych?

Typ int przechowuje tylko liczby całkowite, bez części po przecinku. Zapisanie liczby rzeczywistej w int prowadzi do utraty części ułamkowej.

Czym różni się typ `int` od typu `double`?

`int` przechowuje liczby całkowite, a `double` liczby rzeczywiste. Przykładowo `10` można zapisać w `int`, ale `10.5` wymaga typu zmiennoprzecinkowego, np. `double`.

Czym różni się liczba całkowita od liczby rzeczywistej w programowaniu?

Liczba całkowita nie ma części ułamkowej, np. 7 lub -2. Liczba rzeczywista może zawierać ułamek dziesiętny, np. 7.25.

Czy `number` jest poprawnym typem danych w C++?

Nie, `number` nie jest standardowym typem prostym w C++. Do liczb rzeczywistych używa się m.in. `float`, `double` lub `long double`.

Jak zadeklarować zmienną typu double w C++?

Zmienną deklaruje się przez podanie typu i nazwy, np. double cena; albo z przypisaniem wartości: double pi = 3.14;

Kiedy warto użyć typu `float`, a kiedy `double`?

`float` zajmuje zwykle mniej pamięci, ale ma mniejszą precyzję. `double` jest częściej stosowany, gdy potrzebna jest dokładniejsza reprezentacja liczb rzeczywistych.

Dlaczego odpowiedzi number i numeric są niepoprawne w C++?

Ponieważ number i numeric nie są podstawowymi typami danych w języku C++. Poprawnym typem do przechowywania wartości rzeczywistych jest m.in. double.

Jak zadeklarować w C++ zmienną rzeczywistą o nazwie `wynik`?

Można zapisać: `double wynik;`. Jeśli od razu przypisujemy wartość, np. `double wynik = 12.75;`.

Do czego służy funkcja std::string::resize w C++?

Służy do zmiany długości napisu. Może skrócić string albo go wydłużyć do podanej liczby znaków.

Do czego służy metoda resize() w klasie std::string?

Metoda `resize()` zmienia długość napisu na podaną liczbę znaków. Może skrócić albo wydłużyć łańcuch.

Kiedy funkcja resize skraca łańcuch znaków?

Gdy parametr n jest mniejszy od aktualnej długości stringa. Wtedy pozostają tylko pierwsze n znaków.

Co oznacza parametr n w metodzie string::resize()?

Parametr `n` oznacza nową długość napisu wyrażoną liczbą znaków. To jego wartość decyduje, czy napis zostanie skrócony, czy rozszerzony.

Co się dzieje, gdy parametr n jest większy od aktualnej długości napisu?

String zostaje wydłużony. Brakujące miejsca są uzupełniane wskazanym znakiem c albo znakami domyślnymi.

Kiedy metoda resize() skraca napis?

Napis zostaje skrócony wtedy, gdy `n` jest mniejsze od aktualnej długości łańcucha. Pozostają tylko pierwsze `n` znaków.

Jaką rolę pełni parametr c w funkcji resize?

Parametr c określa znak, którym zostaną wypełnione nowe pozycje, ale tylko wtedy, gdy napis jest rozszerzany. Nie ma znaczenia przy skracaniu stringa.

Co dzieje się, gdy n jest większe od aktualnej długości napisu?

Napis zostaje wydłużony przez dopisanie znaków na końcu. Jeśli podano parametr `c`, nowe znaki będą jego kopiami.

Dlaczego odpowiedzi odnoszące się do parametru c są błędne w kontekście skracania stringa?

Bo o skróceniu decyduje wyłącznie nowa długość n względem obecnej długości napisu. Parametr c dotyczy tylko uzupełniania nowych znaków przy wydłużaniu.

Jaką rolę pełni parametr c w metodzie resize()?

Parametr `c` określa znak, którym mają zostać wypełnione nowe miejsca przy rozszerzaniu napisu. Nie decyduje o długości napisu.

Jak interpretować zapis, że n ma typ size_t?

Oznacza to, że n jest nieujemną liczbą całkowitą używaną do określania rozmiaru. W praktyce parametr oznacza liczbę znaków w napisie po zmianie.

Jaka jest różnica między resize() a przypisaniem krótszego tekstu do zmiennej string?

`resize()` zmienia długość istniejącego napisu, zachowując jego początkowe znaki przy skracaniu. Przypisanie zastępuje całą dotychczasową wartość nową treścią.

Jaki będzie efekt wykonania kodu s.resize(4), jeśli s ma wartość "program"?

Napis zostanie skrócony do czterech pierwszych znaków, czyli do "prog". Wszystkie dalsze znaki zostaną usunięte.

Dlaczego w dokumentacji C++ warto zwracać uwagę na nazwy parametrów?

Nazwy parametrów wskazują ich znaczenie. W tym przypadku `n` oznacza długość, a `c` znak wypełniający, więc pomylenie ich prowadzi do błędnej interpretacji działania funkcji.