Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:jimp2:2016:start [2016/02/17 11:28] 127.0.0.1 edycja zewnętrzna |
pl:dydaktyka:jimp2:2016:start [2019/06/27 15:50] (aktualna) |
====== Języki i Metody Programowania 2 - Semestr letni 2014/2015 ====== | ====== Języki i Metody Programowania 2 - Semestr letni 2015/2016 ====== |
* **Kierunek**: Informatyka | * **Kierunek**: Informatyka |
* **Rok**: I | * **Rok**: I |
* **Prowadzący**: mgr inż. Krzysztof Kutt, http://home.agh.edu.pl/~kkutt/ | * **Prowadzący**: |
* Terminy zajęć (w pierwszej połowie semestru): | * [[http://home.agh.edu.pl/~kkutt/|mgr inż. Krzysztof Kutt]] (I połowa semestru) |
* poniedziałki 9:30-11:00, UCI 406 | * [[http://home.agh.edu.pl/~mslaz/|mgr inż. Mateusz Ślażyński]] (II połowa semestru) |
* poniedziałki 11:00-12:30, UCI 406 | |
* poniedziałki 12:30-14:00, UCI 406 | |
* poniedziałki 14:00-15:30, UCI 406 | |
| |
* Aktualne informacje o punktacji znajdują się na stronie: http://home.agh.edu.pl/~kkutt/wiki/teaching:start | |
* login i hasło można uzyskać od prowadzącego zajęcia | |
===== Organizacja zajęć i zasady zaliczenia ===== | ===== Organizacja zajęć i zasady zaliczenia ===== |
| |
* Ogólne zasady, które Państwa **obowiązują**: [[http://geist.agh.edu.pl/pub:teaching:gris|GRIS]] - proszę przeczytać, zrozumieć, ew. wątpliwości zgłosić na 1.-2. zajęciach | * Ogólne zasady, które Państwa **obowiązują**: [[http://geist.agh.edu.pl/pub:teaching:gris|GRIS]] - proszę przeczytać, zrozumieć, ew. wątpliwości zgłosić na 1.-2. zajęciach |
* Proszę zwrócić uwagę na sposób informowania Państwa o aktualnościach, tryb konsultacji, zasady dotyczące kolokwiów i obecności. | * Proszę zwrócić uwagę na sposób informowania Państwa o aktualnościach, tryb konsultacji, zasady dotyczące kolokwiów i obecności. |
| |
| * Zajęcia w **pierwszej** części semestru prowadzi mgr inż. Krzysztof Kutt. \\ Zajęcia w **drugiej** części semestru poprowadzi mgr inż. Mateusz Ślażyński. |
| * **Ocena końcowa** jest średnią ocen z pierwszej i drugiej części semestru. Każdą z nich trzeba niezależnie od siebie zaliczyć. |
| |
| ===== WYNIKI ===== |
| |
| Poniższy {{:pl:dydaktyka:jimp2:2016:jimp2-ok.pdf|arkusz}} zawiera punktację z drugiej części laboratorium oraz podsumowanie: liczbę zdobytych punktów (procentowo) na obu częściach laboratorium oraz ich średnią wartość. Na tej podstawie wpisane są tam oceny końcowe z laboratorium. |
| ===== I część: Podstawy programowania obiektowego w C++ ===== |
| |
| ==== Harmonogram ==== |
| ^L.p.^ Termin ^ Laboratorium ^ |
| ^1.|25.02.2016|[[.:labs:wprowadzenie|Wprowadzenie do programowania w C++]]| |
| ^2.|03.03.2016|[[.:labs:pamiec-i-pliki|Dynamiczne zarządzanie pamięcią i operacje na plikach]]| |
| ^3.|10.03.2016|[[.:labs:klasy1|Klasy i obiekty I]]| |
| ^4.|17.03.2016|[[.:labs:klasy2|Klasy i obiekty II]]| |
| ^5.|31.03.2016|[[.:labs:operatory|Przeciążanie operatorów]]| |
| ^6.|07.04.2016|[[.:labs:dziedziczenie|Dziedziczenie i polimorfizm]]| |
| ^7.|14.04.2016|Kolokwium| |
| |
| Laboratoria uzupełniające - **obowiązują na kolokwium!** |
| - [[.:labs:wskazniki|Wskaźniki i referencje]] - powtórka z C przed laboratorium [[.:labs:pamiec-i-pliki|Dynamiczne zarządzanie pamięcią i operacje na plikach]] |
| - [[http://home.agh.edu.pl/~gjn/dydaktyka/UGLX/node10.html|Makefile]] - opis budowania programów w środowisku UNIX, potrzebne do laboratorium [[.:labs:klasy1|Klasy i obiekty I]] |
| |
| ==== Zasady zaliczenia ==== |
| |
* Na zaliczenie pierwszej części semestru składają się: | * Na zaliczenie pierwszej części semestru składają się: |
* Ćwiczenia na laboratoriach: 6 lab * 5 pkt = 30 pkt | * Ćwiczenia na laboratoriach: 6 lab * 5 pkt = 30 pkt |
* [[#kolokwium|Kolokwium]]: 30 pkt | * Kolokwium: 30 pkt |
* Powyższe punkty stanowią 100% maksymalnej łącznej liczby punktów (MAX). | * Powyższe punkty stanowią 100% maksymalnej łącznej liczby punktów (MAX). |
* Zgodnie z GRIS do wartości MAX nie wliczają się plusy za aktywność przyznawane za wykonanie odpowiednich ćwiczeń. | * Zgodnie z GRIS do wartości MAX nie wliczają się plusy za aktywność przyznawane za wykonanie odpowiednich ćwiczeń. |
| |
* Rozwiązania zadań na **plusy** można przedstawić **TYLKO na zajęciach**. | * Rozwiązania zadań na **plusy** można przedstawić **TYLKO na zajęciach**. |
* Rozwiązania zadań na **punkty** można przedstawić **na zajęciach albo przesłać mailem** na [[kkutt@agh.edu.pl]] przed kolejnymi zajęciami (najpóźniej minutę przed rozpoczęciem kolejnych zajęć; np. jeżeli jest się zapisanym do grupy w poniedziałek o 11:00, zadania można wysłać do 10:59 w dniu kolejnych zajęć). **Nie ma** żadnych negatywnych konsekwencji przesłania zadania na maila (o ile jest w terminie). | * Rozwiązania zadań na **punkty** można przedstawić **na zajęciach albo przesłać mailem** na [[kkutt@agh.edu.pl]] przed kolejnymi zajęciami (najpóźniej minutę przed rozpoczęciem kolejnych zajęć; np. jeżeli jest się zapisanym do grupy w czwartek o 08:00, zadania można wysłać do 07:59 w dniu kolejnych zajęć). |
| * Na laboratorium można pracować **pojedynczo lub w parach** |
| |
* Zajęcia w drugiej części semestru poprowadzi dr inż. Krzysztof Kaczor. | === Kolokwium === |
* **Ocena końcowa** jest średnią ocen z pierwszej i drugiej części semestru. Każdą z nich trzeba niezależnie od siebie zaliczyć. | |
| |
==== Kolokwium ==== | |
| |
* Kolokwium rozwiązywane jest na kartkach (nie trzeba nic przynosić poza długopisem). | * Kolokwium rozwiązywane jest na kartkach (nie trzeba nic przynosić poza długopisem). |
* **Na kolokwium należy przyjść na grupę do której jest się zapisanym, zgodnie z listami ocen udostępnianymi przez prowadzącego**. Gdyby ktoś chciał przyjść na inną grupę, musi to zgłosić do prowadzącego najpóźniej **tydzień** przed kolokwium! | * **Na kolokwium należy przyjść na grupę do której jest się zapisanym, zgodnie z listami ocen udostępnianymi przez prowadzącego**. Gdyby ktoś chciał przyjść na inną grupę, musi to zgłosić do prowadzącego najpóźniej **tydzień** przed kolokwium! |
| |
==== Zaliczenia poprawkowe ==== | === Zaliczenia poprawkowe === |
| |
* Kolokwia poprawkowe organizowane są **niezależnie** dla I i II części semestru. Poniżej znajdują się informacje dotyczące I części semestru. | |
* Do zaliczenia poprawkowego **mogą przystąpić** osoby które: | * Do zaliczenia poprawkowego **mogą przystąpić** osoby które: |
* Nie mają zaliczenia lub | * Nie mają zaliczenia lub |
| |
| |
===== Harmonogram ===== | ===== II część: Szablony i kontenery w C++ ===== |
^L.p.^ Termin ^ Laboratorium ^ | |
^1.|02.03.2015|[[.:labs:wprowadzenie|Wprowadzenie do programowania w C++]]| | |
^2.|09.03.2015|[[.:labs:pamiec-i-pliki|Dynamiczne zarządzanie pamięcią i operacje na plikach]]| | |
^3.|16.03.2015|[[.:labs:klasy1|Klasy i obiekty I]]| | |
^4.|23.03.2015|[[.:labs:klasy2|Klasy i obiekty II]]| | |
^5.|30.03.2015|[[.:labs:operatory|Przeciążanie operatorów]]| | |
^6.|13.04.2015|[[.:labs:dziedziczenie|Dziedziczenie i polimorfizm]]| | |
^7.|20.04.2015|Kolokwium| | |
^8.| //Kolejne zajęcia prowadzi dr inż. Krzysztof Kaczor// || | |
| |
Laboratoria uzupełniające - **obowiązują na kolokwium!** | ==== Sprawy Organizacyjne ==== |
- [[.:labs:wskazniki|Wskaźniki i referencje]] - powtórka z C przed laboratorium [[.:labs:pamiec-i-pliki|Dynamiczne zarządzanie pamięcią i operacje na plikach]] | |
- [[http://home.agh.edu.pl/~gjn/dydaktyka/UGLX/node10.html|Makefile]] - opis budowania programów w środowisku UNIX, potrzebne do laboratorium [[.:labs:klasy1|Klasy i obiekty I]] | |
| |
Laboratoria dodatkowe - opcjonalne, ich znajomość nie jest wymagana do kolokwium. Tematyka nie będzie poruszana przez dra Kaczora. Just for fun :-) | Nie zmieściłyby się tutaj, więc proszę zajrzeć na [[.:part2:org:start|oddzielną stronę]]. |
- [[.:labs:wyjatki|Wyjątki]] | |
- [[.:labs:dziedziczenie-ex|Dziedziczenie i polimorfizm -- przykłady]] | ==== Ćwiczenia ==== |
- [[.:labs:stl|Biblioteka standardowa]] | |
| Zanim zaczniesz pisać program zapoznaj się z [[.:part2:org:codepolicy|wymaganymi konwencjami]] |
| |
| ^ L.p. ^ Tytuł ^ Czas trwania ^ Grupa ^ Deadline ^ |
| ^ 1. | [[.:part2:ex:ex1|Szablony funkcji]] | 1 tydzień | 2 os. | 28.04 | |
| ^ 2. | [[.:part2:ex:ex2|Szablony klas]] | 1 tydzień | 2 os. | 05.05 | |
| ^ 3. | [[.:part2:ex:ex3|Szablony + dziedziczenie]] | 1 tydzień | 2 os. | 12.05 | |
| ^ 4. | [[.:part2:ex:ex4|Kontenery, cd.]] | 1 tydzień | 2 os. | 02.06 | |
| ^ 5. | [[.:part2:ex:ex5|Iteratory]] | 1 tydzień | 2 os. | 09.06 | |
| ^ 6. | [[.:part2:ex:ex6|Drzewa]] | Poprawa czerwcowa | 1 os | 29.06 | |
| ==== Jak wysyłać wyniki ==== |
| |
| - Przetestować kod: <code bash>g++ -std=c++11 *.cpp -o test && ./test</code> |
| * :!: proszę użyć kompilatora ''gcc'' w wersji ''4.8.x'' (tak jak na serwerze borg) |
| * :!: proszę używać oryginalnego i niezmienionego pliku ''main'', np. ''ex1main.cpp'', ''ex2main.cpp'', etc. |
| - Jeżeli kod się nie kompiluje: |
| * proszę go **nie** wysyłać, nie ma po co |
| - Jeżeli kod się kompiluje: |
| - proszę stworzyć katalog o nazwie <numer_grupy>_<nazwisko1>_<nazwisko2>, gdzie numer grupy ''0'' oznacza grupę o 08:00, a ''1'' grupę o 09:30, np. <code bash>mkdir 0_Slazynski_Kutt</code> |
| - skopiować istotne pliki do tego katalogu, np. <code bash>cp *.cpp *.h ./0_Slazynski_Kutt</code> |
| - proszę spakować folder do archiwum zip, rar, 7z, lub tar.gz, np. <code bash>tar -zcf 0_Slazynski_Kutt.tar.gz 0_Slazynski_Kutt</code> |
| - wysłać paczkę na mail [[mailto:mslaz@agh.edu.pl|mslaz@agh.edu.pl]] z tematem: ''[JIMP2] Ćwiczenie nr <numer ćwiczenia>'', np. ''[JIMP2] Ćwiczenie nr 1'' |
| - w treści wpisać imiona i nazwiska osób wykonujących ćwiczenie, np. ''Mateusz Ślażyński & Krzysztof Kutt'' |
| - :!: załączyć archiwum z ćwiczeniem, to ważne :!: |
| - :!: nacisnąć przycisk wyślij i odczekać chwilę nie przerywając połączenia z internetem :!: |
| - dostać punkty z dobrze wykonaną robotę 8-) |
| - inne formy wysyłania zadań spotkają się z moją niechybną dezaprobatą i niekonstruktywną krytyką m( |
| * przewidywane kary w postaci składania własnoręcznie spisanej miażdżącej samokrytyki |
| * wizyta w worku pokutnym w dziekanacie pro |
| * no i brak punktów |
| |
| ==== Automatyczne formatowanie kodu ==== |
| |
| W celu uniknięcia braku punktów za dobry styl kodu, polecamy stosować narzędzia automatycznie formatujące kod. Większość profesjonalnych IDE, np. Eclipse, ma je wbudowane bądź dostępne w formie wtyczki. Jeżeli ktoś preferuje narzędzia konsolowe, to polecamy [[http://astyle.sourceforge.net/install.html|AStyle]], które jest dostępny na wszystkie wiodące systemy operacyjne. Narzędzi w użyciu jest bardzo proste: ''astyle <opcje stylu> <ścieżki do plików>'', np. |
| <code bash> |
| astyle --style=1tbs *.cpp *.h |
| </code> |
| sformatuje wszsytkie pliki ''.cpp'' i ''.h'' używając stylu One True Brace Style. Więcej dostępnych stylów i opcji można poznać czytając stronę [[http://astyle.sourceforge.net/astyle.html]]. |
| |
| Na potrzeby ćwiczeń polecamy stosować styl: |
| <code bash> |
| astyle -s4 -xG -S -O -n -o -k3 -H -p -j *.cpp *.h |
| </code> |
| Jeżeli kogoś przeraża wpisywanie tak wielu opcji, wystarczy zapisać konfigurację jako domyślną: |
| <code bash> |
| echo "-s4 -xG -S -O -n -o -k3 -H -p -j" > ~/.astylerc |
| </code> |
| |
| === Alternatywy === |
| |
| * [[http://uncrustify.sourceforge.net/|uncrustify]] - bardzo popularne narzędzie do formatowania kodu |
| * [[http://clang.llvm.org/docs/ClangFormat.html|clang-format]] - oparte o llvm narzędzie wspierane przez wiele narzędzi programistycznych. [[http://clangformat.com/|http://clangformat.com/]] pozwala generować dla niego konfiguracje. |
| * [[http://universalindent.sourceforge.net/|universalindent]] - graficzne narzędzie do formatowania kodu |
===== Przydatne materiały ===== | ===== Przydatne materiały ===== |
| |
* [[http://www.cppreference.com/wiki/start|C++ Reference]] | * [[http://www.cppreference.com/wiki/start|C++ Reference]] |
* Harvey M. Deitel, Paul J. Deitel, //Arkana C%%++%%// - dla początkujących | * Harvey M. Deitel, Paul J. Deitel, //Arkana C%%++%%// - dla początkujących |
| |
* [[https://fffaraz.github.io/awesome-cpp/|Awesome C/C++]] - A curated list of awesome C/C%%++%% frameworks, libraries, resources, and shiny things | * [[https://fffaraz.github.io/awesome-cpp/|Awesome C/C++]] - A curated list of awesome C/C%%++%% frameworks, libraries, resources, and shiny things |
===== Narzędzia ===== | |
| Laboratoria dodatkowe - opcjonalne, ich znajomość nie jest wymagana do kolokwium. Just for fun :-) |
| - [[.:labs:wyjatki|Wyjątki]] |
| - [[.:labs:dziedziczenie-ex|Dziedziczenie i polimorfizm -- przykłady]] |
| - [[.:labs:stl|Biblioteka standardowa]] |
| |
| ==== Narzędzia ==== |
* Uniksowy kompilator **g%%++%%** | * Uniksowy kompilator **g%%++%%** |
* [[http://www.eclipse.org/|Eclipse IDE for C/C++]] | * [[http://www.eclipse.org/|Eclipse IDE for C/C++]] |
* [[http://www.microsoft.com/express/Windows/|MS Visual Studio Express Edition]] | * [[http://www.microsoft.com/express/Windows/|MS Visual Studio Express Edition]] |
| ==== Platformy online z zadaniami do ćwiczenia programowania ==== |
| |
| * https://www.hackerrank.com/domains |
| * https://www.topcoder.com/login/?next=%252Fmy-dashboard%252F |
| * https://leetcode.com |
| * https://projecteuler.net |
| * http://pl.spoj.com/problems/latwe/ |