12

حلقة For تقفز بخطوة ثابتة ، ما هي طريقتك لتجعلها تقفز بخطوتين بالتناوب ؟

أثناء تطبيقي للدالة كإجابة على طرح الموضوع

من قبل الأخ مؤيد السعدي

كانت الحلقة تقفز بمقدار 6 ولكن في داخلها مرة أفحص ما قبله ومرة ما بعده

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

فنبدأ بالقيمة 5 ثم نقفز بمقدار 2 وبعدها بمقدار 4 ثم 2 ثم 4 وهكذا

من هذه النتيجة خطر لي أن أطرح هذا الموضوع من باب تحفيز التفكير على الوصول لأفضل خوارزمية لتأدية المطلوب

طبعا ما سبق هو كمثال تطبيقي إلا أن السؤال عام أي كيف نجعل حلقة For تقفز بعدة خطوات كمتسلسلة

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

ومن باب التعرف على مرونة اللغات المختلفة لحل مثل هذه الاستثناءات.

أشكر الأخ مؤيد كملهم للفكرة.

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

ودمتم بخير


التعليق السابق

أول مره أري حلقة for تكتب بهذيه الطريقه ممكن تشرحلي الكود ؟

أنا أعرف الحلقه بهذا الشكل فقط

(for(int i=5; i<n; j= -j

هذا الكود يقوم بزيادت قيمة i مرة بـ 2 ومرة 4 وهكذا حتى تنتهي الحلقة

ولكن وجدت فيه خطأ bug وسأنشرها بعد إصلاحه

#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;

int main() {

    bool b=false;
    int i;

    for (i=0; i<20 ; i+= pow(2, (int)b+1) ){

        printf("%d\n",i);

        b = !b;
    }
    system("pause");
    return 0;
}

شكرا لك أخي حلك صحيح

لكنك إستخدمت دالة pow(القوى أو الأس) والمطلوب عدم استخدام دالة دخل الدورة

الدالة وضعت سابقا لتوضيح الفكرة

وهذه بأسلوب الضرب بدلا عنها بدون أي دالة

for (i=0; i<20 ; i+= 2* ((int)b+1) ){

     printf("%d\n",i);

    b = !b;
}

وجدت طريق أسرع وتعتمد على طريقتك الأولى والجمع فقط