PDA

View Full Version : مبتدی: سرآیند ها در c++



z.rezaie
جمعه 22 خرداد 1394, 10:43 صبح
با سلام میخواستم بدونم سرایند چه توابعی رو به برنامه معرفی میکنه؟؟
process.h

chikar
جمعه 22 خرداد 1394, 11:16 صبح
با سلام میخواستم بدونم سرایند چه توابعی رو به برنامه معرفی میکنه؟؟
process.h

خب بستگی داره شما چه هدر فایلی رو include کرده باشید، مثلا include کردن هدر iostream باعث می شه، از امکانات ورودی/خروجی، رشته و ... استفاده کنید
هر سرآیندی که شما include می کنید دارای یه سری کلاس و توابع آماده هست که برای کارهای مختلف مورد استفاده قرار می گیره، مثلا تولید اعداد تصادفی، کار با توابع ریاضی، کار با آرایه، کار با رشته و...
این هدر فایل های یا به قول شما سرآیندهای استاندارد c++ رو در اینجا (http://en.cppreference.com/w/cpp/header)می تونید مشاهده کنید

z.rezaie
جمعه 22 خرداد 1394, 11:38 صبح
خب بستگی داره شما چه هدر فایلی رو include کرده باشید، مثلا include کردن هدر iostream باعث می شه، از امکانات ورودی/خروجی، رشته و ... استفاده کنید
هر سرآیندی که شما include می کنید دارای یه سری کلاس و توابع آماده هست که برای کارهای مختلف مورد استفاده قرار می گیره، مثلا تولید اعداد تصادفی، کار با توابع ریاضی، کار با آرایه، کار با رشته و...
این هدر فایل های یا به قول شما سرآیندهای استاندارد C++‎ رو در اینجا (http://en.cppreference.com/w/cpp/header)می تونید مشاهده کنید

از راهنماییتون ممنون زیاد با c ++ اشناییت ندارم
قطعه کد من این هست: مثلا میدونم که conio باعث میشه برنامه بعد از دیدن خروجی برای کاربر بسته بشه
#include "iostream.h"
#include "conio.h"
#include "process.h"
#define M 21
//*****************
class stack {
public:
stack();
void push(char);
char pop();
int empty();
void popAndTest(char &, int &);
void topAndTest(char &, int &);
private:
int myTop;
char items[M];
};
//**************
stack::stack()
{
myTop = -1;
}
//**************
void stack::push(char x)
{
items[++myTop] = x;
}
//**************
char stack::pop()
{
return items[myTop--];
}
//**************
int stack::empty()
{
return (myTop == -1);
}
//**************
void stack::popAndTest(char &x, int &underflow)
{
if(empty())
underflow = 1;
else
{
x = items[myTop--];
underflow = 0;
}
}
//****************
void stack::topAndTest(char &x, int &underflow)
{
if(empty())
underflow = 1;
else
{
x = items[myTop];
underflow = 0;
}
}
//**************
int isOperand(char);
void convert(char[], char[]);
int pred(char, char);

int checkerror(char infix[])
{
int er=0;

int ac=0;

if( infix[0] == '+') er=1;
if( infix[0] == '-') er=1;
if( infix[0] == '*') er=1;
if( infix[0] == '/') er=1;
for(int d=0;infix[d];d++)
{ac=d;}
for(int i=0; i < ac; i++)

{
if ( infix[i] == '+')
{if ( infix[i+1] == '+') er=1;
else if( infix[i+1] == '-') er=1;
else if( infix[i+1] == '*') er=1;
else if( infix[i+1] == '/') er=1;}

else if( infix[i] == '-')
{ if ( infix[i+1] == '+') er=1;
else if( infix[i+1] == '-') er=1;
else if( infix[i+1] == '*') er=1;
else if( infix[i+1] == '/') er=1;}

else if( infix[i] == '*')
{ if ( infix[i+1] == '+') er=1;
else if( infix[i+1] == '-') er=1;
else if( infix[i+1] == '*') er=1;
else if( infix[i+1] == '/') er=1;}

else if( infix[i] == '/')
{ if ( infix[i+1] == '+') er=1;
else if( infix[i+1] == '-') er=1;
else if( infix[i+1] == '*') er=1;
else if( infix[i+1] == '/') er=1;}
}
if( infix[ac] == '+') er=1;
if( infix[ac] == '-') er=1;
if( infix[ac] == '*') er=1;
if( infix[ac] == '/') er=1;







int baz=0;
int baste=0;

for(int j = 0; infix[j]; j++)
{if(infix[j]=='(') baz++;
if(infix[j]==')') baste++;
}



if (baz != baste) cout<<"Error for ()\n";
if (er) cout<<"error is code\n";

if(er) return er;
if(baz != baste) return 1;
return 0;
}

int main()
{
char infix[M], postfix[M];
clrscr();
cout << "Enter infix:";
cin.get(infix, M);
int errr;
errr=checkerror(infix);
if(errr) {getch(); exit(0);}
convert(infix, postfix);
cout << "Postfix is:\n";
for(int i = 0; postfix[i]; i++)
cout << postfix[i] << ",";
getch();
return 0;
}




//*****************
void convert(char infix[], char postfix[])
{
char symbol, topSymbol;
int underflow, j = 0;
stack s;
for(int i = 0; infix[i]; i ++)
{
symbol = infix[i];
if(isOperand(symbol))
postfix[j++] = symbol;
else if(symbol == '(')
s.push(symbol);
else if(symbol == ')')
{
topSymbol = s.pop();
while(topSymbol != '(')
{
postfix[j++] = topSymbol;
topSymbol = s.pop();
}//end of while
} //end of else if
else
{
s.topAndTest(topSymbol, underflow);
//if op1 > op2 then true
if(s.empty() || (!pred(topSymbol, symbol)))
s.push(symbol);
else
{
s.popAndTest(topSymbol, underflow);
while(pred(topSymbol, symbol) && !underflow)
{
postfix[j++] = topSymbol;
s.popAndTest(topSymbol, underflow);
}
s.push(symbol);
} //end of else
}//end of else
}//end of for
while(!s.empty())
{
topSymbol = s.pop();
postfix[j++] = topSymbol;
}
postfix[j] = '\0';
}
//*****************
int isOperand(char symbol)
{

if((symbol >= '0' && symbol <= '9')||(symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z'))

return 1;
return 0;
}
//****************
int pred(char op1, char op2)
{
int i, p1, p2;
/* ( + - * / % */
static char op[] = {'(','+', '-', '*', '/','%','\0'};
static int isp[] = {0, 12, 12, 13, 13, 13};
for(i = 0; op[i]; i ++)
if(op[i] == op1)
{
p1 = i;
break;
}
for(i = 0; op[i]; i ++)
if(op[i] == op2)
{
p2 = i;
break;
}
if(isp[p1] >= isp[p2])
return 1;
return 0;
}

z.rezaie
جمعه 22 خرداد 1394, 11:48 صبح
البته من در مورد این برنامه هیچ اطلاعاتی ندارم.
این برنامه تبدیل یک عبارت میانوندی به عبارت پسوندی به وسیله ی پشته س
نمیدونم چطوری میشه توضیحات خط به خطش رو به دست اورد