۰۵-خرداد-۱۳۸۶, ۰۰:۵۶:۱۸
صفحهها: 1 2
۰۵-خرداد-۱۳۸۶, ۱۷:۵۹:۴۵
دوست من سلام
این بحث قبلا توی فروم شده بود . شما میتونید به لینک زیر مراجعه کنید :
http://forum.iranled.com/showthread.php?tid=2672
این بحث قبلا توی فروم شده بود . شما میتونید به لینک زیر مراجعه کنید :
http://forum.iranled.com/showthread.php?tid=2672
۱۵-مهر-۱۳۸۶, ۲۳:۲۹:۲۵
سلام دوستان
یه سوال داشتم.
ممنون میشم کمکم کنید.
یک پشته خالی با اعداد از 1 تا 6 از ورودی داده شده است.با اعمال pop ,push کدام یک از گزینه های زیر را نمی توان با هیچ ترتیبی از اعمال فوق به دست آورد؟
a)123564 b)324651
c)432165 d)215346
یه سوال داشتم.
ممنون میشم کمکم کنید.
یک پشته خالی با اعداد از 1 تا 6 از ورودی داده شده است.با اعمال pop ,push کدام یک از گزینه های زیر را نمی توان با هیچ ترتیبی از اعمال فوق به دست آورد؟
a)123564 b)324651
c)432165 d)215346
۱۵-مهر-۱۳۸۶, ۲۳:۵۹:۵۵
pop وpushرا تعریف کن.
۱۶-مهر-۱۳۸۶, ۰۰:۰۹:۵۹
گزینه 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 رو میتونی بدست بیاری !
ابتدا 1 رو باید توی پشته قرار بدیم ( 1 پس توی پشته هست )
2 رو مستقیما به جواب اضافه میکنیم ( جواب ما تا اینجا 2 هست )
1 رو از پشته pop میکنیم و به جواب اضافه میکنیم ( جواب بدست آمده تا اینجا 21 هست و پشته خالیه )
3 رو باید توی پشته قرار بدیم ( 3 پس توی پشته هست و پایین ترین عضو پشته )
4 رو باید توی پشته قرار بدیم ( 4 3 توی پشته هستند و 4 بالاترین هست)
5 رو مستقیما به جواب اضافه میکنیم ( جواب ما تا اینجا 215 هست )
حالا توی این مرحله باید طوری عمل کنیم که 3 توی جواب ما قرار بگیره تا درواقع بتونیم 2153 رو تشکیل بدیم اما 3 در پایین پشته قرار داره و چون عضو بالایی پشته نیست تمیتونیم از پشته خارجش کنیم در نتیجه هیچ راهی نیست که بشه 3 رو خارج کنیم و 215246 رو بسازیم .
خاصیت LIFO بودن پشته به ما این امکان رو نمیده . حالا فقط کافیه جای ارقام 3 و 4 رو توی گزینه عوش کنی . خیلی راحت جواب 215436 رو میتونی بدست بیاری !
۱۶-مهر-۱۳۸۶, ۰۸:۴۴:۳۷
ممنون خیلی مطلبت بخصوص در مورد عبارات پسوندی و میانوندی جالب بود.
تا باشه از این بحث های جالب باشه.
تا باشه از این بحث های جالب باشه.
۲۱-اردیبهشت-۱۳۸۷, ۱۸:۵۹:۲۵
salam
shoma barname infix be postfix ro goftid age momkene infix be prefix ro ham begid.mer30
shoma barname infix be postfix ro goftid age momkene infix be prefix ro ham begid.mer30
۲۲-اردیبهشت-۱۳۸۷, ۱۱:۴۷:۱۰
نمونه کد زیاده : http://www.sourcecodesworld.com/source/s...riptID=659
۱۶-بهمن-۱۳۸۷, ۲۳:۲۱:۴۲
لطفا برنامه تبدیل 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();
}
۱۰-آذر-۱۳۸۹, ۱۶:۲۵:۰۳
(۰۵-خرداد-۱۳۸۶, ۱۷:۵۹:۴۵)Mamad2003 نوشته است: [ -> ]دوست من سلام
این بحث قبلا توی فروم شده بود . شما میتونید به لینک زیر مراجعه کنید :
http://forum.iranled.com/showthread.php?tid=2672
تبدیل عبارات infix به prefixبا استفاده از class
صفحهها: 1 2