|
|
pl:dydaktyka:jimp2:2016:start [2016/05/05 10:08] msl [Jak wysyłać wyniki] |
pl:dydaktyka:jimp2:2016:start [2019/06/27 15:50] |
====== 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ć. | |
| |
===== 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 + dziediczenie]] | 1 tydzień | 2 os. | 12.05 | | |
==== 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]] | |
* 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/ | |