الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Postfix & Infix

بدأه رنا**رنا في 29 أبريل 2008 · 2 رد · 770 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عملت برنامج يحوّل من بوست فيكس ل انفكس باستخدام الستاك

وكله زبط مية المية واشتغل وحوّل مزبوط

لكن الان بدي احسب قيمة المقدار الpostfix اللي نتج عندي وواجهتني مشكلة

انه بيقوللي

possible loss of precision

لاني انا عاملة دالة الpush في الستاك تاخد char

الجواب في العمليات الحسابية بده يكون int

ياريت اذا حدا بيقدر يفيدني

شكرا الكم

#2

مش عارف كيف ممكن نساعدك يعني

أنتي بتحكي في الهواء

الكود حتى نستطيع المساعدة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

public class Node {
char data;
Node next;
public Node(){
}
public Node(char info,Node n){
this.data=info;
this.next=n;
}
public char getData(){
return this.data;
}
public void setData(char data){
this.data=data;
}

public Node getNext(){
return this.next;
}

public void setNext(Node next){
this.next = next;
}
}
<div align="center">
</div>


private static Node topNode;
private static int size;

public static boolean isEmpty(){
return (topNode==null);
}
public static int size(){
return size;
}

public static void push(char ch){
Node newNode = new Node(ch,null);
if(isEmpty())
topNode = newNode;
else{
newNode.setNext(topNode);
topNode = newNode;
}
}

public char pop(){
char temp=' ';
if(!isEmpty()){
temp = topNode.getData();
topNode = topNode.getNext();
}
return temp;
}
public char top(){
if(isEmpty())
System.out.println("Empty stack");
return topNode.getData();

}


}
public class Stack{


private Stack myStack;
String output="";
String input;
public convert(String input) {
this.input = input;
myStack = new Stack();
}
public void getOperand(char op, int prec1){
while(!myStack.isEmpty()){
char topop = myStack.pop();
if(topop=='('){
myStack.push(topop);
break;
}
else {
int prec2;
if (topop == '+' || topop == '-')
prec2 = 1;
else
prec2 = 2;
if (prec2 < prec1)
{
myStack.push(topop);
break;
} else

output = output + topop;
}
}
myStack.push(op);
}
public void parenth(char ch){
while (!myStack.isEmpty()) {
char x = myStack.pop();
if (x == '(')
break;
else
output = output + x;
}
}
public String prec() {
int num1, num2, ans;
num2 = myStack.pop();
num1 = myStack.pop();
for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
switch (ch) {
case '+':
case '-':
getOperand(ch,1);
break;
case '*':
case '/':
getOperand(ch, 2);
break;
case '^':
getOperand(ch,3);
break;
case '(':
myStack.push(ch);
break;
case ')':
parenth(ch);
break;
default: // Operand
output = output + ch;
break;
}
}
while (!myStack.isEmpty()) {
output = output + myStack.pop();

}
System.out.println(output);
return output;//postfix
}

//Evaluation
public void evaluate() {
char a;
char b;
for (int j = 0; j < output.length(); j++) {
int result = 0;
char ch = output.charAt(j);
switch (ch) {
case '+':
a = myStack.pop();
b = myStack.pop();
result = a + b;
myStack.push(result);
break;
case '-':
a = myStack.pop();
b = myStack.pop();
result = a - b;
myStack.push(result);
break;
case '*':
a = myStack.pop();
b = myStack.pop();
result = a * b;
myStack.push(result);
break;
case '/':
a = myStack.pop();
b = myStack.pop();
result = a / b;
myStack.push(result);
break;
default:
myStack.push(ch);
break;
}
}
System.out.println(myStack.pop());
}
}
public class convert{

المشكلة في evaluate method

شكرا الكم

مواضيع مشابهة