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

السؤال

نشر
#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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...