رفتن به مطلب

نوشتن الگوریتمی برای معکوس کردن عبارت میانوندی


saye7474

ارسال های توصیه شده

یه تیکه از برنامه ام مونده.:{میخوام الگوریتمی برای معکوس کردن یه عبارت میانوندی بنویسم }مثل :

 

12+7^3+2*4

 

به

 

4*2+3^7+ 12

  • Like 2
لینک به دیدگاه
ی تیکه از برنامه ام مونده.:{میخوام ی الگوریتم برای معکوس کردن ی عبارت میانوندی بنویسم }مث :

12+7^3+2*4

 

ب

4*2+3^7+ 12

 

 

بهم کنید...................

 

به وسیله کدوم زبان برنامه نویسی؟

  • Like 3
لینک به دیدگاه

تبدیل infix به postfix در جاوا

 


import java.io.IOException;

public class InToPost {
private Stack theStack;
private String input;
private String output = "";
public InToPost(String in) {
input = in;
int stackSize = input.length();
theStack = new Stack(stackSize);
}
public String doTrans() {
for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
switch (ch) {
case '+':
case '-':
gotOper(ch, 1);
break;
case '*':
case '/':
gotOper(ch, 2);
break;
case '(':
theStack.push(ch);
break;
case ')':
gotParen(ch);
break;
default:
output = output + ch;
break;
}
}
while (!theStack.isEmpty()) {
output = output + theStack.pop();
}
System.out.println(output);
return output;
}
public void gotOper(char opThis, int prec1) {
while (!theStack.isEmpty()) {
char opTop = theStack.pop();
if (opTop == '(') {
theStack.push(opTop);
break;
}
else {
int prec2;
if (opTop == '+' || opTop == '-')
prec2 = 1;
else
prec2 = 2;
if (prec2 < prec1) {
theStack.push(opTop);
break;
}
else
output = output + opTop;
}
}
theStack.push(opThis);
}
public void gotParen(char ch){
while (!theStack.isEmpty()) {
char chx = theStack.pop();
if (chx == '(')
break;
else
output = output + chx;
}
}
public static void main(String[] args)
throws IOException {
String input = "1+2*4/5-7+3/6";
String output;
InToPost theTrans = new InToPost(input);
output = theTrans.doTrans();
System.out.println("Postfix is " + output + '\n');
}
class Stack {
private int maxSize;
private char[] stackArray;
private int top;
public Stack(int max) {
maxSize = max;
stackArray = new char[maxSize];
top = -1;
}
public void push(char j) {
stackArray[++top] = j;
}
public char pop() {
return stackArray[top--];
}
public char peek() {
return stackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
}
}

 

 

  • Like 4
لینک به دیدگاه

برای تبدیل infix به postfix توی یه درخت دودویی , ابتدا برگها ، بعد ریشه ها را پیمایش باید بکنی در حالت تبدیل infix به prefix هم باید ریشه بعد برگها رو پیمایش کنی

تو کتاب ساختمان داده ها خوب توضیح داده چطوری با پشته(stack) اینا رو پیاده سازی کنی

ولی اینی که مثال زدی نه پیش وند نه پس وند :ws52:

  • Like 2
لینک به دیدگاه
برای تبدیل infix به postfix توی یه درخت دودویی , ابتدا برگها ، بعد ریشه ها را پیمایش باید بکنی در حالت تبدیل infix به prefix هم باید ریشه بعد برگها رو پیمایش کنی

تو کتاب ساختمان داده ها خوب توضیح داده چطوری با پشته(stack) اینا رو پیاده سازی کنی

ولی اینی که مثال زدی نه پیش وند نه پس وند :ws52:

ممنونم سارا جووووون

ب زبان c#نتونستم پیدا کنم خواستم خودم بنویسم تیکه اول واخرش ی معکوس میخاد

عبارت میریزی تو پشته از اخر پیمایش میکنی نمیدونستم الگوریتمش چطوریه؟؟؟؟؟؟؟؟؟؟؟؟؟؟

بعدش مث پسوندی عمل میکنی

ج نهایی ی معکوس میخاد

  • Like 3
لینک به دیدگاه
×
×
  • اضافه کردن...