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

تتبع برنامج تحويل Infix To Postfix

بدأه شمعه في 18 أبريل 2009 · 2 رد · 2,308 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
public class InToPost {
  private Stack stack;

  private String input;

  private String output = "";

  public InToPost(String in) {
	input = in;
	int stackSize = input.length();
	stack = new Stack(stackSize);
  }

  public String doTrans(String input) {
	for (int j = 0; j < input.length(); j++) {
	  char ch = input.charAt(j);
	  switch (ch) {
	  case '+': 
	  case '-':
		gotOper(ch, 1); 
		break; //   (precedence 1)
	  case '*': // it's * or /
	  case '/':
		gotOper(ch, 2); // go pop operators
		break; //   (precedence 2)
	  case '(': // it's a left paren
		stack.push(ch); // push it
		break;
	  case ')': // it's a right paren
		gotParen(ch); // go pop operators
		break;
	  default: // must be an operand
		output = output + ch; // write it to output
		break;
	  }
	}
	while (stack.isEmpty()) {
	  output = output + stack.pop();

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

  public void gotOper(char opThis, int prec1) {
	while (!stack.isEmpty()) {
	  char opTop =stack.pop();
	  if (opTop == '(') {
	 stack.push(opTop);
		break;
	  }// it's an operator
	  else {// precedence of new op
		int prec2;
		if (opTop == '+' || opTop == '-')
		  prec2 = 1;
		else
		  prec2 = 2;
		if (prec2 < prec1) // if prec of new op less
		{ //	than prec of old
		  stack.push(opTop); // save newly-popped op
		  break;
		} else
		  // prec of new not less
		  output = output + opTop; // than prec of old
	  }
	}
	stack.push(opThis);
  }

  public void gotParen(char ch){ 
	while (!stack.isEmpty()) {
	  char chx = stack.pop();
	  if (chx == '(') 
		break; 
	  else
		output = output + chx; 
	}
  }
}

البرنامج بيحول من infix to postfix محتاجة مساعده بتتبعه وكلمة break ايش بتعمل ؟

اتمنى منكم المساعده

#2

يهيألي رأيت الكود هذا من قبل لكني لا أعرف أين؟

ما معنى أنك تحتاجين مساعدة لتتبعه؟

على هذا المنوال لن تجدي من يساعدك

ابدأي عملك أولاً ثم أخبرينا عندما تتوقفين

بالنسبة للجملة break في switch case تعني توقف عن العمل

حيث أن switch case تقوم على مبدأ إذا تحقق إحدى الحالات نفذ جميع ما بعدها حتى أول جملة break

تحياتي

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

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

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

728x90.png

#3

استاذ علاء الكود من النت والهدف منه ان اتطلع وافهم طريقة الكتابة لتتسع مداركي لا أكثر واعتقد انك تشجع على ذلك

تحويل infix to postfix يقوم على مبدأ ان operands يذهب مباشرة الى ال output اما ال operators تتم الفكرة هنا حيث اذ ال stack empty بضيف العملية الاولى ومن ثم اذا جاءت عملية اخري بنعمل pop من ال stack ونقارن بينهم حسب الاولوية اذا False بنعمل push واذا true بنعمل pop .

كيف تتم هذه العملية من خلال البرنامج في الموضوع اعلاه وخصوصا في doTrans function

مع التحية

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