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

'-' tõlgendamise parandus

'-' tõlgendatakse nüüd lahutamisena, kui see on pärast muutujat, ning
vastandarvuna, kui see on pärast tehtemärki nagu '+-*/' või sulu
alguses nagu '(' või esimene '|';
parent f877a9b9
No related branches found
No related tags found
No related merge requests found
......@@ -31,14 +31,8 @@ public class Tehtepuu {
} else if (Character.isLetter(a)) { // Tähed
kogum += a;
} else if (Character.isDigit(a) || a.equals('.')) { // Numbrid
if (märgid.size() != 0
&& märgid.get(märgid.size() - 1).equals("-")) { // Miinus-märk
kogum = "-" + a;
märgid.remove(märgid.size() - 1);
} else {
kogum += a;
}
} else { // Ülejäänud
kogum += a;
} else { // Ülejäänud
if (!kogum.equals("")) {
märgid.add(kogum);
kogum = "";
......@@ -60,7 +54,9 @@ public class Tehtepuu {
throws InvalidOperandException{
//System.out.println("\nTEHTED: "+tehted+"\nVASAK: "+vasak);
int T_index = tehted.size() - 2; // Ignoreerib just lisatut
int V_index = vasak.size() - 1;
......@@ -73,7 +69,7 @@ public class Tehtepuu {
for (; T_index >= 0; T_index--) {
String tehe = tehted.get(T_index);
// Ühe muutuja tehted
if (tehe.equals("(")) { // Lõpetab, kui suluni jõuab
if (uusim.equals(")")) {
tehted.remove(T_index);
......@@ -85,7 +81,14 @@ public class Tehtepuu {
vasak.set(V_index, new AbsoluteValue(vasak.get(V_index)));
}
break;
} else if (tehe.equals("^")) { // Pöörd- või transponeeritud maatriks
} else if (tehe.equals("vastandarv")){ // Vastandarv
// Korrutab '-1'-ga
vasak.set(V_index, new Multiplication(new Number(-1),
vasak.get(V_index)));
tehted.remove(T_index);
} // Kahe muutuja tehted
else if (tehe.equals("^")) { // Pöörd- või transponeeritud maatriks
if (V_index <= 0){
throw new TõlgendamatuSisend("Tehe "+tehe+" vajab kahte muutujat!");
}
......@@ -105,7 +108,7 @@ public class Tehtepuu {
if (V_index <= 0){
throw new TõlgendamatuSisend("Tehe "+tehe+" vajab kahte muutujat!");
}
// Kahe muutujaga tehted
Expression V = vasak.get(V_index - 1);
Expression P = vasak.get(V_index);
switch (tehe) {
......@@ -146,17 +149,29 @@ public class Tehtepuu {
// sellega esimese väärtuse
ArrayList<Expression> vasak = new ArrayList<>();
// Eelmine lekseem
String eelmine = "";
// Kas on parasjagu püstkriips
boolean püst = false;
// Kas proovida tehteid sooritada
boolean f = false;
for (int l = 0; l < lexed.size(); l++) {
String lekseem = lexed.get(l);
if ("+-)".contains(lekseem)) { // Tehtemärgid + ja -
if (lekseem.equals("+")) { // Tehtemärgid + ja -
tehted.add(lekseem);
f = true;
} else if (lekseem.equals("-")) {
if ("+-*/(|".contains(eelmine) || eelmine.equals("")){ // '-' kui arvu negatiivne variant jne
tehted.add("vastandarv");
} else { // '-' kui tehe
tehted.add(lekseem);
f = true;
}
} else if ("*/(".contains(lekseem)) { // Tehtemärgid *,/ ning (
if (tehted.size() != 0
&& tehted.get(tehted.size() - 1).equals("^")) {
......@@ -170,6 +185,7 @@ public class Tehtepuu {
tehted.add(lekseem);
if (!püst) {
f = true;
lekseem = "_"; // Et '-' tõlgendataks absoluutväärtuse järel õigesti
}
} else if (lekseem.equals("{")) { // Maatriks {}
......@@ -224,15 +240,16 @@ public class Tehtepuu {
} else {
throw new TõlgendamatuSisend("TUNDMATU LEKSEEM: " + lekseem);
}
// Läheb läbi kogutud tehete nii palju, kui võimalik
if (f == true) {
eelmine = lekseem;
// Läheb läbi kogutud tehete nii palju, kui võimalik
if (f == true) {
f = false;
fold(tehted, vasak);
}
}
System.out.println(vasak+"\n"+tehted);
}
tehted.add("NOP"); // Kuna ei vaadata viimast tehet
fold(tehted, vasak);
......@@ -242,8 +259,6 @@ public class Tehtepuu {
throw new TõlgendamatuSisend("Sisendist ei saanud võrrandit");
}
return vasak.get(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