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

مشروع لأهل الخبره

مغلق
بدأه talal*c في 16 فبراير 2002 · 18 رد · 1,197 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أخواني لإيماني بالعمل الجماعي أتمنى منكم أن تساعدوني

في حل هذا البرنامج الذي طلب منا عمله كمشروع لمادة

تراكيب البيانات Data Structuer.

أنا لم أطرح السؤال هنا لآخذ الحل مباشرة بل أود أن نتساعد

جميعاً في حله .

فأود ممن يرغب في المساعده إلقاء نظره على السؤال ثم

سأبداء بطرح أفكاري و لا تبخلو علينا بما لديكم :) .

talal1.bmp

talal2.bmp

أو يمكنكم تنزيلها من هنا

#2

أولاً بالنسبة لتعريف اللنك لست أعتقد أنه لنك لست داخل لنك لست

سأقوم بتعريفها لاحقاً و أضعة هنا.

ثانياً: بالنسبة للمتغيرات التي التي سأمكن المبرمج من إستخدامها

( كل متغير سيكون على شكل لنك لست ) سأعرف مصفوفة

كل عنصر منها سيكون مؤشر و ستزيد عناصر المصفوفه بالامر

malloc .

ثالثا:عند إدخال كل سطر سأخزنه في مصفوفة حرفية ثم :

سأتأكد من منطقية الاقواس بالستاك stack و هذا هو الكود

الذي وضعته للتأكد من منطقيتها ....

int brakits(char string[])

{

stack s;

char b ;

int i, c ,cpu=0, cpop=0;

i = 0 ;

c = 1 ;

newstack(&s);

while( string != '

#3

معك يا طلال.. إلى ... آخر المشوار .. أنا أيضا بإنتظار آرائكم .. و إقتراحاتكم.

** بالنسبه لتعريف اللينك ليست,,سيكون أحد المكونات من نوع union حتى نتمكن من وضع إما حرف .. أو مؤشر إلى نود آخر..

مسألة التعريف عموام..تعد هي نقطة البدايه فحسب تعريفك تستطيع الإنطلاق.

** البرنامج بوجه عام ..يركز على مسألة recersuion في أغلب حالاته لذلك ينبغي التركيز في كتابة رؤؤس الدوال..المستخدمه فيه.

عمــــــــــــــــــومــــــــا الشغله مطوله .. والله يعين عليه بخير :P

014.gif
#4

أخوي بطران بالنسبة للتعريف اللنك لست و اليونين

اليونيون سيكون من قسمين مؤشر للنك لست و آخر لسلسلة

حرفية.

واللنك لست ينقسم إلى قسمين واحد مؤشر next والاخر

اليونيون أعلاه,

ولكن ؟؟؟؟؟؟؟؟؟؟؟؟!؟!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟

من أضع أول في الترتيب قصدي

اللنك لست ثم اليونيون أم العكس ؟؟؟؟؟

كيف أعرف اليونيون يعني الدكليريشن حقها : لأني بصراحة لم اعمل

على اليونيون من قبل . :(

داري أنها مثل السجلات :) ببس هل من الممكن أن أستخدم

typedef معها مثل السجلات ؟!؟

ودمتم ,,,

#5

[l]union NAME {[/l]

[l]var1 ,var2 ,...;[/l]

[l]};[/l]

يمكنك أن تقول .. (type def unio) ....

... أنا الآن مشغول ..قليلا .. .. سأسعى للتواصل قدر الإمكان .. أخي طلال.. على حل مشكلة هذا المشروع البائسز:mad: :mad:

014.gif
#6

عملت تعريف مبدأي للنك لست وهذه هي فكرتي .

typedef struct node
{
	union DW
	{
		struct node *dw;
		char ch[72];
	}x;

	struct node *next;
}recnode, *ptr;

أفيدوني إن كان لأي منكم أي إقتراح...

وبالنسبة لعمليات اللنك لست هل إذا أردت ان أضيف نود في الاسفل

تختلف عملية الاضافه عن أضافة نود في الجنب ؟

أنا أعتقد أنه لا يختلف ؟!؟ :)

وأعتقد أيضاً أن العمليات هي أشبة بالأشجار trees أو هل أنا غلطان ؟!؟ :)

إذا كان لآي منكم أي تصور لعملية الاضافة في اللنك لست

الرجاء أن يكتبه هنا ...

مع تحياتي ,,,

#7

أخواني أعلن توقفي عن الكتابة في المشروع إلى أن يوضح لي أحد ما

إذا كان التعريف للنك لست صحيح أم لا ؟ ( ما أحد درا عنك أنت ومشروعك ) :D

أولاً لدي بعض الأشياء أود أن أرا ما إذا كانت صحيحة أم لا ؟

عندما أستقبل سلسلة حرفيه و أريد أن أدخلها في اللنك لست :

الشرط النهائي للخرووج من الريكيسف هو أن تكون السلسله تساوي نل .

الريكيرسف يقوم بإعطاء نفسه كل مره السلسله ناقصاً اول حرف بها .

هذا التصور للركيرسيف و لكن يوجد بعض الاشياء لم أستطع كتابتها .

  void setq(ptr *s, char *str)

{

if( str[0] != '

#8

بالنسبة لروتين التأكد من الأقواس عدلتلك عليه وهو :

int brakits(char string[])

{

int i, nLevel = 0;

char chr;

i = 0;

while (chr = string, chr != '

Coding on the Cloud and for the Cloud!

My Blog

#9

استاذي هاني الحمد لله على السلامة و الله يعينك على الاختبارات :)

بالنسبه للسؤال هو عباره عن 2/1 كمبايلر :D للغة الذكاء الاصطناعي

LISP وهو حقيقة ليس كمبايلر بل interpreter يعني ينفذ كل سطر

بسطر :) .

مطلوب منا عدة عمليات من لغة lisp مثل setq التي تسند لست لمتغير

و العمليه print التي تطبع:D . والعمليه append التي تلصق لست و

آخر. و الفيرست التي تعطي أول عنصر من اللست , و الريست التي

تعطي اللست كامله ما عدا الاول .

و الايكول التي هي تقريباً عملية if >

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

في الصفحه 1 .

والنود من الممكن أن تكون مؤشر لنود أخر وإما أن تكون مؤشر

للحرف . ولذلك نستخدم اليونيون . و قال هذا الكلام أيضاً الدكتور.

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

العقبه الوحيده حالياً :) هي تعريف اللنك لست و كيفيه

تمثيل اللنك لست لأي لست مدخل.

وبعدين مشكور على الشرح الجميل لليونين :) تستاهل هديه على ذلك.

مع تحياتي ,,,

#10

مابعرف ليش هيك مدخلكم بمتاهات هذا الدكتور ... الموضوع بينحل من غير أي لينك لست ولا شي ...

المهم أنت اشتغل فيه وورجينا شغلك .. وأنا إن شاء الله بخلص امتحانات وبشوف الموضوع .. :)

Coding on the Cloud and for the Cloud!

My Blog

#11

فعلاً لا أجد مبرر لمثل هذه الطريقه :(

و يالله شد حيلك هاني في الاختبارات ;)

بالنسبه لمحاولاتي عرضتها هنا ولكن لن أستطيع التقدم أكثر من كذا

أحتاج لتوضيح أكثر .... بس على العموم الوقت أمامنا كبير و بعد

اختباراتك هاني يكون خير و الاخ بطران ما راح يقصر :)

وأن شاء الله إنه معي إلى نهاية المطاف :)

وراح أسئل الدكتور كذا سؤال عن المشروع لتوضيح فكتره و بعدها

بتكون الصوره واضحة أكثر بس من هنا ألين ما نخلص الاجازة يصير خير.

ويالله نشوفك بأسرع وقت :P

#12

أخي هاني لقد جربت كود التأكد من الاقواس ولكن به مشكله:

ماذا لو كان المدخل قوسان بالعكس أي قوس إغلاق ثم قوس فتح

) ( سيعطي النتيجة صحيحة :)

أعتقد أن إستخدام الــ stack أفضل ولا لا ؟!؟;)

مع تحياتي ,,,

#13

لقد قمت بعمل فنكشن سريع للإدخال وهو خاطئ ولكن يعمل

لحالات خاصة مثل الحالة الاولى في الصوره .

وهذا هو الكود الكامل للبرنامج (ممكن تسوي له كمبايل).

#include < stdio.h >

#include < conio.h >

#include < stdlib.h >

#include < windows.h >

#include < ctype.h >

//------------------------------------------------------------------------------

//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////// Linkd list FUNCTIONS //////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

//-------------------------------------------------------------------------------

typedef struct node

{

union

{

struct node *dw;

char ch;

};

struct node *next;

}recnode, *ptr;

//-------------------------------------------------------------------------------

void newl(ptr * );

void setq(ptr *, char *);

void rest_str(char *str);

int isalphas( char a[] );

void print(ptr );

int brakits( char []);

//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////// END Linkd list FUNCTIONS //////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////// THE MAIN FUNCTION ///////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////

void main( void )

{

ptr m;

int c;

char s[72] ;

newl(&m);

c = brakits( gets(s) );

if( c == 0 )

printf("nIlligel (brakits) ...n");

}

//--------------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------------

//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////// Linkd list FUNCTIONS //////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////

void newl(ptr *h)

{

*h = NULL;

}

//--------------------------------------------------------------------------------------------

void setq(ptr *s, char *str)

{

if( str[0] != '

#14

:rolleyes:

بالنسبة لموضوع الأقواس ... أقول لك مرة أخرة ليس داعي من استخدام المكدس لأنه نوع واحد من الأقواس .. أنا كان عندي خطأ صغير في الروتين وهذا التعديل:

int brakits(char string[])

{

int i, nLevel = 0;

char chr;

i = 0;

while (chr = string, chr != '

Coding on the Cloud and for the Cloud!

My Blog

#15

أخي هاني مجرد إطلاعك على الموضوع دافع معنوي كبير .:)

بتحسسني إني ماني لحالي في هالمصيبة :D

مشكور أخي هاني و يا أخ بطران ;)

زكل عام وأنتم بخير مقدماً ,,,

ونشوفكم بعد العيد ;)

مع تحياتي ,,,,

#16

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

ابدأء راد على استفسار الأخ هاني ... لماذا هذا التعقيد ...

هذا المشروع مقرر على طلاب ... قسم علو الحاسب على ما أظن ( برمجة الحاسبات .. ونظم التشغيل ) الهدف منه أولا.... إشعار الطالب ..بعجزه أمام.. دكاترة الجامعة.. وللأسف .. و إلا فما الفائدة..أن يكون هذا المشروع .. بهذه الطريقه .. علما .. أنه حسب رأيي .. أنه يمكن للطالب حل المشروع بما يملك من خلفيه سابقه .. من المواد التي درسها.. في البرمجه.. دون وجود فائده للكورس المصاحب لهذا المشروع .. ( أعتقد إنه تراكيب البيانات)؟؟؟؟؟ أجل ..ليه

**************

******************

هم يريدونه بهذه الطريقه .. ونحن سنعمله بهذه الطريقة....

= = = =

طـــــــــلال..

أولا : أتوقع أنه من الممكن أن يشير .. المؤشر إلى كلمه كامله .. وليس إلى حرف واحد فقط .. فيجب أن تضع اعتبار لهذا الإحتمال.

% (setq x’(appel sun ( computer s ) my)

بعدين ممكن سؤال يمشي مليون .... ليه أضفت كل هالمكتبات...

windows.h – conio.h .... و مع ذلك نسيت تضيف string.h مع إنه مفيده جدا للمشروع .

بالنسبه للحل الذي تقول إنه خاطئ .. ولكنه يحل بعض الحالات... أتوقع أنه خاطئ تماما..

و السبب يعود في ذلك لأنك كما قلت استعجلت كتابته.. و أنت كما أعرف من مشاركاتك شخص متمكن من البرمجه .. وقادر بإذن الله على الوصول لحل مشكلة هذا المشروع .

الأخطاء التي .. واجهتها :

** البرنامج موجه للتعامل ..على أن المدخل إما حرف .. أو قوس ")" و هذا خاطئ فكما ..هو موضح في السؤال.. أن المتغيرات يتم الفصل بينها بفراغ .. وأنت أهملت هذه النقطه تماما...

** البرنامج غير دقيق.. فأنت ترسل نص .. وتقارن أول حرف فيه إذا لم يكن NULL فإنك تقوم .. بالتعامل مع

الحرف الثاني (هههههههههه شكلك.. دايخ يا طلال) طيب.. ماذا لو كان الحرف الأول.هو نفسه حرف نص أو

قوس بداية أو حتى قوس نهاية ( ملاحظه أخرى أنت ما حليت مشاكل .. وأكرر مشاكل قوس النهايه) .

ميزة البرنامج .. في نظري . هي الفكره المستخدمه فيه .. فهي فكره أرى أنها .. متميزه جدا – من وجهة نظري-

و إن كانت لم تستخدم جيدا ..لكن أنا متأكد من أنك ستستطيع تحسينها.

** ** الآن عندي سؤال.... لم اجد له فكره إلى الآن .

لو عملت داله تقوم بهذه المسألة .. وكان النص المدخل أول مره

هو (a b (s f ) d) :

** ملاحظة .. الحذف يكون من اليسار لليمين .. لكن كما تعلمون الكتابه في المنتدى لا توضح ذلك ....

و في المره الثانيه : a b (s f ) d)

و في المره الثالثه : b (s f) d)

**

**

**

**

و في المره الثامنه (طبعا بحساب الفراغات .. لا تنسونها) : d)

على فرض أني سأعود بداء من هذه النقطه إلى الدوال التاليه .... كيف استطيع جعل النص في الداله الأم ( التي أرسل إليها النص أول مره )

هو نفس النص ..الذي توقف عند الركيرجن يعني ( أريده يكون d) و ليــــس(a b (s f ) d) )

علـــــــــــــــــــــــما أن الداله تستقبل النص الأصلي من دالة أخرى في البراميتر

--- أعرف أن السؤال.. قد يكون غير مفهوم أو غير واضح لكني حاولت توضيحه قدر المستطاع لأني للأسف في هذا الوقت لا أستطيع كتابة الكود البرمجي .. فقد شرحته لفظيا .. آمل من الكل.. قراءة السطور السابقه .. و طرح أي فكره مهما كانت .

شـــــــــــــكرا للجميع

014.gif
#17

أخوي بطران :)

تسعدني مشاركتك . (f)

أنا لم اعر المشروع جل أهتمامي حتى الان يعني أقعد عليه إخر الليل :)

وأكون دايخ زي ما قلت :D

عموماً بالنسبه للسؤال اللي يمشي مليون :

أنا أضفت كل هذه المكتبات في الاول عشان أرتاح في كتابة البرنامج

وما أحتاج أضيف المكتبة كل ما أحتجت إليها :D :D :(

وبعدين بعد أنت أو الاستاذ هاني ما قلتولي شي عن التعريف تبع

اللنك لست يعني صح ولا غلط و لا وش سالفته :D

وبعدها من الممكن أن أتابع .

وبعدين بعد أنا أصلاً ماني فاهم الفكرة تبع البرنامج يعني لو عطاني

مصفوفة حروف ما أعرف كيف أمثلها في اللنك لست ما أقصد برمجياً

ولكن أقصد ( فكرياً ) :)

#18

طـــــــــــلال ....

لا يهمك ترى إن شاء الله إنه سهل ... بس المشكله على قولتك في التمثيل .. أنا .. وجدت طريقته ..بس المشكله .. عندي بعض المشاغل حاليا .... شوي .. و أعلمك الطريقه ....

**** بس تصدق اللي حاطين المشروع تحف من جد ... عليهم حركات ملكع ... يعني.. اللي ما يتقن الريكيرسف .. بيضيع ..لأ،ه إلى الآن حسب السؤال.. كل الدوال ريكيرسف .. عدا first -rest هي اللي مباشر ه

بـــــــــــــس .

;)

014.gif
#19

أخواني إحم إحم إحم ,,,,, :o

هل تعريفي للنك لست صحيح ؟؟؟

عطوني فكرة مبدئية جدا أبدا منها :)

مع خالص شكري ,,,

هذا الموضوع مغلق.

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