mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
Move integer/real into a new HW unit 4.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
0e1116d969
commit
1e3596cc0e
5 changed files with 63 additions and 32 deletions
|
|
@ -1085,7 +1085,7 @@ def main() -> int:
|
||||||
})
|
})
|
||||||
|
|
||||||
hw_lessons = []
|
hw_lessons = []
|
||||||
for i in range(1, 4):
|
for i in range(1, 5):
|
||||||
hw_lessons.append({
|
hw_lessons.append({
|
||||||
"id": i,
|
"id": i,
|
||||||
"titleKey": f"hw_unit{i}",
|
"titleKey": f"hw_unit{i}",
|
||||||
|
|
|
||||||
98
src/hw.c
98
src/hw.c
|
|
@ -6,6 +6,7 @@ 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" },
|
{ .n_slides = HW2_SLIDES, .unit_page = "hwunit2", .ex_page = "hwex2" },
|
||||||
{ .n_slides = HW3_SLIDES, .unit_page = "hwunit3", .ex_page = "hwex3" },
|
{ .n_slides = HW3_SLIDES, .unit_page = "hwunit3", .ex_page = "hwex3" },
|
||||||
|
{ .n_slides = HW4_SLIDES, .unit_page = "hwunit4", .ex_page = "hwex4" },
|
||||||
};
|
};
|
||||||
|
|
||||||
void hw_rail_theme_reset(void);
|
void hw_rail_theme_reset(void);
|
||||||
|
|
@ -252,7 +253,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_unit2", "hw_unit3"
|
"hw_unit1", "hw_unit2", "hw_unit3", "hw_unit4"
|
||||||
};
|
};
|
||||||
|
|
||||||
card = gtk_button_new();
|
card = gtk_button_new();
|
||||||
|
|
@ -853,7 +854,7 @@ GtkWidget *build_hw_unit2_exercise_page(void) {
|
||||||
GtkWidget *build_hw_unit3_page(void) {
|
GtkWidget *build_hw_unit3_page(void) {
|
||||||
static const NetSlide slides[HW3_SLIDES] = {
|
static const NetSlide slides[HW3_SLIDES] = {
|
||||||
{
|
{
|
||||||
"1 / 4 • Bit", "Bit – nejmenší jednotka informace",
|
"1 / 2 • Bit", "Bit – nejmenší jednotka informace",
|
||||||
"Bit = binary digit (dvojková číslice)",
|
"Bit = binary digit (dvojková číslice)",
|
||||||
{
|
{
|
||||||
"Bit je dvojková číslice – nabývá hodnoty 0 nebo 1.",
|
"Bit je dvojková číslice – nabývá hodnoty 0 nebo 1.",
|
||||||
|
|
@ -863,7 +864,7 @@ GtkWidget *build_hw_unit3_page(void) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"2 / 4 • Byte", "Byte – adresovatelná jednotka paměti",
|
"2 / 2 • Byte", "Byte – adresovatelná jednotka paměti",
|
||||||
"Tip: 1 B = 8 b",
|
"Tip: 1 B = 8 b",
|
||||||
{
|
{
|
||||||
"Byte je nejmenší adresovatelná jednotka paměti.",
|
"Byte je nejmenší adresovatelná jednotka paměti.",
|
||||||
|
|
@ -873,37 +874,6 @@ GtkWidget *build_hw_unit3_page(void) {
|
||||||
NULL,
|
NULL,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"3 / 4 • Integer", "Proměnná typu integer (celá čísla)",
|
|
||||||
"Tip: n bitů → 2ⁿ různých hodnot (např. 0 až 2ⁿ − 1)",
|
|
||||||
{
|
|
||||||
"Celá čísla se ukládají binárně v pevné řádové čárce.",
|
|
||||||
"Mají pevný počet bitů – standardně 16 nebo 32 "
|
|
||||||
"(tedy 2 nebo 4 byty).",
|
|
||||||
"Při 16bitovém formátu je 2¹⁶ = 65 536 různých hodnot; "
|
|
||||||
"u nezáporných čísel interval 0 až 2¹⁶ − 1, tedy 0–65 535.",
|
|
||||||
"Obecně u n bitů je M = 2ⁿ různých hodnot "
|
|
||||||
"(u 16 bitů je nejvyšší nezáporné číslo 65 535).",
|
|
||||||
"Ostatní čísla se do tohoto intervalu převádějí transformací "
|
|
||||||
"(mapováním na přirozená čísla z daného rozsahu).",
|
|
||||||
NULL,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"4 / 4 • Real", "Proměnná typu real (desetinná čísla)",
|
|
||||||
"Tip: tvar = mantisa × základ^exponent",
|
|
||||||
{
|
|
||||||
"Desetinná čísla se ukládají v pohyblivé řádové čárce "
|
|
||||||
"ve tvaru mantisa a exponent.",
|
|
||||||
"Mantisa je normalizovaná tak, že první platná číslice "
|
|
||||||
"je hned za desetinnou čárkou.",
|
|
||||||
"Posun řádové čárky vyrovná odpovídající změna exponentu.",
|
|
||||||
"Standardně zabírá 4 nebo 8 bytů v paměti.",
|
|
||||||
"Více bytů se používá jen tehdy, když potřebujeme vyšší "
|
|
||||||
"přesnost výpočtů.",
|
|
||||||
NULL,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return build_hw_unit_page(&hw_lessons[2], "hw_unit3", "hw_unit3_sub",
|
return build_hw_unit_page(&hw_lessons[2], "hw_unit3", "hw_unit3_sub",
|
||||||
|
|
@ -925,6 +895,58 @@ GtkWidget *build_hw_unit3_exercise_page(void) {
|
||||||
4, 0},
|
4, 0},
|
||||||
{"Kolik bitů má obvykle jeden byte?",
|
{"Kolik bitů má obvykle jeden byte?",
|
||||||
{"2", "4", "8", "16"}, 4, 2},
|
{"2", "4", "8", "16"}, 4, 2},
|
||||||
|
};
|
||||||
|
static const char *hints[] = {
|
||||||
|
"Bit = dvojková číslice, nejmenší jednotka informace",
|
||||||
|
"Bit nabývá hodnoty 0 nebo 1",
|
||||||
|
"Byte = nejmenší adresovatelná jednotka paměti",
|
||||||
|
"1 B = 8 b",
|
||||||
|
};
|
||||||
|
return build_hw_mcq_page(2, "hwunit3", "hw_ex3_title", "hw_quiz3_head",
|
||||||
|
qs, hints, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *build_hw_unit4_page(void) {
|
||||||
|
static const NetSlide slides[HW4_SLIDES] = {
|
||||||
|
{
|
||||||
|
"1 / 2 • Integer", "Proměnná typu integer (celá čísla)",
|
||||||
|
"Tip: n bitů → 2ⁿ různých hodnot (např. 0 až 2ⁿ − 1)",
|
||||||
|
{
|
||||||
|
"Celá čísla se ukládají binárně v pevné řádové čárce.",
|
||||||
|
"Mají pevný počet bitů – standardně 16 nebo 32 "
|
||||||
|
"(tedy 2 nebo 4 byty).",
|
||||||
|
"Při 16bitovém formátu je 2¹⁶ = 65 536 různých hodnot; "
|
||||||
|
"u nezáporných čísel interval 0 až 2¹⁶ − 1, tedy 0–65 535.",
|
||||||
|
"Obecně u n bitů je M = 2ⁿ různých hodnot "
|
||||||
|
"(u 16 bitů je nejvyšší nezáporné číslo 65 535).",
|
||||||
|
"Ostatní čísla se do tohoto intervalu převádějí transformací "
|
||||||
|
"(mapováním na přirozená čísla z daného rozsahu).",
|
||||||
|
NULL,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"2 / 2 • Real", "Proměnná typu real (desetinná čísla)",
|
||||||
|
"Tip: tvar = mantisa × základ^exponent",
|
||||||
|
{
|
||||||
|
"Desetinná čísla se ukládají v pohyblivé řádové čárce "
|
||||||
|
"ve tvaru mantisa a exponent.",
|
||||||
|
"Mantisa je normalizovaná tak, že první platná číslice "
|
||||||
|
"je hned za desetinnou čárkou.",
|
||||||
|
"Posun řádové čárky vyrovná odpovídající změna exponentu.",
|
||||||
|
"Standardně zabírá 4 nebo 8 bytů v paměti.",
|
||||||
|
"Více bytů se používá jen tehdy, když potřebujeme vyšší "
|
||||||
|
"přesnost výpočtů.",
|
||||||
|
NULL,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return build_hw_unit_page(&hw_lessons[3], "hw_unit4", "hw_unit4_sub",
|
||||||
|
slides, HW4_SLIDES);
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *build_hw_unit4_exercise_page(void) {
|
||||||
|
static const ChoiceQ qs[] = {
|
||||||
{"Jak se ukládají celá čísla (integer)?",
|
{"Jak se ukládají celá čísla (integer)?",
|
||||||
{"Jen jako text",
|
{"Jen jako text",
|
||||||
"Binárně v pevné řádové čárce s pevným počtem bitů",
|
"Binárně v pevné řádové čárce s pevným počtem bitů",
|
||||||
|
|
@ -949,15 +971,11 @@ GtkWidget *build_hw_unit3_exercise_page(void) {
|
||||||
4, 1},
|
4, 1},
|
||||||
};
|
};
|
||||||
static const char *hints[] = {
|
static const char *hints[] = {
|
||||||
"Bit = dvojková číslice, nejmenší jednotka informace",
|
|
||||||
"Bit nabývá hodnoty 0 nebo 1",
|
|
||||||
"Byte = nejmenší adresovatelná jednotka paměti",
|
|
||||||
"1 B = 8 b",
|
|
||||||
"Integer = pevná řádová čárka, pevný počet bitů (16/32…)",
|
"Integer = pevná řádová čárka, pevný počet bitů (16/32…)",
|
||||||
"16 bitů → 2¹⁶ = 65 536 hodnot (0–65 535 u nezáporných)",
|
"16 bitů → 2¹⁶ = 65 536 hodnot (0–65 535 u nezáporných)",
|
||||||
"Real = pohyblivá řádová čárka = mantisa + exponent",
|
"Real = pohyblivá řádová čárka = mantisa + exponent",
|
||||||
"Normalizace: 1. platná číslice hned za desetinnou čárkou",
|
"Normalizace: 1. platná číslice hned za desetinnou čárkou",
|
||||||
};
|
};
|
||||||
return build_hw_mcq_page(2, "hwunit3", "hw_ex3_title", "hw_quiz3_head",
|
return build_hw_mcq_page(3, "hwunit4", "hw_ex4_title", "hw_quiz4_head",
|
||||||
qs, hints, 8);
|
qs, hints, 4);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
11
src/i18n.c
11
src/i18n.c
|
|
@ -536,12 +536,19 @@ const TrEntry tr_ui[] = {
|
||||||
{"hw_quiz2_head", "Kvíz k historii počítačů",
|
{"hw_quiz2_head", "Kvíz k historii počítačů",
|
||||||
"Quiz on the history of computers"},
|
"Quiz on the history of computers"},
|
||||||
{"hw_unit3", "Zobrazování dat v počítači", "Data representation"},
|
{"hw_unit3", "Zobrazování dat v počítači", "Data representation"},
|
||||||
{"hw_unit3_sub", "4 snímky: bit, byte, integer a real – a pak kvíz.",
|
{"hw_unit3_sub", "2 snímky o bitu a bytu a pak kvíz.",
|
||||||
"4 slides: bit, byte, integer and real – then a quiz."},
|
"2 slides about bits and bytes, then a quiz."},
|
||||||
{"hw_ex3_title", "Kvíz: zobrazování dat",
|
{"hw_ex3_title", "Kvíz: zobrazování dat",
|
||||||
"Quiz: data representation"},
|
"Quiz: data representation"},
|
||||||
{"hw_quiz3_head", "Kvíz k zobrazování dat v počítači",
|
{"hw_quiz3_head", "Kvíz k zobrazování dat v počítači",
|
||||||
"Quiz on data representation in computers"},
|
"Quiz on data representation in computers"},
|
||||||
|
{"hw_unit4", "Celá a desetinná čísla", "Integers and reals"},
|
||||||
|
{"hw_unit4_sub", "2 snímky o integer a real a pak kvíz.",
|
||||||
|
"2 slides about integer and real, then a quiz."},
|
||||||
|
{"hw_ex4_title", "Kvíz: integer a real",
|
||||||
|
"Quiz: integer and real"},
|
||||||
|
{"hw_quiz4_head", "Kvíz k celým a desetinným číslům",
|
||||||
|
"Quiz on integers and floating-point numbers"},
|
||||||
{"czech_sub", "Vyberte oblast a začněte procvičovat.",
|
{"czech_sub", "Vyberte oblast a začněte procvičovat.",
|
||||||
"Pick an area and start practicing."},
|
"Pick an area and start practicing."},
|
||||||
{"Literatura", "Literatura", "Literature"},
|
{"Literatura", "Literatura", "Literature"},
|
||||||
|
|
|
||||||
|
|
@ -390,6 +390,7 @@ static gboolean run_smoke_test(gpointer data) {
|
||||||
"cetba1984", "cetba1984quiz", "cetba1984dej",
|
"cetba1984", "cetba1984quiz", "cetba1984dej",
|
||||||
"cetbaFuks", "cetbaFuksQuiz", "cetbaFuksDej",
|
"cetbaFuks", "cetbaFuksQuiz", "cetbaFuksDej",
|
||||||
"hwunit1", "hwex1", "hwunit2", "hwex2", "hwunit3", "hwex3",
|
"hwunit1", "hwex1", "hwunit2", "hwex2", "hwunit3", "hwex3",
|
||||||
|
"hwunit4", "hwex4",
|
||||||
"unit1", "unit2", "unit3",
|
"unit1", "unit2", "unit3",
|
||||||
"u1e1", "u1e13", "u2e1", "u2e19", "u3e1", "u3e15",
|
"u1e1", "u1e13", "u2e1", "u2e19", "u3e1", "u3e15",
|
||||||
"u1vocab", "u2vocab", "u3vocab",
|
"u1vocab", "u2vocab", "u3vocab",
|
||||||
|
|
@ -530,6 +531,8 @@ void activate(GtkApplication *app, gpointer user_data) {
|
||||||
gtk_stack_add_named(main_stack, build_hw_unit2_exercise_page(), "hwex2");
|
gtk_stack_add_named(main_stack, build_hw_unit2_exercise_page(), "hwex2");
|
||||||
gtk_stack_add_named(main_stack, build_hw_unit3_page(), "hwunit3");
|
gtk_stack_add_named(main_stack, build_hw_unit3_page(), "hwunit3");
|
||||||
gtk_stack_add_named(main_stack, build_hw_unit3_exercise_page(), "hwex3");
|
gtk_stack_add_named(main_stack, build_hw_unit3_exercise_page(), "hwex3");
|
||||||
|
gtk_stack_add_named(main_stack, build_hw_unit4_page(), "hwunit4");
|
||||||
|
gtk_stack_add_named(main_stack, build_hw_unit4_exercise_page(), "hwex4");
|
||||||
{
|
{
|
||||||
typedef GtkWidget *(*NetBuilder)(void);
|
typedef GtkWidget *(*NetBuilder)(void);
|
||||||
static const struct {
|
static const struct {
|
||||||
|
|
|
||||||
|
|
@ -113,10 +113,11 @@ extern char *app_progress_cetba;
|
||||||
#define NET27_SLIDES 8
|
#define NET27_SLIDES 8
|
||||||
#define NET_LESSONS 27
|
#define NET_LESSONS 27
|
||||||
#define HW_UNITS 10
|
#define HW_UNITS 10
|
||||||
#define HW_LESSONS 3
|
#define HW_LESSONS 4
|
||||||
#define HW_SLIDES 3
|
#define HW_SLIDES 3
|
||||||
#define HW2_SLIDES 6
|
#define HW2_SLIDES 6
|
||||||
#define HW3_SLIDES 4
|
#define HW3_SLIDES 2
|
||||||
|
#define HW4_SLIDES 2
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
THEME_CATPPUCCIN = 0,
|
THEME_CATPPUCCIN = 0,
|
||||||
|
|
@ -866,6 +867,8 @@ GtkWidget *build_hw_unit2_page(void);
|
||||||
GtkWidget *build_hw_unit2_exercise_page(void);
|
GtkWidget *build_hw_unit2_exercise_page(void);
|
||||||
GtkWidget *build_hw_unit3_page(void);
|
GtkWidget *build_hw_unit3_page(void);
|
||||||
GtkWidget *build_hw_unit3_exercise_page(void);
|
GtkWidget *build_hw_unit3_exercise_page(void);
|
||||||
|
GtkWidget *build_hw_unit4_page(void);
|
||||||
|
GtkWidget *build_hw_unit4_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 draw_czech_flag(GtkDrawingArea *area, cairo_t *cr,
|
void draw_czech_flag(GtkDrawingArea *area, cairo_t *cr,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue