====== Języki i Metody Programowania 2 - Semestr letni 2015/2016 ====== * **Kierunek**: Informatyka * **Rok**: I * **Prowadzący**: * [[http://home.agh.edu.pl/~kkutt/|mgr inż. Krzysztof Kutt]] (I połowa semestru) * [[http://home.agh.edu.pl/~mslaz/|mgr inż. Mateusz Ślażyński]] (II połowa semestru) ===== 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 * 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ę: * Ćwiczenia na laboratoriach: 6 lab * 5 pkt = 30 pkt * Kolokwium: 30 pkt * 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ń. * 5 plusów = 1 pkt * 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ęć). * Na laboratorium można pracować **pojedynczo lub w parach** === Kolokwium === * Kolokwium rozwiązywane jest na kartkach (nie trzeba nic przynosić poza długopisem). * Kolokwium trwa **60 minut**. * Obowiązuje na nim materiał ze wszystkich laboratoriów (instrukcje + zadania na plusy i punkty). * Jest 18 pytań za 1,2,3 punkty -- w sumie 30 pkt za całe kolokwium. * 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." * 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 ;-) ) * 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). * **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 === * Do zaliczenia poprawkowego **mogą przystąpić** osoby które: * 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. ===== II część: Szablony i kontenery w C++ ===== ==== Sprawy Organizacyjne ==== 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: g++ -std=c++11 *.cpp -o test && ./test * :!: 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 __, gdzie numer grupy ''0'' oznacza grupę o 08:00, a ''1'' grupę o 09:30, np. mkdir 0_Slazynski_Kutt - skopiować istotne pliki do tego katalogu, np. cp *.cpp *.h ./0_Slazynski_Kutt - proszę spakować folder do archiwum zip, rar, 7z, lub tar.gz, np. tar -zcf 0_Slazynski_Kutt.tar.gz 0_Slazynski_Kutt - wysłać paczkę na mail [[mailto:mslaz@agh.edu.pl|mslaz@agh.edu.pl]] z tematem: ''[JIMP2] Ćwiczenie nr '', 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 <ścieżki do plików>'', np. astyle --style=1tbs *.cpp *.h 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: astyle -s4 -xG -S -O -n -o -k3 -H -p -j *.cpp *.h Jeżeli kogoś przeraża wpisywanie tak wielu opcji, wystarczy zapisać konfigurację jako domyślną: echo "-s4 -xG -S -O -n -o -k3 -H -p -j" > ~/.astylerc === 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]] * Harvey M. Deitel, Paul J. Deitel, //Arkana C%%++%%// - dla początkujących * Jerzy Grębosz, //Symfonia/Pasja C%%++%%// - dla każdego * 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 ==== * 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/