الخميس، 31 ديسمبر 2009

linked list application

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اليوم اقدم لكم برنامج بسيط جدا تطبيق علي linked list بناء علي طلب اصحابي سنه تانيه علشان امتحان العملي دي حاجه بسيطه انا عملتها اتمني الاستفاده البرنامج بيوضح العمليات التي يمكن تطبيقها علي ابسط انواع linked list وهي

عمليه الانشاء
عمليه الاضافه في اول القائمه
عمليه الاضافه في اخر القائمه
عمليه البحث
عمليه الترتيب
عمليه الحذف
سوف نقوم بعمل برنامج يطبق هذه العمليات البرنامج بسيط جدا عن الطلاب هندخل بيانات طالب او اكتر ونطبق العمليات السابقه عليه



class student
{
private:
char name [50];
int age;

public:

int id;
void enter_data()
{
cout<<" ** enter name ** ";
cin>>name;
cout<<" ** enter the age ** ";
cin>>age;
cout<<" ** enter the id ** ";
cin>>id;
cout<<" ******** //////****** ";

} //end function
void display_data()
{
cout<
cout<<"------------------ ";
cout<
cout<<" ------------------- ";
cout<
cout<<" ----------------- ";
} //end function

int print_id() //this function used to return student id
{
return id;

} //end function
};//end class

struct node
{
student data ; //data contain name,id ,age.
node *next; //pointer
};//end struct


class list
{
private:
node *head;
node *tail;
public:
list() //constructor
{
head=Null;
tail=Null;
} //end constructor

void insert_last(student d)
{
node *nn=new node;
nn->data=d;
if(head==Null)
head=nn;
else
tail->next=nn;
tail=nn;
nn->next=Null;
} //end function

void insert_first(student d) //add node at the first list
{
node *r=new node;
r->data=d;
if(head==Null)//list empty.
{
tail=r;
tail->next=Null;
}
else
r->next=head;
head=r;
}//end function

int search_id(int m) // function to search alinked list
{
int l=0;
node *temp=head;
while(( temp->data.print_id()!=m)&&(temp!=Null))
{
l++; //location
temp=temp->next;

}//end loop
if(temp->data.print_id()==m)
return l;
else
return -1;
}//end function

void sort()
{
node *temp1;
node *temp2;

for(temp1=head;temp1!=Null;temp1=temp1->next)
{

for(temp2=temp1->next;temp2!=Null;temp2=temp2->next)
{
if(temp1->data.id >temp2->data.id)
{
student t=temp1->data;
temp1->data=temp2->data;
temp2->data=t;
} //end if
} //endinner loop
} //end outer loop
} //end fun

void delete_student() //this function includes all types of delete in the linked list
{
node *temp=head;

int h;
node* temp1;
if(head==Null)
cout<<"empty list" <
else if
(h==temp->data.id)
{
head=head->next;
temp->next=Null;
delete temp; //delete the first item in the list
}
else if(h==tail->data.id)
{

while(temp->next!=tail)

temp=temp->next;
tail=temp;
temp=temp->next;
tail->next=Null;
delete temp; //delete the last irem in the list
}
else
{
while((temp->next!=Null) &&(h==temp->data.id))
temp1->next=temp->next;
delete temp; //delete any item betweem them
}//end else
} //end function


int countnode() //this function the number of nodes in the list
{
int count=0;
node *temp=head;
while(head!=Null)
{
count++;
temp=temp->next;
return count;
}
} //end function


void display() //this function to display all actions whitch i do
{
node *current;
current=head;
while(current!=Null)
{
current->data.display_data();
current=current->next;

} //end loop
} //end function
} //end class
void main()
{
int option;

student x[3];
student d;
list l;
int i,m,loc,h,w;
while(option!=0

{
cout<<" ------------------------------------------ ";
cout<<" 1.add new student at the linked list at last ";
cout<<" 2.add new student at the linked list at first ";
cout<<" 3.show all studentes data "<
cout<<" 4.search for student by id in any postion in the list ";
cout<<" 5.sort student by id ";
cout<<" 6.delete the student by id in any postion in the list ";
cout<<" 7.to know the number of nodes in the linked list ";
cout<<" 8. to exit t the program ";
cout<<" "<
cout<<" --------------------------------------- ";
cout<<" *** *** ** * welcom ********* *** ";
cout<<" enter your option ";

cin>>option;
switch(option)
{
case 1:
for(i=0;i<3;i++)
{
d.enter_data();l.insert_last(d);

} //end loop
break;
case 2:
for(i=0;i<3;i++)
{
d.enter_data();
l.insert_first(d);
}//end loop
break;
case 3:
cout<<" the students are ";
cout<<" ******////***** ";
l.display();
break;
case 4:
cout<<" enter the id ";
cin>>m;
loc=l.search_id(m);
if(loc==-1)
cout<<" the student not found ";
else
cout<<" the student is found at : ";
cout<<" ----------------------------- ";
break;
case 5:
cout<<" the sorted list is: ";
l.sort();
l.display();
break;
case 6:
cout<<"enter the id";
cin>>h;
l.delete_student();
l.display();
break;
case 7:
cout<<" the number of nodes in the list is ";
w=l.countnode();
cout<<<>
break;
case 8:
cout<< " the program ended ";
cout<<" "<
cout<<" & & & & & & GOOD LUCK & & & & & & & ";

break;
}//end loop
}//end switch
getch();
}//end main

ودي نتيجه تنفيذ البرنامج









واخيرا ابقوا عدلوا شكل البرنامج علشان اللخبطه اللي بتحصل اثناء الرفع
والسلام عليكم ورحمة الله وبركاته

الاثنين، 28 ديسمبر 2009

الدرس الثالث


بسم الله الرحمن الرحيم

السلام عليكم ابدا معكم اليوم الدرس الثالث وهو بعنوان

Instantiation and Unification

ماهي عملية ال Unification ؟

سوف اشرحها من خلال هذا المثال نفترض لدينا مجموعه ال facts الاتيه

Parent(john,tom).

Parent(jim,kate).

Parent(jean,marry).

عندما تقوم بعمل استعلام كالاتي

?-parent(jim,kate).

ماالذي يحدث للرد علي هذا الاستعلام ؟

الذي يحدث كالاتي يقوم البرولوج بالبحث عن هذا الاستعلام في مجموعة ال facts الي ان يجد مايطابقه من هذه ال facts ويقوم هنا بعمل المطابقه لكل جزء من اجزاء الاستعلام من حيث اسم ال predicate (parent) وعدد ال arity ومن حيث ال terms اذا نجحت المطابقه يرد البرولوج ب yes وهذا هو المقصود بعمليه ال Unification

Examples :

?-parent(john,tom).

Yes

?-parent(hany,ali).

No

لان هذه ال fact لا توجد ضمن مجموعة ال facts التي اعلي لذلك اي استعلام لايوجد في ملف ال knowledge base سوف يرد البرولوج عليه ب no

ولكن ماالذي يحدث اذا احتوي الاستعلام علي متغيرات كالاتي

?-parent(X,tom).

معني هذا الاستعلام اريد معرفة من هو الاب ل tom ؟

هنا كما قلنا سيحدث Unification وايضا سيكون هناك قيمه للمتغير x وعملية ايجاد قيم المتغيرات التي توجد في الاستعلام تسمي Instantiation

ماهي عملية ال Instantiation ؟

هي عملية ربط المتغير بقيمه للتوضيح سنقوم بالرد علي الاستعلام السابق

?-parent(X,tom).

X=john.

Yes

ما الذي حدث ؟ قام البرولوج بعمل Unification عن طريق instantiation للمتغير X بقيمه وهي john

ملاحظه :

حاول مطابقة المثال التالي

Likes(jim,X) and likes(X,kate).

ماالذي سيحدث هنا ؟

كما تعودنا سيقوم البرولوج بعمليه ال unification سيري ان اسم ال predicate قد نجح في المطابقه واايضا عدد ال arity متساوي لذلك يذهب لعمليه ال instantiation لايجاد قيم المتغير X سوف يقوم بوضع X تساوي kate في الحاله الاولي وعندما يذهب للثانيه سيري ايضا ان المتغير X سوف ياخذ قيمه اخري وهي jim وهذا غير مسموح به في البرولوج كما قلنا في الدرس السابق لايمكن للمتغير ان ياخذ اكثر من قيمه فانتبه جيدا

ملاحظه ماهو ال unifier ؟

هو التعويض عن متغير بالقيمه التي اخذها وياخد الشكل الاتي تطبيقا علي المثال السابق kate/X

الي هنا انتهي درس اليوم ارجو ان اكون قد وفقت فيه موعدنا الدرس القادم مع شرح كيفية سير عملية البحث في البرولوج Prolog search strategy والسلام عليكم ورحمه الله وبركاته


الأحد، 27 ديسمبر 2009

الدرس الثاني

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته ابدا معكم اليوم الدرس الثاني كما وعدت وهو بعنوان

Prolog syntax

اولا تذكر ان برنامجنا يتكون من

Logic program=facts + rules

والذي يتمثل في ملف ال knowledgebase


prolog syntax

ال fact : اي شئ متحقق وغير مشروط وتاخذ الشكل

(t1,….tn). r

حيث تمثل ال r اسم العلاقه ومابين القوسين يمثل ال terms مثل

parent (ali, maged).

ال rule وهو يحتوي علي الاقل علي شرط واحد ويتكون من جزاين هما

Body , head وياخذ هذا الشكل

Rule has the form : head :- body

ويكون متحقق اذا تحققت كل متغيرات الجانب الايمن(body) يكون الجانب الايسر متحقق (head)

العلامه (:-) تعني if

مثال

brother(X,Z):-parent(X,Y),parent(X,Z).

سوف نتناول في هذا الدرس شرح النقاط الاتيه

Variables.

Atoms

.Numbers

Structures

Arity


اولا: المتغيرات ((Variables

يتم تعريف المتغيرات في البرولوج في شكل سلسله من الحروف او الارقام واهم مايميزها ان تبدا بحرف capital وايضا يمكن ان تبدا ب underscore (__)

امثله X,_RD ,Ahmed

لاحظ جيدا ان المتغيرات في الغات الاخري مكان يتم حجزه في الذاكره اما في البرولوج فان المتغير يتم اعطاؤه القيمه عن طريق عمليه instantiation وهي عمليه ربط المتغير بقيمه وايضا المتغيرفي البرولوج لاياخذ اكثر من قيمه

المتغير الذي يبدا ب underscore يعرف باسم Anonymous variable وهذا معناه ان كل الذي يهمني ان اجد حميع القيم لل ( _ ) الذي يحقق الاستعلام بغض النظر عن هذه القيم

مثال

?-parent (_, _).

Yes

وهذا الاستعلام مكافئ للاستعلام الاتي

?-parent(X,Y).

ثانيا : Atoms

تاخذ ثلاثة اشكال ولها شروط هامه

اولا : alphanumeric تتمثل في السلاسل الحرفيه او ال digits ويمكن ان تحتوي علي underscore ولكن لا تبدا به ولابد ان تبدا بحروف صغيره علي عكس المتغيرات

مثال

a, my_frind ,fatma .

ثانيا : special character strings هي عباره عن سلسله من الرموز الخاصه ولا تحتوي علي اي حروف او اي underscore مثل

>==>,--------,<<<>>>

ثالثا : quoted character strings اذا احتوي ال atom علي اي علامه او اذا بدا بحرف كبير او اذا احتوي علي مسافات مثل لابد ان ينحصر بين ' ' مثل

'Ali ','fa my'.

ثالثا الاعداد Numbers يمكنك استخام الاعداد الصحيحه والحقيقيه في البرولوج مع وجود قيد علي الاعداد الحقيقيه وتكون بهذا الشكل

23 integer

0.25 Real

كما يمكننا اجاراء العمليات الحسابيه المعتاده كالجمع والطرح والضرب والقسمه وغيرها من العمليات

Addition For +

For subtraction -

For multiplication *

For division /

For integer division //

For power **

Mod for integer reminder

يمكننا عمل evaluation لاي تعبير رياضي عن طريق استخدام ال is والشكل العام لاستخدامه كالاتي

Variable + is + expression

Example:

?- X is 4*3.

X=12

Yes

باختصار فان ال built in predicate is يقوم بعمل evaluation للطرف الايمن ووضعه في الطرف الايسر كما لاحظنا في الاستعلام السابق

تخيل اذا لم نضع is هل الناتج سيكون نفس الناتج السابق كالاتي

?-X=4*3.

X=4*3

Yes

هنا اعتبرها سلسله ولم يقم بعمل اي evaluation للتعبير

رابعا :Structures وتاخد ثلاثة اشكال

1. Simple terms:

وهي تكون اما atoms او variables او numbers


. 2Functors

وهي اسماء لل relations او ال predicates ولابد ان تكون من نوع alphanumeric atoms

مثل flight ,direct flight

3. Structures or compound terms:

وهي عباره عن functor (terms)

Example:


.( flight (egypt, london

book('Programming language',auther(tom)).

ملاحظه جيده

Functors can be overloaded :

Examples :

flight(egypt).

flight(egypt,paris).

flight(X):-flight(X,_).

ماهو ال Arity

هو عدد اال argument في ال compound term

Arity is the number of argument in compound term

Examples:

parent(ali,ahmed) . is aterm with arity 2

mother(mona). is aterm with arity 1

parent(parent(ali)) is aterm with arity 1



تابع الدرس الاول







لتبدا اول برامجك في البرولوج انا استخدم برنامج ASWI Prolog Session

قم بفتح اي محرر نصوص مثل النوت باد

مثال للتوضيح اكتب في ملف النوت باد الاتي

Parent (gamal, ahmed).

Parent (ali, maged).

قم بحفظ الملف بامتداد pl ولكي تستعلم عن هذه البيانات هناك طريقتين لتشغيل الملف

اولا يمكنك الضغط مرتين علي هذا الملف وتكتب الاستعلام الاتي

?-parent (gamal,ahmed).

سوف يرد البرولوج ب yes لان هذا الاسنعلام متحقق اي انه مذكور في ملف ال knowledgebase

ثانيا يمكنك تشغيل الملف من خلال فتح نافذة البرولوج واختر من القائمه file

Consult وبعد ذلك اختر اسم الملف الذي قمت بانشاؤه وبعد ذلك اكتب الاستعلام الذي تريده لان الملف تم تحميله

واخيرا للخروج من البرولوج يمكنك كتابه ?-halt . او ctr+D

الي هنا انتهي درس اليوم ارجو ان اكون قد وفقت في شرحه فان احسنت فمن الله وان اساءت فمن عندي

الموضوع القادم ان شاء الله سيكون شرح Prolog Syntax وامثله عليه

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