امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 4
  • 1
  • 2
  • 3
  • 4
  • 5
راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
نویسنده پیام
rebin ganjali آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 1
تاریخ عضویت: خرداد ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
سلام دوستان.
به برنامه یا الگوریتم تبدیل عبارت میانوندی به پیشوندی نیاز داشتم ، اگر کسی بلده و براش ممکنه برام لود کنه.
مرسی.
۰۵-خرداد-۱۳۸۶, ۰۰:۵۶:۱۸
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #2
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
دوست من سلام

این بحث قبلا توی فروم شده بود . شما میتونید به لینک زیر مراجعه کنید :

http://forum.iranled.com/showthread.php?tid=2672

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۰۵-خرداد-۱۳۸۶, ۱۷:۵۹:۴۵
ارسال‌ها
پاسخ
atbin_hem آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #3
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
سلام دوستان
یه سوال داشتم.
ممنون میشم کمکم کنید.
یک پشته خالی با اعداد از 1 تا 6 از ورودی داده شده است.با اعمال pop ,push کدام یک از گزینه های زیر را نمی توان با هیچ ترتیبی از اعمال فوق به دست آورد؟
a)123564 b)324651
c)432165 d)215346
۱۵-مهر-۱۳۸۶, ۲۳:۲۹:۲۵
ارسال‌ها
پاسخ
misaq آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 17
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 0
( 2 تشکر در 2 ارسال )
ارسال: #4
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
pop وpushرا تعریف کن.
۱۵-مهر-۱۳۸۶, ۲۳:۵۹:۵۵
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #5
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
گزینه d رو با هیچ ترتیبی نمیشه بدست آورد . برای اینکه بتونیم این گزینه رو هم در بیاریم باید جای ارقام 3 و 4 رو باهم عوض کنیم یا در واقع داشته باشیم 215436 . حالا علت کجاست ؟؟ من ترتیب اعمال رو مینویسم و شما خودتون متوجه خواهید شد چرا . برای ایجاد جواب 215346 مراحل زیر رو قدم به قدم انجام میدیم :

ابتدا 1 رو باید توی پشته قرار بدیم ( 1 پس توی پشته هست )
2 رو مستقیما به جواب اضافه میکنیم ( جواب ما تا اینجا 2 هست )
1 رو از پشته pop میکنیم و به جواب اضافه میکنیم ( جواب بدست آمده تا اینجا 21 هست و پشته خالیه )
3 رو باید توی پشته قرار بدیم ( 3 پس توی پشته هست و پایین ترین عضو پشته )
4 رو باید توی پشته قرار بدیم ( 4 3 توی پشته هستند و 4 بالاترین هست)
5 رو مستقیما به جواب اضافه میکنیم ( جواب ما تا اینجا 215 هست )
حالا توی این مرحله باید طوری عمل کنیم که 3 توی جواب ما قرار بگیره تا درواقع بتونیم 2153 رو تشکیل بدیم اما 3 در پایین پشته قرار داره و چون عضو بالایی پشته نیست تمیتونیم از پشته خارجش کنیم در نتیجه هیچ راهی نیست که بشه 3 رو خارج کنیم و 215246 رو بسازیم .

خاصیت LIFO بودن پشته به ما این امکان رو نمیده . حالا فقط کافیه جای ارقام 3 و 4 رو توی گزینه عوش کنی . خیلی راحت جواب 215436 رو میتونی بدست بیاری !

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
(آخرین ویرایش در این ارسال: ۱۶-مهر-۱۳۸۶, ۰۰:۱۱:۲۴، توسط Mamad2003.)
۱۶-مهر-۱۳۸۶, ۰۰:۰۹:۵۹
ارسال‌ها
پاسخ
ashkan آفلاین
بنيانگذار سايت
******

ارسال‌ها: 1,553
موضوع‌ها: 80
تاریخ عضویت: آبان ۱۳۸۲

تشکرها : 0
( 140 تشکر در 87 ارسال )
ارسال: #6
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
ممنون خیلی مطلبت بخصوص در مورد عبارات پسوندی و میانوندی جالب بود.
تا باشه از این بحث های جالب باشه.

آشنایی با نظریه زبان باعث شد تا بفهمم کامپیوتر اونی نیست که من میدونم.
۱۶-مهر-۱۳۸۶, ۰۸:۴۴:۳۷
وب سایت ارسال‌ها
پاسخ
mina.M آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #7
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
salam
shoma barname infix be postfix ro goftid age momkene infix be prefix ro ham begid.mer30
۲۱-اردیبهشت-۱۳۸۷, ۱۸:۵۹:۲۵
ارسال‌ها
پاسخ
تشکر شده توسط : eponaxiluuyo
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #8
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
نمونه کد زیاده : http://www.sourcecodesworld.com/source/s...riptID=659

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۲-اردیبهشت-۱۳۸۷, ۱۱:۴۷:۱۰
ارسال‌ها
پاسخ
setayesh2008 آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: بهمن ۱۳۸۷

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #9
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
لطفا برنامه تبدیل infix به prefix را بنویسید
۱۶-بهمن-۱۳۸۷, ۲۳:۲۱:۴۲
ارسال‌ها
پاسخ
HoseinVig آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,165
موضوع‌ها: 97
تاریخ عضویت: مرداد ۱۳۸۵

تشکرها : 4768
( 2464 تشکر در 677 ارسال )
ارسال: #10
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
من کدشو قبلا نوشتم تازه یه کار دیگه هم میکنه بجای عملوند هایی که بهش دادی عدد ازت میخاد و جواب عبارت هم بهت میگه:

کد:
#include <iostreame.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
    char infix[255],prefix[255];
struct node
{
char info;
struct node *link;
}*start,*temp,*end;
struct operand
{
char oper;
int value;
struct operand *link;
}*one,*t,*n;

void add2stack(char ch)
{
   temp=(struct node *) malloc(sizeof(node));
   temp->info=ch;
   temp->link=start;
   if(start==NULL)
   {
     temp->link=NULL;
     end=start=temp;
   }
   else
     start=temp;
}
char getstack()
{
   char temp;
   temp=start->info;
   start=start->link;
   return temp;
}
void addoperand(char o,int v)
{
   t=one;
   while(t)
   {
      if(t->oper==o){ t->value=v;return;}
      t=t->link;
   }
   t=(struct operand *) malloc(sizeof(operand));
   t->oper=o;
   t->value=v;
   t->link=NULL;
   if(one==NULL)
   {
   n=one=t;
   }
   else
   {
   n->link=t;
   n=t;
   }
}
int getvalue(char o)
{
   t=one;
   while(t)
   {
      if(t->oper==o) return(t->value);
      t=t->link;
   }
//   return 0;
}
int power(char ch)
{
      if(ch=='+' || ch=='-') return 1;
      if(ch=='*' || ch=='/') return 2;

return 0;
}
void citop()
{
   int i=0,k=0;
   for(i=strlen(infix);i>=0;i--)
      infix[i+1]=infix[i];
   infix[0]='(';
   infix[strlen(infix)]=')';
   char gtst;
   for(int j=0;j<strlen(infix);j++)
   {
      if(infix[j]=='(') add2stack(infix[j]);
      if((infix[j]!='(')&&(infix[j]!=')')&&(infix[j]!='+')&&(infix[j]!='-')&&(infix[j]!='*')&&(infix[j]!='/')) prefix[k++]=infix[j];
      if(infix[j]==')')
     while((gtst=getstack())!='(')
        prefix[k++]=gtst;
      if((infix[j]=='+')||(infix[j]=='-')||(infix[j]=='*')||(infix[j]=='/'))
      {

      while((power(start->info)) >= (power(infix[j])))
           prefix[k++]=getstack();
      add2stack(infix[j]);
      }
   }
}
void comput(char posfix[])
{
int k;
char cha,chb;
int inta=0,intb=0,ans=0;
    for(k=0;k<strlen(posfix);k++)
    {
     if((posfix[k]!='+')&&(posfix[k]!='-')&&(posfix[k]!='*')&&(posfix[k]!='/'))
          add2stack(posfix[k]);
     else {

        cha=getstack();
        chb=getstack();
        inta=getvalue(cha);
        intb=getvalue(chb);
        switch(posfix[k]){
            case '+':ans=inta+intb;
                 break;
            case '-':ans=intb-inta;
                 break;
            case '*':ans=inta*intb;
                 break;
            case '/':ans=intb/inta;
                 break;
                 }
        addoperand('@',ans);
        add2stack('@');

          }
    }
}
int instr(char str[],char key)
{
int i=0;
   while(str[i])
     if(str[i]==key)
       return i;
     else i++;
}
void inoperand(char ops[])
{
int tmpnum,q;
   for(q=0;q<strlen(ops);q++)
   {
       if((ops[q]!='+')&&(ops[q]!='-')&&(ops[q]!='*')&&(ops[q]!='/'))
       {
       if(instr(ops,ops[q])==q){
          cout<<"\ninput "<<ops[q]<<":",cin>>tmpnum;
          addoperand(ops[q],tmpnum);
                   }
       }
   }
}
void main()
{
clrscr();
    cout<<"infix >",cin>>infix;
    citop();
    start=end=NULL;
    cout<<"\nPosfix Is:" << prefix<<"\n";
    inoperand(prefix);
    comput(prefix);

    cout<<"Resault:"<<getvalue(getstack());//<<one->link->value;
getch();
}

۱۷-بهمن-۱۳۸۷, ۰۳:۱۹:۰۱
ارسال‌ها
پاسخ
تشکر شده توسط : mahgol, arzna
compol آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: آذر ۱۳۸۹

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #11
RE: راهنمایی در مورد الگوریتم تبدیل عبارت infix به prefix
(۰۵-خرداد-۱۳۸۶, ۱۷:۵۹:۴۵)Mamad2003 نوشته است: دوست من سلام

این بحث قبلا توی فروم شده بود . شما میتونید به لینک زیر مراجعه کنید :

http://forum.iranled.com/showthread.php?tid=2672


تبدیل عبارات infix به prefixبا استفاده از class
(آخرین ویرایش در این ارسال: ۱۰-آذر-۱۳۸۹, ۱۶:۲۶:۴۶، توسط compol.)
۱۰-آذر-۱۳۸۹, ۱۶:۲۵:۰۳
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش پردازش تصویر و بررسی الگوریتم های آن salehjg 34 41,214 ۲۸-بهمن-۱۳۹۶, ۱۸:۴۶:۴۶
آخرین ارسال: midel1
  تبدیل فایل های Word به تصویر (JPG) Di Di 11 90,929 ۰۸-بهمن-۱۳۹۳, ۰۳:۵۱:۳۰
آخرین ارسال: NO DONGLE
  الگوریتم minmax بازی نقطه و خط england 0 2,440 ۱۷-دى-۱۳۹۳, ۱۳:۵۲:۴۹
آخرین ارسال: england
  الگوریتم های زمان بندی در سیستم عامل ها pari_kh 7 27,187 ۲۰-آذر-۱۳۹۳, ۱۶:۰۴:۵۵
آخرین ارسال: نوشين سلماني
  [آموزشی] PDFها و فایل های آموزشی برای تبدیل فوریه و wavelet (موجک ها) salehjg 0 4,708 ۱۴-آذر-۱۳۹۳, ۰۲:۳۶:۴۰
آخرین ارسال: salehjg
  الگوریتم مورچگان مژده صباغ نژاد 11 15,260 ۲۰-آبان-۱۳۹۳, ۲۱:۳۹:۱۲
آخرین ارسال: javad917
  [فوری] الگوریتم sedi67 0 2,182 ۲۰-آبان-۱۳۹۳, ۰۰:۰۳:۱۵
آخرین ارسال: sedi67
  طراحی الگوریتم ها به صورت بازگشتی The.Ghost 2 7,274 ۲۷-آبان-۱۳۹۱, ۲۰:۵۱:۱۵
آخرین ارسال: lord_viper
Sad الگوریتم zahra.sh 12 12,292 ۲۷-آبان-۱۳۹۱, ۱۳:۲۲:۱۳
آخرین ارسال: akramn
  الگوریتم جمع آوری سایت های نیازمندی aleas 0 2,623 ۲۷-آبان-۱۳۹۱, ۱۲:۴۱:۱۹
آخرین ارسال: aleas

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS