30/09/2018, 21:01

Nhập 2đa thức dùng dslk

Em chạy đến hàm hiển thị thì chương trình dừng. mn ktra giúp em vì sao ạ?

#include<iostream>
using namespace std;
struct dt{
	int hs,sm;
};
struct node {
	dt data;
	struct node *next;
};
typedef struct node *dathuc;
void init(dathuc &f){
	f=NULL;
}
node *getnode(dt x){
	node *p=new node;
	p->data=x;
	p->next=NULL;
	return p;
}
void themcuoi(dathuc &f, dt &x){
	node *p,*q;
	p=getnode(x);
	if(f==NULL){
		f=p;
	}
	else {
		q=f;
		while(q->next!=NULL){
			q=q->next;
		}
		q->next=p;
		p->next=NULL;
	}
}
void nhapdonthuc(dt &x){
	cout<<"
 Nhap so mu: ";	cin>>x.sm;
	cout<<"
 Nhap he so: ";	cin>>x.hs;
}
void nhap(dathuc f){
	dt x;
	int n;
	cout<<"
 Nhap so luong don thuc: ";	cin>>n;
	for(int i=0;i<n;i++){
		cout<<"
 Nhap don thuc: ";	nhapdonthuc(x);
		themcuoi(f,x);
	}
}
void hienthi(dathuc f){
	node *q=f;
	dt x;
	cout<<"
F(x)= ";
	while(q->next!=NULL){
		cout<<q->data.hs<<"*x^"<<q->data.sm<<" + ";
		q=q->next;
	}
	cout<<q->data.hs<<"*x^"<<q->data.sm;
}
void menu(){
	dt x;
	int chon;
	dathuc f,P,Q;
	init(f);	init(P);	init(Q);
	while(1){
	cout<<"
		MENU";
	cout<<"
1.Nhap P(x).
2,Nhap Q(x)
";
	cout<<"Moi chon thao tac.";	cin>>chon;
	switch(chon){
		case 1: {
			nhap(P);	hienthi(P);
			break;
		}
		case 2: {
			nhap(Q);	hienthi(Q);
			break;
		}
		default : cout<<" Moi chon lai.";
	}
}
}
int main(){
	menu();
}
Do Quang Duy viết 23:09 ngày 30/09/2018

Hàm nhap() quên không có khóa & này, gọi là gì nhỉ, tham chiếu à. Nên sau hàm này f không thay đổi vẫn bằng NULL, đến hàm hienThi(), cậu gán q = f có nghĩa là q = NULL mà lại bắt nó trỏ đến next ở vòng while:

while(q->next!=NULL){
	cout<<q->data.hs<<"*x^"<<q->data.sm<<" + ";
	q=q->next;
}

nên nó “has stopped working” là đúng , thêm dấu và trước f là được:

void nhap(dathuc &f){
	dt x;
	int n;
	cout&lt;&lt;"\n Nhap so luong don thuc: ";	cin >> n;
	for(int i=0;i&lt;n;i++){
		cout&lt;&lt;"\n Nhap don thuc: ";	nhapdonthuc(x);
		themcuoi(f,x);
	}
}
Bài liên quan
0