Slovní úlohy jsou řešeny rozložením na podproblémy, které jsou řešitelné pomocí jednoduchých početních operacích.
Žádné zavádění proměných. Žádné sestavování rovnic. Žádné složité výpočty.
Zápis řešení je ve formě dedukčního stromu a slouží jako strukturovaná reprezentace řešení úlohy.
Řešení úlohy je rozděleno na posloupnost jednoduchých kroků. Pořadí a návaznosti jednotlivých kroků definuje dedukčního strom, kde kroky jsou uzly stromu a vrchol stromu je konečný výsledek.
Podrobnosti a příklady, jak vytvořit dedukční strom zde
Příklad - slepičí hádanka
Parametrizace
Parametry dedukčního stromu může sloužit jako míra složitosti úlohy.
Predikáty
Predikáty umožňují formalní zápis situačního modelu úlohy.
Predikát | Vlastnosti | Příklad |
C container |
(agent=Ája, quantity=2, entity=sešity) |
Ája má 2 sešity |
COMP comparison |
(agentA=Ája, agentB=Honzík, quantity=7, entity=sešity) |
Ája má o 7 sešitů více než Honzík |
COMP RATIO comparison by ratio |
(agentA=Ája, agentB=Honzík, quantity=7, entity=sešity) |
Ája má 7 krát více sešitů než Honzík |
COMP ANGLE comparison between 2 angles |
(agentA=alfa, agentB=beta, relationship="complementary") |
Alfa je doplňkový úhel k beta. |
COMP DIFF comparison by difference |
(agentMinuend=celkem, agentSubtrahend=Honzík, quantity=7, entity=sešity) |
Rozdíl mezi sešity celkem a Honzíkem je 7 sešitů./td> |
TRANSFER transfer between 2 agents |
(agentSender=Ája, agentReceiver=Honzík, quantity=7, entity=sešity) |
Ája dala 7 sešitů Honzíkovi. |
DELTA delta |
(agent=Ája, quantity=7, entity=sešity) |
Ája změna v čase o 7 sešitů. |
RATIO part to whole comparison |
(whole={agent:třída,entity:žáci}, part=chlapci, ratio=1/4) |
Ve třídě je 1/4 chlapců ze všech žáků. |
COMPLEMENT complement part of the whole |
Pokud je ve třídě je 1/4 chlapců ze všech žáků, tak doplněk znamená, že ve tříde je 3/4 dívek ze všech žáků. | |
RATIOS part to part comparison |
(whole={agent:třída,entity:žáci}, parts=[chlapci,dívky], ratios=[1,3]) |
Poměr chlapců a dívek ve třídě je 1:3 (1 chlapec ku 3 dívkám). |
SCALE scaling number or part to part scaling |
Zvětšení. Zvětši 2 krát číslo 6 = 12. Dvojnásobné rozšíření poměru 1:3 je 2:6. | |
SCALE-INVERT inverse scaling number or part to part scaling |
Zmenšení. Zmenši 2 krát číslo 6 = 3. Dvojnásobné zkrácení poměru 2:6 je 1:3. | |
RATE rate |
(agent=Ája, quantity=3, entity=Kč, entityBase=rohlík) |
Každý rohlík, který má Ája, stojí 3 Kč. |
QUOTE quote |
(agent=skupina, agent=dvojice, quantity=5) |
Skupina rozdělena na 5 dvojic. |
SUM sum |
(agentWhole=třída, partAgents=[chlapci,dívky], entityWhole=žáků) |
Počet chlapců a dívek dohromady dává počet žáků ve třídě. |
PRODUCT product |
(agentWhole=obsah obdélníku, partAgents=[šířka,délka], entityWhole=cm2) |
Obsah obdelníku je produktem výšky a šířky. |
PROPORTION proportion |
(inverse=true, entities=[počet výrobků, počet pracovníků]) |
Nepřímá úměra platí mezi veličinami počet výrobků a počet pracovníků. |
UNIT convert unit |
(unit=kg) | Převod na kg. |
GCD Greatest Common Divisor |
(agent=tyč, entity=délka (m)) |
Největší možná délka (m) tyče. |
LCD Least Common Denominator |
(agent=skupina, entity=osob) |
Nejmenší možná skupina osob. |
COMMON SENSE common sense |
(description=...) | Nepřímá uměrnost. Je vztah mezi veličinami, kde je obracený poměr veličin. |
Odvozovací pravidla
Porovnávání
Porovnání - o kolik je větší / menší?
COMP
Porovnání podílem - kolikrát je větší / menší?
COMP-RATIO
Porovnání rozdílem - kolik je rozdíl?
COMP-DIFF
Porovnávání - část z celku
RATIO
COMPLEMENT
Porovnávání - poměry část ku časti
RATIOS
NTH-PART
Porovnávání - úhly
COMP-ANGLE
Škálování
SCALE
SCALE-INVERT
Posuny
SLIDE
SLIDE-INVERT
Stav a změna stavu
DELTA
TRANSFER
Predikát
DELTA
, TRANSFER
není komutativní. Záleží na pořadí, které umožňuje representovat čas.
Rozdělování
RATE
QUOTA
10 : 2 = 5 může reprezentovat 2 různé věci
- 2 díly velikosti 5m - znám počet skupin 2, rozdělení 10m tyče na 2 díly o délce 5m - RATE
- 5 dílů velikosti 2m - znám velikost skupiny 2m, rozdělení 10m tyče po 2m na 5 dílů - QUOTA
Spojování
SUM
PRODUCT
PRODUCT-COMBINE
Převod jednotek
UNIT
Zaokrouhlování
ROUND
Nejmenší společný násobek
LCD
Největší společný dělitel
GCD
Výrazy
EVAL-EXPR
Vzory opakování
PATTERN
Square numbers
Triangular numbers
Rectangular numbers
Posloupnosti
SEQUENCE
Aritmetická
Kvadratická
Geometrická
Základní odvozovací vzory
Procenta
Parametrizace
Výpočet procentní části
Výpočet základu
Výpočet procent
Úměrnosti
Přímá úměrnost
Parametrizace
Nepřímá úměrnost
Parametrizace
Kombinovaná přímá a nepřímá úměrnost
Parametrizace
Porovnávání
Porovnávání s absolutním rozdílem
Parametrizace
Porovnání s relativním rozdílem
Parametrizace
Parametrizace
Porovnání s absolutním a relativním rozdílem
Parametrizace
Porovnání části k celku
Parametrizace
Porovnání více hodnot
Parametrizace
Porovnání A/B a porovnání B/C
Porovnání A/B a porovnání C/B
Porovnání B/A a porovnání B/C
Porovnání B/A a porovnání C/B
Měřítko
Parametrizace
Tělesa
Kvádr
Parametrizace
Válec
Parametrizace
Trojboký hranol
Parametrizace
Jak je to uděláno?
Můžete použít jako javascript module.
<script type="module">
import {cont, inferenceRule} from "https://www.cermatdata.cz/components/math.js";
const result = inferenceRule(
cont("půjčka", 300, "Kč"),
inferenceRule(
cont("úrok", 20, "%"),
cont("půjčka", 100, "%"),
{ kind: 'ratio' }
)
);
//Výsledek: úrok = 60 Kč
console.log(`Výsledek: ${result.agent} = ${result.quantity} ${result.entity}`)
</script>
Dedukční strom
Obecný postup vytvoření dedukčního stromu ze zadání úlohy
- zadání úlohy je potřeba převést (text comprehension) na sadu predikátů (formalizované pravdivé tvrzení)
- použít odvozovací pravidla (inference rules)
- vstupem - seznam predikátů, resp. předpokladů (premises)
- výstupem - jeden predikát
- výsledek úlohy získáme průchodem stromu do hloubky (post-order), tj. aplikujeme odvozovací pravidla až poté, co známe všechny vstupy (premises)
Konkrétní příklad řešení pro zadání úlohy
import { comp, compRatio, nthPart, rate, ratios, sum } from "../../components/math.js";
import { axiomInput, deduce, last } from "../../utils/deduce-utils.js";
export function kytice() {
//agent names and entities
const kyticeAgent = "kytice";
const chryzatemaAgent = "chryzantéma";
const ruzeAgent = "růže";
const staticAgent = "statice";
const kusEntity = "kus";
const entity = "cena";
//axioms
const rozdilRuze = axiomInput(comp(ruzeAgent, staticAgent, 2, kusEntity), 1);
const RtoS = axiomInput(compRatio(ruzeAgent, staticAgent, 5 / 4), 2);
const CHxS = axiomInput(ratios(kyticeAgent, [chryzatemaAgent, staticAgent], [3, 2]), 3);
const ruzeRate = axiomInput(rate(chryzatemaAgent, 54, entity, kusEntity), 4)
const chryzantemaRate = axiomInput(rate(chryzatemaAgent, 40, entity, kusEntity), 5)
const staticeRate = axiomInput(rate(chryzatemaAgent, 35, entity, kusEntity), 6)
//deduction
const statice = deduce(
rozdilRuze,
RtoS
)
const chryzantem = deduce(
last(statice),
CHxS,
nthPart(chryzatemaAgent)
)
const ruze = deduce(
statice,
rozdilRuze
)
return {
deductionTree: deduce(
deduce(ruze, ruzeRate),
deduce(last(statice), staticeRate),
deduce(chryzantem, chryzantemaRate),
sum(kyticeAgent, [ruzeAgent, chryzatemaAgent, staticAgent], entity, entity)
)
}
}
Další příklady jsou zde
Reprezentace dedukčního stromu
Ke každé úloze lze zobrazit různé reprezentace dedukčního stromu
- textový strom - shora dolů kompaktní textový zápis, kořen představuje konečný výsledek
- dedukční strom - zdola nahoru - vizuální strom, který umožňuje zobrazovat i grafické prvky
- textový chat - plochý seznam kroků řešení úlohy - každý krok má strukturu otázka, vstupy a vyvozený závěr spolu s numerickým výpočtem
- chat - grafický chat - oddělení otázky a numerického výpočtu
- chat dialog - interaktivní chat - rozhodovačka po jednotlivých krocích s nutností volby z nabízených možností
Vyzkoušej interaktivní rozhodovačku ve formě chatu po jednotlivých krocích s nutností volby z nabízených možností.