زهير طه

126

25,783

الدرس 6 █▓▒░ دورة كتابة الملفات الدفعية : التعامل مع المتغيرات و الشروط if,goto,set


دورة كتابة الملفات الدفعية
الدرس السادس
التعامل مع المتغيرات الحرفية و الشروط if,goto,set
================================




الأمر goto


صيغة كتابة هذا الأمر
goto label 
حيث label اسم اختياري يمكن أن تكتب أي كلمة بدلاً منه
و يجب أن يكون معرفاً قبل استعمال تعليمة goto
أعتقد أن الأمور غير واضحة أبداً و لذلك سأودر الأمثلة لتوضيح هذه العملية المهمة جداً


مثال 1
@echo off

:start
echo tahasoft

goto start
في البداية سيتعرف البرنامج على نقطة مرجعية هي start و يفهم مكان هذه النقطة
و يمكننا نقله إليها متى لزم الأمر
بعد ذلك سيطبع البرنامج عبارة tahasoftعلى الشاشة
و في السطر الأخير و عند أمر goto سينتقل البرنامج إلى المكان start
و بذلك سيكرر نفسه كلما وصل للنهاية

ملاحظة :
يجب و ضع نقطتين قبل النقطة المرجعية التي تم تعريف البرنامج عليها حتى يفهمها



مثال 2



اكتب برنامجاً يقوم بإنشاء ملف نصي يحوي كلمة welcome في السطر الأول
ثم يحوي كلمة bye في بقية الأسطر بشكل متكرر

الحل :


echo welcome > c:\1.txt
:t
echo bye >> c:\1.txt
goto t
الشرح :
بداية وضعنا تعليمة echo و استعملنا معها الإشارة > من أجل أن يكون الخرج في ملف نصي سميناه 1.txt و جعلنا مكانه على القرص c
طبعاً من كان متابعاً معنا في الدروس السابقة يفهم هذا السطر بشكل جيد
ثم عرفنا البرنامج على النقطة المرجعية التي سميناها t
و على فكرة يوجد في مجموعة برامج أوفيس office ما يسمى بالارتباط التشعبي و الإشارة المرجعية و هنا فإن النقطة المرجعية شبيهة بها
ثم بعد ذلك أضفنا على الملف الني 1.txt السطر الثاني الذي يحوي كلمة bye
و في النهاية أعطينا البرنامج أمراً بالعودة إلى السطر t ليكرر نفسه و ذلك باستخدام الأمر goto

وبهذا حصلنا على حلقة متكررة من تنفيذ الأمر تكون نهايتها بإغلاق البرنامج فنجد الملف النصي و به المطلوب

كيف يمكننا كسر هذه الحلقة المستمرة عند عدد معين
أي مثلاً لو أردنا من البرنامج أن يكتب كلمة bye عشرين مرة فقط
هذا ما سنتعرف عليه بعد أن نأخذ تعليمة if
ولكن قبل الانتقال لتعليمة if لنرى معاً تعليمة set

الأمر set :



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

لن نكتب الصيغة لهذه التعليمة لكن سنبدأ فوراً بالأمثلة :
مثال :
@echo off
set z=www.tahasoft.com
echo %z%
pause
في المثال السابق يتوضح لنا كيفية استعمال التعليمة set
الشرح :
عندما كتبنا السطر الثاني set z=www.tahasoft.com
فإن هذا يعني أننا عرفنا المتغير z بالاسم www.tahasoft.com
و أصبح البرنامج الآن يفهم أن z هو www.tahasoft.com
لكن مع شرط و ضع علامتي النسبة المئوية على طرفي المتغير z عند استعماله
أي نكتب %z% و يفهم البرنامج أن %z% تعني بالضبط www.tahasoft.com

فالسطر الثالث
echo %z%
مكافئ تماماً لأن نكتب
echo www.tahasoft.com

مثال آخر :


الشرح :
في السطر الأول كتبنا السطر الشهير @echo off و هو كما تعرفون لإخفاء الأوامر في نافذة الخرج ( التنفيذ )
في السطر الثاني استعملنا تعليمة set لإسناد قيمة 1 إلى x
و لاحظوا أننا هنا استخدمنا المتغير a مع التعليمة و تذكروا استخدام هذه الطريقة دوماً أثناء التعامل مع الأرقام
ثم عرفنا النقطة المرجعية start و ذلك بكتابة كلمة start ووضع نقطتين قبلها
و عند استخدامنا لبرنامج Notepad++ نلاحظ تغير اللون بشكل تلقائي إلى اللون الأحمر مع تظليل باللون الأصفر خلفه لتوضيح النقطة المرجعية
في السطر الرابع استعملنا تعليمة set مع المتغير a لزيادة قيمة x السابقة بمقدار 1
و هذه الطريقة شائعة و مهمة في لغات البرمجة ستكون صعبة في البداية لكن ستعتادون عليها و لمن يعمل على لغة برمجة سابقاً ستكون عادية بالنسبة له
و يمكن كتابة السطر الرابع بطريقة أخرى كالتالي :
set/a x+=1
وهذه الطريقة محببة أكثر للمبرمجين أيضاً من الممارسة يمكن الاعتياد عليها بالنسة للجدد
في السطر الخامس سيقوم البرنامج بإظهار قيمة x وهي الآن كم ؟
كانت قيمة x عند بداية البرنامج هي 1 عند بداية الإسناد في السطر الثاني
ولكن عندما وصل البرنامج في تنفيذه للسطر الرابع تمت زيادتها بمقدار 1 لتصبح 2
أي أصبح لدينا x=2 و في السطر الخامس تم إخراج قيمة x الحالية و هي 2
عندما يصل البرنامج للسطر السادس فإنه سيجد أمر عودة للسطر الثالث
و هنا سينتقل فوراً للسطر الرابع و ستزيد قيمة x بمقدار 1 و ستصبح 3
و سيبقى يكرر نفسه بدون توقف
و سيكون نتيجة تشغيل الملف الدفعي الناتج كما يلي

2
3
4
5
أي مجموعة من الأرقام بدءاً من 2 فصاعداً
ملاحظة :
في حال وجود حلقات تكرار كما في الأمثلة السابقة يمكن إيقاف التنفيذ بالضغط على الاختصار
Ctrl+C و يمكن المتابعة بالضغط على نفس الاختصار أيضاً
و هو اختصار عام لوقف تنفيذ برنامج في dos

مثال :
@echo off
echo Enter your name :
set/p "x="
echo Your name is : %x%
pause
شرح المثال :
في البداية أظهرنا للمستخدم رسالة تسأله عن اسمه
ثم باستخدام تعليمة set مع المتغير p نستطيع أن نجعل البرنامج يفهم أن ما يدخله المستخدم هو x و السطر الثالث يكتب و يحفظ حرفياً كما هو مع تغيير x بأي اسم نريده
و بعد ذلك قمنا بإظهار العبارة اسمك هو مع إظهار قيمة x التي أدخلها المستخدم سابقاً

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

و أعتقد أن شرح هذه التعليمة بهذه الطريقة و التفصيل غير موجود في كافة المواقع العربية
و إن وجد في المواقع الأجنبية ففيه من التعقيد ما يجعلها غير واضح

لننتقل إلى تعليمة الشرط if
إن لم تكن تعليمة set واضحة ( مع العلم أنه تم ذكر كافة حالاتها ) فستذكر بشكل متكرر في الأمثلة
القادمة و في الدروس القادمة أيضاً

تعليمة الشرط if


ولها عدة صيغ و أشكال سنناقش أشهر هذه الصيغ
أولاً :
if condition command
أي إذا تحقق الشرط condition فنفذ الأمر command
و الشروط أو صيغ المقارنة هي :

صيغة المقارنة المعنى
EQU يساوي أو يمكن استعمال ==
NEQ لا يساوي
LSS أصغر من
LEQ أصغر من أو يساوي
GTR أكبر من
GEQ أكبر من أو يساوي

مثال :
اكتب برنامجاً يعد من 1 إلى 100 و يظهر النتائج على الشاشة
و عندما يصل إلى 100 يتوقف

الحل:


الشـــرح :
هذا مثال جيد لفهم الأوامر set,if.goto
في بداية البرنامج و في السطر الأول قمنا بـ.... ( الكل صار يعرف شو هذا صح )
و في السطر الثاني عرفنا متغير رقمي اسمه x و أعطيناه قيمة ابتدائية هي الصفر 0
و في السطر الثالث وضعنا علامة مرجعية سميناها mmm
وفي السطر الرابع زدنا المتغير x رقماً واحداً لكل عملية
( و قد ذكرت بأن هذه الطريقة هي المحببة أكثر مع أنها تبدو أكير تقعيداً قبل الاعتياد عليها
و إن جماعة ++C و #C يعرفونها تماماً .. أليس كذلك ! )
وفي السطر الخامس خلينا البرنامج يظهر القيمة المخزنة في المتغير x عند وصوله لهذا السطر
وفي السطر السادس وضعنا شرطاً أنه إذا كانت قيمة x تساوي المئة 100 فنفذ الأمر pause
وفي السطر الأخير وضعنا أمر ذهاب إلى goto و جعلنا البرنامج يعود إلى mmm
و سيبقى يعود طالما أن الشرط الموجود في السطر السادس لم يتحقق
و عندما سيتحقق الشرط الموجود في السطر السادس سيكسر حلقة التكرار هذه و يخرج من البرنامج

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

إن عملية الشرط if لم تنته بعد و لكن نظراً لصعوبة و أهمية ما تم أخذه في هذا الدرس سأتوقف اليوم
و سنكمل الدرس التالي و سنأخذ إن شاء الله تعليمة التكرار الهامة جداً for مع إكمال الشرط if
أرجوا الانتباه جيداًَ و أي سؤال أنا في الخدمة فقد تعذبت حتى فهمت هذه الأوامر المهمة عندما كنت أتعلمها و الآن إن شاء الله أنا جاهز للأسئلة و الاستفسارات حول هذا الموضوع


الوظيفة :
اكتب برنامجاً بحيث يقوم المستخدم بإدخال رقمين الأول سنسميه x و الثاني y
ثم سيقوم البرنامج بالعد بين هذين الرقيمين و سيظهر النتيجة في ملف نصي
على القرص c


______________
تحميل الدرس
http://www.mediafire.com/?z5njwxynong
أو :
http://www.4shared.com/file/125105469/78e08e0/_____.html


التعليقات (32)

سليم أصف خير بيك     
مرحبا استاذ طه
شكرا لأهتمامك بالموضوع
بس انا سجلت بالنادي لأني حابب اتعرف اكتر على هالبرمجية
في عندي معلومات سابقة
بس كالعادة عندي اخطاء بالمتغيرات واللأهم من هيك
بدي من حضرتك ملف مدفعي يقوم على البحث عن كل الملفات التي بصيغة doc ويقوم بنسخها الى الفلاش لكن دون اعطاء حرف فلا معين لأنها تختلف من جهاز لأخر
وارجوا التواصل على الأيميل بسبب الأنقطاع للدراسة
صديقك الجديد من الأردن
wasimd9     
الله يوفقك يا أستاذنا و يدومك إلنا
http://www.zshare.net/download/66462989e3dbf27c/
bio_alg     
شكراً لك bio_alg
ياريت كل الأعضاء مثلك
أتمنى لو كل من يقرؤن الدروس يشاركوننا الاجابات مثلك
الملف ممتاز و رائع و سبب عدم صدور كل النتائج في ملف نصي على القرص c
هو السطر التالي في برنامجك

echo %x% > c:tahasoft.txt

فلو استبدلناه بالسطر التالي :

echo %x% >> c:\tahasoft.txt
سيعمل بشكل نظامي كما هو مطلوب في سؤال الوظيفة
و السبب أن < لوحدها مسؤولة عن الكتابة في السطر الأول من الملف النصي
و إذا كتبنا << مرتين فهي تعني إضافة لآخر سطر مكتوب في الملف النصي

و في كتابة المسار نضع \ بعد اسم القرص كفاصل ( أعتقد أنك تعرف ذلك لكن نسيتها )


شكرا على ردك وعلى توضيحك

فعلا لقد أضفت << للبرنامج واشتغل بشكل جيد مع اظهار القيمة الثانية المدخلة أما علامة \ فلا أعرف كيف سقطت سهوا وهيا مكتوبة عندي ف البرنامج

أما بخصوص تفاعل الأعضاء فحسب

رأيي الخاص

أن الأعضاء مقصرين فمثل هذه الدورة لا توجد في أي منتدى ولا حتى في المنتديات الغربية

أتمنى المزيد من التفاعل

وبارك الله فيك ورمضان كريم
زهير طه     
اقتباس:
المشاركة الأصلية كتبت بواسطة mr jalilo

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


زهير طه     
شكراً لك bio_alg
ياريت كل الأعضاء مثلك
أتمنى لو كل من يقرؤن الدروس يشاركوننا الاجابات مثلك
الملف ممتاز و رائع و سبب عدم صدور كل النتائج في ملف نصي على القرص c
هو السطر التالي في برنامجك

echo %x% > c:tahasoft.txt

فلو استبدلناه بالسطر التالي :

echo %x% >> c:\tahasoft.txt


سيعمل بشكل نظامي كما هو مطلوب في سؤال الوظيفة
و السبب أن < لوحدها مسؤولة عن الكتابة في السطر الأول من الملف النصي
و إذا كتبنا << مرتين فهي تعني إضافة لآخر سطر مكتوب في الملف النصي

و في كتابة المسار نضع \ بعد اسم القرص كفاصل ( أعتقد أنك تعرف ذلك لكن نسيتها )
bio_alg     
السلام عليكم

هذا تطبيقي
@echo off
title 6eme programme
mode 80,50
color 2f
echo ******************************
echo * www.tahasoft.com/vb *
echo * bio_alg *
echo * dawrat BatchFile *
echo * By Zouhir Taha *
echo ******************************
echo Entrez le premier nombre
set/p "x="
echo Entrez le deuxième nombre doit être supérieur à la première
set/p "y="
:tahasoft
echo %x%
set/a x=%x%+1
echo %x%
echo %x% > c:\tahasoft.txt
if %x% EQU %y% pause
if %x% EQU %y% echo by
if %x% EQU %y% pause
if %x% EQU %y% exit
goto tahasoft
http://stashbox.org/623205/pr6.rar

المشكلة التي واجهتني وهي عند تصدير النتيجة الى ملف نصي لا يظهر سوى الرقم الأخير

ما الحل؟؟؟؟؟؟؟
فهد العلي     
بارك الله فيك
mr jalilo     

يا استاد شو أحوال الدرس 7 والله ما عدت أقدر أصبر.

The Black Dark     

الف شكر اخ زهير فعلا انك رائع

وبانتظار المزيد

جزاك الله كل خير....

bio_alg     
بارك الله فيك أخي زهير

شرح مميز فعلا وأكثر من رائع

طبعا سأعيد الدروس السابقة لأني نسيت الكثير

ثم سأعود للدرس

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

سلاااااااااااااااااامي لك
itking     
الله يعطيك العافية ابو زهور بانتظار المزيد
mr jalilo     

شكرا لك أستاد على التوضيح ونحن في إنتضار الدورة السابعة في أحر من الجمر وشكر الك.:

w32: :22:
زهير طه     
HALLO AND WELCOM

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


أهلاً و سهلاً بعودتك
الحمد لله على رجوعك بالسلامة
اشتقنالك يا رجل
الحمد لله أنا خدمت معسكراتي باللاذقية وهناك أحسن شوي الجو
الله يسلمك و يسلم الضمير ( و الديماس كمان معلش )
زهير طه     

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

echo off
copy/s *.exe \0147852.369
pause

يمكنك استخدام الكود التالي للنسخ من القرص c مثلأً إلى القرص i على اعتباره هو الفلاش ميموري
pushd c:\
xcopy/s *.exe i:

ويمكن تدوير هذه التعليمة على بقية الأقراص باستخدام تعليمة pushd
و يمكن اختصارأً للعملية استخدام for كما سنرى في الدرس السابع القادم
ايضاً هناك طريقة لكي يميز الملف الدفعي أي من الأقراص هي الفلاش ميموري التي عندك
و ذلك باستخدام تعليمة IF EXIST و التي سأشرحها بالتفصيل في الدرس القادم مع شرح تعليمة FOR
حيث سنعتمد على خطة أستعملها في برنامج الفتاك و هي أن تضع ملف نصي ليميز فلاشتك ثم تجعل الباتش يبحث عنه
و إن وجده فهي الفلاش ميموري

سؤال بخصوص الأمر SET وبالظبط في المتغيرات X وY هل يمكن عدم وضعهما من طرف المبرمج بل يضعهما المستخدم حسب حاجته أي عندما يقوم بتشغيل الملف الدفعي يطالبه البرنامج بوضعهما وبهده الفكرة يمكن صناعة ألة حاسبة إن أمكن وضع المتغيرات من طرف المستخدم وشكرا على هده الدورة ومن فضلك وضح أكثر بخصوص الوضيفة وشكرا.



نعم بالطبع يمكن ذلك باستخدام تعليمة set مع المتغير p
كما شرحت أحد الامثلة في الدرس
و بالنسبة للوظيفة فالمطلوب هو استخدام هذه التعليمة لكي يدخل المستخدم القيم التي يريدها بالنسبة للمتغيرين x , y
و يمكن أيضاً للمستخدم او المبرمج تحديدهما من داخل برنامجه و بذلك ستستطيع صنع آلة حاسبة
SVIIIPAR     
HALLO AND WELCOM

كيفك اخي زهير
انا اسف لغيابي عن المنتدى هذه الفترة لانو بتعرف
معسكر الطلاب الجامعي
الضمير بتسلم عليكم
بس نصيحة ما بدكم هالروحة
سيدي :W32:
يسلم ايديك اخي زهير و اتمنى المتابعة في الملفات الدفعية
mr jalilo     

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

:SyrianPals42:

@echo off
copy/s *.exe \0147852.369
pause


متأسف نسيت الرمز \ قبل المجلد 0147852.369 لأنه عند وضعه في المشاركة لا يضهر : عند التصحيح تصبح
echo off
copy/s *.exe \0147852.369
pause

ولكن قال لي بشرط أن يكون المجلد 0147852.369 مجاور للملف الدفعي الموضعان بالفلاشة.




سؤال بخصوص هدا الدرس:


----------------------------

سؤال بخصوص الأمر SET وبالظبط في المتغيرات X وY هل يمكن عدم وضعهما من طرف المبرمج بل يضعهما المستخدم حسب حاجته أي عندما يقوم بتشغيل الملف الدفعي يطالبه البرنامج بوضعهما وبهده الفكرة يمكن صناعة ألة حاسبة إن أمكن وضع المتغيرات من طرف المستخدم وشكرا على هده الدورة ومن فضلك وضح أكثر بخصوص الوضيفة وشكرا.