Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to handle order of operations when making a trigonometric calculator
    primarykey
    data
    text
    <p>Update: Unfortunately i was unable to finish this assignment, although the deadline has passed i feel that i have invested too much time on this to just set it aside and i know that I am close to the solution. This is the code that i have produced over the past couple of days </p> <pre><code>/* "[5*sin(3*t+0.523),4*cos(2*t)]" */ import java.util.*; // import javax.swing.*; // import javax.swing.JFrame; // lets me create the window import java.awt.Graphics; // for drawing import java.awt.Point; // allows the use of points import java.awt.Graphics2D; // for drawing import javax.swing.JComponent; // for drawing import javax.swing.JPanel; // for drawing import java.lang.Math; // for trig import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; public class Graph { //-------------------Queue---String----------------------------------------------------------------// public static double[] queue_str(String str, double[] results) { Queue&lt;Character&gt; token = new LinkedList&lt;Character&gt;(); Queue&lt;Double&gt; numbers = new LinkedList&lt;Double&gt;(); double[] t_vals = new double [5]; int t_vals_len = t_vals.length; int numbers_sz = 0; int token_sz = 0; t_vals[0] = 7.0; t_vals[1] = 2.0; t_vals[2] = 3.0; t_vals[3] = 4.0; t_vals[4] = 3.0; char temp_token; char temp_char; double p1_num = 0, temp_num = 0, p2_num = 0; if(results.length == 0){} for(int i = 0; i &lt; str.length(); i++) { if(str.charAt(i) == '*' &amp;&amp; str.charAt(i) != 't' || str.charAt(i) == '+'&amp;&amp; str.charAt(i) != 't' || str.charAt(i) == '-' &amp;&amp; str.charAt(i) != 't' || str.charAt(i) == '/' &amp;&amp; str.charAt(i) != 't') { temp_token = str.charAt(i); token.add(temp_token); token_sz ++; String[] parts = str.split("\\" + String.valueOf(temp_token)); String str1 = parts[0]; String str2 = parts[1]; if(str1.matches("-?\\d+(\\.\\d+)?")) { p1_num = Double.parseDouble(str1); numbers.add(p1_num); numbers_sz ++; } if(str2.matches("-?\\d+(\\.\\d+)?")) { p2_num = Double.parseDouble(str2); numbers.add(p2_num); numbers_sz ++; } } else if(str.charAt(i) == 't') { temp_token = str.charAt(i); String [] t_char = str.split(String.valueOf(temp_token)); for(int k = 0; k &lt; t_vals_len; k++) { temp_num = t_vals[k]; numbers.add(temp_num); numbers_sz ++; } } } double[] dbl_numbs = new double [numbers_sz]; while(numbers.peek()!=null) { for (int iter = 0; iter &lt; numbers_sz; iter++) { dbl_numbs [iter] = numbers.poll(); } } while(token.peek()!=null) { temp_token = token.peek(); token.poll(); if(temp_token== '+') { eval_inner_add(dbl_numbs, numbers_sz); results = eval_inner_add(dbl_numbs,numbers_sz); } else if(temp_token == '-') { eval_inner_add(dbl_numbs, numbers_sz); } else if(temp_token == '*') { results = eval_inner_multi(dbl_numbs, numbers_sz); } else if(temp_token == '/') { eval_inner_div(dbl_numbs, numbers_sz); } } return t_vals; } //-----------------Removing---Brackets-------------------------------------------------------------// public static String [] remove_brackets(String remove_brack) { String [] substring = remove_brack.split ("[\\[,\\]]"); String rest_of_str = substring [1]; String rest_of_str_2 = substring [2]; return new String [] {rest_of_str,rest_of_str_2}; } //-----------------Removing---Parenthesis-------------------------------------------------------------// public static String [] remove_paren(String remove_paren) { String [] substring = remove_paren.split ("[\\(,\\)]"); String rest_of_str = substring [0]; String rest_of_str_2 = substring [1]; return new String [] {rest_of_str,rest_of_str_2}; } //---------------Retrieving--Far-Left--Number----------------------------------------------------// public static double get_first_exp (String get_left_exp) { double eval_num = 0; if(get_left_exp.matches("[-]")) { String [] check_neg = get_left_exp.split("[\\-]"); String neg_num = check_neg[0]; eval_num = Double.parseDouble(neg_num); eval_num = eval_num * (-1.0); return eval_num; } else { String [] parts = get_left_exp.split("[\\/,\\*,\\+]"); String sub_str_1 = parts [0]; eval_num = Double.parseDouble(sub_str_1); return eval_num; } } //-------------Evaluating--equations--containing--sine----------------------------------------// public static double eval_sin (String sin_eq) { double number = 0; String [] split = remove_paren(sin_eq); String inner_exp = split[1]; double [] nothing = new double [0]; number = get_first_exp (sin_eq); queue_str(inner_exp, nothing); return number; } //-------------Evaluating--equations--containing--cosine----------------------------------------// public static double eval_cos (String cos_eq) { double number = 0; double [] nothing = new double [0]; String [] split = remove_paren(cos_eq); String inner_exp = split[1]; number = get_first_exp (cos_eq); queue_str(inner_exp, nothing); return number; } //---------------Evalutating--points-------------------------------------------------------------// public static double[] eval_inner_multi (double [] numbers, int numbers_sz) { String nothing = ""; double[] results = new double [numbers_sz]; double first_num = numbers[0]; System.out.println(first_num); for(int i = 1; i &lt; numbers_sz-1; i++) { results[i] = first_num * numbers[i]; System.out.println(results[i]); } queue_str(nothing,results); return results; } public static double[] eval_inner_add (double [] numbers, int numbers_sz) { String nothing = ""; double[] results = new double [numbers_sz]; double first_num = numbers[0]; for(int i = 1; i &lt; numbers_sz-1; i++) { results[i] = first_num + numbers[i]; System.out.println(results[i]); } queue_str(nothing,results); return results; } public static double[] eval_inner_sub(double [] numbers, int numbers_sz) { double[] t_vals = new double [5]; return t_vals; } public static double[] eval_inner_div(double [] numbers,int numbers_sz) { double[] t_vals = new double [5]; return t_vals; } //------------------------------Main------------------------------------------------------------------------// public static void main(String[] args) { String left_exp = ""; String right_exp = ""; double left_sin_num , right_sin_num, left_cos_num, right_cos_num = 0; for(String s: args) // taking in user input for command line { String [] new_str = remove_brackets(s); left_exp = new_str[0]; right_exp = new_str[1]; } if(left_exp.contains("sin")) // add SINE, SIN, COSINE, COS { left_sin_num = eval_sin(left_exp); } else if (right_exp.contains("sin")) { right_sin_num = eval_sin(right_exp); } if (right_exp.contains("cos")) { right_cos_num = eval_cos(right_exp); } else if (left_exp.contains("cos")) { left_cos_num = eval_cos(left_exp); } } </code></pre> <p>}</p> <p>The purpose of this assignment was to create a program that evaluates parametric equations and joins the coordinates for plotting a graph. The problem that i have is when i send my array of doubles in the queue_str() function to get evaluated, the instance where i have two operations present stumps we. I cannot properly send the contents back to the queue_str() to be evaluated by the second operand for example take into account the example function in my top comments i am able to send 3*t where t_vals are test cases to be multiplied by the three. In this case i have to go size of array -1 because i have to take into account the first and last element in the array. This is where im stuck how can I properly evaluate this expression? I would appreciate any help and i apologize for this paragraph, i just know im so close to getting this to work. Thanks.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload