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

سؤال + الحل - التحليل...

مغلق
بدأه OOPCPP في 8 فبراير 2006 · 8 رد · 456 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السؤال هو:

معطي سلسلتسن

first [] = "abCDeFGhijKL

second [ ] = "12a3b4e56hij789

أعطنا سلسلة ثالثة تحتوي العناصر الموجودة في السلسلة الأولى وغير موجوده في السلسلة الثانية.

ترتيب العناصر(المشتركة) نفسه في السلسلتين...

الحل :

#include <stdio.h>

void main ()
{
	char first [] = "abCDeFGhijKL" , second [ ] = "12a3b4e56hij789" ,
  target [ 20 ], * pFirst = first , * pSecond = second,
  * pTempSecond  , * pTarget = target;
	while ( * pFirst && * pSecond ) {
  for ( pTempSecond  = pSecond ; * pTempSecond; pTempSecond  ++ )
 	 if ( * pTempSecond  == * pFirst )
    break;
  if ( * pTempSecond  ) {
 	 pFirst ++;
 	 pSecond = pTempSecond + 1;
  }
  else
 	 * pTarget ++ = * pFirst ++;
	}
	while ( * pFirst )
   * pTarget ++ = * pFirst ++;
	* pTarget = 0;
	printf ( "%s" , target );
}

أحاول فهمه... لكن هناك غموض.

ارجو المساعدة.

#2

ما هـو الغموض بالضبط .... لم اقرأ الكـود بتمعـن ولكن لا أعتقد أن فيه أي إشكال.... ممكن توضح أين الغموض؟؟

#3
#include <stdio.h>

void main ()
{
	char first [] = "abCDeFGhijKL" , second [ ] = "12a3b4e56hij789" ,
  target [ 20 ], * pFirst = first , * pSecond = second,//لماذا نسخ السلاسل الأصلية
  * pTempSecond  , * pTarget = target;
	while ( * pFirst && * pSecond ) {
  for ( pTempSecond  = pSecond; * pTempSecond; pTempSecond  ++ )
  	if ( * pTempSecond  == * pFirst )
    break;
  if ( * pTempSecond  ) {
  	pFirst ++;
  	pSecond = pTempSecond + 1;//     لماذا - لماذا - وماذا تفعل هذه الجملة؟؟؟؟   
  }
  else
  	* pTarget ++ = * pFirst ++;
	}
	while ( * pFirst )// هذه الحلقة لماذا؟
   * pTarget ++ = * pFirst ++;
	* pTarget = 0;
	printf ( "%s" , target );
}

تم تعديل هذه المشاركة بواسطة OOPCPP في 8 فبراير 2006 في 16:10

#4

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

بالنسبة لاستفسارك الأول

*pFirst = first;
*pSecond=second;

فهذا لأن المبرمج يريد أن يتحرك داخل المصفوفة الحرفية بواسطة المؤشرات وليس بواسطـة دليل المصفوفة وهذا أسهل وأكثر احترافية ... طبعاً لا تسأل لماذا .. أفهـم هذا الشيء على أنه عائد للمبرمج ... بإمكانك أنت استخدام طريقة أخرى ...

#5

سأحاول...

رغم أني حاولت ...

لمن ألف شكر لجوابك...

الذي منحني بعض الثقة للمحاولة من جديد ... :)

اكرر شكري.

#6

These are replies to your comments:

char first [] = "abCDeFGhijKL" , second [ ] = "12a3b4e56hij789" ,
 target [ 20 ], * pFirst = first , * pSecond = second, * pTempSecond  , * pTarget = target;

it didn't copy the arrays, it took the pointer to the first element in the array to use it to iterate the elements of the array.

pSecond = pTempSecond + 1;

This increment the pointer of the second array, to read the next element in the array.

while ( * pFirst )
  * pTarget ++ = * pFirst ++;
* pTarget = 0;

This loop sets the value of all the pointers used to 0, because the pointer will not be used again. If one of those pointers is used again in the program, the error that would happen will be easier to detect. generally you can think of this as a method to ensure code correctness and facilitate error detection, but there is no problem if you removed this loop, the program will still work correctly.

#7

كتبت شكر وضاااااااااااااااااااااع ...ههههههه

الف شكر أخي على هذا التوضيح....

ما فهمته منك ومن اخ سلطان أنني بحاجة لترك لغة سي وسي++ حاليّا (لأني أعرف الكثير الكثير - دارسهم بتعمق) ويجب أن اتوجه للخوارزميات لأنها هي نقطة ضعفي :)

#8

أنا الان أدرس الخوارزميات....

أمامي المراجع يبدو أنه الخوارزميات موضوع رهيب بحق وصعب...

من أول 6 صفحات بدأت المصاعب.....

أنا عند حساب مدى جدوى الخوارزمية والشرح سريع جدّاً..... تورطت ... بس هذا تحدي بيني وبين الخوارزميات :)

#9

واضح من اسمك أنك مغرم بالبرمجة الكائنية !! .. :) ,, .. حياك الله .

يوجد كتاب وضعه أحد الاخوة ( Romanof) عن الخوارزميات .. حقيقة رائع لو أني لم أشيك الا على أول فصل الى الان :) ,,

ستجده ضمن المواضيع اللي قبل 8 أشهر تقريبا . في هذا القسم .. حاول تبحث .. يمكن تلقاه ,

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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

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