{ "$schema": "../../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1", "card": { "id": "mpabi-inf-cpp-y2s1-02-types-initialization", "series": "cpp", "series_title": "C++ · Rok 2 · Semestr 1", "number": "02", "count": "10", "slug": "types-initialization", "title": "CPP02 · Typy, inicjalizacja, auto, const i enum class", "topic": "Bezpieczna inicjalizacja i typy definiowane przez użytkownika", "project": "C++20 · fundamenty języka i modelu obiektu", "subject": "Informatyka", "level": "Rok 2 · Semestr 1", "revision_date": "2026-07-21T00:00:00+02:00", "status": "Gotowa do wykonania", "version": "v00.01", "uuid": "bc16c950-8773-575d-91ab-81a6b80a97b0", "author": "M. Pabiszczak", "year": "2026" }, "generated": { "tex": "doc/generated/main.tex", "html": "web/index.html", "html_css": "web/style.css", "react_app": true, "html_tree_inspector": false }, "template": "templates/karta-klasyczna.json", "title_block": { "category": "KARTA PRACY · INFORMATYKA · C++20", "standard": "ISO 7200", "prepared_by": "M. Pabiszczak", "prepared_on": "21.07.2026", "checked_by": "testy automatyczne", "approved_by": "—", "url": "http://localhost:8080", "repository_url": "https://zsl-gitea.mpabi.pl/edu-cpp/lab-cpp-types-initialization", "revision": "1", "issued_on": "21.07.2026", "series": "CPP-Y2S1-02", "document_type": "karta pracy", "tool": "card-layouts", "sheet": "1 / 1", "show_qr": false, "show_repository_qr": false, "height_cm": 3, "repeat_on_every_page": true, "replace_front_matter": true }, "front_page_scope": { "title": "Cel karty", "content_tex": "Rozpoznać typy wyrażeń i używać inicjalizacji, const oraz enum class bez niejawnego mieszania domen.", "scope_title": "Zakres tasków", "scope_table": { "headers": [ "Krok", "Numer tasku", "Najważniejsza idea", "Priorytet", "Status", "Version" ], "rows": [ { "chapter": "1", "task": "Task01", "idea_tex": "Inicjalizacja i auto", "priority": "obowiązkowe", "status": "ready", "version": "v00.01" }, { "chapter": "1", "task": "Task02", "idea_tex": "const i constexpr", "priority": "obowiązkowe", "status": "ready", "version": "v00.01" }, { "chapter": "1", "task": "Task03", "idea_tex": "enum class i struktura", "priority": "obowiązkowe", "status": "ready", "version": "v00.01" } ] } }, "learning_effects": { "CPP02.EN01": { "text": "Uczeń wyjaśnia reguły C++20 związane z tematem: Bezpieczna inicjalizacja i typy definiowane przez użytkownika.", "label": "Model języka", "bloom_level": "Analiza", "assessment_criteria": [ "CPP02.KW01" ] }, "CPP02.EK01": { "text": "Uczeń implementuje, kompiluje i weryfikuje trzy małe eksperymenty C++20.", "label": "Eksperyment C++", "bloom_level": "Zastosowanie", "assessment_criteria": [ "CPP02.KW01" ] } }, "assessment_criteria": { "CPP02.KW01": { "text": "Trzy taski kompilują się bez ostrzeżeń i zwracają dokładny, testowany wynik.", "learning_effects": [ "CPP02.EN01", "CPP02.EK01" ] } }, "educational_requirements": { "CPP02.WE01": { "text": "Rozpoznać typy wyrażeń i używać inicjalizacji, const oraz enum class bez niejawnego mieszania domen.", "label": "Bezpieczna inicjalizacja i typy definiowane przez użytkownika", "learning_effects": [ "CPP02.EN01", "CPP02.EK01" ], "learning_tree": { "schema": "we-learning-tree.v1", "policy": "Każde twierdzenie o języku ma dowód w kodzie, wyniku programu albo symbolach binarnych.", "ogolne": [ { "tree_id": "CPP02.WE01.OG.IP.01", "effect_ref": "CPP02.EN01", "display": "EN IP CPP02", "text": "Uczeń przewiduje zachowanie programu na podstawie reguł języka.", "kw": [ { "criterion_ref": "CPP02.KW01", "display": "KW IP CPP02", "text": "Uzasadnia przewidywany wynik." } ] } ], "zawodowe": [ { "tree_id": "CPP02.WE01.TECH.I4.01", "effect_ref": "CPP02.EK01", "display": "EK INF04 CPP02", "text": "Uczeń buduje i testuje program C++20.", "kw": [ { "criterion_ref": "CPP02.KW01", "display": "KW INF04 CPP02", "text": "Uzyskuje trzy komunikaty PASS." } ] } ] } } }, "sections": [ { "title": "Task01 · Inicjalizacja i auto", "content_kind": "prose", "content_tex": "Zastosuj inicjalizację klamrową i potwierdź typ dedukowany przez auto. Najpierw przewidź wynik, następnie skompiluj program z ostrzeżeniami traktowanymi jako błędy i porównaj dokładny stdout z kontraktem: count=4 twice=8 type=int.", "educational_requirement_refs": [ "CPP02.WE01" ], "learning_effect_refs": [ "CPP02.EN01", "CPP02.EK01" ], "assessment_criterion_refs": [ "CPP02.KW01" ], "area_tree_refs": [ "CPP02.WE01.OG.IP.01", "CPP02.WE01.TECH.I4.01" ], "steps": [ { "id": "T01-PREDICT", "title": "Zapisz przewidywany wynik i wskaż regułę języka.", "tree_refs": [ "CPP02.WE01.OG.IP.01" ] }, { "id": "T01-VERIFY", "title": "Uruchom test i zachowaj mierzalny dowód wykonania.", "tree_refs": [ "CPP02.WE01.TECH.I4.01" ] } ] }, { "title": "Task02 · const i constexpr", "content_kind": "prose", "content_tex": "Oddziel wartość obliczaną w czasie kompilacji od obiektu tylko do odczytu. Najpierw przewidź wynik, następnie skompiluj program z ostrzeżeniami traktowanymi jako błędy i porównaj dokładny stdout z kontraktem: square=49 limit=12.", "educational_requirement_refs": [ "CPP02.WE01" ], "learning_effect_refs": [ "CPP02.EN01", "CPP02.EK01" ], "assessment_criterion_refs": [ "CPP02.KW01" ], "area_tree_refs": [ "CPP02.WE01.OG.IP.01", "CPP02.WE01.TECH.I4.01" ], "steps": [ { "id": "T02-PREDICT", "title": "Zapisz przewidywany wynik i wskaż regułę języka.", "tree_refs": [ "CPP02.WE01.OG.IP.01" ] }, { "id": "T02-VERIFY", "title": "Uruchom test i zachowaj mierzalny dowód wykonania.", "tree_refs": [ "CPP02.WE01.TECH.I4.01" ] } ] }, { "title": "Task03 · enum class i struktura", "content_kind": "prose", "content_tex": "Zbuduj typ rekordu oraz silnie typowany stan bez niejawnej konwersji do int. Najpierw przewidź wynik, następnie skompiluj program z ostrzeżeniami traktowanymi jako błędy i porównaj dokładny stdout z kontraktem: sample=23 state=ready.", "educational_requirement_refs": [ "CPP02.WE01" ], "learning_effect_refs": [ "CPP02.EN01", "CPP02.EK01" ], "assessment_criterion_refs": [ "CPP02.KW01" ], "area_tree_refs": [ "CPP02.WE01.OG.IP.01", "CPP02.WE01.TECH.I4.01" ], "steps": [ { "id": "T03-PREDICT", "title": "Zapisz przewidywany wynik i wskaż regułę języka.", "tree_refs": [ "CPP02.WE01.OG.IP.01" ] }, { "id": "T03-VERIFY", "title": "Uruchom test i zachowaj mierzalny dowód wykonania.", "tree_refs": [ "CPP02.WE01.TECH.I4.01" ] } ] } ], "tasks": { "task01": { "prompt_tex": "Zastosuj inicjalizację klamrową i potwierdź typ dedukowany przez auto.", "criterion": "count=4 twice=8 type=int", "assessment_criterion_ref": "CPP02.KW01" }, "task02": { "prompt_tex": "Oddziel wartość obliczaną w czasie kompilacji od obiektu tylko do odczytu.", "criterion": "square=49 limit=12", "assessment_criterion_ref": "CPP02.KW01" }, "task03": { "prompt_tex": "Zbuduj typ rekordu oraz silnie typowany stan bez niejawnej konwersji do int.", "criterion": "sample=23 state=ready", "assessment_criterion_ref": "CPP02.KW01" } }, "tasks_order": [ "task01", "task02", "task03" ], "mission": "Rozpoznać typy wyrażeń i używać inicjalizacji, const oraz enum class bez niejawnego mieszania domen.", "objectives": [ "Wyjaśnisz badaną regułę C++20.", "Skompilujesz program z pełnym zestawem ostrzeżeń.", "Porównasz dokładny wynik i ślad debuggera." ], "agenda": [ { "time": "0--15 min", "work": "Model i przewidywanie." }, { "time": "15--45 min", "work": "Trzy eksperymenty kodowe." }, { "time": "45--60 min", "work": "Debug, wnioski i raport." } ], "tech_stack": { "software": [ { "name": "C++20", "use": "standard języka" }, { "name": "GCC/GDB", "use": "kompilacja i dowód wykonania" }, { "name": "stemctl", "use": "izolowany profil native-amd64" } ], "hardware": [ { "name": "Brak", "use": "laboratorium kontenerowe" } ] }, "container_test": { "title": "Test w profilu native-amd64", "commands": [ "stemctl test native-amd64 cpp CPP02 1", "stemctl test native-amd64 cpp CPP02 2", "stemctl debug native-amd64 cpp CPP02 3" ], "pass_condition": "Trzy wyniki zgodne z expected i niepusty debug.log." }, "safety_rules": [ { "title": "Brak niezdefiniowanego zachowania", "body": "Kod testowy nie dereferencjonuje nullptr i nie używa obiektu po zakończeniu czasu życia." }, { "title": "Jedna zmienna naraz", "body": "Każdy task izoluje jedną regułę języka i ma deterministyczny stdout." } ], "hardware_procedure": [ { "step": "1", "action": "Przewidź wynik.", "condition": "Reguła języka zapisana przed uruchomieniem." }, { "step": "2", "action": "Uruchom trzy taski.", "condition": "Trzy komunikaty PASS." }, { "step": "3", "action": "Odczytaj debug.log.", "condition": "Debugger zatrzymał program w main." } ], "references": [] }