mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 07:04:35 +00:00
472 lines
21 KiB
C
472 lines
21 KiB
C
#include "graduately.h"
|
||
|
||
NetLesson mat4_lessons[MATH_N] = {
|
||
{ .n_slides = 3, .unit_page = "mat4unit1", .ex_page = "mat4ex1" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit2", .ex_page = "mat4ex2" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit3", .ex_page = "mat4ex3" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit4", .ex_page = "mat4ex4" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit5", .ex_page = "mat4ex5" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit6", .ex_page = "mat4ex6" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit7", .ex_page = "mat4ex7" },
|
||
{ .n_slides = 3, .unit_page = "mat4unit8", .ex_page = "mat4ex8" },
|
||
};
|
||
|
||
static GtkWidget *build_mat4_unit1_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Souřadnice", "Velikost a součet",
|
||
"Tip: velikost vektoru (a; b) je √(a² + b²).",
|
||
{
|
||
"Vektor má velikost a směr.",
|
||
"|(3; 4)| = 5, protože 9 + 16 = 25.",
|
||
"Vektory se sčítají po souřadnicích.",
|
||
"(1; 2) + (3; −1) = (4; 1).",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Skalární součin", "Číslo, ne vektor",
|
||
"Tip: (a; b) · (c; d) = ac + bd.",
|
||
{
|
||
"Skalární součin dvou vektorů je číslo.",
|
||
"(1; 2) · (3; 4) = 3 + 8 = 11.",
|
||
"Nulový skalární součin znamená kolmé vektory.",
|
||
"Velikost lze psát jako odmocninu ze skalárního součinu vektoru se sebou.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Vzdálenost", "Velikost rozdílu",
|
||
"Tip: na mřížce osa y míří nahoru.",
|
||
{
|
||
"Vzdálenost bodů je velikost vektoru mezi nimi.",
|
||
"Od [1; 1] do [4; 5] je vektor (3; 4) a vzdálenost 5.",
|
||
"Koncový bod vektoru (3; 2) umístěného do [1; 1] je [4; 3].",
|
||
"Pořadí souřadnic je x a potom y.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[0], "mat4_unit1", "mat4_unit1_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit1_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Jaká je velikost vektoru (3; 4)?", "num:5", "√(9 + 16) = √25 = 5. Výsledek je 5."},
|
||
{"Sečtěte vektory (1; 2) a (3; −1). Napište souřadnice oddělené středníkem.", "pair:4;1", "(1 + 3; 2 + (−1)) = (4; 1). Napište 4;1."},
|
||
{"Spočítejte skalární součin vektorů (1; 2) a (3; 4).", "num:11", "1 · 3 + 2 · 4 = 11. Výsledek je 11."},
|
||
{"Jaká je vzdálenost bodů [1; 1] a [4; 5]?", "num:5", "Rozdíl je (3; 4) a jeho velikost je 5. Výsledek je 5."},
|
||
{"Z bodu A = [1; 1] naneste vektor (3; 2). Zakreslete koncový bod.", "points:4,3;fix:1,1", "Ke každé souřadnici se přičte složka vektoru: [1 + 3; 1 + 2] = [4; 3]."},
|
||
};
|
||
|
||
return math_practice_page(4, 0, "mat4unit1",
|
||
"mat4_ex1_title", "mat4_quiz1_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit2_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Směrnice", "y = ax + b",
|
||
"Tip: a = (y₂ − y₁)/(x₂ − x₁).",
|
||
{
|
||
"Body [1; 2] a [4; 8] určují směrnici (8 − 2)/(4 − 1) = 2.",
|
||
"Přímka procházející bodem [0; 1] se směrnicí 2 má rovnici y = 2x + 1.",
|
||
"Úsek na ose y je 1.",
|
||
"Svislá přímka směrnici tohoto tvaru nemá.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Parametr", "Bod a směrový vektor",
|
||
"Tip: X = A + t · u.",
|
||
{
|
||
"Parametrické vyjádření je x = x₀ + t · u₁, y = y₀ + t · u₂.",
|
||
"Přímka (1; 3) + t(2; 0) má při t = 2 bod [5; 3].",
|
||
"Každé t dá právě jeden bod přímky.",
|
||
"Směrový vektor (2; 0) je vodorovný.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Vzdálenost", "Bod od přímky",
|
||
"Tip: pro ax + by + c = 0 je vzdálenost |ax₀ + by₀ + c| / √(a² + b²).",
|
||
{
|
||
"Přímka 3x + 4y − 10 = 0 má a = 3, b = 4 a c = −10.",
|
||
"Vzdálenost počátku je |−10| / √(9 + 16) = 10/5 = 2.",
|
||
"Čitatel je absolutní hodnota, vzdálenost není záporná.",
|
||
"Čtvrtý vrchol rovnoběžníku k bodům A, B a C je B + C − A.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[1], "mat4_unit2", "mat4_unit2_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit2_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Jaká je směrnice přímky body [1; 2] a [4; 8]?", "num:2", "(8 − 2)/(4 − 1) = 2. Výsledek je 2."},
|
||
{"Přímka má rovnici y = 2x + 1. Jaký je její úsek na ose y?", "num:1", "Úsek je absolutní člen, tedy 1. Výsledek je 1."},
|
||
{"Bod přímky je (1; 3) + t(2; 0). Kam přímka dojde pro t = 2? Napište x a y středníkem.", "pair:5;3", "(1; 3) + 2 · (2; 0) = (5; 3). Napište 5;3."},
|
||
{"Jaká je vzdálenost bodu [0; 0] od přímky 3x + 4y − 10 = 0?", "num:2", "|−10| / √(9 + 16) = 10/5 = 2. Výsledek je 2."},
|
||
{"A = [1; 1], B = [4; 1] a C = [2; 3]. Zakreslete čtvrtý vrchol rovnoběžníku, ve kterém jsou AB a AC sousední strany.", "para:1,1;4,1;2,3", "D = B + C − A = [4 + 2 − 1; 1 + 3 − 1] = [5; 3]."},
|
||
};
|
||
|
||
return math_practice_page(4, 1, "mat4unit2",
|
||
"mat4_ex2_title", "mat4_quiz2_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit3_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Kružnice", "Střed a poloměr",
|
||
"Tip: (x − m)² + (y − n)² = r² má střed [m; n].",
|
||
{
|
||
"Kružnice je množina bodů stejně vzdálených od středu.",
|
||
"(x − 1)² + (y + 2)² = 9 má střed [1; −2].",
|
||
"y + 2 je totéž co y − (−2).",
|
||
"Poloměr je √9 = 3, ne 9.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Elipsa", "Dvě poloosy",
|
||
"Tip: ve tvaru x²/a² + y²/b² = 1 je a poloosa na ose x.",
|
||
{
|
||
"Elipsa v osové poloze se středem v počátku má rovnici x²/a² + y²/b² = 1.",
|
||
"U x²/25 + y²/9 = 1 je a = 5 a b = 3.",
|
||
"Delší poloosa je hlavní, kratší vedlejší.",
|
||
"Vrcholy na ose x jsou [±a; 0], na ose y [0; ±b].",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Excentricita", "Vzdálenost ohniska od středu",
|
||
"Tip: pro a > b je e = √(a² − b²).",
|
||
{
|
||
"Lineární výstřednost e splňuje e² = a² − b², když je a hlavní poloosa.",
|
||
"√(25 − 9) = √16 = 4.",
|
||
"Ohniska elipsy jsou [±e; 0].",
|
||
"Součet vzdáleností bodu elipsy od obou ohnisek je 2a.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[2], "mat4_unit3", "mat4_unit3_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit3_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Kružnice má rovnici (x − 1)² + (y + 2)² = 9. Napište souřadnice středu jako x;y.", "pair:1;-2", "Střed je [1; −2]. Napište 1;-2."},
|
||
{"Jaký je poloměr kružnice (x − 1)² + (y + 2)² = 9?", "num:3", "Pravá strana je r², takže r = 3. Výsledek je 3."},
|
||
{"Elipsa má rovnici x²/25 + y²/9 = 1. Jak dlouhá je poloosa a na ose x?", "num:5", "a² = 25, takže a = 5. Výsledek je 5."},
|
||
{"Elipsa má rovnici x²/25 + y²/9 = 1. Jak dlouhá je poloosa b na ose y?", "num:3", "b² = 9, takže b = 3. Výsledek je 3."},
|
||
{"Elipsa má a = 5 a b = 3. Jaká je její lineární výstřednost e?", "num:4", "e = √(25 − 9) = √16 = 4. Výsledek je 4."},
|
||
};
|
||
|
||
return math_practice_page(4, 2, "mat4unit3",
|
||
"mat4_ex3_title", "mat4_quiz3_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit4_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Tvar", "a + bi",
|
||
"Tip: i² = −1. Reálnou a imaginární část pište oddělené středníkem.",
|
||
{
|
||
"Komplexní číslo a + bi má reálnou část a a imaginární část b.",
|
||
"i je imaginární jednotka a i² = −1.",
|
||
"Čísla se sčítají po složkách.",
|
||
"(2 + 3i) + (1 − i) = 3 + 2i.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Násobení", "Jako dvojčlen",
|
||
"Tip: (1 + i)(1 − i) je rozdíl čtverců.",
|
||
{
|
||
"(a + bi)(c + di) = ac + adi + bci + bdi².",
|
||
"bdi² = −bd, proto se imaginární jednotka ve výsledku nemusí objevit.",
|
||
"(1 + i)(1 − i) = 1 − (i)² = 1 − (−1) = 2.",
|
||
"Komplexní čísla lze násobit i v goniometrickém tvaru sčítáním argumentů.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Absolutní hodnota", "Vzdálenost od nuly",
|
||
"Tip: |a + bi| = √(a² + b²).",
|
||
{
|
||
"Absolutní hodnota je vzdálenost obrazu čísla od počátku Gaussovy roviny.",
|
||
"|3 + 4i| = 5.",
|
||
"|z| je vždy reálné nezáporné číslo.",
|
||
"i² = −1, i³ = −i a i⁴ = 1.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[3], "mat4_unit4", "mat4_unit4_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit4_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Sečtěte 2 + 3i a 1 − i. Napište reálnou a imaginární část středníkem.", "pair:3;2", "(2 + 1) + (3 − 1)i = 3 + 2i. Napište 3;2."},
|
||
{"Spočítejte (1 + i)(1 − i).", "num:2", "1 − i² = 1 − (−1) = 2. Výsledek je 2."},
|
||
{"Jaká je absolutní hodnota čísla 3 + 4i?", "num:5", "√(9 + 16) = 5. Výsledek je 5."},
|
||
{"Kolik je i²?", "num:-1", "Imaginární jednotka splňuje i² = −1. Výsledek je -1."},
|
||
};
|
||
|
||
return math_practice_page(4, 3, "mat4unit4",
|
||
"mat4_ex4_title", "mat4_quiz4_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit5_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Mocnina", "(xⁿ)' = n xⁿ⁻¹",
|
||
"Tip: derivace je směrnice tečny.",
|
||
{
|
||
"Derivace funkce v bodě je směrnice tečny grafu v tom bodě.",
|
||
"(x³)' = 3x². V bodě x = 2 je 3 · 4 = 12.",
|
||
"(5x²)' = 10x. V bodě x = 1 je 10.",
|
||
"Derivace konstanty je 0 a konstanta se vytýká.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Tečna", "Směrnice v bodě",
|
||
"Tip: u f(x) = x² je f'(x) = 2x.",
|
||
{
|
||
"Tečna ke grafu y = x² v bodě x = 1 má směrnici 2.",
|
||
"Rovnice tečny používá bod [1; 1] a tuto směrnici.",
|
||
"Kladná derivace znamená, že funkce v bodě roste.",
|
||
"Záporná derivace znamená, že funkce klesá.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Sinus", "Derivace sinu je kosinus",
|
||
"Tip: (sin x)' = cos x a cos 0 = 1.",
|
||
{
|
||
"Derivace funkce sin x je cos x.",
|
||
"Derivace funkce cos x je −sin x.",
|
||
"V bodě x = 0 je derivace sinu rovna cos 0 = 1.",
|
||
"Úhel v tomto vzorci je v radiánech, ale nula je nula v obou jednotkách.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[4], "mat4_unit5", "mat4_unit5_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit5_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Jaká je derivace funkce x³ v bodě x = 2?", "num:12", "(x³)' = 3x² a 3 · 4 = 12. Výsledek je 12."},
|
||
{"Jaká je derivace funkce 5x² v bodě x = 1?", "num:10", "(5x²)' = 10x a v jedničce je 10. Výsledek je 10."},
|
||
{"Jakou směrnici má tečna ke grafu y = x² v bodě x = 1?", "num:2", "Derivace 2x je v bodě 1 rovna 2. Výsledek je 2."},
|
||
{"Jaká je derivace funkce sin x v bodě x = 0? Derivace sinu je kosinus.", "num:1", "(sin x)' = cos x a cos 0 = 1. Výsledek je 1."},
|
||
};
|
||
|
||
return math_practice_page(4, 4, "mat4unit5",
|
||
"mat4_ex5_title", "mat4_quiz5_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit6_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Stacionární bod", "Derivace je nula",
|
||
"Tip: f'(x) = 0 je vodorovná tečna.",
|
||
{
|
||
"V lokálním extrému diferencovatelné funkce je derivace nulová.",
|
||
"U f(x) = x³ − 3x je f'(x) = 3x² − 3.",
|
||
"3(x² − 1) = 0 dává x = −1 a x = 1.",
|
||
"To jsou jediní kandidáti na lokální extrém.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Maximum a minimum", "Znaménko druhé derivace",
|
||
"Tip: f''(x) = 6x. Záporná druhá derivace znamená lokální maximum.",
|
||
{
|
||
"V x = −1 je f''(−1) = −6 < 0, takže jde o lokální maximum.",
|
||
"f(−1) = −1 + 3 = 2.",
|
||
"V x = 1 je f''(1) = 6 > 0, takže jde o lokální minimum.",
|
||
"f(1) = 1 − 3 = −2.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Jiný příklad", "Lineární derivace",
|
||
"Tip: g'(x) = 2x − 4 je nula při x = 2.",
|
||
{
|
||
"Kde je derivace nula, má graf vodorovnou tečnu.",
|
||
"Rovnice 2x − 4 = 0 má řešení x = 2.",
|
||
"Pro x < 2 je derivace 2x − 4 záporná, funkce klesá.",
|
||
"Pro x > 2 je derivace kladná, funkce roste.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[5], "mat4_unit6", "mat4_unit6_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit6_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Funkce f(x) = x³ − 3x. Ve kterém x má lokální maximum?", "num:-1", "f'(x) = 3x² − 3 = 0 pro x = ±1 a v −1 je maximum. Výsledek je -1."},
|
||
{"Funkce f(x) = x³ − 3x. Jaká je hodnota lokálního maxima?", "num:2", "f(−1) = −1 + 3 = 2. Výsledek je 2."},
|
||
{"Funkce f(x) = x³ − 3x. Ve kterém x má lokální minimum?", "num:1", "Druhá derivace 6x je v x = 1 kladná. Výsledek je 1."},
|
||
{"Derivace funkce je g'(x) = 2x − 4. Pro které x je derivace nulová?", "num:2", "2x − 4 = 0 dává x = 2. Výsledek je 2."},
|
||
};
|
||
|
||
return math_practice_page(4, 5, "mat4unit6",
|
||
"mat4_ex6_title", "mat4_quiz6_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit7_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Primitivní funkce", "Opačný postup k derivaci",
|
||
"Tip: primitivní funkce k xⁿ je xⁿ⁺¹/(n + 1) pro n ≠ −1.",
|
||
{
|
||
"Neurčitý integrál je množina primitivních funkcí.",
|
||
"Liší se o konstantu, protože derivace konstanty je nula.",
|
||
"Primitivní funkce k 2x je x².",
|
||
"Primitivní funkce k x² je x³/3.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Určitý integrál", "Newtonův vzorec",
|
||
"Tip: ∫ od a do b z f je F(b) − F(a).",
|
||
{
|
||
"Určitý integrál nezáporné funkce je obsah plochy pod grafem.",
|
||
"∫ od 0 do 3 z 2x dx = [x²] od 0 do 3 = 9.",
|
||
"∫ od 0 do 2 z x² dx = [x³/3] od 0 do 2 = 8/3.",
|
||
"Dolní mez 0 u těchto mocnin často vynuluje první člen.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Konstanta", "Násobek lze vytknout",
|
||
"Tip: integrál z c · f je c krát integrál z f.",
|
||
{
|
||
"∫ od 0 do 1 z 3x² dx = [x³] od 0 do 1 = 1.",
|
||
"∫ od 0 do 2 z 6x dx = [3x²] od 0 do 2 = 12.",
|
||
"Záporná funkce dává záporný integrál, nejde vždy o obsah beze znaménka.",
|
||
"Součet funkcí se integruje člen po členu.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[6], "mat4_unit7", "mat4_unit7_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit7_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Spočítejte integrál od 0 do 3 z funkce 2x.", "num:9", "Primitivní funkce je x² a 9 − 0 = 9. Výsledek je 9."},
|
||
{"Spočítejte integrál od 0 do 2 z funkce x².", "num:8/3", "Primitivní funkce je x³/3 a 8/3 − 0 = 8/3. Výsledek je 8/3."},
|
||
{"Spočítejte integrál od 0 do 1 z funkce 3x².", "num:1", "Primitivní funkce je x³ a 1 − 0 = 1. Výsledek je 1."},
|
||
{"Spočítejte integrál od 0 do 2 z funkce 6x.", "num:12", "Primitivní funkce je 3x² a 12 − 0 = 12. Výsledek je 12."},
|
||
};
|
||
|
||
return math_practice_page(4, 6, "mat4unit7",
|
||
"mat4_ex7_title", "mat4_quiz7_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit8_page(void) {
|
||
static const NetSlide slides[] = {
|
||
{
|
||
"1 / 3 • Číslo", "Logaritmus a zlomek",
|
||
"Tip: log₂(8) = 3, protože 2³ = 8.",
|
||
{
|
||
"Logaritmus vrací exponent.",
|
||
"1/2 + 1/3 = 5/6.",
|
||
"Společný jmenovatel se hledá i v maturitním příkladu stejně jako na základní škole.",
|
||
"Výsledek se krátí.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"2 / 3 • Počet a vektor", "Kombinace a velikost",
|
||
"Tip: C(6, 2) = 15 a |(3; 4)| = 5.",
|
||
{
|
||
"C(6, 2) = (6 · 5) / 2 = 15.",
|
||
"Pořadí vybrané dvojice se nepočítá dvakrát.",
|
||
"Velikost vektoru (3; 4) je přepona trojúhelníku 3-4-5.",
|
||
"Skalární součin by u kolmých vektorů vyšel nula.",
|
||
NULL,
|
||
},
|
||
},
|
||
{
|
||
"3 / 3 • Rovnice", "x² − 1 = 0",
|
||
"Tip: rozdíl čtverců (x − 1)(x + 1).",
|
||
{
|
||
"x² − 1 = 0 má kořeny −1 a 1.",
|
||
"Oba se napíšou, oddělené středníkem.",
|
||
"Diskriminant je 0 − 4 · 1 · (−1) = 4.",
|
||
"Zkouška: 1 − 1 = 0 a 1 − 1 = 0.",
|
||
NULL,
|
||
},
|
||
},
|
||
};
|
||
|
||
return math_unit_page(4, &mat4_lessons[7], "mat4_unit8", "mat4_unit8_sub",
|
||
slides, G_N_ELEMENTS(slides));
|
||
}
|
||
|
||
static GtkWidget *build_mat4_unit8_exercise_page(void) {
|
||
static const MathItem qs[] = {
|
||
{"Spočítejte logaritmus o základu 2 z 8.", "num:3", "2³ = 8. Výsledek je 3."},
|
||
{"Kolik je kombinací 2 prvků ze 6?", "num:15", "C(6, 2) = 15. Výsledek je 15."},
|
||
{"Jaká je velikost vektoru (3; 4)?", "num:5", "√(9 + 16) = 5. Výsledek je 5."},
|
||
{"Spočítejte 1/2 + 1/3.", "num:5/6", "3/6 + 2/6 = 5/6. Výsledek je 5/6."},
|
||
{"Najděte kořeny rovnice x² − 1 = 0. Oddělte je středníkem.", "set:-1;1", "(x − 1)(x + 1) = 0. Napište -1;1."},
|
||
};
|
||
|
||
return math_practice_page(4, 7, "mat4unit8",
|
||
"mat4_ex8_title", "mat4_quiz8_head",
|
||
qs, G_N_ELEMENTS(qs));
|
||
}
|
||
|
||
void add_mat4_pages(GtkStack *stack) {
|
||
typedef GtkWidget *(*MathBuilder)(void);
|
||
static const struct {
|
||
const char *unit_name;
|
||
const char *ex_name;
|
||
MathBuilder build_unit;
|
||
MathBuilder build_ex;
|
||
} pages[] = {
|
||
{"mat4unit1", "mat4ex1", build_mat4_unit1_page, build_mat4_unit1_exercise_page},
|
||
{"mat4unit2", "mat4ex2", build_mat4_unit2_page, build_mat4_unit2_exercise_page},
|
||
{"mat4unit3", "mat4ex3", build_mat4_unit3_page, build_mat4_unit3_exercise_page},
|
||
{"mat4unit4", "mat4ex4", build_mat4_unit4_page, build_mat4_unit4_exercise_page},
|
||
{"mat4unit5", "mat4ex5", build_mat4_unit5_page, build_mat4_unit5_exercise_page},
|
||
{"mat4unit6", "mat4ex6", build_mat4_unit6_page, build_mat4_unit6_exercise_page},
|
||
{"mat4unit7", "mat4ex7", build_mat4_unit7_page, build_mat4_unit7_exercise_page},
|
||
{"mat4unit8", "mat4ex8", build_mat4_unit8_page, build_mat4_unit8_exercise_page},
|
||
};
|
||
|
||
for (guint i = 0; i < G_N_ELEMENTS(pages); i++) {
|
||
gtk_stack_add_named(stack, pages[i].build_unit(), pages[i].unit_name);
|
||
gtk_stack_add_named(stack, pages[i].build_ex(), pages[i].ex_name);
|
||
}
|
||
}
|