ورود

View Full Version : سوال: خروجی نادرست



hafez1
شنبه 20 آبان 1391, 00:28 صبح
یه برنامه ای نوشتم که به جای چاپ خروجی عبارت زیر را چاپ می کند.
this application has requested ,the run time to terminate it in an unusual way.please contact the applications support team for more information.
این پیغام مربوط به چیست؟

مسعود اقدسی فام
شنبه 20 آبان 1391, 00:31 صبح
کد خیلی طولانیه؟ می‌ذاشتید بهتر می‌شد نظر داد.

hafez1
شنبه 20 آبان 1391, 00:54 صبح
بله.خیلی طولانیه.به این صورته:


#include<iostream>
#include<string>
#include <cstdlib>
using namespace std;
class mnode
{
public:
mnode *n;
string d;
};
class mdll
{
mnode *first;
};
class node
{
public:
node *next;
double tavan;
double zarib;
};
class linklist
{
public:
linklist();
void print1();
void print2();
double computation1(double);
double computation2(double);
void add();
node *start;
node *ptra;
node *ptrb;
node *head;
node *last;
// node *temp;
node *h;
};

linklist::linklist()//سازنده
{
string s;
cout<<"enter s"<<endl;
cin>>s;
char *p;
char *token;
p=new char[s.size()+1];
strcpy(p,s.c_str());
token=strtok(p,"+");
mnode *tmp,*first;
first=NULL;
while(token!=NULL)
{
mnode *help=new mnode;
help->d=token;
help->n=NULL;
if(first==NULL)
first=tmp=help;
else
{
tmp->n=help;
tmp=help;
}
}

tmp=first;
int i=0;
char *ptr;
char *o;
o=new char[tmp->d.size()+1];
strcpy(o,tmp->d.c_str());
//ptr=strtok(o,"x");
while(tmp!=NULL)
{
ptr=strtok(o,"x");
char c[20];
string m;
m=ptr;
strcpy (c, m.c_str());//قسمت ضریب جدا شده از جمله(قسمت قبل از ایکس) را در یک آرایه کاراکتری می ریزد.
double q=atof(c);
ptr=strtok(NULL,"x");
char e[20];
string g;
g=ptr;
strcpy(e,g.c_str());//قسمت جدا شده بعد از ایکس یعنی^وتوان را در یک آرایه کاراکتری می ریزد
char n[20];
for(int conter=0;conter<(m.length()-1);conter++)//به دلیل این که اولین قسمت ذخیره شده در آرایه ^است و ما به ^ نیاز نداریم بلکه به عدد بعد از آن برای توان نیاز درایم
//آرایه دیگری می سازیم که کاراکترهای ذخیره شده در آرایه قبلی را از خانه اول به بعد در خود ذخیره کند یعنی ^ را دور می ریزیم.
n[conter]=e[conter]+1;
double b=atof(n);
//node *temp;
node *start,*temp;
start=NULL;
while(i==0)
{//فقط برای ذخیره کردن ضریب و توان جمله اول وارد این حلقه می شویم
temp=new node;
temp->zarib=q;
temp->tavan=b;
temp->next=NULL;
i=1;
}

//برای ذخیره ضریب و توان جملات بعدی
node *help2=new node;
help2->zarib=q;
help2->tavan=b;
help2->next=NULL;
temp->next=help2;
temp=temp->next;
tmp=tmp->n;
}
}
double linklist::computation1(double x)//برای محاسبه مقدار جمله اولو دوم به ازای ایکس وارد شده
{
node *h=start;
double sum=0;
while(h!=NULL)
{
double jam=1;
for(int i=0;i<h->tavan;i++)
jam*=x;
sum+=jam*(h->zarib);
h=h->next;

}
cout<<"sum:"<<sum<<endl;
return sum;
}
double linklist::computation2(double x)//برای محاسبه مقدار جمله مجموع به ازای ایکس وارد شده
{
node *h=head;
double sum=0;
while(h!=NULL)
{
double jam=1;
for(int i=0;i<h->tavan;i++)
jam*=x;
sum+=jam*(h->zarib);
h=h->next;

}
cout<<"sum:"<<sum<<endl;
return sum;
}
void linklist:: print1()//برای چاپ جمله اول و دوم
{
node *last=start;
while(last!=NULL)
{
if(last->zarib>0)
cout<<"+";
cout<<last->zarib<<"x^"<<last->tavan;
last=last->next;
}
}
void linklist:: print2()//برای چاپ جمله کلی
{
node *last=ptra;
while(last!=NULL)
{
if(last->zarib>0)
cout<<"+";
cout<<last->zarib<<"x^"<<last->tavan;
last=last->next;
}
}
void linklist::add()
{
//در این تابع برای ساخت لینک لیست مجموع این کار رو کردم که لینک لیست مربوط به جمله دوم رو به لینک لیست مربوط به جمله اول وصل می کند
linklist a,b;
ptra=a.start;
ptrb=b.start;
node *komaki;
komaki=ptra;
while(komaki!=NULL)
{
komaki=komaki->next;
}
komaki=ptrb;
node *aval;
aval=ptra;
komaki=aval->next;
while(komaki->next!=NULL)
{
if(aval->tavan!=komaki->tavan)
{
aval=komaki;
komaki=aval->next;
}
else
{
aval->zarib=aval->zarib+komaki->zarib;
aval->next=komaki->next;
delete komaki;
komaki=aval->next;
}
}
}

int main()
{
double x;
cout<<"enter x"<<endl;
cin>>x;
linklist a;//برای ریختن جمله اول در لینک لیست
a.print1();//برای چاپ جمله اول
a.computation1(x);//برای محاسبه مقدار چند جمله ای بر حسب ایکس وارد شده
linklist b;
b.print1();
b.computation1(x);
a.add();//برای ساخت لینک لیست مربوط به مجموع چند جمله ای ها
a.print2();
a.computation2(x);
}

omidshaman
شنبه 20 آبان 1391, 11:06 صبح
اگر اشتباه نکنم این قسمت اشتباست چون برنامه داخل این قسمت گیر میکنه اون ارور رو میده...

while(token!=NULL)
{
mnode *help=new mnode;
help->d=token;
help->n=NULL;
if(first==NULL)
first=tmp=help;
else
{
tmp->n=help;
tmp=help;
}
}

omidshaman
شنبه 20 آبان 1391, 12:27 عصر
البته این برنامه ای که شما نوشتی اصلا نظم نداره احتمالا اشتباهات بیشتری هم داخلش داشته باشی!
این اسمایی که گذاشتی چین اخه ,... n h q t g b a c e o ! ادم 4 خط از این کدو بخونه سر درد میگیره:لبخند:
مثلا به جاptr تو خط 68 بزار char *Stroke_x; یا یک همچین چیزایی که راحت بشه کد رو خوند!