السلام عليكم أختي في بعض الأخطاء في الفنكشن :
الخطأ الأول :
كود:
[RIGHT][COLOR=#333333]stackType<Type> *s;[/COLOR][/RIGHT]
انتين تتعاملين مع member function للستاك فما تحتاجين تعرفين برميتر ثاني من نوع ستاك تايب ، بالإضافة الى هذا الشي كتابة المتغير s كأنش تتعاملين مع لنكد لست ستاك و هذا غلط ، المفروض ينكتب جدي ( كمعلومة فقط ) :
كود:
[RIGHT][COLOR=#333333]stackType<Type> s;[/COLOR][/RIGHT]
الخطأ الثاني :
كود:
[RIGHT][COLOR=#333333]while( x%2 ==0 || x %2 == 1)[/COLOR][/RIGHT]
شرط الوايل لوب انه اذا ريمندر الأكس موديلس 2 يساوي 1 أو 0 ما يوقف اللوب ، في البداية بيكون الريمندر متنوع 0 أو 1 حسب قيمة ال x المدخلة بس بعدين بكون على طول 0 فاللوب ما راح يوقف ( انفنت لوب ) ، فلازم نستخدم النمبرنق سستم ماله 103 فلو حولنا من ديسمل الى باينري بكون اخر رقم هو 1 لل x فلنحلي شرط الوايل لوب انه اذا صارت قيمة الأكس واحد يوقف اللوب بهاذي الطريقة :
الخطأ الثالث :
العملية داخل الوايل لوب خاطئة لعدة اسباب :
كود:
x=x/2 ;
s.push(x);
s.pop(x);
في هاذي الخطوات احنا نقسم ال x على 2 و بعدها ننقلها لستاك داخل اللوب نفرض ان ال x تساوي 12 ، 2/12= 6 ؟؟؟ هل من ضمن دجت الباينري في 6 ؟ فقط 0 و 1 ، فالإجابة بتطلع غلط الرقم الي بيطلع مو باينري ، بالإضافة الى هذا الشي فنكشن البوب pop ما فيها اي برميتر و المفروض ما تعرفين متغير نوع ستاك تايب داخل الفنكشن لانها ممبر فنكشن الطريقة :
و ما نحتاجها في هاذي الخطوة داخل هذا اللوب ، نحتاج نعرف متغير انتجر جديد في بداية لستاك بحيث نخزن فيه ريمندر الأكس و نسوي له بوش ( push ) داخل لستاك :
كود:
while(x!=1){
item = x % 2 ;
x = x / 2 ;
push(item);
}
ما خلصنا بعد في خطأ ، أحنا وقفنا الوايل لوب لما ال x صارت 1 ، فأخر جزء من رقم الباينري بكون مفقود الحل ببساطة نرجع نسوي بوش للأكس داخل لستاك :
حسب طبيعة لستاك في البوش و البوب فحالياً الرقم بالباينري صاير بالمقلوب الحل ببساطة أن احنا نسوي وايل لوب ثاني يعكس لستاك و يعطينا النتيجة النهائية للرقم بالباينري بهاذي الطريقة :
كود:
while(!isEmptyStack()){
x = top();
cout << x ;
pop();
}
بحيث ان ال x بتساوي اخر رقم في لستاك الي هو ال top و بنطبعها بعدها بنحذفها و بتصير قيمة ال x الرقم الي بعده و هكذا لين يصير لستاك امت فبنحصل على الرقم بالباينري
نجي للمين :
المين ببساط بتعرفين برميتر من نوع ستاك تايب ، و بتطلعين رسالة في الشاشة للمستخدم بحيث انه يدخل رقم ما بالأنتجر ، بعد خذا الشي بتسوين كول للفنكشن بهاذي الطريقة :
كود:
stackType<int> list ;
int x ;
cout << " Enter the Decimal Number to convert it to binary : " ;
cin >> x ;
list.printBinary(x);
في النهاية الفنكشن بتكون بهاذي الطريقة :
كود:
template<class Type>
void stackType<Type>::printBinary(int x){
stackType<Type> s1 ;
int item;
if(x>0){
destroyStack();
while(x!=1){
item = x % 2 ;
x = x / 2 ;
push(item);
}
push(x);
while(!isEmptyStack()){
x = s1.top();
cout << x ;
s1.pop();
}
}
else{
cout << 0 << endl ;
}
}
و المين بهاذي الطريقة :
كود:
void main(){
stackType<int> list ;
int x ;
cout << " Enter the Decimal Number to convert it to binary : " ;
cin >> x ;
list.printBinary(x);
}
و اذا في اي سؤال تقدرين تسألين