• 0
MouhcineFD

فكر: لغز برمجي بسيط

سؤال

السلام عليكم

لدي هدا الكود البرمجي

المطلوب تعديل الكود لجعله أسرع في التنفيد بنسبة أكتر من 50%

**مع كتابة استنتاج يعتمده المبرمج في كتابة برامجه

 

الشروط:

عدم اضافة أو ازالة أي حرف أو رقم أو رمز

عدم عدم تغيير فكرة عمل الكود

التعديل مسموح داخل الدالة الرئيسية فقط

 

 

المستوى: من مبتدأ الى متوسط

#include<stdio.h>int cotin(){    int i,a=0;    for(i=0; i<10000000; i++)        a++;    return a;}int couti(){    int i,a=0;    for(i=0; i<100000; i++)        a++;    return a;}int cutin(){    int i,a=0;    for(i=0; i<1000; i++)        a++;    return a;}int main(){    if(cotin()<=1000||cutin()<=1000||couti()<=1000)    printf("MouhcineFD");}

** سبب تعديل الموضوع

تم تعديل بواسطه MouhcineFD
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

9 إجابة على هذا السؤال .

  • 0
#include<stdio.h>int cotin(){    int i,a=0;    for(i=0; i<10000000; i++)        a++;    return a;}int couti(){    int i,a=0;    for(i=0; i<100000; i++)        a++;    return a;}int cutin(){    int i,a=0;    for(i=0; i<1000; i++)        a++;    return a;}int main(){    if(cutin()<=1000 || cotin()<=1000||couti()<=1000)    printf("MouhcineFD");

موضع التعديل : هو أن أجعل الدالة الآخيرة cutin هي الأولى في الشرط لأنها محققة في كل الأحوال 

وأن نؤخر الدالة cotin لانها غير محققة في كل الأحوال فهي أكبر من 1000 واستدعاؤها في أول الشرط مضيعة للوقت

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عند بناء البرنامج مع تفعيل التحسينات، المصرف يحسب القيم التي تعيدها تلك الدوال ويحسب الشرط عند بناء البرنامج، في النهاية سيحذف جملة if من الدالة، كأن البرنامج:

#include <stdio.h>int main(){  printf("MouhcineFD");  return 0;}

وبدون تعديل شيء.

 

لكن أظن أنك تلمح للـshort circuit evaluation.

تم تعديل بواسطه Mr.B
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
Mr.B

 

من الشروط

 

عدم اضافة أو ازالة أي حرف أو رقم أو رمز

عدم تغيير فكرة عمل الكود

التعديل مسموح داخل الدالة الرئيسية فقط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

Mr.B

 

من الشروط

 

عدم اضافة أو ازالة أي حرف أو رقم أو رمز

عدم تغيير فكرة عمل الكود

التعديل مسموح داخل الدالة الرئيسية فقط

 

 

اظن ان Mr.B يقصد انه في كل الاحوال سيتم حذف الجملة الشرطية بسبب ال optimization (اذا كان مفعل) لذلك لا فرق بين ما كتبته انت وبين التعديل الذي ذكره الاخ احمد.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنا وضعت لغز بشروط

وليس موضوع للنقاش عن طريقة عمل المصرف

ما قاله Mr.B صحيح

ولكن ليس هو حل اللغز

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أحمد أبو عبد البر

 

وجدت الحل لكن لم تعدله بالشكل الأفضل

+ انظر الموضوع تمت اضافة طلب جديد

 

هل تقصد أن أجعل الدالة  cotin() هي الأخيرة

 

لو كنت تقصد ذلك فإن ذلك لا يغير من السرعة شيئا فإنك سواء أخرتها أو قدمتها فلن تستدعى الدالتين cotin() و couti() وسيتحقق الشرط عند استدعاء الدالة الأولى 

تم تعديل بواسطه أحمد أبو عبد البر
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم هدا ما أقصد

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

لنفترض أننا لا نعرف شيئ عن الدالة الأولى هل ستتحقق أم لا يعني من الأفضل جعل cotin هي الأخير

على العموم اجابتك صحيحة

+ ماهو استنتاجك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انا افكر اتركوا لي فرصة للاجابة!

 

تعديل:

-----

 

هذا هو الحل:

#include<stdio.h>int cotin(){    int i, a = 0;    for (i = 0; i < 10000000; i++)        a++;    return a;}int couti(){    int i, a = 0;    for (i = 0; i < 100000; i++)        a++;    return a;}int cutin(){    int i, a = 0;    for (i = 0; i < 1000; i++)        a++;    return a;}int main(){    if(cutin() <= 1000 || cotin() <= 1000 || couti() <= 1000)    printf("MouhcineFD");}

 العامل || سوف يقيّم المعامل الاول و هو دائما صحيح فاذا سيتجاهل باقي المعاملات و بهذه الطريقة نكون وفّرنا عناء ايّ من باقي الدالات

تم تعديل بواسطه adam-master
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .