انتقل إلى المحتوى

حلقة While

هذه المقالة يتيمة. ساعد بإضافة وصلة إليها في مقالة متعلقة بها
غير مفحوصة
يرجى مراجعة هذه المقالة وإزالة وسم المقالات غير المراجعة، ووسمها بوسوم الصيانة المناسبة.
من ويكيبيديا، الموسوعة الحرة
مخطط تدفق حلقة While

في معظم لغات برمجة الحاسوب، تُعد حلقة تكرار "while" إحدى تعبيرات تدفق التحكم ،إذ تُستخدم لتنفيذ الشيفرة بشكل متكرر بناءً على شرط منطقي معين.

ويمكن النظر إلى حلقة whileعلى أنها تعبير شرطي (if) تتكرر باستمرار طالما ظل الشرط محققًا.

يتكون حلقة while من كتلة من التعليمات و شرط أو تعبير منطقي [1] يتم تقييم هذا الشرط أو التعبير، وإذا كان صحيحًا ، [1] يتم تنفيذ التعليمات الموجودة داخل الكتلة بالكامل. تستمر هذه العملية في التكرار حتى يصبح الشرط أو التعبير باطلاً . نظرًا لأن حلقة while تقوم بفحص الشرط قبل تنفيذ الكتلة، فإن هذه البنية تُعرف غالبًا بـ الحلقة ذات الاختبار المسبق (pre-test loop). قارن ذلك مع حلقة do while، التي تختبر الشرط بعد تنفيذ الكتلة البرمجية.

على سبيل المثال، في اللغات C وJava وC# و [2] Objective-C وC++ (التي تستخدم نفس بناء الجملة في هذه الحالة)، فإن قطعة الكود التالية..

int x = 0;

while (x < 5) {
    printf ("x = %d\n", x);
    x++;
}

أولاً، يتم التحقق مما إذا كانت قيمة المتغير x أقل من 5، وهو أمر صحيح، لذلك يتم دخول جسم الحلقة، حيث يتم تنفيذ دالة printf ويُزاد قيمة x بمقدار 1. بعد الانتهاء من تنفيذ جميع التعليمات داخل جسم الحلقة، يتم فحص الشرط مرة أخرى، وهو (x < 5)، وإذا كان الشرط صحيحًا، تتكرر الحلقة، وتستمر هذه العملية حتى تصبح قيمة المتغيرx تساوي 5.

في بعض الأحيان يكون الشرط دائمًا صحيحًا، وفي بعض الحالات يكون هذا مرغوبًا، وهذا يؤدي إلى تكرار حلقة لا متناهية .وإذا تم عمل هذا عن قصد، عادةً يكون هناك أمر آخر مثل break ليوقف الحلقة ويخرج منها.

على سبيل المثال:

while (true) {
    // do complicated stuff
    if (someCondition)
        break;
    // more stuff
}

عرض حلقات while

[عدل | عدل المصدر]

ستقوم حلقات while هذه بحساب العاملي للرقم 5:

ActionScript 3

[عدل | عدل المصدر]
var counter: int = 5;
var factorial: int = 1;

while (counter > 1) {
    factorial *= counter;
    counter--;
}

Printf("Factorial = %d", factorial);
with Ada.Integer_Text_IO;

procedure Factorial is
    Counter   : Integer := 5;
    Factorial : Integer := 1;
begin
    while Counter > 0 loop
        Factorial := Factorial * Counter;
        Counter   := Counter - 1;
    end loop;

    Ada.Integer_Text_IO.Put (Factorial);
end Factorial;
counter  5
factorial  1

:While counter > 0
    factorial × counter
    counter - 1
:EndWhile

  factorial

أو ببساطة

!5
counter := 5
factorial := 1

While counter > 0
    factorial *= counter--

MsgBox % factorial

Small Basic

[عدل | عدل المصدر]
counter = 5  ' Counter = 5
factorial = 1 ' initial value of variable "factorial"

While counter > 0
  factorial = factorial * counter
  counter = counter - 1
  TextWindow.WriteLine(counter)
EndWhile

فيجوال بيسك

[عدل | عدل المصدر]
Dim counter As Integer = 5    ' init variable and set value
Dim factorial As Integer = 1  ' initialize factorial variable

Do While counter > 0
    factorial = factorial * counter
    counter = counter - 1
Loop     ' program goes here, until counter = 0

'Debug.Print factorial         ' Console.WriteLine(factorial) in Visual Basic .NET

Bourne (Unix) shell

[عدل | عدل المصدر]
counter=5
factorial=1
while [ $counter -gt 0 ]; do
    factorial=$((factorial * counter))
    counter=$((counter - 1))
done

echo $factorial

سي، سي++

[عدل | عدل المصدر]
int main() {
    int count = 5;
    int factorial = 1;

    while (count > 1)
        factorial *= count--;

    printf("%d", factorial);
}

لغة ترميز ColdFusion (CFML)

[عدل | عدل المصدر]

بناء جملة البرنامج النصي

[عدل | عدل المصدر]
counter = 5;
factorial = 1;

while (counter > 1) {
    factorial *= counter--;
}

writeOutput(factorial);

بناء جملة العلامة

[عدل | عدل المصدر]
<cfset counter = 5>
<cfset factorial = 1>
<cfloop condition="counter GT 1">
    <cfset factorial *= counter-->
</cfloop>
<cfoutput>#factorial#</cfoutput>

فورتران

[عدل | عدل المصدر]
program FactorialProg
    integer :: counter = 5
    integer :: factorial = 1

    do while (counter > 0)
        factorial = factorial * counter
        counter = counter - 1
    end do

    print *, factorial
end program FactorialProg

لغة Go لا تحتوي على عبارة while، لكنها توفر نفس الوظيفة من خلال استخدام عبارة for عند حذف بعض عناصرها.

counter, factorial := 5, 1

for counter > 1 {
	counter, factorial = counter-1, factorial*counter
}

جافا، سي شارب، دي

[عدل | عدل المصدر]

الكود الخاص بالحلقة هو نفسه في لـ Java وC# وD:

int counter = 5;
int factorial = 1;

while (counter > 1)
    factorial *= counter--;

جافا سكريبت

[عدل | عدل المصدر]
let counter = 5;
let factorial = 1;

while (counter > 1)
    factorial *= counter--;

console.log(factorial);
counter = 5
factorial = 1

while counter > 0 do
  factorial = factorial * counter
  counter = counter - 1
end

print(factorial)

MATLAB, Octave

[عدل | عدل المصدر]
counter = 5;
factorial = 1;

while (counter > 0)
  factorial = factorial * counter;   %Multiply
  counter = counter - 1;        %Decrement
end

factorial

Mathematica

[عدل | عدل المصدر]
Block[{counter=5,factorial=1},  (*localize counter and factorial*)
    While[counter>0,            (*While loop*)
        factorial*=counter;     (*Multiply*)
        counter--;              (*Decrement*)
    ];

    factorial
]
$counter = 5
$factorial = 1

while ($counter) {
    $factorial *= $counter--
}

$factorial

انظر أيضا

[عدل | عدل المصدر]
  • حلقة For
  • دالة عودية بدائية
  • دالة تكرارية عامة
  • LOOP (لغة برمجة) - لغة برمجة تتميز بأن الدوال التي يمكنها حسابها هي بالضبط الدوال التكرارية البدائية
  1. 1 2 "The while and do-while Statements (The Java Tutorials > Learning the Java Language > Language Basics)". Dosc.oracle.com. مؤرشف من الأصل في 2025-05-28. اطلع عليه بتاريخ 2016-10-21.
  2. "while (C# reference)". Msdn.microsoft.com. مؤرشف من الأصل في 2016-10-22. اطلع عليه بتاريخ 2016-10-21.