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 9 z 11.
Po czym rozpoznać w JavaScript, że zapis przedstawia funkcję strzałkową?
Funkcję strzałkową rozpoznaje się po operatorze `=>`. Może być przypisana do zmiennej, np. `let f = (a, b) => a + b;`.
Po czym rozpoznać funkcję strzałkową w JavaScript?
Funkcję strzałkową rozpoznaje się po operatorze `=>` umieszczonym między parametrami a ciałem funkcji, np. `(x, y) => x + y`.
Jaką rolę pełni słowo kluczowe `let` w podanym fragmencie kodu?
`let` deklaruje zmienną blokową. W tym przykładzie zmienna `modulo` przechowuje funkcję strzałkową.
Co oznacza zapis `let modulo = (x, y) => x % y;`?
Tworzy zmienną `modulo`, do której przypisana jest funkcja przyjmująca dwa argumenty i zwracająca resztę z dzielenia `x` przez `y`.
Co oznacza zapis `(x, y) => x % y`?
To funkcja przyjmująca dwa argumenty: `x` i `y`. Zwraca resztę z dzielenia `x` przez `y` za pomocą operatora `%`.
Czym różni się funkcja strzałkowa od klasycznej funkcji `function`?
Funkcja strzałkowa ma krótszą składnię i nie tworzy własnego kontekstu `this`. W prostych przypadkach może automatycznie zwracać wynik bez słowa `return`.
Dlaczego ten fragment nie jest definicją tablicy ani interfejsu?
Nie ma tu składni tablicy, np. `[]`, ani składni interfejsu znanej z TypeScript czy innych języków. Występuje natomiast charakterystyczny zapis funkcji strzałkowej z `=>`.
Kiedy w funkcji strzałkowej można pominąć słowo `return`?
Można je pominąć, gdy ciało funkcji składa się z jednego wyrażenia i nie jest ujęte w nawiasy klamrowe, np. `x => x * 2`.
Czym różni się funkcja strzałkowa od klasycznej funkcji w JavaScript?
Funkcja strzałkowa ma krótszą składnię i inaczej wiąże `this` — przejmuje je z otaczającego kontekstu. Klasyczna funkcja używa zapisu `function`.
Do czego służy operator `%` w przykładzie z funkcją `modulo`?
Operator `%` zwraca resztę z dzielenia dwóch liczb, np. `10 % 3` daje wynik `1`.
Jak zapisać tę samą funkcję w klasycznej składni JavaScript?
Można zapisać ją tak: `function modulo(x, y) { return x % y; }` albo `let modulo = function(x, y) { return x % y; };`.
Czy zapis `(x, y) => x % y` oznacza definicję tablicy?
Nie. Tablice w JavaScript definiuje się zwykle za pomocą nawiasów kwadratowych, np. `[1, 2, 3]`. Znak `=>` wskazuje na funkcję strzałkową.
Do czego służy operator `%` w JavaScript?
Operator `%` zwraca resztę z dzielenia jednej liczby przez drugą. Jest zaliczany do operatorów arytmetycznych.
Dlaczego ten algorytm potrafi policzyć liczbę cyfr liczby całkowitej dodatniej?
W każdej iteracji liczba jest dzielona całkowicie przez 10, więc traci ostatnią cyfrę. Zmienna wynik zwiększa się o 1 przy każdym takim kroku, czyli zlicza usunięte cyfry.
Jak działa algorytm liczenia cyfr dodatniej liczby całkowitej?
Algorytm wielokrotnie dzieli liczbę całkowicie przez 10 i za każdym razem zwiększa licznik. Gdy liczba stanie się równa 0, licznik zawiera liczbę cyfr.
Jaką rolę w tym algorytmie pełni operacja DIV 10?
DIV 10 wykonuje dzielenie całkowite przez 10, czyli usuwa ostatnią cyfrę liczby dziesiętnej. Dzięki temu liczba stopniowo maleje aż do zera.
Dlaczego w tym algorytmie użyto operacji DIV 10?
Operacja `DIV 10` usuwa ostatnią cyfrę liczby w zapisie dziesiętnym. Dzięki temu można policzyć, ile razy trzeba usunąć cyfrę, aby liczba stała się zerem.
Dlaczego ten algorytm nie oblicza sumy cyfr liczby?
Bo nie wykorzystuje reszty z dzielenia przez 10, która daje ostatnią cyfrę. Algorytm tylko skraca liczbę i zwiększa licznik kroków.
Czym różni się algorytm liczenia cyfr od algorytmu sumowania cyfr?
Przy liczeniu cyfr zwiększa się licznik o 1 dla każdej usuniętej cyfry. Przy sumowaniu cyfr trzeba dodatkowo pobierać ostatnią cyfrę, zwykle przez `MOD 10`, i dodawać ją do sumy.
Co stanie się dla liczby 5482 podczas działania tego algorytmu?
Kolejne wartości liczby to 5482, 548, 54, 5, 0. Pętla wykona się 4 razy, więc wynik będzie równy 4.
Co oznacza warunek liczba != 0 w schemacie blokowym?
Warunek sprawdza, czy pozostały jeszcze cyfry do przetworzenia. Jeśli liczba nie jest zerem, pętla wykonuje kolejne dzielenie przez 10.
Dlaczego w treści zadania zaznaczono, że liczba jest dodatnia i różna od zera?
Dla takich danych algorytm działa jednoznacznie i zwraca poprawną liczbę cyfr. Dla zera należałoby rozpatrzyć przypadek osobno, bo 0 ma jedną cyfrę, a pętla mogłaby się nie wykonać.
Jakie wartości przyjmuje liczba podczas działania algorytmu dla liczby 4567?
Kolejne wartości to `4567`, `456`, `45`, `4`, `0`. Licznik zostanie zwiększony cztery razy, więc wynik wynosi 4.
Jak odróżnić algorytm liczenia cyfr od algorytmu sumowania cyfr?
Liczenie cyfr zwykle polega na dzieleniu liczby przez 10 i zwiększaniu licznika. Sumowanie cyfr wymaga pobierania ostatniej cyfry operacją modulo 10 i dodawania jej do sumy.
Dlaczego odpowiedź „największy wspólny dzielnik” nie pasuje do tego algorytmu?
Algorytm NWD zwykle operuje na dwóch liczbach i wykorzystuje dzielenie z resztą lub odejmowanie. Tutaj przetwarzana jest jedna liczba, a celem jest zliczanie jej cyfr.
Jaką strukturę sterującą wykorzystuje ten algorytm?
To pętla warunkowa wykonywana tak długo, jak liczba jest różna od zera. Warunek jest sprawdzany przed kolejnym obiegiem.
Co oznacza instrukcja wynik++ w algorytmie?
Instrukcja `wynik++` zwiększa wartość zmiennej `wynik` o 1. W tym algorytmie oznacza policzenie kolejnej cyfry.
Kiedy w Javie pojawia się wyjątek ArithmeticException?
Najczęściej wtedy, gdy program wykonuje niedozwoloną operację arytmetyczną, np. dzielenie przez zero dla typów całkowitych. W pokazanym komunikacie przyczyną jest "/ by zero".
Co oznacza komunikat java.lang.ArithmeticException: / by zero?
Oznacza próbę wykonania operacji arytmetycznej z dzieleniem przez zero. W Javie dotyczy to między innymi operatorów `/` oraz `%` dla liczb całkowitych.
Dlaczego instrukcja x = x % y; może spowodować błąd widoczny w komunikacie?
Operator modulo oblicza resztę z dzielenia. Jeśli y ma wartość 0, to dochodzi do dzielenia przez zero i Java zgłasza ArithmeticException.
Dlaczego wyrażenie x = x % y może spowodować ArithmeticException?
Operator `%` oblicza resztę z dzielenia, więc zmienna `y` jest dzielnikiem. Jeśli `y` ma wartość `0`, Java zgłosi `ArithmeticException`.
Czym różni się błąd dzielenia przez zero od błędu odwołania do nieistniejącego elementu tablicy?
Dzielenie przez zero daje ArithmeticException, a odwołanie poza zakres tablicy powoduje ArrayIndexOutOfBoundsException. To dwa różne typy wyjątków.
Jaka jest różnica między operatorem / a operatorem %?
Operator `/` zwraca wynik dzielenia, a operator `%` zwraca resztę z dzielenia. Oba operatory nie mogą mieć zerowego dzielnika przy typach całkowitych.
Dlaczego odpowiedź x = tablica[6]; nie pasuje do podanego komunikatu błędu?
Taka instrukcja może być błędna tylko wtedy, gdy indeks 6 nie istnieje w tablicy. Wtedy komunikat dotyczyłby tablicy i zakresu indeksów, a nie dzielenia przez zero.
Jaki wyjątek może wystąpić przy odwołaniu do nieistniejącego indeksu tablicy?
Przy odwołaniu poza zakresem tablicy, np. `tablica[6]` dla zbyt krótkiej tablicy, wystąpi `ArrayIndexOutOfBoundsException`, a nie `ArithmeticException`.
Jak zabezpieczyć kod przed ArithmeticException przy użyciu operatora % lub /?
Przed wykonaniem działania trzeba sprawdzić, czy dzielnik nie jest równy 0, np. if (y != 0). Można też obsłużyć wyjątek blokiem try-catch, ale lepiej zapobiegać błędowi wcześniej.
Jak zabezpieczyć program przed dzieleniem przez zero?
Należy przed wykonaniem dzielenia lub modulo sprawdzić warunek, np. `if (y != 0)`. W przeciwnym razie trzeba obsłużyć sytuację błędną, np. komunikatem dla użytkownika.
Czy samo przypisanie x = 0; może wywołać ArithmeticException?
Nie, zwykłe przypisanie wartości 0 do zmiennej nie jest operacją niebezpieczną arytmetycznie. Wyjątek pojawia się dopiero, gdy zero zostanie użyte jako dzielnik.
Czy instrukcja warunkowa if (x > y) sama w sobie może spowodować ArithmeticException?
Nie. Porównanie wartości za pomocą `>` nie jest operacją dzielenia i samo nie powoduje wyjątku `ArithmeticException`.
Jak interpretować fragment komunikatu Exception in thread "main"?
Oznacza on, że wyjątek wystąpił w głównym wątku programu, czyli podczas standardowego wykonywania aplikacji. To informacja o miejscu działania programu, nie o samej przyczynie błędu.
Dlaczego kontuzja w bezpośredniej drodze do pracy może być uznana za incydent związany z pracą?
Ponieważ droga do pracy i z pracy jest w przepisach traktowana jako sytuacja związana z zatrudnieniem. Warunkiem jest, aby była to droga bezpośrednia i nieprzerwana bez nieuzasadnionych odstępstw.
Czym jest wypadek w drodze do pracy?
To nagłe zdarzenie spowodowane przyczyną zewnętrzną, które następuje podczas bezpośredniej drogi pracownika do miejsca zatrudnienia lub z pracy do domu.
Czym różni się incydent w miejscu pracy od zwykłego problemu zdrowotnego pracownika?
Incydent ma związek z pracą, miejscem pracy albo drogą do pracy. Zwykły problem zdrowotny, np. wynikający z choroby przewlekłej, nie musi mieć takiego związku.
Dlaczego kontuzja stawu skokowego w drodze do pracy może być uznana za incydent związany z pracą?
Ponieważ zdarzyła się podczas bezpośredniego przemieszczania się do miejsca zatrudnienia. Taka sytuacja ma związek z wykonywaniem obowiązków pracowniczych, mimo że nie wydarzyła się jeszcze w biurze.
Czy zdarzenie podczas urlopu wypoczynkowego można uznać za incydent w miejscu pracy?
Nie, ponieważ urlop wypoczynkowy nie jest czasem wykonywania obowiązków służbowych. Brakuje więc bezpośredniego związku z pracą.
Dlaczego złe samopoczucie wynikające z przewlekłej choroby nie jest typowym wypadkiem przy pracy?
Brakuje tu zwykle nagłej przyczyny zewnętrznej. Sam fakt wystąpienia objawów choroby w biurze nie oznacza automatycznie incydentu pracowniczego.
Dlaczego uraz podczas nieobowiązkowego szkolenia w czasie prywatnym nie jest właściwym przykładem?
Bo szkolenie odbywa się poza obowiązkami służbowymi i w czasie prywatnym pracownika. Nie ma więc wystarczającego związku z zatrudnieniem.
Czy zdarzenie podczas urlopu wypoczynkowego jest wypadkiem związanym z pracą?
Zasadniczo nie, ponieważ urlop jest czasem wolnym od pracy. Nawet jeśli został udzielony przez pracodawcę, pracownik nie wykonuje wtedy obowiązków służbowych.
Jakie znaczenie ma pojęcie bezpośredniej drogi do pracy?
Oznacza ono normalną, uzasadnioną trasę między domem a miejscem pracy. Jeśli pracownik robi długie prywatne postoje lub zmienia trasę bez powodu, zdarzenie może nie zostać uznane za związane z drogą do pracy.
Jakie elementy pomagają odróżnić wypadek w drodze do pracy od zdarzenia prywatnego?
Najważniejsze są: czas, miejsce, cel przemieszczania się oraz brak prywatnego charakteru zdarzenia. Droga powinna prowadzić bezpośrednio do pracy lub z pracy.
Na jakie słowa kluczowe warto zwracać uwagę w zadaniach o BHP i zdarzeniach pracowniczych?
Najważniejsze są: miejsce zdarzenia, czas zdarzenia, związek z obowiązkami służbowymi oraz informacja, czy była to bezpośrednia droga do pracy lub z pracy. To one zwykle decydują o poprawnej odpowiedzi.
Czy nieobowiązkowe szkolenie w czasie prywatnym pracownika jest traktowane jak praca?
Nie zawsze. Jeżeli szkolenie nie było obowiązkowe i odbywało się w czasie prywatnym, zdarzenie może nie mieć wystarczającego związku z pracą.
Po czym rozpoznać, że funkcja zwraca wynik, a nie jest procedurą bez wartości zwracanej?
Trzeba sprawdzić typ przed nazwą funkcji oraz instrukcję return. W tym kodzie typ int i return liczba oznaczają, że funkcja zwraca liczbę całkowitą.
Jak rozpoznać, co zwraca funkcja na podstawie jej nagłówka?
Typ przed nazwą funkcji określa typ zwracanej wartości. W zapisie `static int Abs(int liczba)` typ `int` oznacza, że funkcja zwraca liczbę całkowitą.
Dlaczego dokumentacja 2 pasuje do funkcji Abs?
Bo zgadza się nazwa funkcji, opis działania, liczba argumentów oraz informacja o zwracanej wartości. Funkcja przyjmuje jedną liczbę całkowitą i zwraca jej wartość bezwzględną.
Dlaczego dokumentacja 1 nie pasuje do podanego kodu?
Dokumentacja 1 podaje, że funkcja nic nie zwraca. Kod ma jednak typ zwracany `int` i zawiera instrukcję `return liczba;`.
Dlaczego dokumentacja 1 jest błędna mimo poprawnej nazwy i opisu?
Ponieważ podaje, że funkcja nic nie zwraca. To nieprawda, bo funkcja ma typ int i zwraca wynik instrukcją return.
Co oznacza argument `int liczba` w nagłówku funkcji?
Oznacza, że funkcja przyjmuje jeden parametr o nazwie `liczba`, którego typem jest liczba całkowita `int`.
Jak działa instrukcja if w tej funkcji?
Sprawdza, czy liczba jest mniejsza od zera. Jeśli tak, mnoży ją przez -1, dzięki czemu liczba ujemna staje się dodatnia.
Jak działa instrukcja `if (liczba < 0)` w tej funkcji?
Sprawdza, czy przekazana liczba jest ujemna. Jeśli tak, wykonywana jest instrukcja zmieniająca jej znak.
Co oznacza zapis liczba *= -1?
To skrócony zapis mnożenia z przypisaniem. Oznacza: liczba = liczba * -1.
Co oznacza zapis `liczba *= -1`?
Jest to skrócony zapis operacji `liczba = liczba * -1`. Dla liczby ujemnej powoduje zmianę jej znaku na dodatni.
Jaką wartość zwróci funkcja dla argumentów ujemnych, dodatnich i zera?
Dla liczby ujemnej zwróci jej odpowiednik dodatni, dla dodatniej zwróci tę samą wartość, a dla zera zwróci 0. To właśnie definicja wartości bezwzględnej.
Dlaczego dokumentacje 3 i 4 są błędne?
Opisują obliczanie potęgi liczby, a przedstawiony kod oblicza wartość bezwzględną. Dokumentacja 3 dodatkowo błędnie podaje dwa argumenty, choć funkcja ma tylko jeden.
Jakie elementy dokumentacji funkcji trzeba porównać z kodem źródłowym?
Należy sprawdzić nazwę funkcji, jej przeznaczenie, typ zwracany oraz argumenty. Wszystkie te elementy muszą być zgodne z deklaracją i działaniem kodu.
Jaka dokumentacja najlepiej pasuje do funkcji `Abs`?
Dokumentacja 2, ponieważ poprawnie podaje nazwę, opis działania, jeden argument całkowity oraz zwracaną wartość bezwzględną.
Czym są operatory arytmetyczne w programowaniu?
To operatory służące do wykonywania działań matematycznych na liczbach, np. dodawania, odejmowania, mnożenia, dzielenia czy obliczania reszty z dzielenia.
Do czego służą operatory arytmetyczne w programowaniu?
Służą do wykonywania działań matematycznych, takich jak dodawanie, odejmowanie, mnożenie, dzielenie oraz obliczanie reszty z dzielenia.
Jakie działania wykonują operatory *, /, ++, -- i %?
Operator * mnoży, / dzieli, ++ zwiększa wartość o 1, -- zmniejsza wartość o 1, a % zwraca resztę z dzielenia.
Czym różni się operator `/` od operatora `%`?
Operator `/` wykonuje dzielenie, natomiast `%` zwraca resztę z dzielenia. Na przykład `10 / 3` daje iloraz, a `10 % 3` daje resztę równą `1`.
Dlaczego operator ++ i -- zalicza się do operatorów arytmetycznych?
Ponieważ zmieniają wartość liczbową zmiennej o 1, czyli wykonują prostą operację matematyczną.
Co oznaczają operatory `++` i `--`?
`++` zwiększa wartość zmiennej o 1, a `--` zmniejsza ją o 1. Są to operatory inkrementacji i dekrementacji.
Czym różnią się operatory arytmetyczne od operatorów przypisania?
Operatory arytmetyczne obliczają wynik działania, a operatory przypisania zapisują wartość do zmiennej, np. = lub +=.
Dlaczego operatory `*`, `/`, `++`, `--`, `%` zalicza się do arytmetycznych?
Ponieważ dotyczą operacji na wartościach liczbowych: mnożenia, dzielenia, zmiany wartości o jeden oraz wyznaczania reszty z dzielenia.
Czym różnią się operatory arytmetyczne od operatorów logicznych i porównawczych?
Operatory arytmetyczne działają na liczbach, logiczne na wartościach prawda/fałsz, a porównawcze sprawdzają relacje między wartościami, np. >, <, ==.
Czym operatory arytmetyczne różnią się od operatorów logicznych?
Operatory arytmetyczne wykonują działania na liczbach, a logiczne służą do budowania warunków prawda/fałsz, np. `&&`, `||`, `!`.
Jak działa operator % i kiedy jest przydatny?
Operator % zwraca resztę z dzielenia całkowitego. Jest przydatny np. do sprawdzania, czy liczba jest parzysta lub nieparzysta.
Czym operatory arytmetyczne różnią się od operatorów porównawczych?
Operatory arytmetyczne obliczają wartość liczbową, a porównawcze sprawdzają relację między wartościami, np. `==`, `!=`, `>`, `<`.
Dlaczego opis testowania formularza osobowego wskazuje na testy funkcjonalne?
Ponieważ sprawdzane jest działanie konkretnej funkcji aplikacji: walidacji i obsługi formularza. Test dotyczy tego, czy system reaguje poprawnie na dane użytkownika.
Dlaczego opis testu formularza osobowego wskazuje na testy funkcjonalne?
Bo sprawdzane jest działanie konkretnej funkcji aplikacji z punktu widzenia użytkownika, czyli poprawność reakcji formularza na wprowadzane dane i błędy.
Czym testy funkcjonalne różnią się od testów wydajnościowych?
Testy funkcjonalne sprawdzają, czy aplikacja robi to, co powinna. Testy wydajnościowe sprawdzają, jak szybko i stabilnie działa pod obciążeniem.
Czym różnią się testy funkcjonalne od testów jednostkowych?
Testy funkcjonalne badają działanie całej funkcji systemu, a testy jednostkowe dotyczą pojedynczych fragmentów kodu, np. jednej metody lub funkcji.
Czym testy funkcjonalne różnią się od testów jednostkowych?
Testy jednostkowe sprawdzają pojedyncze fragmenty kodu, np. jedną metodę. Testy funkcjonalne sprawdzają działanie funkcji systemu z punktu widzenia użytkownika lub wymagań.
Czym różnią się testy funkcjonalne od testów wydajnościowych?
Testy funkcjonalne sprawdzają poprawność działania, a wydajnościowe mierzą szybkość, obciążenie i zachowanie systemu przy dużej liczbie operacji lub użytkowników.
Jakie elementy formularza najczęściej podlegają testom funkcjonalnym?
Najczęściej testuje się pola wymagane, format danych, komunikaty błędów, zaznaczenie zgód oraz poprawne zapisanie lub odrzucenie danych.
Dlaczego sprawdzanie poprawności e-maila i numeru telefonu to element testów funkcjonalnych?
Ponieważ są to reguły działania formularza. Test polega na sprawdzeniu, czy system prawidłowo akceptuje lub odrzuca dane zgodnie z wymaganiami.
Dlaczego po teście należy usunąć dane wprowadzone do bazy?
Dane testowe mogą zanieczyszczać bazę i fałszować wyniki działania systemu. Usunięcie ich przywraca środowisko do stanu nadającego się do kolejnych testów.
Po co po teście usuwa się z bazy dane wpisane podczas testowania?
Aby nie pozostawiać testowych rekordów w bazie i nie mieszać ich z prawdziwymi danymi użytkowników. To element porządkowania środowiska po teście.
Jakie typowe elementy formularza są sprawdzane w testach funkcjonalnych?
Najczęściej bada się pola wymagane, walidację formatu danych, komunikaty o błędach, działanie przycisków oraz poprawność zapisu danych.
Co oznacza walidacja danych w formularzu?
Walidacja to sprawdzanie, czy dane wpisane przez użytkownika spełniają określone reguły, np. czy e-mail ma poprawny format albo numer telefonu zawiera tylko cyfry.
Czy test funkcjonalny musi wymagać znajomości kodu źródłowego aplikacji?
Nie. Testy funkcjonalne często wykonuje się metodą czarnej skrzynki, czyli na podstawie wymagań i obserwowanego działania aplikacji, bez analizy kodu.
Jak działa funkcja fun1 krok po kroku dla podanej tablicy?
Funkcja ustawia zmienną wynik na 0, a następnie w pętli for dodaje kolejno wszystkie elementy tablicy: 3, 4, 2, 4, 10 i 0. Suma tych liczb wynosi 23.
Jak obliczyć wynik działania funkcji sumującej elementy tablicy?
Należy sprawdzić, po jakich indeksach przechodzi pętla, a następnie dodać wartości tablicy z tych indeksów. W tym przypadku dodawane są elementy od `tab[0]` do `tab[5]`, czyli `3 + 4 + 2 + 4 + 10 + 0 = 23`.
Jaką rolę pełni zmienna wynik w tej funkcji?
Jest akumulatorem sumy. Przechowuje bieżący rezultat, do którego w każdej iteracji dodawany jest kolejny element tablicy.
Dlaczego pętla `for(int i = 0; i < 6; i++)` wykonuje się sześć razy?
Ponieważ zmienna `i` przyjmuje wartości `0, 1, 2, 3, 4, 5`. Gdy `i` osiągnie wartość `6`, warunek `i < 6` jest fałszywy.
Dlaczego pętla wykonuje się dokładnie 6 razy?
Ponieważ licznik i zaczyna od 0 i działa, dopóki i < 6. Oznacza to przejście przez indeksy 0, 1, 2, 3, 4 i 5, czyli wszystkie elementy tablicy sześciu liczb.
Co oznacza zapis `wynik += tab[i]`?
To skrócony zapis działania `wynik = wynik + tab[i]`. Do aktualnej wartości zmiennej `wynik` dodawany jest kolejny element tablicy.
Co oznacza zapis tab[i] w funkcji?
To odwołanie do elementu tablicy o indeksie i. Na przykład tab[0] to pierwszy element, a tab[5] to ostatni element w tej tablicy.
Jaki jest pierwszy i ostatni poprawny indeks tablicy `int tablica[6]`?
Pierwszy poprawny indeks to `0`, a ostatni to `5`. Tablica sześciu elementów nie ma poprawnego indeksu `6`.
Co by się stało, gdyby w tablicy były liczby ujemne?
Funkcja nadal zsumowałaby wszystkie elementy. Liczby ujemne zmniejszałyby końcowy wynik, bo są dodawane zgodnie z zasadami arytmetyki.
Co zwróci funkcja, jeśli zmienna `wynik` na początku ma wartość `0`?
Zwróci sumę wszystkich dodanych elementów tablicy. Dla tablicy `{3, 4, 2, 4, 10, 0}` będzie to `23`.
Dlaczego ostatni element równy 0 nie zmienia wyniku sumy?
Dodanie zera nie wpływa na wartość sumy. Tożsamość dodawania mówi, że każda liczba plus 0 daje tę samą liczbę.
Dlaczego element `0` na końcu tablicy nie zmienia wyniku sumowania?
Dodanie zera nie zmienia wartości sumy. Ostatnia operacja to `23 + 0`, więc wynik nadal wynosi `23`.
Co mogłoby się stać, gdyby warunek pętli zapisano jako `i <= 6`?
Pętla próbowałaby odczytać element `tab[6]`, który znajduje się poza zakresem tablicy. W C++ może to prowadzić do nieokreślonego działania programu.
Czym jest funkcja haszująca?
To algorytm, który przekształca dane wejściowe o dowolnej długości w skrót o stałej długości. Działa jednokierunkowo, czyli z hasza nie powinno dać się łatwo odtworzyć danych wejściowych.
Czym jest jednokierunkowość funkcji haszującej?
Jednokierunkowość oznacza, że łatwo obliczyć skrót z danych, ale praktycznie nie powinno dać się odtworzyć danych na podstawie samego skrótu.
Dlaczego MD5 pasuje do pytania, a DES, RSA i AES nie?
MD5 jest algorytmem funkcji skrótu. DES i AES to algorytmy szyfrowania symetrycznego, a RSA to algorytm szyfrowania asymetrycznego.
Dlaczego MD5 pasuje do funkcji skrótu, a DES, AES i RSA nie?
MD5 jest algorytmem haszującym. DES i AES służą do szyfrowania symetrycznego, a RSA do kryptografii asymetrycznej.
Co oznacza, że funkcja skrótu jest jednokierunkowa?
Oznacza to, że łatwo obliczyć skrót z danych, ale bardzo trudno odwrócić ten proces i odzyskać oryginalną treść na podstawie samego skrótu.
Jaka jest różnica między haszowaniem a szyfrowaniem?
Szyfrowanie jest odwracalne po użyciu klucza. Haszowanie jest jednokierunkowe i służy do uzyskania skrótu danych, a nie do ich późniejszego odszyfrowania.
Do czego w praktyce wykorzystuje się funkcje haszujące?
Służą m.in. do sprawdzania integralności danych, przechowywania haseł w postaci skrótów oraz tworzenia podpisów cyfrowych i sum kontrolnych.
Do czego można wykorzystać funkcje haszujące w aplikacjach?
Stosuje się je m.in. do sprawdzania integralności plików, porównywania danych, przechowywania skrótów haseł oraz w podpisach cyfrowych.
Dlaczego MD5 nie jest dziś uznawany za bezpieczny kryptograficznie?
Ponieważ znaleziono dla niego kolizje, czyli różne dane mogą dać ten sam skrót. Z tego powodu nie powinien być używany tam, gdzie wymagana jest wysoka odporność kryptograficzna.
Czy MD5 jest obecnie bezpieczny do przechowywania haseł?
Nie. MD5 jest uznawany za przestarzały i podatny na kolizje, dlatego do haseł stosuje się bezpieczniejsze metody, np. bcrypt, Argon2 lub PBKDF2.
Czym różni się haszowanie od szyfrowania?
Haszowanie jest jednokierunkowe i służy do tworzenia skrótu danych. Szyfrowanie jest odwracalne po użyciu odpowiedniego klucza i służy do ochrony poufności informacji.
Co to jest kolizja funkcji haszującej?
Kolizja występuje wtedy, gdy dwa różne zestawy danych wejściowych dają taki sam skrót. W bezpiecznych funkcjach haszujących znalezienie kolizji powinno być bardzo trudne.
Jakie algorytmy są przykładami funkcji haszujących oprócz MD5?
Przykładami są SHA-1, SHA-256 i SHA-512. W nowoczesnych zastosowaniach bezpieczniejsze są algorytmy z rodziny SHA-2 lub SHA-3.
Jak zamienić liczbę heksadecymalną na binarną krok po kroku?
Każdą cyfrę szesnastkową zamienia się osobno na 4-bitowy zapis binarny. Następnie łączy się te grupy w jedną liczbę binarną, np. A4 = A oraz 4, czyli 1010 0100.
Dlaczego jedna cyfra heksadecymalna odpowiada czterem bitom?
Ponieważ 4 bity mogą zapisać 16 różnych wartości: od 0000 do 1111. To dokładnie odpowiada jednej cyfrze systemu szesnastkowego od 0 do F.
Dlaczego jedna cyfra szesnastkowa odpowiada dokładnie czterem bitom?
System szesnastkowy ma 16 symboli, a 2^4 = 16. Oznacza to, że każdą cyfrę hex można zapisać dokładnie za pomocą 4 bitów.
Jak zamienić cyfrę A z systemu heksadecymalnego na binarny?
Litera A oznacza wartość dziesiętną 10. W zapisie binarnym 10 to 1010.
Jakie wartości mają litery A, B, C, D, E, F w systemie szesnastkowym?
Litery w systemie hex oznaczają kolejne wartości dziesiętne: A=10, B=11, C=12, D=13, E=14, F=15. Dzięki temu system szesnastkowy używa 16 znaków: 0-9 oraz A-F.
Jak zamienić cyfrę 4 z systemu heksadecymalnego na binarny?
Cyfra 4 w systemie binarnym to 100, ale jako jedna cyfra heksadecymalna musi być zapisana na 4 bitach, czyli 0100.
Jak sprawdzić poprawność zamiany A4 z systemu szesnastkowego na binarny?
Można zamienić każdą cyfrę osobno: A = 1010, 4 = 0100, więc razem 10100100. Dodatkowo można sprawdzić przez system dziesiętny: A4 hex to 164 dec, a 164 dec to 10100100 bin.
Dlaczego wynik dla A4 to 10100100, a nie 1010100?
Bo cyfrę 4 trzeba zapisać jako pełną grupę czterobitową 0100. Połączenie A = 1010 i 4 = 0100 daje 10100100.
Jak odróżnić poprawny zapis binarny od zapisu z pominiętym zerem wiodącym?
Przy zamianie z hex na bin każda cyfra musi dawać pełne 4 bity, także z zerami na początku grupy. Dlatego 4 zapisujemy jako 0100, a nie 100.
Jakie cyfry i litery występują w systemie heksadecymalnym?
System heksadecymalny używa cyfr od 0 do 9 oraz liter A, B, C, D, E, F, które oznaczają wartości od 10 do 15.
Do czego w informatyce używa się zapisu heksadecymalnego?
Zapis heksadecymalny stosuje się m.in. do przedstawiania adresów pamięci, kolorów RGB, kodów maszynowych i wartości bajtów w krótszej, czytelniejszej formie.