الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طلب ايضاح مشكله في كود برمجي c++

بدأه Don DaVinci في 9 أبريل 2010 · 2 رد · 463 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

اخواني انا عندي مشكله بسيطه بآذن الله في كود برمجي بـ لغه الـ c++

وهي عن الـ linked list

وبالآخص في double linked list

كتبت كود ..

لكن المشكله في النآتج ..

هذا هو الكود

#include <iostream>
using namespace std;



class Node {
      int data;
      Node * next;
      Node * pre;


      public : 
             Node(){}
             Node(int d ){

                    data = d;
		    //d=0;
                    next =NULL;
                    pre = NULL;

             }
             void setData(int d){

                  data = d;
             }

             void setNext(Node * n){

                  next = n ;

                  }     
             void setPre( Node * p){

                  pre = p;
                  }

             int getData(){


                 return data;
                 }
             Node * getNext(){

                  return next;
                  }
             Node * getPre(){
                  return pre;
                  }
};







class Dlist {
      private:
              Node * head;
              Node * tail;
      public:
              Dlist(){
                      head = NULL;
                      tail = NULL;
                      }


		Node* getHead(){
			return head;
		}


              void ifEmpty(){
                   if (head == NULL ) 
                      cout << "sorry but the Link is EMPTY ....!!! " << endl;
                   } 
              Node * make_Node( int val){

                   return new Node(val);
                   }       
              void addFirst( int num){
			Node * New ;
                        New = new Node (num);                   


		if ( head == NULL ){
			cout << "No Nodes" << endl;
                      head=tail=New;
		}
//			cout << ".........>>> We create Node Now Please Wait " << endl;
			/*Node * N;
			N=make_Node(10);
			head = New;*/
		else {
                        /*Node * New ;
                        New = make_Node(num);*/
                        New -> setNext (head);
                        head -> setPre(New);
                        head=New ; 
			delete New;       
                        }
		//else 


                   }
              void addLast(){}
              void addat(){}
              void removeFirst(){}
              void removeLast(){}
              void removeFrom(){} 
          /*    void showData(){
                   Node obj;
                   cout << obj.get }
            */       




};



int main(){

	Node * p = new Node (0);
	Dlist *obj =new Dlist;
	//obj-> make_Node (10);
	obj->addFirst(10);
	obj->addFirst(20);
		if ( obj->getHead()==NULL)
			cout << "it's Empty " << endl  ; 			
		else {
			do{	

				cout << p->getData() << "->";
				cout << p->getNext();

			}while ( p -> getNext() != NULL );


		}
//			p = p->getNext();

			 cout << " NULL" << endl;


   }

الافضل نسخه في برنامج لانه يتضح الـ كومنت من غيره

بالنسبه مشكلتي تكمن في ناتج البرنامج بحيث انه يعرض لي

No Nodes

0 ->0 NULL

والمشكله في الفنكشن هذا

void addFirst( int num)

بحيث اني انشأت مساحه وجعلت مؤشر يؤشر عليها

وجعلت بها قيم اضعها في الـمين

واستدعيت هذه الداله مرتين في المين ووضعت بها قيم 10 و 20

لكن المشكله في الناتج لا يطبع الا 0 ->0

اريد المساعده وين الخطأ ا لذي اخطأت فيه .. ~

لاني فهمي في ماده تراكيب البيانات بسيط ..

فحاولت اني اطور نفسي من المواقع وكتبت هذه الاكواد لأتعلم الاخطآء

..

تم تعديل هذه المشاركة بواسطة Don DaVinci في 9 أبريل 2010 في 13:19

#2

وعليكم السلام ورحمه الله وبركاته ،،

المشكلة لديك في الدالة main ، في كودك قمت بعمل عقدة جديدة:

 Node * p = new Node (0);

ومن ثم أنشئت القائمة ، وبعدها قمت بعمل حلقه للطباعة لكي تطبع القيم في p مع ان p هي عقدة واحدة ، لذلك خرجت لك قيمتين (0 الاولى قيمة العقدة ، و0 الثانية هي Null) .

لحل المشكلة غير الحلقة لكي تلف في القائمة كلها وليس العقدة فقط كما يلي:

Dlist *obj =new Dlist;
        //obj-> make_Node (10);
        obj->addFirst(10);
        obj->addFirst(20);
                if ( obj->getHead()==NULL)
                        cout << "it's Empty " << endl  ;                        
                else {
						Node * p = obj->getHead() ;
                        do{     

                                cout << p->getData() << "->";
								p = p->getNext();

                        }while ( p != NULL );


                }

لاحظ أننا حصلنا على الhead ومن ثم قمنا بعمل iteraton بدئا منه ..

ملاحظة حاول ترتيب الكود أكثر حتى يكون سهل القرائه واستخدم الtab بشكل جيد ..

بالتوفيق،

3

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#3

اشكرك اخي على الـ توضضضيح فادني كثير ..

وفهمت الحلَ ..

واعتذر على سوء الترتيب لاني استعمل برنامج Dev وهو سيئ بالـ TAB بخلاف محرر نصوص اللينكس .. ..

اشكرك مره اخرى جُعلت في موآزين حسنآتك ان شاء الله ..

مواضيع مشابهة