Skip to content
Snippets Groups Projects
Commit df04fb3f authored by T2heJada's avatar T2heJada
Browse files

Kirjelduse uuendus ja veaparandused

parent 4445ee37
No related branches found
No related tags found
No related merge requests found
......@@ -13,17 +13,25 @@ Kasutaja saab luua tekstipõhises keskkonnas maatrikseid, neid vaadata ning nend
## Klassid
Kasutajaliides: Kasutaja side programmiga. Küsib sisendit ja teeb selle põhjal asju.
Alustamiseks meetod küsi(), mis otsustab, mis lehekülge järgmisena näidata.
Privaatne meetod prompt võtab sõne, väljastab selle koos muutumatu päisega, ning küsib sisendit.
* Meetod küsi otsustab, mis lehte järgmisena näidata.
* Meetod prompt võtab sõne, väljastab selle koos muutumatu päisega, ning küsib sisendit. See tõlgendab ka mõndasid käske.
Tehtepuu: Loeb sõnest välja võrrandi, kus muutujad asendab nende väärtustega.
* Meetod parse võtab sõne ja muutujate sõnastiku ning teeb nendest võrrandi.
* Meetod lex võtab sõne ja muudab selle vähimate sümbolite massiiviks.
Vahendaja: Hoiab muutujaid ja teostab tehteid
* Meetod parse-wrap kutsub meetodeid parse ja compute, kuid püüab kinni tekkivad vead
* Meetod lisaMaatriks lisab maatriksi kindla nime ja elementidega
* Meetod sobivNimiP annab infot selle kohta, kas nimi võib olla muutuja nimeks
* Meetod leiaMuutuja annab kindla nimega muutuja
TundmatuMuutuja: Viga, mis annab teada, et võrrandis on muutuja, mida pole määratud.
TõlgendamatuSisend: Viga, mis teatab, kui parser ei oska võrrandist väljundit lugeda, nt. kui on tundmatu sümbol või maatriks, millel ei ole ridu
InvalidMatrixException: Viga, mis annab teada, et maatriks ei ole sobilik teatud tehte tegemiseks.
InvalidOperandException: Viga, kus üks tehte operandidest ei ole sobilikud, nt maatriksi liitmine numbriga.
......
......@@ -12,17 +12,10 @@
*/
package ee.ut.cs.gitlab.maikov;
import ee.ut.cs.gitlab.maikov.exceptions.TundmatuMuutuja;
import ee.ut.cs.gitlab.maikov.expressions.Vahendaja;
import ee.ut.cs.gitlab.maikov.expressions.Expression;
import ee.ut.cs.gitlab.maikov.expressions.MatrixValue;
import ee.ut.cs.gitlab.maikov.expressions.Tehtepuu;
import ee.ut.cs.gitlab.maikov.expressions.Value;
import ee.ut.cs.gitlab.maikov.matrix.Matrix;
import ee.ut.cs.gitlab.maikov.matrix.SquareMatrix;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
import java.util.regex.Pattern;
......@@ -58,7 +51,9 @@ public class Kasutajaliides {
+ "%A - Mine pealehele, kus saab valida jägmiseid tegevusi"
+ System.lineSeparator()
+ "%L - Lõpeta koheselt programm"
+ "%J - Hüppa kohta programmis";
+ System.lineSeparator()
+ "%J - Hüppa kohta programmis"
+ "%LIST - Väljasta listi olemasolevatest muutujatest";
// Tutvustus
static final String tutvustav_tekst = "Tere!"
......@@ -75,7 +70,7 @@ public class Kasutajaliides {
+ suva_mõõtmed[0]
+ "-"
+ suva_mõõtmed[1]
+ " (S)";
+ "(S)";
}
// Suvaliste elementide alam- ja ülempiir + samm
......@@ -350,6 +345,9 @@ public class Kasutajaliides {
}
switch (maatriksid.sobivNimiP(sisend)) {
case -2:
teade(next, "'T' on reserveeritud transponeerimiseks.");
break;
case -1:
teade(next, "Nimi peab koosnema vaid tähtedest.");
break;
......@@ -473,25 +471,42 @@ public class Kasutajaliides {
} else if (sisend.equals("S")) { // Võtab maatriksile suvalised mõõtmed
loodav_mõõtmed[0] = suva_arv(suva_mõõtmed[0], suva_mõõtmed[1]);
loodav_mõõtmed[1] = suva_arv(suva_mõõtmed[0], suva_mõõtmed[1]);
teade(7,
"> Maatriksi mõõtmed on ["
+ loodav_mõõtmed[0] + ","
+ loodav_mõõtmed[1] + "]");
} else { // Kontrollib sisendit
String[] mõõt_string = sisend.split(",");
if (mõõt_string.length == 2
&& naturaalArvP(mõõt_string[0])
&& naturaalArvP(mõõt_string[1])) {
if (mõõt_string.length == 2){
int m1;
int m2;
if (mõõt_string[0].equals("S")){
m1 = suva_arv(suva_mõõtmed[0], suva_mõõtmed[1]);
} else if (naturaalArvP(mõõt_string[0])){
m1 = Integer.parseInt(mõõt_string[0]);
} else {
teade(next, "Sisend ei ole sobivas formaadis");
return;
}
if (mõõt_string[1].equals("S")){
m2 = suva_arv(suva_mõõtmed[0], suva_mõõtmed[1]);
} else if (naturaalArvP(mõõt_string[1])){
m2 = Integer.parseInt(mõõt_string[1]);
} else {
teade(next, "Sisend ei ole sobivas formaadis");
return;
}
// Muudab mõõtmed
loodav_mõõtmed[0] = Integer.parseInt(mõõt_string[0]);
loodav_mõõtmed[1] = Integer.parseInt(mõõt_string[1]);
loodav_mõõtmed[0] = m1;
loodav_mõõtmed[1] = m2;
next = 7;
} else { // Sisend ei sobi
teade(next, "Sisend ei ole sobivas formaadis");
}
}
teade(next,
"> Maatriksi mõõtmed on ["
+ loodav_mõõtmed[0] + ","
+ loodav_mõõtmed[1] + "]");
}
......
......@@ -92,7 +92,7 @@ public class Tehtepuu {
if (V_index <= 0){
throw new TõlgendamatuSisend("Tehe "+tehe+" vajab kahte muutujat!");
}
Number tehtetüüp = (Number) vasak.get(V_index);
Number tehtetüüp = (Number) vasak.get(V_index).compute();
Expression baas = vasak.get(V_index - 1);
if (tehtetüüp.getNumber() == -1) {
......@@ -161,11 +161,11 @@ public class Tehtepuu {
for (int l = 0; l < lexed.size(); l++) {
String lekseem = lexed.get(l);
if (lekseem.equals("+")) { // Tehtemärgid + ja -
if ("+)".contains(lekseem)) { // Tehtemärgid + ja )
tehted.add(lekseem);
f = true;
} else if (lekseem.equals("-")) {
if ("+-*/(|".contains(eelmine) || eelmine.equals("")){ // '-' kui arvu negatiivne variant jne
if ("+-*/(|^".contains(eelmine) || eelmine.equals("")){ // '-' kui arvu negatiivne variant jne
tehted.add("vastandarv");
} else { // '-' kui tehe
tehted.add(lekseem);
......@@ -228,8 +228,9 @@ public class Tehtepuu {
vasak.add(new Number(Double.parseDouble(lekseem)));
// SÜMBOLID
} else if (Pattern.matches("[a-zA-ZõäöõÕÄÖÜ]*", lekseem)) {
if (lekseem.equals("T") // Transponeerimine
&& tehted.get(tehted.size() - 1).equals("^")) {
if (tehted.size() > 0
&& lekseem.equals("T") // Transponeerimine
&& tehted.get(tehted.size() - 1).equals("^")) {
vasak.add(new Number(-2)); // Sümboliseerib transp.
} else if (liikmed.containsKey(lekseem)) {
vasak.add(liikmed.get(lekseem).clone());
......
......@@ -28,10 +28,7 @@ public class Vahendaja{
muutujad = new HashMap<String,Value>();
}
public HashMap getMuutujad(){
return muutujad;
}
public Value leiaMuutuja(String nimi){
return muutujad.get(nimi);
}
......@@ -58,7 +55,9 @@ public class Vahendaja{
* Kui nimes ei ole ainult tähed, -1
*/
public int sobivNimiP(String nimi){
if (!tähedP(nimi)){
if (nimi.equals("T")){
return -2;
} else if (!tähedP(nimi)){
return -1;
} else if (olemasP(nimi)){
return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment