Add Technické vybavení unit 2: computer history generations with quiz.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pepaskopec-blip 2026-09-11 20:55:00 +02:00
commit 0091bfa09f
4 changed files with 139 additions and 3 deletions

113
hw.c
View file

@ -4,6 +4,7 @@
NetLesson hw_lessons[HW_LESSONS] = { NetLesson hw_lessons[HW_LESSONS] = {
{ .n_slides = HW_SLIDES, .unit_page = "hwunit1", .ex_page = "hwex1" }, { .n_slides = HW_SLIDES, .unit_page = "hwunit1", .ex_page = "hwex1" },
{ .n_slides = HW2_SLIDES, .unit_page = "hwunit2", .ex_page = "hwex2" },
}; };
void hw_rail_theme_reset(void); void hw_rail_theme_reset(void);
@ -256,7 +257,7 @@ void hw_add_node(GtkFixed *fixed, int index) {
GtkWidget *name; GtkWidget *name;
char *text; char *text;
static const char *unit_keys[HW_LESSONS] = { static const char *unit_keys[HW_LESSONS] = {
"hw_unit1" "hw_unit1", "hw_unit2"
}; };
card = gtk_button_new(); card = gtk_button_new();
@ -763,3 +764,113 @@ GtkWidget *build_hw_unit1_exercise_page(void) {
return build_hw_mcq_page(0, "hwunit1", "hw_ex1_title", "hw_quiz1_head", return build_hw_mcq_page(0, "hwunit1", "hw_ex1_title", "hw_quiz1_head",
qs, hints, 6); qs, hints, 6);
} }
GtkWidget *build_hw_unit2_page(void) {
static const NetSlide slides[HW2_SLIDES] = {
{
"1 / 6 • Přehled", "Historie počítačů",
"Generace se dělí podle klíčové technologie své doby.",
{
"1. Předchůdci – do 30. let 19. století",
"2. Nultá generace – 1938–1944",
"3. První generace – 1944–1955",
"4. Druhá generace – 1955–1964",
"5. Třetí generace – 1964–1971",
"Další snímky shrnují znaky jednotlivých generací.",
NULL,
},
},
{
"2 / 6 • 0. generace", "Počítače 0. generace (1938–1944)",
"Tip: počítačů bylo málo a často sloužily armádě.",
{
"Existovalo jen několik počítačů na světě.",
"Většinou měly vojenský účel.",
NULL,
},
},
{
"3 / 6 • 1. generace", "Počítače 1. generace (1944–1955)",
"Klíčový objev: elektronka",
{
"Objev elektronky umožnil tuto generaci.",
"Ještě neexistoval software v dnešním smyslu.",
"Data a programy se zadávaly pomocí děrných štítků.",
NULL,
},
},
{
"4 / 6 • 2. generace", "Počítače 2. generace (1955–1964)",
"Klíčový objev: tranzistor",
{
"Objev tranzistoru nahradil elektronky.",
"Používala se hlavní externí paměť.",
"Počítače měly menší rozměry než v 1. generaci.",
NULL,
},
},
{
"5 / 6 • 3. generace", "Počítače 3. generace (1964–1971)",
"Klíčový objev: integrovaný obvod",
{
"Objev integrovaného obvodu.",
"Stále se používala hlavní externí paměť.",
"Rozměry počítačů se dál zmenšovaly.",
NULL,
},
},
{
"6 / 6 • 4. generace", "Počítače 4. generace",
"Klíčové: programovatelné mikroprocesory",
{
"Nastupují programovatelné mikroprocesory.",
"1972 – první počítačová hra",
"1973 – první disketa",
"1979 – první CD",
NULL,
},
},
};
return build_hw_unit_page(&hw_lessons[1], "hw_unit2", "hw_unit2_sub",
slides, HW2_SLIDES);
}
GtkWidget *build_hw_unit2_exercise_page(void) {
static const ChoiceQ qs[] = {
{"Kdy probíhala nultá generace počítačů?",
{"1938–1944", "1944–1955", "1955–1964", "1964–1971"}, 4, 0},
{"Co bylo typické pro počítače 0. generace?",
{"Byly v každé domácnosti", "Jen několik kusů, často vojenský účel",
"Měly mikroprocesory", "Používaly CD"},
4, 1},
{"Která technologie patří k 1. generaci?",
{"Tranzistor", "Elektronka", "Integrovaný obvod", "Mikroprocesor"},
4, 1},
{"Čím se zadávaly data v 1. generaci?",
{"USB fleškou", "Děrnými štítky", "CD", "Disketou"}, 4, 1},
{"Která technologie patří k 2. generaci?",
{"Elektronka", "Tranzistor", "Mikroprocesor", "CD"}, 4, 1},
{"Která technologie patří k 3. generaci?",
{"Elektronka", "Tranzistor", "Integrovaný obvod", "Disketa"},
4, 2},
{"Co je typické pro 4. generaci?",
{"Jen děrné štítky", "Programovatelné mikroprocesory",
"Jen vojenské použití", "Žádný software"},
4, 1},
{"Kdy vznikla první počítačová hra (podle lekce)?",
{"1964", "1972", "1973", "1979"}, 4, 1},
};
static const char *hints[] = {
"Nultá generace: 1938–1944",
"Jen několik počítačů, většinou vojenský účel",
"1. generace – objev elektronky",
"1. generace – děrné štítky",
"2. generace – objev tranzistoru",
"3. generace – integrovaný obvod",
"4. generace – programovatelné mikroprocesory",
"1972 – první počítačová hra",
};
return build_hw_mcq_page(1, "hwunit2", "hw_ex2_title", "hw_quiz2_head",
qs, hints, 8);
}

20
i18n.c
View file

@ -290,6 +290,13 @@ const TrEntry tr_ui[] = {
"Quiz: computer architecture"}, "Quiz: computer architecture"},
{"hw_quiz1_head", "Kvíz k architektuře počítače", {"hw_quiz1_head", "Kvíz k architektuře počítače",
"Quiz on computer architecture"}, "Quiz on computer architecture"},
{"hw_unit2", "Historie počítačů", "History of computers"},
{"hw_unit2_sub", "6 snímků o generacích počítačů a pak kvíz.",
"6 slides about computer generations, then a quiz."},
{"hw_ex2_title", "Kvíz: historie počítačů",
"Quiz: history of computers"},
{"hw_quiz2_head", "Kvíz k historii počítačů",
"Quiz on the history of computers"},
{NULL, NULL, NULL} {NULL, NULL, NULL}
}; };
@ -937,6 +944,19 @@ const TrEntry tr_content[] = {
{"Operační paměť uchovává program i data", NULL, {"Operační paměť uchovává program i data", NULL,
"Main memory stores both the program and data"}, "Main memory stores both the program and data"},
{"Byl tvůrcem teorie her", NULL, "He created game theory"}, {"Byl tvůrcem teorie her", NULL, "He created game theory"},
{"Nultá generace: 1938–1944", NULL, "Zeroth generation: 1938–1944"},
{"Jen několik počítačů, většinou vojenský účel", NULL,
"Only a few computers, mostly for military use"},
{"1. generace – objev elektronky", NULL,
"1st generation – invention of the vacuum tube"},
{"1. generace – děrné štítky", NULL, "1st generation – punch cards"},
{"2. generace – objev tranzistoru", NULL,
"2nd generation – invention of the transistor"},
{"3. generace – integrovaný obvod", NULL,
"3rd generation – integrated circuit"},
{"4. generace – programovatelné mikroprocesory", NULL,
"4th generation – programmable microprocessors"},
{"1972 – první počítačová hra", NULL, "1972 – first computer game"},
{NULL, NULL, NULL} {NULL, NULL, NULL}
}; };

2
main.c
View file

@ -174,6 +174,8 @@ void activate(GtkApplication *app, gpointer user_data) {
gtk_stack_add_named(main_stack, build_hwmap_page(), "hwmap"); gtk_stack_add_named(main_stack, build_hwmap_page(), "hwmap");
gtk_stack_add_named(main_stack, build_hw_unit1_page(), "hwunit1"); gtk_stack_add_named(main_stack, build_hw_unit1_page(), "hwunit1");
gtk_stack_add_named(main_stack, build_hw_unit1_exercise_page(), "hwex1"); gtk_stack_add_named(main_stack, build_hw_unit1_exercise_page(), "hwex1");
gtk_stack_add_named(main_stack, build_hw_unit2_page(), "hwunit2");
gtk_stack_add_named(main_stack, build_hw_unit2_exercise_page(), "hwex2");
{ {
typedef GtkWidget *(*NetBuilder)(void); typedef GtkWidget *(*NetBuilder)(void);
static const struct { static const struct {

View file

@ -59,8 +59,9 @@
#define NET10_SLIDES 3 #define NET10_SLIDES 3
#define NET_LESSONS 10 #define NET_LESSONS 10
#define HW_UNITS 10 #define HW_UNITS 10
#define HW_LESSONS 1 #define HW_LESSONS 2
#define HW_SLIDES 3 #define HW_SLIDES 3
#define HW2_SLIDES 6
typedef enum { typedef enum {
THEME_CATPPUCCIN = 0, THEME_CATPPUCCIN = 0,
@ -763,6 +764,8 @@ void hw_lessons_apply_lang(void);
GtkWidget *build_hwmap_page(void); GtkWidget *build_hwmap_page(void);
GtkWidget *build_hw_unit1_page(void); GtkWidget *build_hw_unit1_page(void);
GtkWidget *build_hw_unit1_exercise_page(void); GtkWidget *build_hw_unit1_exercise_page(void);
GtkWidget *build_hw_unit2_page(void);
GtkWidget *build_hw_unit2_exercise_page(void);
void draw_chip_icon(GtkDrawingArea *area, cairo_t *cr, void draw_chip_icon(GtkDrawingArea *area, cairo_t *cr,
int width, int height, gpointer data); int width, int height, gpointer data);
void net_lesson_notes_ensure(NetLesson *L); void net_lesson_notes_ensure(NetLesson *L);