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

Kasutajaliideses tehted

parent e42f054d
No related branches found
No related tags found
1 merge request!1Kasutajaliidese tuum
......@@ -11,13 +11,15 @@
* 7: Maatriksi sisu
*/
package ee.ut.cs.gitlab.maikov;
import ee.ut.cs.gitlab.maikov.exceptions.UnknownVariableException;
import ee.ut.cs.gitlab.maikov.matrix.Matrix;
import ee.ut.cs.gitlab.maikov.matrix.SquareMatrix;
import ee.ut.cs.gitlab.maikov.expressions.Expression;
import ee.ut.cs.gitlab.maikov.expressions.Value;
import ee.ut.cs.gitlab.maikov.expressions.MatrixValue;
import ee.ut.cs.gitlab.maikov.expressions.Number;
import ee.ut.cs.gitlab.maikov.expressions.Tehtepuu;
import java.util.Scanner;
import java.util.regex.Pattern;
......@@ -29,17 +31,18 @@ public class Kasutajaliides{
/// Konstandid
// Width
static final int str_width = 70;
// Tekst, mida iga küsimuse alguses väljastatakse
static final String päis =
System.lineSeparator().repeat(10)
+ "-".repeat(str_width)+System.lineSeparator()
+ "%? - Abi | %A - Algusesse | %L - Lahku | %S - Sätesta muutujaid "
+ "%? - Abi | %A - Algusesse | %L - Lahku"
+System.lineSeparator().repeat(4);
// Tekst, mida abi küsimisel väljastatakse
static final String abitekst =
"Praegu ei ole veel asju kirjas"+"\n"
"Praegu ei ole veel asju kirjas"
+ System.lineSeparator()
+ "%J - Hüppa kohta programmis";
// Tutvustus
......@@ -98,12 +101,11 @@ public class Kasutajaliides{
scan = new Scanner(System.in);
next = 0;
maatriksid = new HashMap<String,Value>();
}
/**
* Läheb järgmise ekraanini
* Klassi tuum. Vaatab, mis on järgmine leht, ja läheb sinna
* Niimoodi kujundatud selleks, et ei läheks asjad rekursiivseks
*/
public void küsi(int start){
while (true){
......@@ -112,6 +114,7 @@ public class Kasutajaliides{
case 0: tere(); break;
case 1: algus(); break;
case 2: m_nimi(); break;
case 3: tehted(); break;
case 4: vaata(); break;
case 5: kirjuta_üle_p(); break;
case 6: mõõtmed(); break;
......@@ -198,7 +201,9 @@ public class Kasutajaliides{
return (maatriksid.containsKey(maatriksi_nimi));
}
// Tagastab suvalise arvu vahemikust Algus,lõpp
/**
* Tagastab suvalise arvu vahemikust algus,lõpp
*/
public static double suva_arv(double algus, double lõpp){
return (algus + (Math.random() * (lõpp-algus)));
}
......@@ -218,7 +223,6 @@ public class Kasutajaliides{
* Loob maatriksi objekti
*/
public void looMaatriks(){
maatriksid.put(loodav_nimi,
new MatrixValue((loodav_mõõtmed[0] == loodav_mõõtmed[1])
? new SquareMatrix(loodav_mõõtmed[1],
......@@ -270,8 +274,10 @@ public class Kasutajaliides{
* 1
*/
private void algus(){
String sisend = prompt("> Loo uus maatriks(M)\n"
+ "> Soorita tehe(T)\n"
String sisend = prompt("> Loo uus maatriks(M)"
+ System.lineSeparator()
+ "> Soorita tehe(T)"
+ System.lineSeparator()
+ "> Vaata olemasolevaid maatrikse(V)");
sisend = sisend.toUpperCase();
switch(sisend){
......@@ -311,24 +317,73 @@ public class Kasutajaliides{
}
}
private String väärtusedList(){
String väljund = "";
for (String nimi : maatriksid.keySet()){
väljund += nimi;
väljund += System.lineSeparator();
väljund += maatriksid.get(nimi).toString();
väljund += System.lineSeparator();
}
return väljund;
}
private Value parse_wrap(String võrrand){
try {
Expression e = Tehtepuu.parse(võrrand,maatriksid);
return (Value)e.compute();
} catch (UnknownVariableException v){
System.out.println("TUNDMATU MUUTUJA: "+v.getMessage());
return null;
}
}
private void väärtusta(String nimi, String võrrand){
if (sobivNimiP(nimi)){
Value n = parse_wrap(võrrand);
if (n != null){
maatriksid.put(nimi,n);
}
} else {
teade(next,"Ebasobiv nimi: "+nimi);
}
}
private void tehted(){
String sisend = prompt("> Sisesta tehe"+ System.lineSeparator()
+"| %list - Annab loetelu olemasolevates nimedest"
+ System.lineSeparator()
+"| %set <nimi> <tehe> - Seab <nimi> väärtuseks <tehe> tulemuse");
String[] s = sisend.split(" ");
if (s[0] == " "){
// Ei tee midagi
} else if (s[0].equals("%")){
return;
} else if (s[0].equals("%list")){
teade(next,väärtusedList());
} else if (s[0].equals("%set")){ // Sea väärtuseks
väärtusta(s[1],sisend.split(" ",3)[2]);
} else { // Soorita tehe
System.out.println(String.valueOf(parse_wrap(sisend)));
}
}
/**
* Laseb vaadata olemasolevaid maatrikse
* 4
*/
private void vaata(){
String sisend = prompt("> Sisesta maatriksi nimi, et seda vaadata\n"+
"> Sisesta '%N', et näha loetelu olemasolevatest maatriksitest");
String sisend = prompt("> Sisesta maatriksi nimi, et seda vaadata"
+ System.lineSeparator()
+ "> Sisesta '%N', et näha loetelu olemasolevatest maatriksitest");
if (sisend.equals("%")){
return;
} else if (sisend.equals("%N")){ // Loetelu nimedest
String nimed = "";
for (String nimi : maatriksid.keySet()){
nimed += (nimi + " ");
}
teade(next,nimed);
teade(next,väärtusedList());
} else if (olemasP(sisend)){
// Loob sõne ja lisab maatriksi read
String väljund = "Nimi: " + sisend + System.lineSeparator();
......@@ -350,7 +405,8 @@ public class Kasutajaliides{
private void kirjuta_üle_p(){
String sisend = prompt("> Maatriks nimega "
+ loodav_nimi
+ " on juba olemas"+"\n"
+ " on juba olemas"
+ System.lineSeparator()
+ "> Kirjuta üle? Jah/Ei");
int vastus = jaatusP(sisend);
......@@ -370,7 +426,8 @@ public class Kasutajaliides{
*/
private void mõõtmed(){
String sisend = prompt("> Sisesta maatriksi mõõtmed formaadis 'm,n'"
+"\n" + suva_mõõtmed_teade()).toUpperCase();
+ System.lineSeparator()
+ suva_mõõtmed_teade()).toUpperCase();
if (sisend.equals("%")){
return;
} else if (sisend.equals("S")){ // Võtab maatriksile suvalised mõõtmed
......@@ -407,19 +464,25 @@ public class Kasutajaliides{
loodav_maatriks = new double[loodav_mõõtmed[0]*loodav_mõõtmed[1]];
String sisend = prompt("| Sisestage maatriks"+"\n"
+ "| Pärast esimest rida ei ole võimalik käske kasutada\n"
String sisend = prompt("| Sisestage maatriks"
+ System.lineSeparator()
+ "| Pärast esimest rida ei ole võimalik käske kasutada"
+ System.lineSeparator()
+ "| Maatriksil on "+loodav_mõõtmed[0]
+ " rida.\n"
+ " rida."
+ System.lineSeparator()
+ "| Maatriksil on "+loodav_mõõtmed[1]
+ " veergu.\n"
+ "| 4 veeruga rida oleks vormis n1,n2,n3,n4"+"\n"
+ " veergu."
+ System.lineSeparator()
+ "| 4 veeruga rida oleks vormis n1,n2,n3,n4"
+ System.lineSeparator()
+ suva_elemendid_teade()
).toUpperCase();
if (sisend.equals("%")){
return;
} else if (sisend.equals("S")){ // Võtab maatriksile suvalised mõõtmed
for (int elt = 0; elt < loodav_mõõtmed[0]*loodav_mõõtmed[1];
elt++){
loodav_maatriks[elt] = suva_arv(suva_elemendid[0],
......
package ee.ut.cs.gitlab.maikov.exceptions;
public class UnknownVariableException extends RuntimeException {
public UnknownVariableException(String varName){
super(varName);
}
}
package ee.ut.cs.gitlab.maikov.expressions;
import ee.ut.cs.gitlab.maikov.exceptions.ImpossibleStateException;
import ee.ut.cs.gitlab.maikov.exceptions.InvalidReductionException;
import ee.ut.cs.gitlab.maikov.exceptions.UnknownVariableException;
import ee.ut.cs.gitlab.maikov.matrix.Matrix;
import ee.ut.cs.gitlab.maikov.expressions.MatrixValue;
import ee.ut.cs.gitlab.maikov.expressions.Number;
import ee.ut.cs.gitlab.maikov.expressions.Addition;
import ee.ut.cs.gitlab.maikov.expressions.Multiplication;
import ee.ut.cs.gitlab.maikov.expressions.Subtraction;
import ee.ut.cs.gitlab.maikov.expressions.Division;
import ee.ut.cs.gitlab.maikov.expressions.MatrixTranspose;
import ee.ut.cs.gitlab.maikov.expressions.Determinant;
import ee.ut.cs.gitlab.maikov.expressions.MatrixInversion;
import java.lang.Class;
import java.util.Stack;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
......@@ -120,7 +110,8 @@ public class Tehtepuu{
// Loeb sõnest tehted
// Hetkel ei arvesta nt. determinandiga absoluutväärtuse sees
public static Expression parse(String võrrand, Map<String,Value> liikmed){
public static Expression parse(String võrrand, Map<String,Value> liikmed)
throws UnknownVariableException{
// võrrand, jagatud vähimateks osadeks
ArrayList<String> lexed = lex(võrrand);
// Tehtemärgid ja sulud järjekorras, milles nendega kohtume
......@@ -164,7 +155,8 @@ public class Tehtepuu{
} else if (lexeme.equals("}")){
rows += 1;
tehted.remove(tehted.size()-1);
if (!tehted.get(tehted.size()-1).equals("{")){
if (tehted.size() == 0
|| !tehted.get(tehted.size()-1).equals("{")){
double[] elts = new double[elements.size()];
for (int e = 0; e < elts.length; e++){
......@@ -191,7 +183,8 @@ public class Tehtepuu{
if (liikmed.containsKey(lexeme)){
vasak.add(liikmed.get(lexeme));
} else {
System.out.println("UNKNOWN SYMBOL: "+lexeme);
throw new UnknownVariableException(lexeme);
}
} else {
System.out.println("TUNDMATU LEKSEEM: "+lexeme);
......@@ -223,7 +216,7 @@ public class Tehtepuu{
test.put("a", new MatrixValue(a));
test.put("b", new MatrixValue(b));
test.put("c", new Number(4));
Expression e = parse("|{{10,5},{2,4}}|",test);
Expression e = parse(" {{10,5},{2,4}}",test);
System.out.println(e.compute());
}
......
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