Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:jimp2:2017:start [2017/02/25 13:34] kkutt [Harmonogram] |
pl:dydaktyka:jimp2:2017:start [2019/06/27 15:50] (aktualna) |
====== Języki i Metody Programowania 2 - Semestr letni 2016/2017 ====== | ====== Języki i Metody Programowania 2 - Semestr letni 2016/2017 ====== |
| |
<WRAP center round important 60%> | |
Strona w czasie reorganizacji! | |
</WRAP> | |
| |
| |
* **Kierunek**: Informatyka | * **Kierunek**: Informatyka |
* 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. |
| * Na zaliczenie laboratorium składają się: |
| * Zadania na laboratoriach: 13 lab * 5 pkt = 65 pkt |
==== Harmonogram ==== | * Kolokwium (na ostatnich zajęciach): 65 pkt |
^L.p.^ Wtorki ^ Czwartki ^ 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]]| | |
| |
| |
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ę: | |
* Ćwiczenia na laboratoriach: 6 lab * 5 pkt = 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ń. |
* 5 plusów = 1 pkt | * 4 plusy = 1 pkt |
| |
| * Na laboratorium pracujemy **w parach** |
* 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 czwartek o 08:00, zadania można wysłać do 07:59 w dniu kolejnych zajęć). | * Rozwiązania zadań na **punkty** można przedstawić **na zajęciach** albo **przesłać na adres prowadzącego** przed kolejnymi zajęciami (najpóźniej minutę przed rozpoczęciem kolejnych zajęć; np. jeżeli jest się zapisanym do grupy we wtorek o 09:30, zadania można wysłać do 09:29 w dniu kolejnych zajęć). |
* Na laboratorium można pracować **pojedynczo lub w parach** | * Niezależnie od wybranej formy, rozwiązanie powinno znaleźć się w repozytorium Git pary realizującej to zadanie (w przypadku wysyłania zadania mailem, w wiadomości należy umieścić **wyłącznie link do repozytorium**). Należy zagwarantować prowadzącemu dostęp do repozytorium (powinno być publiczne albo prowadzący powinien zostać dodany do użytkowników). |
| * Inne formy wysyłania zadań spotkają się z niechybną dezaprobatą i niekonstruktywną krytyką prowadzącego m( Przewidywane kary: |
| * składanie własnoręcznie spisanej miażdżącej samokrytyki, |
| * wizyta w worku pokutnym w dziekanacie |
| * i brak punktów. |
| * Do oceny udostępniamy tylko i wyłącznie **własne rozwiązania**! Będą one sprawdzane programem do antyplagiatu po przesłaniu rozwiązań przez wszystkich. |
| |
=== Kolokwium === | |
| |
* Kolokwium rozwiązywane jest na kartkach (nie trzeba nic przynosić poza długopisem). | ==== Harmonogram ==== |
* Kolokwium trwa **60 minut**. | ^L.p.^ Wtorki ^ Czwartki ^ Instrukcja do laboratorium ^ |
* Obowiązuje na nim materiał ze wszystkich laboratoriów (instrukcje + zadania na plusy i punkty). | ^1.|28.02.2017|02.03.2017|[[.:labs:wprowadzenie|Wprowadzenie do programowania w C++]]| |
* Jest 18 pytań za 1,2,3 punkty -- w sumie 30 pkt za całe kolokwium. | ^2.|07.03.2017|09.03.2017|[[.:labs:pamiec-i-pliki|Dynamiczne zarządzanie pamięcią i operacje na plikach]]| |
* Pytania za 1 pkt to pytania krótkiej odpowiedzi (min. 1 słowo, zwykle ok. 1 zdanie), np.: "Jakie znasz typy prymitywne (wbudowane) języka C%%++%%? Wymień co najmniej 8." | ^3.|14.03.2017|16.03.2017|[[.:labs:pamiec2|Dynamiczne zarządzanie pamięcią II]] | |
* Pytania za 2 pkt zawierają kawałek kodu w C%%++%%. Należy w nich albo odpowiedzieć na pytanie "co zostanie wyświetlone po uruchomieniu tego kodu" albo znaleźć błąd i go naprawić (błędy są w większości zaczerpnięte z programów oddawanych na laboratorium i przesyłanych na maila ;-) ) | ^4.|21.03.2017|23.03.2017|[[.:labs:klasy1|Klasy i obiekty I]]| |
* Pytania za 3 pkt związane są z napisaniem kilku (ok. 5) linii kodu, np.: "Napisz ciało funkcji: ''void show(char[] filename);'' która wypisuje na ekranie cały plik o nazwie ''filename''. Białe znaki nie muszą być zachowane w oryginalnej formie (np. zamiast trzech spacji obok siebie może być tylko jedna spacja na ekranie). | ^5.|28.03.2017|30.03.2017|[[.:labs:klasy2|Klasy i obiekty II]]| |
* **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! | ^6.|04.04.2017|06.04.2017|[[.:labs:operatory|Przeciążanie operatorów]]| |
| ^7.|11.04.2017|**20.04.2017**| [[.:labs:dziedziczenie|Dziedziczenie i polimorfizm]]| |
| ^8.|25.04.2017|27.04.2017| [[.:labs:wyjatki|Wyjątki]]| |
| ^9.|09.05.2017|**04.05.2017**| [[.:labs:dziedziczenie2|Dziedziczenie i polimorfizm 2]] | |
| ^10.|16.05.2017|**11.05.2017**| [[.:labs:algorithm|Biblioteka algorithm]] | |
| ^11.|23.05.2017|**18.05.2017**| [[.:labs:templates|Szablony]] | |
| ^12.|30.05.2017|**25.05.2017**| [[.:labs:templates2|Szablony cz. 2]] | |
| ^13.|06.06.2017|**01.06.2017**| [[.:labs:unit-testing|Testy jednostkowe]] | |
| ^14.|**13.06.2017 __11:10__-12:30 B1 H24**|| Kolokwium zaliczeniowe | |
| |
=== Zaliczenia poprawkowe === | INFO: **Pogrubioną** czcionką zaznaczone są zajęcia czwartkowe, które odbywają się w innym (wcześniejszym / późniejszym) tygodniu niż zajęcia wtorkowe z danego tematu. |
| |
* Do zaliczenia poprawkowego **mogą przystąpić** osoby które: | ==== IDE i inne tutoriale ==== |
* Nie mają zaliczenia lub | |
* nie pisały kolokwium i posiadają usprawiedliwienie (osoby takie mogą pisać tylko zaległe kolokwium/a). | |
* Do wyników uzyskanych z zaliczenia poprawkowego nie wlicza się: | |
* plusów/minusów - w 1. terminie poprawkowym, | |
* plusów/minusów i nieusprawiedliwionych nieobecności - w 2. terminie poprawkowym. | |
* W **2. terminie poprawkowym** można uzyskać co najwyżej ocenę 3.0. | |
| |
| * [[pl:dydaktyka:jimp2:2017:tutorials:newsolution|Dodanie nowego rozwiązania]] |
| * [[pl:dydaktyka:jimp2:2017:tutorials:publishingsolution|Praca nad nowym zadaniem i jego publikacja do oceny]] |
| * [[pl:dydaktyka:jimp2:2017:tutorials:stackdoc|Seria dokumentacji na stack overflow]] |
| ===== Przydatne materiały ===== |
| |
===== II część: Szablony i kontenery w C++ ===== | * [[https://fffaraz.github.io/awesome-cpp/|Awesome C/C++]] - A curated list of awesome C/C%%++%% frameworks, libraries, resources, and shiny things |
| |
==== Sprawy Organizacyjne ==== | ==== Klasyczne podręczniki ==== |
| |
Nie zmieściłyby się tutaj, więc proszę zajrzeć na [[.:part2:org:start|oddzielną stronę]]. | |
| |
==== Ćwiczenia ==== | |
| |
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 ===== | |
| |
* [[http://www.cppreference.com/wiki/start|C++ Reference]] | * [[http://www.cppreference.com/wiki/start|C++ Reference]] |
* Bjarne Stroustrup, //Język C%%++%%// - dla zainteresowanych | * Bjarne Stroustrup, //Język C%%++%%// - dla zainteresowanych |
| |
* [[https://fffaraz.github.io/awesome-cpp/|Awesome C/C++]] - A curated list of awesome C/C%%++%% frameworks, libraries, resources, and shiny things | |
| |
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%%++%%** | |
* [[http://www.eclipse.org/|Eclipse IDE for C/C++]] | |
* [[http://www.microsoft.com/express/Windows/|MS Visual Studio Express Edition]] | |
==== Platformy online z zadaniami do ćwiczenia programowania ==== | ==== Platformy online z zadaniami do ćwiczenia programowania ==== |
| |
* https://www.hackerrank.com/domains | * https://www.hackerrank.com/domains |
* https://www.topcoder.com/login/?next=%252Fmy-dashboard%252F | * https://www.topcoder.com/ |
* https://leetcode.com | * https://leetcode.com |
* https://projecteuler.net | * https://projecteuler.net |
* http://pl.spoj.com/problems/latwe/ | * http://pl.spoj.com/problems/latwe/ |
| |
| ==== Nieposortowane, ale potencjalnie ciekawe linki ==== |
| |
| * [[https://www.jetbrains.com/help/clion/2016.3/quick-cmake-tutorial.html|CMake tutorial for CLion]] |
| * [[https://github.com/google/googletest/blob/master/googletest/docs/Documentation.md|gtest documentation]] |
| * [[https://google.github.io/styleguide/cppguide.html|google c++ style guide]] |
| * [[https://isocpp.org/wiki/faq/freestore-mgmt|memory managment FAQ by B. Strastroup]] |
| * [[http://stackoverflow.com/questions/262439/create-a-wrapper-function-for-malloc-and-free-in-c|spying malloc calls]] |
| * [[http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes|printing stacktrace with gcc]] |
| * [[https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/|spying and stubbing library calls]] |
| * [[http://valgrind.org/|valgrind]] |
| * [[http://drmemory.org/|dr. Memory]] |
| * [[https://isocpp.org/std/status|C++ standard current status]] |
| * [[https://cpputest.github.io/manual.html|CppUCheck another unit testing framework with built-in memory leak detection]] |
| * [[https://gcc.gnu.org/onlinedocs/gcc/Function-Names.html|gcc variables of function name]] |
| * [[https://plugins.jetbrains.com/clion/plugin/4455-key-promoter|Key promoter CLion plugin helps learning keyboard shortcuts]] |
| * [[https://plugins.jetbrains.com/clion/plugin/7871-clion-cpplint|CLion plugin cpplint code style checker]] |
| * [[https://plugins.jetbrains.com/idea/plugin/8143-cppcheck|CLion plugin CppCheck static analysis]] |
| * [[http://www.boost.org/doc/libs/1_42_0/libs/format/doc/format.html|fromatting message with boost]] |
| * [[http://umich.edu/~eecs381/handouts/C++11_smart_ptrs.pdf|smart pointers explained]] |
| * [[https://www.rust-lang.org/en-US/|Rust lang]] |
| * [[https://github.com/nim-lang/Nim/wiki/Nim-for-C-programmers|Nim lang]] |
| * [[http://stackoverflow.com/questions/28760475/how-to-return-a-class-member-vector-in-c11|returning vector]] |
| * [[http://codereview.stackexchange.com/?tags=c%2b%2b|stack overflow - c++ code review section]] |
| * [[https://blog.codinghorror.com/the-great-newline-schism/|end of line characters]] |
| * [[http://coliru.stacked-crooked.com/|online c++ compiler]] |
| * [[http://en.cppreference.com/w/cpp/language/constraints|concepts - type of types]] |
| * [[http://coliru.stacked-crooked.com/a/3fc11bf5a94cf6d7|example of concepts]] |
| * [[https://gcc.gnu.org/projects/cxx-status.html#cxx11|gcc standard support]] |
| * [[https://github.com/google/googletest/blob/master/googlemock/docs/ForDummies.md|google mock introduction]] |
| * [[http://www.cplusplus.com/articles/L0pk4iN6/|be more prodactive with CLion IDE]] |
| * [[https://sourceforge.net/projects/boost/files/boost/1.63.0/|boost download]] |
| * [[https://blog.jetbrains.com/clion/2015/06/code-generation-with-clion/|CLion code generation]] |
| * [[https://www.jetbrains.com/help/clion/2016.3/implementing-functions.html|CLion function implementing]] |
| * [[https://www.jetbrains.com/help/clion/2016.3/creating-and-editing-file-templates.html|CLion file templates]] |
| * [[https://blog.jetbrains.com/clion/2014/12/refactorings-in-clion-be-safe-and-quick/|CLion refactorings]] |
| * [[https://cmake.org/Wiki/CMake_Useful_Variables|CMake Script Variables]] |
| * [[https://www.jetbrains.com/help/clion/2016.3/adding-deleting-and-moving-code-elements.html|CLion working with sourcecode]] |
| * [[https://resources.jetbrains.com/assets/products/clion/CLion_ReferenceCard.pdf|CLion reference card]] |
| * [[http://www.chromium.org/developers/coding-style/cpp-dos-and-donts|Chromium project c++ dos and donts]] |
| * [[http://utf8everywhere.org/|utf8 encoding]] |
| * [[http://jscheiny.github.io/Streams/api.html|cpp streams api]] |
| * [[http://bastian.rieck.ru/blog/posts/2016/filter_map_cxx11/|cpp functional]] |
| * [[https://groups.google.com/forum/#!topic/googletestframework/XnjTnA2y4ds|GTest new macro definition]] |
| |