diff --git a/docs/main.pdf b/docs/main.pdf index 83cea7d..a2f431e 100644 Binary files a/docs/main.pdf and b/docs/main.pdf differ diff --git a/docs/main.typst b/docs/main.typst index a8171d8..57f15b8 100644 --- a/docs/main.typst +++ b/docs/main.typst @@ -6,7 +6,7 @@ #show: project.with( university: "Latvijas Universitāte", faculty: "Eksakto zinātņu un tehnoloģiju fakultāte", - title: [Atmiņas kartīšu lietotne ar domēna specifiskās valodas izmantošanu\ Kvalifikācijas darbs], + title: [Atmiņas kartīšu lietotne ar domēna specifiskas valodas izmantošanu\ Kvalifikācijas darbs], authors: ( "Jorens Štekeļs, js21283", ), advisor: "prof. Dr. sc. comp. Laila Niedrīte", date: "Rīga 2025", @@ -194,6 +194,76 @@ atmiņas kartīšu dati un dati par saskarni ar kartītēm. == Funkcionālās prasības +=== Augsta līmeņa valodas specifikācija + +Kartīšu veidošanai vienkāršā tekstā tiek izmantota vienkārša +domēna specifiska valoda. Ir 4 jautājumu veidi, kuru struktūra +ir līdzīga ar dažām atšķirībām. Katrs jautājums sākas ar priekšu, kam +var būt skaitlis, kas apzīmē intervālu stundās, pēc kura tas būs atkārtoti izmantots. + +``` +- Ka sauc Latvijas galvaspilsētu? > + [...] +- [12.5] Ka sauc Igaunijas galvaspilsētu? > + [...] +``` + +Vienkāršs atbilžu jautājums ir jautājums, kam ir viena vai +vairākas pareizas atbildes, katra atbilde sākas ar "-". + +```markdown +- Ka sauc Lietuvas galvas pilsētu? > + - Viļņus +- Nosauciet Baltijas valstis > + - Latvija + - Igaunija + - Lietuva +``` + +Izvēles jautājums ir jautājums, kam ir viens vai vairākas pareizas +atbildes, pareizās atbildes sākas ar "+", nepareizās -- ar "-". + +```markdown +- Kuras no valstīm ir Baltijas valstis > + + Latvija + - Rumānija + + Lietuva + - Spānija +``` +Secības jautājums. + +``` +- Sakārtojiet zinātniskās metodes soļus pareizā secībā > + -^ Uzdod jautājumu + -^ Izvirza hipotēzi + -^ Veic eksperimentu + -^ Analizē datus +``` + +==== Grupēšanas jautājums + +// TODO + +``` +- Savienojiet planētas ar to īpašībām > + - Zeme: + - Satur dzīvi + - Jupiters: + - Lielākā planēta + - Ir gredzeni + - Venēra: + - Merkurs: + - Mazākā + - Saturns: + - Ir gredzeni + - Neptūns: + - Tālākā no saules + - Ir gredzeni +``` + +=== Jautājumu datu struktūra + + === Funkciju sadalījums moduļos Risinājuma moduļi ar to saistītām datu plūsmām un datu glabātuvēm ir attēlots @@ -220,23 +290,22 @@ Funkciju sadalījums moduļos ir apraksīts sadalījuma tabulā (skat. @tbl:func // TODO links: #link[AMF01] // TODO: adjust the rowspanxes - rowspanx(7)[Atmiņas bāzes modulis], + rowspanx(8)[Atmiņas bāzes modulis], [Kartīšu faila ielāde], [AB01], - [Kartīšu saraksta lappuses izveidošana], [AB02], - [Kartītes pievienošana], [AB03], - [Kartītes redigēšana], [AB04], - [Kartītes dzēšana], [AB05], - [Kartītes faila saglabāšana], [AB06], - [Atmiņas bāzes saraksta parādīšana], [AB07], - // TODO ielāde?? + [Kartīšu saraksta lappušu izveidošana], [AB02], + [Atmiņas bāzes lappuses iesūšana], [AB03], + [Kartīšu pievienošana], [AB04], + [Kartītes pirmteksta iegūšana], [AB05], + [Kartītes redigēšana], [AB06], + [Kartītes dzēšana], [AB07], + [Kartītes faila saglabāšana], [AB08], rowspanx(6)[Mācīšanās modulis], [Nākamās kartītes noteikšana], [MA01], - [Atbildes kartītes pārbaude], [MA02], - [Vairāku atbilžu kartītes pārbaude], [MA03], - [Kārtošanas kartītes pārbaude], [MA04], - [Grupēšanas kartītes pārbaude], [MA05], - [Intervāla grupas atbildes sniegšana], [MA06], + [Izvēles kartītes pārbaude], [MA02], + [Kārtošanas kartītes pārbaude], [MA03], + [Grupēšanas kartītes pārbaude], [MA04], + [Intervāla grupas atbildes sniegšana], [MA05], // un meta datu saglabāšana rowspanx(3)[Konfigurācijas modulis], @@ -247,41 +316,307 @@ Funkciju sadalījums moduļos ir apraksīts sadalījuma tabulā (skat. @tbl:func ), ) +=== Kopīgas procedūras + +#procedure-table( + "Teksta jautājumu transpilēšana", + "PR01", + [ + Procedūra apstrādā simbolu virkni, iegūstot jautājumu datu struktūru + objektus. Ir sagaidāms, ka simbolu virkne atbilst specificētai valodai. Ja + simbolu virkne valodai neatbilst, tiek izvadīta kļūda. Simbolu virkne tiek + apstrādāta vairākos posmos. + ], + [ + + Simbolu virkne; + ], + [ + + Tiek nolasīti simboli, sagrupējot to tekstvienībās; + + Tiek veikta virspusēja gramatikas pārbaude; + + Ja tiek sastapta tekstvienība, kas nav sagaidāma kādā kontekstā, beidz + apstrādi, izvadē pievienojot kļūdu ar tās pozīciju; + + Tiek nolasīti jautājumi, nosakot to veidu pēc to struktūras: + + Jautājuma sākums (jeb kartītes priekša); + + Veidojot jautājumus tiek pielasīts arī intervāla laiks, ja tāds ir; + + Pēc jautājuma sākuma ir viens vai vairākas atbildes jeb apakšpunkti; + + Vairāki apakšpunkti ar "-" -- atbilžu jautājums; + + Vairāki apakšpunkti ar "+" -- izvēles jautājums; + + Vairāki apakšpunkti ar "-^" -- izvēles jautājums; + + Vairāki apakšpunkti, kas beidzas ar ":", + kam seko apakšpunkti ar "-" (iespējams tos nenorādīt); + + Jautājumu veidi ir nosakāmi bez tiešas vieda norādīšanas; + + Ja nolasīšanas laikā parādās nesagaidīta tekstvienība, beidz apstrādi, + izvadē pievienojot kļūdu ar tās pozīciju; + ], + [ + + Saraksts ar jautājumiem; + + Kļūda ar tekstu un tās pozīciju saturā; + ], +) + +#procedure-table( + "Teksta jautājumu detranspilēšana", + "PR02", + [ + Procedūra apstrādā jautājumu sarakstu un izveido tam atbilstošu + simbolu virkni, kas atbilst specificētai valodai. + Papildus sākumā tiek pievienots datums un laiks, ja tas tiek padots, + kas ir daļa no metadatiem. + ], + [ + + Jautājumu saraksts; + + Datums un laiks; + ], + [ + + Iegūst konfigurācijas vērtības, kas nosaka cik plats ir tabulācijas simbols + un kāds ir maksimāls rindiņas platums pirms tiek veidots jaunās rindas simbols; + // TODO: define datetime format + + Ja datums un laiks ir padots, pievieno datumu un laiku atbilsoši formātam; + + Katram jautājumam veic sekojošo: + + Pievieno jautājuma sākumu (jeb priekšu) ar intervāla skaitli, ja tāds ir; + + Pievieno apakšpunktus atbilstoši tā veidam; + + Vairāki apakšpunkti ar "-" -- atbilžu jautājums; + + Vairāki apakšpunkti ar "+" -- izvēles jautājums; + + Vairāki apakšpunkti ar "-^" -- izvēles jautājums; + + Vairāki apakšpunkti, kas beidzas ar ":", kam seko apakšpunkti ar "-"; + + Veidojot jautājumus ievēro iegūtās konfigurācijas vērtības; + ], + [ + + Simbolu virkne; + ], +) + + === Atmiņas bāzes modulis Atmiņas bāze ir direktorijs ar atmiņas kartīšu failiem. Modulis atbild par mijiedarbību ar atmiņas šiem failiem un atmiņas kartīšu prezentēšanu. + #figure( caption: "Atmiņas bāzes moduļa 2.līmeņa datu plūsmas diagramma", placement: auto, image("img/ABDPD2.svg"), ) +#pagebreak(weak:true) #function-table( "Kartīšu faila ielāde", "AB01", [ - Funkcija apstrādā faila saturu. Iegūstot objektus ar jautājum dati + Funkcija apstrādā faila saturu. Iegūstot objektus ar jautājumu dati un ar to saistītiem metadatiem. Ieejas failam jāatbilst valodas specifikācijai. ], [ - + Ievades fails ar noteiktu paplašinājumu; + + Ievades faila ceļš ar noteiktu paplašinājumu; ], [ - + Faila saturs tiek ielādēts atmiņā; - + Saturs tiek pārveidots reprezentācijā; - + Faila saturs tiek validēts pēc satura, iekļaujot pārbaudes uz + + Faila saturs tiek ielādēts atmiņā: + + Ja faila ielāde ir neveiksmīga, parāda 1. paziņojumu. + + Tiek nolasīts datums un laiks no faila sākuma, ja tāds eksistē: + + Ja datuma un laika formāts nav korekts, parāda 2. paziņojumu + ar atbilsošu iemeslu un kļūdas pazīmi, beidz apstrādi. + + Tiek iegūti jautājuma objekti, izmantojot procedūru #link()[PR01]\; + + Ja radās kļūda, parāda 2. paziņojumu ar kļūdas informāciju, beidz + apstrādi. + + Ja kādā no apstrādes posmiem radās kļūda, parāda 2. paziņojumu + ar atbilstošu iemeslu un kļūdas pozīciju, beidz apstrādi. ], [ + + Saraksts ar jautājumiem; + + Faila reģistrēts datums un laiks; ], [ - + Transpilācijas kļūda: [kļūdas rinda]:[kļūdas kolonna]; + + Ielādes kļūda: neizdevās atvert failu; + + Ielādes kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna]; ], ) +#pagebreak(weak:true) +#function-table( + "Kartīšu saraksta lappušu izveidošana", + "AB02", + [ + Funkcija izveido vairākas lappuses, sadalot atmiņā esošus jautājumu + objektus intervālos. Lappušu izmērs ir noteikts ar konfigurācijas + parametrus. + ], + [ + + Jautājumu objektu saraksts; + ], + [ + + No konfigurācijas tiek iegūts jautājumu skaits lappusē, un rādāmo lappušu + pogu skaits; + + Jautājumi tiek sadalīti lappusēs, veidojot lappušu objektus, katrā tiek + ievietotas references uz jautājumiem. Lappušu pogu skaits atbilst + konfigurācijas vērtībai; + ], + [ + + Lappušu objektu saraksts; + ], + [ + Funkcijai nav paziņojumu. + ], +) + +#function-table( + "Atmiņas bāzes lappuses iegūšana", + "AB03", + [ + Funkcija iegūst jautājumu objektu intervālu + no pagaidu glabātuves. + ], + [ + + Lappuses numurs; + ], + [ + + ], + [ + ], + [ + ], +) + +#function-table( + "Kartīšu pievienošana", + "AB04", + [ + Funkcija pieņem lietotāja ievadīto tekstu un pārveido to jautājumu + objektos, kas pievieno tos jau esošiem jautājumiem. + ], + [ + + Simbolu virkne; + ], + [ + + Ja ievadīts teksts, parāda 1. paziņojumu, beidz apstrādi; + + Apstrādā simbolu virkni, izmantojot #link()[PR01]\; + + Ja tiek izvadīta kļūda, parāda 2. paziņojumu ar kļūdas informāciju, + beidz apstrādi; + ], + [ + Izvades jautājuma objekti tiek pievienoti jautājumu pagaidu + glabātuvē. + Saskarnē parādās indikators, ka atmiņas kartīšu fails tika izmainīts. + + + Lappušu objektu saraksts; + ], + [ + + Nav ievadīts neviens jautājums; + + Ielādes kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna]; + ], +) + +#function-table( + "Kartītes pirmteksta iegūšana", + "AB05", + [ + Funkcija iegūst kartītes pirmtekstu, kas atbilst valodas specifikācijai. + Funkcija ir specializēts procedūras izmantošanas gadījums, kurā tiek + detranspilēts tikai viens jautājums. + + Funkcija ir izmantota redigēšanas iespējai. + ], + [ + + Jautājuma objekts; + ], + [ + + Izmantojot procedūru #link()[PR01], jautājums tiek detranspilēts + pirmtekstā\; + ], + [ + + Simbolu virkne -- jautājuma pirmteskts; + ], + [ + Funkcijai nav paziņojumu. + Saskarnē parādās indikators, ka atmiņas kartīšu fails tika izmainīts. + ], +) + +#function-table( + "Kartītes redigēšana", + "AB06", + [ + Funkcija izmaina esošo jautājumu, pēc to pirmteksta, kas atbilst + valodas specifikācijai. + ], + [ + + Jautājuma objekts; + + Jautājuma pirmteksts; + ], + [ + + Ja ievades teksts ir tukšs, parāda 1. paziņojumu, beidz apstrādi; + + Izmantojot #link()[PR01], tiek iegūts jautājuma objekts no sniegtā + pirmteksta; + + Ja tiek izvadīta kļūda, parāda 1. paziņojumu ar atbilstošu kļūdas informāciju, + beidz apstrādi; + + Padotais jautājuma objekts tiek atjaunots ar iegūta objekta datiem; + ], + [ + + Jautājuma objekts; + ], + [ + Izvades jautājuma objekts tiek atjaunots atbilsošam ierakstu jautājumu pagaidu + glabātuvē. + Saskarnē parādās indikators, ka atmiņas kartīšu fails tika izmainīts. + + + Nav ievadīts neviens jautājums; + + Redigēšanas kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna]; + ], +) + +#function-table( + "Kartītes dzēšana", + "AB07", + [ + Funkcija izdēš kartīti no pagaidu glabātuves. + ], + [ + + Jautājuma reference; + ], + [ + + Jautājums tiek sameklēts un izdzēsts; + ], + [ + Funkcijai nav izvades. + ], + [ + Funkcijai nav paziņojumu. + ], +) + +#function-table( + "Kartītes faila saglabāšana", + "AB08", + [ + Funkcija saglabā kartīšu jautājumus un metadatus tam atbilstošā + failā, pārveidojot tos valodai atbilstošā formātā. + ], + [ + + Faila atrašanās ceļš; + + Jautājumu saraksts; + + Datums un laiks; + ], + [ + + Iegūst pirmtekstu padotajiem objektiem, izmantojot procedūru #link()[PR02]\; + + Ja tiek izvadīta kļūda, parāda 2. paziņojumu ar kļūdas informāciju, beidz apstrādi; + + Izveido vai atver failu padotā ceļā; + + Ja atveršana vai izveidošana neizdevās, parāda 1. paziņojumu; + + Pievienot iegūto saturu failam un saglabā to; + ], + [ + Fails tiks atjaunots failu sistēmā. + Saskarnē pazūd indikators, ka atmiņas kartīšu fails tika izmainīts. + ], + [ + + Neizdevās atvērt vai izveidot atmiņas kartīšu failu; + + Redigēšanas kļūda: [kļūdas iemesls] [kļūdas rinda]:[kļūdas kolonna]; + ], +) + + === Mācīšanās modulis Mācīšanās risinājuma kontekstā ir kartīšu prezentēšana ar interaktīvu atbildes @@ -293,6 +628,143 @@ funkcionalitāti, atbilsoši atmiņas kartītes tipam. image("img/MADPD2.svg"), ) +#pagebreak(weak: true) +#function-table( + "Nākamās kartītes noteikšana", + "MA01", + [ + Funkcija nosaka nākamo kartīti, kas tiks parādīta lietotājam + mācīšanas procesā. Kartīšu secību nosaka mācīšanās algoritms. + ], + [ + + Pašreizējais kartīte -- kartītes objekts; + + Algoritms -- viens no vertībām: "fizisks", "nejaušs", "intervālu"\; + ], + [ + + Ja pagaidu kartīšu glabāvē nav nevienas kartītes, beidz apstrādi, neatgriežot + kartīti; + + Ja padotais algoritms ir "fizisks"; + + Ja pašreizējā kartīte ir padota, izvēlās nākamo kartīti starp pagaidu + kartīšu glabātuves; + + Citādi izvēlas pirmo kartīti no pagaidu kartīšu glabātuves; + + Ja padotais algoritms ir "nejaušs"; + + Izvēlas nākamo kartīti nejaušā kārtībā starp pagaidu kartīšu glabātuves; + + Ja padotais algoritms ir "intervālu"; + + No pagaidu kartīšu glabātuves izvēlas tikai to, kur nav norādīts intervāls + vai intervāls ir 0; + + No šī saraksta izvēlas nākamo kartīti nejaušā kārtībā; + ], + [ + // Add null explanation + + Nākamās kartītes objekts (iespējams nulles objekts); + ], + [ + Funkcijai nav paziņojumu. + ], +) + +#function-table( + "Izvēles kartītes pārbaude", + "MA02", + [ + Veic jautājuma atbildes pārbaudi izvēles kartītes jautājuma veidam. + ], + [ + + Izvēlēto atbilžu simbolu virkņu saraksts ar pazīmi, vai atbilde ir izvēlēta; + + Izvēles jautājuma objekts; + ], + [ + + Izskata abus sarakstus paralēli; + + Ja atbildes un jautājuma objektu izvēles elementa pazīmes sakrīt + (piemēram, "pareizs" un "pareizs"); + + Atbilžu elementam uzstāda pareizuma pazīmi kā "pareizs"; + + Citādi uzstāda atbildes pareizuma atbildi kā "nepareizs"; + ], + [ + + Izvēlēto atbilžu simbolu virkņu saraksts ar pareizuma karodziņu vērtībām; + ], + [ + Funkcijai nav paziņojumu. + ], +) + +#function-table( + "Kārtošanas kartītes pārbaude", + "MA03", + [ + Veic jautājuma atbildes pārbaudi kārtošanas kartītes jautājuma veidam. + ], + [ + - Atbilžu simbolu virkņu saraksts; + - Jautājuma objekts; + ], + [ + + Izskata abus sarakstus paralēli; + + Ja atbildes un jautājuma objektu izvēles elementa sakrīt, atbilžu + elementam uzstāda pareizuma pazīmi kā "pareizs"; + + Citādi uzstāda atbildes pareizuma atbildi kā "nepareizs"; + ], + [ + + Atbilžu simbolu virkņu saraksts ar pareizuma karodziņu vērtībām; + ], + [ + Funkcijai nav paziņojumu. + ], +) + +#function-table( + "Grupēšanas kartītes pārbaude", + "MA04", + [ + Veic jautājuma atbildes pārbaudi grupēšanas kartītes jautājuma veidam. + ], + [ + - Negrupēto elementu simbolu virkņu saraksts; + - Grupētu simbolu virkņu sarakstu saraksts; + - Jautājuma objekts; + ], + [ + + Katram nesagrupētam elementam uzstāda pareizuma pazīmi uz "nepareizs"; + + Katru grupai atbilžu un jautājuma objekta saraksta grupu izskata paralēli; + + Elementiem, kas sakrīt abos sarakstos, atbilžu sarakstā uzstāda pareizuma + pazīmi uz "pareizs"; + + Elementiem, kas nav jautājuma atbildes grupā pareizuma pazīmi uz "nepareizs"; + ], + [ + + Negrupēto elementu simbolu virkņu saraksts ar pareizuma karodziņu vērtībām; + + Grupētu simbolu virkņu sarakstu saraksts ar pareizuma karodziņu vērtībām; + ], + [ + Funkcijai nav paziņojumu. + ], +) + +#function-table( + "Intervāla grupas atbildes sniegšana", + "MA05", + [ + Izmaina jautājuma objektu atbilstoši izvēlētam grūtības vai izpuldījuma + vērējumam veicot kartītes atbildi. Atbilstošie intervāli tiek iegūti no + konfigurācijas. + ], + [ + + Intervāla atbilde -- viens no: "nav atbildēts", "grūti", "vidēji", + "viegli", "ļoti viegli"; + + Jautājuma objekts; + ], + [ + + No konfigurācijas glabātuves tiek iegūts intervāls, kas atbilst sniegtai + atbildei; + + Jautājumam tiek uzstādīts intervāls; + ], + [ + + Izmainīts jautājuma objekts; + ], + [ + Funkcijai nav paziņojumu. + ], +) + === Konfigurācijas modulis Konfigurācijas modulis iekļauj parametrus, ko var personalizēt @@ -305,6 +777,54 @@ saistībā ar mācīšanās procesu, prezentāciju uc. ) +#function-table( + "Konfigurācijas vērtības iegūšana", + "KF01", + [ + Funkcijas iegūst vienu definēo konfigurācijas vērtību. + ], + [ + ], + [ + ], + [ + ], + [ + ], +) + +#function-table( + "Konfigurācijas vērtību iegūšana", + "KF02", + [ + Funkcija iegūst visas definētās konfigurācijas vērtības. + ], + [ + ], + [ + ], + [ + ], + [ + ], +) + +#function-table( + "Konfigurācijas vērtības izmaiņa", + "KF03", + [ + Funkcija izmaina vērtību no definētām konfigurācijas vērtībām. + ], + [ + ], + [ + ], + [ + ], + [ + ], +) + #pagebreak(weak: true) = Programmatūras projektējuma apraksts