PDA

View Full Version : سوال هایی دز مورد 2 برنامه



mohsen_d
سه شنبه 24 آبان 1384, 05:36 صبح
با سلام
1-برنامه ای در مورد تبدیل عبارات infix به postfix با پشته باید بنویسم
داخل این عبارت پرانتز هم ممکن است بیاید
اگه می شه در نحوه نوشتن برنامه من را یاری کنید
ممنونم
2-برنامه برای جمع دو چند جمله ای نوشته شده که این2 چند جمله ای توسط آرایه گرفته می شه
در سطر اولشان توان و در سطر دومشان ضریب
حال می خواهم این برنامه را در تابع قرار دهم(پارامتر ها 3 تا آرایه است)
تابع قرار داده می شود اما در حین اجرا هنگامی که به تعریف تابع می رسه به جای این که در تابع اعدادی که در مین اصلی برنامه پر کرده ام را جاگذاری کنه آن محل از حافظه را که آرایه در آنجا است قرار داده می شه ds:34h3 یعنی آرایه کلن پاک میشه

خود برنامه
اگه میشه راهنماییم کنید
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
a(int[2][10],int[2][10]);
jame(int[2][10],int[2][10],int[2][10]);
//*****************************Main***************** *********
main()
{//10
int a1[2][10],a2[2][10],jam[2][10];
char ch;
while(1)
{ //20
clrscr();
cout<<"1-Enter The Polyment And Show"<<"\n\n";
cout<<"2-Show The Jame 2 Polyment"<<"\n\n";
cout<< "For Exit Program Enter 'q'[?] ";
ch=getch();
switch(ch)
{ //30
case 'q':
case 'Q':
exit(0);
case '1':
clrscr();
a(a1,a2);break;
case '2':
clrscr();
jame(a1,a2,jam);break;
}//30
}//20
}//10
//**********************gereftan moadele*********************
a(int a1[2][10],int a2[2][10])
{
int i1,j1,k1,m1,n1,m2,n2,k2,i2,j2;
printf("Tedad jomelate Moadeleye1:=");
scanf("%d",&k1);
for(i1=0;i1<10;i1++)
{//49
a1[0][i1]=0;
a1[1][i1]=0;
}//49

{//50

for (m1=0;m1<k1;m1++)
{//60
printf("zareeb moadele1:=");
scanf("%d",&a1[1][m1]);
printf("tavan moadele1:=");
scanf("%d",&a1[0][m1]);
} //60
for(i1=0;i1<k1;i1++)
{ //70
for(j1=i1+1;j1<k1;j1++)
{//80
if(a1[0][j1]>a1[0][i1])
{//90
n1=a1[0][j1];
a1[0][j1]=a1[0][i1];
a1[0][i1]=n1;
//*******************

n1=a1[1][j1];
a1[1][j1]=a1[1][i1];
a1[1][i1]=n1;
} //90

} //80
} //70

printf("\n");
for(i1=0;i1<k1;i1++)
printf("%dX^%d+",a1[1][i1],a1[0][i1]);
getch();
} //50
//********************moadeleye dovom***************
{//100
clrscr();
printf("Tedad jomelate Moadele2:=");
scanf("%d",&k2);
for(i1=0;i1<10;i1++)
{//200
a2[0][i1]=0;
a2[1][i1]=0;
}//250
{
for (m2=0;m2<k2;m2++)
{//300
printf("zareeb moadele2:=");
scanf("%d",&a2[1][m2]);
printf("tavan moadele2:=");
scanf("%d",&a2[0][m2]);
}//300
for(i2=0;i2<k2;i2++)
{//400
for(j2=i2+1;j2<k2;j2++)
{//500
if(a2[0][j2]>a2[0][i2])
{//600
n2=a2[0][j2];
a2[0][j2]=a2[0][i2];
a2[0][i2]=n2;
//*******************
n2=a2[1][j2];
a2[1][j2]=a2[1][i2];
a2[1][i2]=n2;
} //600
} //500
}//400
}//200
printf("\n");
for(i2=0;i2<k2;i2++)
printf("%dX^%d+",a2[1][i2],a2[0][i2]);
getch();
}//100
return 0;
}
//**************************Jame******************** *********
jame(int a1[2][10],int a2[2][10],int jam[2][10])
{
int i1,j1,k1,m1,n1,tmax,m2,n2,k2,i2,j2;
for(i1=0;i1<10;i1++){jam[0][i1]=0;jam[1][i1]=0;} // khanahaye jam==0
{//700
for(i1=0;i1<10;i1++)
{ //710
for(j1=i1+1;j1<10;j1++)
{ //720
if (a1[0][i1]==a1[0][j1])
{ //730
a1[1][i1]=a1[1][i1]+a1[1][j1];
a1[1][j1]=0;
}//730
} //720
} //710
for(i1=0;i1<10;i1++)
{ //810
for(j1=i1+1;j1<10;j1++)
{ //820
if (a2[0][i1]==a2[0][j1])
{ //830
a2[1][i1]=a2[1][i1]+a2[1][j1];
a2[1][j1]=0;
}//830
} //820
} //810
//shoroo jam 2 jomleye kamel shode agar a1>a2
if (a1[0][0]>a2[0][0]) tmax=a1[0][0];
else tmax=a2[0][0];
for(m1=tmax;m1>=0;m1--)
{ //905
for(i1=0;i1<k1;i1++) // be tedad jomelat ebarat aval tavannhaye == ba ham jam kone
{ //920
if(a1[0][i1]==m1)
{jam[1][m1]=a1[1][i1]+jam[1][m1];
jam[0][m1]=m1;}
} //920
for(j1=0;j1<k2;j1++) // be tedad jomelate ebarate dovom ke == tavan ebarat aval jame kone
{ // 910
if(a2[0][j1]==m1)
{jam[1][m1]=a2[1][j1]+jam[1][m1]; // jam ebarate aval+ebarat dovom(tavanhaye mosave)
jam[0][m1]=m1;}
} //905
}//910
clrscr();
printf("");
printf("jame 2 jomlee:=");
printf("%dX^%d",jam[1][0],jam[0][0]);
for(i1=1;i1<10;i1++)
{if (jam[1][i1]!=0)
printf("+%dX^%d",jam[1][i1],jam[0][i1]);}//900
getch();
}
return 0;
}//700

آسمان آبی
یک شنبه 06 آذر 1384, 00:52 صبح
با سلام
در مورد برنامه شماره" 1"فکر میکنم این برنامه داخل کتاب ساختمان داده ها در ++C آقای جعفرنژاد باشد (درزیر هم آن را فرستاده ام)

#include "iostream.h"
#include "conio.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 main()
{
char infix[M], postfix[M];
clrscr();
cout << "Enter an infix expression:";
cin.get(infix, M);
convert(infix, postfix);
cout << "Postfix expression is:";
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')
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;
}