<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.if.pw.edu.pl/~majanik/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php?feed=atom&amp;namespace=0&amp;title=Special%3ANewPages</id>
		<title>MJanik - New pages [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php?feed=atom&amp;namespace=0&amp;title=Special%3ANewPages"/>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/Special:NewPages"/>
		<updated>2026-04-13T01:57:28Z</updated>
		<subtitle>From MJanik</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php/Colab</id>
		<title>Colab</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/Colab"/>
				<updated>2026-02-20T13:30:17Z</updated>
		
		<summary type="html">&lt;p&gt;Majanik: Created page with &amp;quot;Arkusze Google Colab:  * [https://colab.research.google.com/drive/18pNwifYI1-B9G8kGn37JdNxLS7EwWwgk?usp=sharing Wstęp do C++], podstawy  * [https://colab.research.google.com/dri...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Arkusze Google Colab:&lt;br /&gt;
&lt;br /&gt;
* [https://colab.research.google.com/drive/18pNwifYI1-B9G8kGn37JdNxLS7EwWwgk?usp=sharing Wstęp do C++], podstawy&lt;br /&gt;
&lt;br /&gt;
* [https://colab.research.google.com/drive/1dI8lGowomLmDNYUNHCboXN-YHk_LVOzr?usp=sharing Instrukcje warunkowe i pętle]&lt;br /&gt;
&lt;br /&gt;
* [https://colab.research.google.com/drive/1-su6-AfTU3miRVxEsRd1YjMoDCPlu5vG?usp=sharing Tablice, referencje, wskaźniki]&lt;br /&gt;
&lt;br /&gt;
* [https://colab.research.google.com/drive/1kaEra4we_OVxXVGpQvVMrxvgyxnAm_zh?usp=sharing Funkcje]&lt;br /&gt;
&lt;br /&gt;
* [https://colab.research.google.com/drive/1BoXAOblLs6AtN3mAOo9xsfSVY76e69nW?usp=sharing Klasy]&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_14</id>
		<title>Języki Programowania 14</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_14"/>
				<updated>2026-01-22T11:54:27Z</updated>
		
		<summary type="html">&lt;p&gt;Majanik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [http://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie14_Szablonowe.pdf Laboratorium 14] - Klasa szablonowa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Szablony klas''' umożliwiają definiowanie ogólnej klasy czyli mogącej przetwarzać dane różnego&lt;br /&gt;
typu (tzw. parametryzacja typów).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Szablony klas a dziedziczenie - szablony klas to inne podejście do idei tzw. powtórnego użycia kodu (ang. code reuse)&lt;br /&gt;
Zamiast dziedziczenia (powtórne użycie '''kodu obiektowego'''), wzorce powtórnie używają '''kodu źródłowego'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Więcej info nt. klas szablnowych [https://www.if.pw.edu.pl/~majanik/data/JP/2013/Klasy_Szablonowe.pdf tutaj] oraz na ostatnim wykładzie!.&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_13</id>
		<title>Języki Programowania 13</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_13"/>
				<updated>2026-01-13T09:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;Majanik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie13_Generatory.pdf Laboratorium 12]  - pt. 10-12&lt;br /&gt;
&lt;br /&gt;
[http://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie13_Calkowanie.pdf Laboratorium 12]  - czw. 14-16&lt;br /&gt;
&lt;br /&gt;
== GIT ==&lt;br /&gt;
&lt;br /&gt;
Git to system kontroli wersji, który służy do śledzenia zmian w plikach (najczęściej w kodzie źródłowym) oraz do pracy zespołowej nad projektami.&lt;br /&gt;
Dzięki Gitowi można:&lt;br /&gt;
*	zapisywać kolejne wersje projektu (historię zmian),&lt;br /&gt;
*	cofać się do wcześniejszych wersji plików,&lt;br /&gt;
*	pracować nad tym samym projektem równocześnie z innymi osobami,&lt;br /&gt;
*	bezpiecznie przechowywać kod w repozytorium (lokalnym lub zdalnym, np. na GitHubie).&lt;br /&gt;
Git działa lokalnie na komputerze użytkownika, a serwisy takie jak GitHub, GitLab czy Bitbucket umożliwiają przechowywanie repozytoriów w sieci i łatwą współpracę zespołową.&lt;br /&gt;
&lt;br /&gt;
'''Instrukcja: &lt;br /&gt;
&lt;br /&gt;
Zadanie polega na:&lt;br /&gt;
*	założeniu konta w serwisie hostującym repozytoria Git (np. GitHub),&lt;br /&gt;
*	utworzeniu własnego repozytorium.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Krok 1 – utworzenie konta w serwisie&lt;br /&gt;
*	Należy założyć konto w wybranym serwisie hostującym repozytoria (jeśli nie zostało jeszcze założone),&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Krok 2 – wygenerowanie klucza SSH&lt;br /&gt;
&lt;br /&gt;
W terminalu należy przejść do folderu ~/.ssh (stworzyć jeśli nie istnieje) i wygenerować klucz SSH, np. poleceniem:&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;twoj_email@xxx.com&amp;quot;&lt;br /&gt;
Polecenie to generuje dwa pliki:&lt;br /&gt;
*	klucz publiczny,&lt;br /&gt;
*	klucz prywatny.&lt;br /&gt;
Klucz publiczny&lt;br /&gt;
*	zawartość klucza publicznego należy skopiować do serwisu hostującego repozytoria,&lt;br /&gt;
*	miejsce wklejenia zależy od serwisu, np. na GitHubie:&lt;br /&gt;
 Profil użytkownika → Settings → SSH and GPG keys .&lt;br /&gt;
&lt;br /&gt;
Klucz prywatny&lt;br /&gt;
*	klucz prywatny zostaje na komputerze użytkownika,&lt;br /&gt;
*	NIE WOLNO go nikomu udostępniać – umożliwia on podszywanie się pod właściciela konta.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Krok 3 – dodanie klucza do agenta SSH&lt;br /&gt;
&lt;br /&gt;
Należy wykonać w terminalu polecenia:&lt;br /&gt;
ustawić odpowiednie prawa dostępu do pliku z kluczem prywatnym:&lt;br /&gt;
 chmod 600 nazwa_pliku_klucza_prywatnego&lt;br /&gt;
oraz&lt;br /&gt;
 ssh-add&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Krok 4 – utworzenie repozytorium&lt;br /&gt;
W serwisie github należy:&lt;br /&gt;
*	utworzyć nowe repozytorium (dla dzisiejszych zajęć: prywatne, dla projektów najlepiej publiczne)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Krok 5 – sklonowanie repozytorium na komputer&lt;br /&gt;
Repozytorium należy skopiować na lokalny komputer poleceniem:&lt;br /&gt;
 git clone &amp;quot;adres_naszego_repozytorium&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Po wykonaniu powyższych kroków repozytorium jest gotowe do pracy. Do wypychania zmian możemy użyć komendy git-gui. To graficzny interfejs pozwalający nam zatwierdzać zmiany i wysyłać do zdalnego repozytorium bez zabawy komendami.&lt;br /&gt;
&lt;br /&gt;
Alternatywnie komendy do zarządzania wysłaniem kodu to:&lt;br /&gt;
 git status&lt;br /&gt;
 git add nazwa_pliku&lt;br /&gt;
 git commit -m &amp;quot;commit comment&amp;quot;&lt;br /&gt;
 git push&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_12</id>
		<title>Języki Programowania 12</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_12"/>
				<updated>2025-12-15T13:27:59Z</updated>
		
		<summary type="html">&lt;p&gt;Majanik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie12_FiguraOkrag.pdf Laboratorium 12]  - pt. 10-12&lt;br /&gt;
&lt;br /&gt;
[http://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie12_BrylaProstopadloscian.pdf Laboratorium 12]  - czw. 14-16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Wirtualność oraz polimorfizm''' (tu rozumiany jako możliwość wyboru postaci funkcji w trakcie działania&lt;br /&gt;
programu) stanowią zupełnie inne podejście do programowania niż programowanie proceduralne, które do tej&lt;br /&gt;
pory wykorzystywaliśmy. Są najważniejszą cechą programowania orientowanego obiektowo (OOP – '''Object Oriented Programming''') w języku C++  (inaczej mówiąc: '''orientującego się według typu obiektu''') i mają&lt;br /&gt;
ogromne możliwości, które objawiają się w pełni przy dużych projektach. To z tego powodu język ten jest&lt;br /&gt;
wykorzystywany w pisaniu wielkich aplikacji, od systemów operacyjnych po gry komputerowe. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Zadanie przygotowywujące do zajęć: Wirtualność i klasy abstrakcyjne – urządzenia elektryczne'''&lt;br /&gt;
&lt;br /&gt;
Proszę stworzyć klasę Urzadzenie posiadającą pola:&lt;br /&gt;
&lt;br /&gt;
 double napiecie, prad;&lt;br /&gt;
&lt;br /&gt;
oraz jej dwie klasy pochodne:&lt;br /&gt;
&lt;br /&gt;
 Grzejnik (double opor),&lt;br /&gt;
&lt;br /&gt;
 Silnik (double sprawnosc).&lt;br /&gt;
&lt;br /&gt;
Klasa Urzadzenie powinna posiadać wirtualną metodę:&lt;br /&gt;
&lt;br /&gt;
 virtual double Moc() { return 0; }&lt;br /&gt;
&lt;br /&gt;
(domyślnie niech zwraca 0).&lt;br /&gt;
&lt;br /&gt;
Klasy pochodne powinny zwracać odpowiednią moc w zależności od typu urządzenia:&lt;br /&gt;
&lt;br /&gt;
* dla grzejnika: P = U*I&lt;br /&gt;
* dla silnika: P = U*I*sprawnosc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. W programie głównym należy:'''&lt;br /&gt;
&lt;br /&gt;
a. stworzyć obiekt klasy Urzadzenie&lt;br /&gt;
(napiecie = 230, prad = 2).&lt;br /&gt;
Wywołać metodę Moc() i wypisać wynik na ekranie.&lt;br /&gt;
&lt;br /&gt;
b. stworzyć obiekt klasy Grzejnik&lt;br /&gt;
(napiecie = 230, prad = 4, opór = 50).&lt;br /&gt;
Wywołać metodę Moc() i wypisać wynik.&lt;br /&gt;
&lt;br /&gt;
c. stworzyć obiekt klasy Silnik&lt;br /&gt;
(napiecie = 230, prad = 3, sprawność = 0.8).&lt;br /&gt;
Wywołać metodę Moc() i wypisać wynik.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Następnie zamienić metodę Moc() w klasie Urzadzenie na metodę czysto wirtualną:'''&lt;br /&gt;
&lt;br /&gt;
 virtual double Moc() = 0;   // deklaracja metody czysto wirtualnej&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
i poprawić program tak, aby ponownie się kompilował.&lt;br /&gt;
&lt;br /&gt;
Pytanie:&lt;br /&gt;
Czego nie możemy już zrobić w programie po tej zmianie?&lt;br /&gt;
(Wskazówka: nie można tworzyć obiektów klasy, która zawiera metodę czysto wirtualną.)&lt;br /&gt;
&lt;br /&gt;
'''4. Klasa, która ma co najmniej jedną funkcję czysto wirtualną, nazywana jest klasą abstrakcyjną.'''&lt;br /&gt;
&lt;br /&gt;
Po co tworzyć klasy abstrakcyjne?&lt;br /&gt;
&lt;br /&gt;
Czasem mamy pojęcie ogólne (np. urządzenie elektryczne), które łączy cechy różnych obiektów,&lt;br /&gt;
ale samo w sobie nie reprezentuje konkretnego bytu.&lt;br /&gt;
Mamy grzejniki, silniki, żarówki – ale czym dokładnie jest „urządzenie” i jaką ma moc?&lt;br /&gt;
&lt;br /&gt;
Klasa abstrakcyjna jest klasą niedokończoną – jej pełna funkcjonalność realizowana jest dopiero w klasach pochodnych.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. '''Wirtualny destruktor'''&lt;br /&gt;
&lt;br /&gt;
Należy zwrócić uwagę na następującą zasadę:&lt;br /&gt;
&lt;br /&gt;
jeśli klasa deklaruje jedną ze swoich metod jako virtual, wówczas jej destruktor również powinien być zadeklarowany jako virtual.&lt;br /&gt;
&lt;br /&gt;
 virtual ~Urzadzenie() {}&lt;br /&gt;
&lt;br /&gt;
Uzasadnienie:&lt;br /&gt;
Skoro obiekty klas pochodnych mogą być obsługiwane przez wskaźniki do klasy bazowej, to przy ich niszczeniu musimy mieć pewność, że zostaną poprawnie wywołane destruktory klas pochodnych – w przeciwnym razie może dojść do wycieków pamięci.&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php/Wyrownawcze</id>
		<title>Wyrownawcze</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/Wyrownawcze"/>
				<updated>2025-12-09T13:48:34Z</updated>
		
		<summary type="html">&lt;p&gt;Majanik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Teoria:&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Materialy_OMNIS2.pdf Wstęp], podstawowe informacje nt. klas w C++&lt;br /&gt;
&lt;br /&gt;
Zadania:&lt;br /&gt;
&lt;br /&gt;
* [https://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Wyrownawcze_Zadanie_3_1_ProstaKlasa.pdf Produkt], prosta klasa (pola, konstruktory, settery i gettery)&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Wyrownawcze_Zadanie_1.pdf KlasaTestowa], różne mechanizmy tworzenia klas (pola zwykłe, wskaźniki, tablice, pole statyczne, zaprzyjaźnienie)&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Zadanie_2_1.pdf Vector2D], operatory (przeciążanie)&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Zadanie_2_2.pdf Pojazd, Samochód, Motor], proste dziedziczenie&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Wyrownawcze_Zadanie_3_2_AlokacjaPamieci.pdf TablicaLosowa], dynamiczna alokacja pamięci: tablica 1D&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Wyrownawcze_Zadanie_3_3_Tablica2D.pdf Plansza], dynamiczna alokacja pamięci: tablica 2D&lt;br /&gt;
* [http://www.if.pw.edu.pl/~majanik/data/JP/2025/wyrownawcze/Wyrownawcze_Zadanie_3_4_Polimorfizm.pdf Animal, Cat, Dog], polimorfizm&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	<entry>
		<id>http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_9</id>
		<title>Języki Programowania 9</title>
		<link rel="alternate" type="text/html" href="http://www.if.pw.edu.pl/~majanik/wiki/index.php/J%C4%99zyki_Programowania_9"/>
				<updated>2025-11-26T10:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;Majanik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie9_WektorN.pdf Zadanie 9 - WektorN]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.if.pw.edu.pl/~majanik/data/JP/2025/Zadanie9_Macierz.pdf Zadanie 9 - Macierz]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Przeciążanie operatorów w C++ to mechanizm, który pozwala zdefiniować działanie standardowych operatorów (np. +, ==, [], &amp;lt;&amp;lt;) dla własnych typów danych – najczęściej klas i struktur.&lt;br /&gt;
&lt;br /&gt;
Po co to robimy?&lt;br /&gt;
Żeby obiekty naszych klas zachowywały się naturalnie i czytelnie, tak jak typy wbudowane.&lt;br /&gt;
Np. jeśli mamy klasę Wektor2D, to dzięki przeciążeniu operatora + możemy pisać:&lt;br /&gt;
&lt;br /&gt;
 Wektor2D a, b, c;&lt;br /&gt;
 c = a + b;&lt;br /&gt;
&lt;br /&gt;
Zamiast wywoływać specjalne funkcje typu &lt;br /&gt;
 c = add(a, b);.&lt;br /&gt;
&lt;br /&gt;
Ułatwia to korzystanie z klasy i poprawia czytelność kodu.&lt;br /&gt;
&lt;br /&gt;
Więcej przykładów znajdziecie na wykładzie, w szczególności w pliku &amp;quot;Wykład 5&amp;quot; na MS Teams!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Przeciążanie operatorów - zadanie przygotowujące'''&lt;br /&gt;
&lt;br /&gt;
a. Dla klasy cmplx (double re, double im) proszę przeładować operatory +, -, *, = (zgodnie ze zdrowym rozsądkiem) oraz &amp;lt;&amp;lt; (ten ostatni wypisuje liczbę jako &amp;quot;re+i im&amp;quot; czyli np. dla &amp;quot;cmplx a(2,3)&amp;quot;  komenda: &amp;quot;cout&amp;lt;&amp;lt;a&amp;quot;; wypisze na ekranie: &amp;quot;2+i3&amp;quot; )).&lt;br /&gt;
&lt;br /&gt;
b. Stworzyć nową klasę cmplx, która zamiast dwóch oddzielnych pól re oraz im będzie posiadała jedną tablicę na dwie liczby:&lt;br /&gt;
double* number[2];&lt;br /&gt;
&lt;br /&gt;
Ponownie, przeładować operatory +, -, *, = oraz &amp;lt;&amp;lt; . &lt;br /&gt;
&lt;br /&gt;
Przeciążyć też operator [] (nawiasy kwadratowe!) by zwracał [i] - i-ty element tablicy.&lt;br /&gt;
Czyli przy zrobieniu:&lt;br /&gt;
cmplx a;&lt;br /&gt;
cout&amp;lt;&amp;lt;a[0]&amp;lt;&amp;lt;&amp;quot;, &amp;quot;&amp;lt;&amp;lt;a[1]&amp;lt;&amp;lt;endl;&lt;br /&gt;
był w stanie wypisać wartość re oraz im z tablicy.&lt;br /&gt;
&lt;br /&gt;
Na zajęciach można się spodziewać:&lt;br /&gt;
&lt;br /&gt;
- Przeładowywania operatorów, w szczególności: +, -, &amp;lt;&amp;lt;, = i [] !&lt;/div&gt;</summary>
		<author><name>Majanik</name></author>	</entry>

	</feed>