اذهب إلى المحتوى
  • 0

مشكلة في برنامج لحذف الأعداد الأولية من Stack بلغة ++C

محمد عنيبة

السؤال

#include<iostream>
using namespace std;

int Size = 10;
int a[10], top = -1;
int pop();
void del_pop(int[], int i); 
void push(int[], int);
 void delprime(int a[]);
int main() {
	 int i, k;
	for (i = 0; i < Size; i++) { cin >> k; push(a, k); }

   delprime(a);
    for (i = 0; i < Size; i++){cout << pop() << endl;}
                              
	
}
void push(int a[], int k) {
	if (top == Size - 1)cout << "Stack overflow";
	else
		a[++top] = k;
}
int pop() { return a[top--]; }
void del_pop(int a[], int i)
{
	int top2 = -1, m[10];
	while (top >= 0) {
		if (i != a[top]) { m[++top2] = a[top]; }
		else
			Size--;
			top--;
	}
	while (top2 >= 0) {
		a[++top] = m[top2--];
	}

}
 void delprime(int a[])
{
	int i,flag = 0;

	while (top >= 0)
	{

		for (i = 2; i <= a[top] / 2; i++)
		{
			if (a[top] % i == 0)
			{
				flag = 1;
				break;
			}

		}
		if (flag == 0)
		{
			del_pop(a, a[top]);
		}
		top--;
	}
}



هذا برنامج يقوم بحذف الاعداد الأولية من مكدس لكن عند بعد استدعاء دالة حذف الأعداد الأولية تتغير كل القيم للصفر في حلقة التكرار التي تستدعي الدالة pop

#include<iostream>
using namespace std;

int Size = 10;
int a[10], top = -1;
int pop();
void del_pop(int[], int i); 
void push(int[], int);
 void delprime(int a[]);
int main() {
	 int i, k;
	for (i = 0; i < Size; i++) { cin >> k; push(a, k); }

   delprime(a);
                              
	
}
void push(int a[], int k) {
	if (top == Size - 1)cout << "Stack overflow";
	else
		a[++top] = k;
}
int pop() 
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

سأقترح عليك فكرة أبسط لحذف الأعداد الأولية من مكدس، 

يمكنك تعريف مكدس مؤقت (يكون فارغ بالحالة الأولية)، سوف نقوم بإفراغ المكدس الأساسي من العناصر الواحد تلو الآخر، و سوف نضيف العنصر الغير أولي من المكدس الأساسي للمكدس المؤقت، ثم بعد انتهاء فلترة العناصر جميعها، نعيد تفريع المكدس المؤقت و نضيف العناصر للمكدس الأساسي وسوف يعاد ترتريب جميع العناصر بنفس الترتيب السابق مع التخلص من الأعداد الأولية.

stack; // مكدس فيه عناصر

temp; // مكدس فارغ مؤقت

while (stack.size() > 0) {
  int x = stack.pop()
    if (! prime(x)) {   // غير أولي X
    temp.push(x)
  }
}

// إعادة العناصر للمكدس الأساسي

while (temp.size() > 0) {
  int x = temp.pop()
    stack.push(x)
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...