ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

دستور حلقه FOR

 
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sun Nov 28, 2004 12:09 am    Post subject: دستور حلقه FOR Reply with quote

حلقه FOR
اين حلقه در C يكي از مهمترن حلقه ها به شما مي رود كه دراي قابليت انعطاف پذيري زيادي نيز مي باشد
فرم كلي دستور به شكل زير مي باشد :
{دستورات}([ گام حلقه ];[شرط حلقه];[مقدار اوليه])for

اين دستور شامل سه قسمت قابل حذف مي باشد(قابل حذف بودن را با [ ] نشان مي دهيم) .
قسمت اول يعني مقدار اوليه درست قبل از دستور for اجرا ميشود در واقع اين مقدار يك بار براي هميشه در اولين باري كه حلقه شروع ميشود اجرا ميشود . در اين قسمت ميتوان چند مقدار دهي داشت به اينصورت كه با استفاده از كاما ميتوان اين مقدار دهي ها را جدا كرد . بدين ترتيب اين مقدار دهي ها از سمت چپ ترين اجرا ميشوند و ادامه پيدا ميكنند تا به سمت راست ترين مقدار دهي در قسمت اوليه برسد كد زير را براي مثال ميتوانيد ببينيد:
for(i=1,y=3;[anything];[anything])

همانطور كه گفته شد اين مقدار دهي كاملا اختياري است و اين قسمت را ميتوانيد بنا به نياز خالي بگذاريد و به كارتان ادامه بدهيد .
قسمت دوم يعني شرط حلقه در ابتداي هر بار انجام حلقه تست مي شود. منظور از اجراي حلقه انستكه كليه دستوراتي كه در حلقه بايد انجام شوند يك بار انجام شده و دوباره به ابتداي حلقه باز ميگردد و دوباره شرط ادامه عمليات و تكرار دستورات حلقه را ادامه ميدهد . اين شرط ميتواند با ديگر شرط ها با ااستفاده از عملگر هاي And و OR و مانند اينها تركيب شود اما يادتان باشد اين قسمت مانند قسمت قبل نميتوان از عملگر كاما استفاده كرد .
قسمت سومقسمت گام حلقه است كه بعد از انكه يك بار حلقه انجام شد پس از پايان دستور يا دستورات داخلي حلقه اين قسمت يك بار اجرا ميشود و هر ان مقداري كه متغير مربوطه لازم دارد را مقدار دهي ميكند .
مثال :برنامه اي بنويسيد كه مقدار n (يك عدد صحيح ) را از ورودي گرفته و مجموع اعداد 1 تا n را در خروجي چاپ كند ؟
#include <stdio.h>
#include <conio.h>
main(){
   int i,s=0,n;
   printf("enter a number: ");
   scanf("%d",&n);
   for(i=1;i<=n;i++)
   s+=i;
   printf("the result is %d",s);
   getch;
   return 0;
}

خوب در مثال فوق مي بينيم كه از دو هدر stdio.h و conio.h استفاده شده است . استفاده از هدر stdio.h بخاطر استفاده از دستوراتي چون printf و scanf مي باشد .هدر conio.h نيز براي دستور getch فراخواني شده است . و چون اين حلقه تك دستور مي باشد پس احتياجي به گذاشتن { } نمي باشد . در رابطه با هدر ها ميتوانيد به صفحات بعدي مراجعه كنيد .
مثال : برنامه فوق را طوري طراحي كنيد كه مجموع اعداد فرد كوچكتر يا مساوي n را در خروجي چاپ كند ؟
#include <stdio.h>
#include <conio.h>
main(){
   int i=1,s=0,n;
   printf("enter a number: ");
   scanf("%d",&n);
   for(;i<=n;i+=2)
   s+=i;
   printf("the result is %d",s);
   getch;
   return 0;
}

مثال : برنامه فوق را طوري طراحي كنيد كه مجموع اعداد زوج كوچكتر يا مساوي n را در خروجي چاپ كند ؟

[#include <stdio.h>
#include <conio.h>
main(){
   int i=1,s=0,n;
   printf("enter a number: ");
   scanf("%d",&n);
   if(n%2) n--;
   for(;n>=0;n-=2)
   s+=n;
   printf("the Even result is %d",s);
   getch;
   return 0;
}

مثال : برنامه فوق را طوري طراحي كنيد كه تنها با دو متغيير مجموع اعداد فرد كوچكتر يا مساوي n را در خروجي چاپ كند ؟
#include <stdio.h>
#include <conio.h>
main(){
   int i=1,s=0,n;
   printf("enter a number: ");
   scanf("%d",&n);
   if(!(n%2)) n--;
   for(;n>=0;) {
   s+=n; n-=2; }
   printf("the Even result is %d",s);
   getch;
   return 0;
}

نكته Exclamation :
در اين مثال اول بايد كاري كنيم كه عدد در صورت زوج يا فرد بودن به يك عدد زوج تبديل گردد . اين كار را به راحتي با گذاشتن دستور ;--if(n%2) n انجام مي شود .چون هر وقت باقيمانده تقسیم n بر 2 برابر صفر نشود از n يك واحد كم می شود و n يك عدد زوج مي شود .


Last edited by arash on Tue Nov 30, 2004 9:18 pm; edited 7 times in total
Back to top
ParsX
مهمون يكي دو روزه


Joined: 26 Nov 2004
Posts: 3

PostPosted: Sun Nov 28, 2004 8:25 pm    Post subject: دستورات كنترل حلقه Reply with quote

دستور break
استفاده از اين دستور در هر جاي حلقه مسبب انستكه كنترل برنامه از حلقه خارج شده و حلقه بلافاصله خاتمه ميابد . ميتوان اينتطور فرض كرد كه شرط ادامه حلقه از صحت خارج ميشود . اين دستور عموما براي حلقه هاي بينهايت استفاده ميشود .
دستور Continue
سبب ميشود كنترل برنامه به ابتدا بازگردد .
توضيحات تكميلي را در صفحات بعد خواهيد يافت .


Last edited by ParsX on Sun Nov 28, 2004 8:41 pm; edited 1 time in total
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Sun Nov 28, 2004 8:34 pm    Post subject: مثال براي دستورات كنترل حلقه Reply with quote

مثال : برنامه اي كه مجموع اعداد فرد بين 1 تا n را چاپ كند .
#include <stdio.h>
#include <conio.h>
main(){
   int i=1,s=0,n;
   printf("enter a number: ");
   scanf("%d",&n);
   if(!(n%2)) n--;
   for(;;) {
   if(!(n>=0)) break;
        s+=n; n-=2; }
   printf("the Odd result is %d",s);
   getch;
   return 0;
}
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Sun Nov 28, 2004 11:04 pm    Post subject: نكاتي در رابطه با for Reply with quote

دستور for را می توانید به جای دستور while به کار ببرید .
ميتوانيد حلقه for را به صورت حلقه While در قالب زير ببينيد :
while(قسمت اول) {
قسمت دوم ;
فسمت سوم ;
}

براي درك بهتر انكه در سه قسمت اختياري حلقه for چه چيزهايي ميتوان قرار داد بهتر است به قطعه كد برنامه زير توجه كنيد :
for(i=1;i<9;printf("hello%d",i),++i);
حلقه فوق دقيقا مانند حلقه قالب زير است :
for(i=1;i<9;++i)
printf("hello%d",i);

همانطور كه در قالب بالا ديديد ميتوان به اين نتيجه دستيافت كه استفاده از تابع در حلقه به هيچ وجه مشكل برانگيز نيست بنابراين به اين نتيجه رسيديم كه استفاده از تابع در اين سه قسمت اختياري حلقه فوق نيز امكانپذير است .
اگر كمي در دستور بالا دقت كنيد متوجه ميشويد اينبار به جاي انكه از ++i از i++ استفاده كرديم كه هدف رساندن اين مفهوم بود كه اين دو هيچ تفاوتي با يكديگر ندارند .
نكته قابل توجه ديگري كه لازم به ياداوري است انستكه بر خلاف ديگر زبان هاي برنامه نويسي چون پاسكال ديگر محدوديتي در رابطه با نوع شمارنده نخواهيم داشت به اين صورت كه شمارنده فقط بايد از نوع صحيح باشد بلكه در زبان C ميتوان از شمارنده هاي غير صحيح اعشاري و كاراكتري استفاده كرد كه در زير به ذكر چند مثال براي درك بهتر مطلب بسنده ميكنم :
for(count=0.9;count<4.5;count+=1.2)
printf("%f",count);

دستور فوق ابتدا مقدار count را با مقدار 0.9 چاپ ميكند سپس به ان مقدار 1.2 اضافه ميكند كه حاصل ميشود 2.1 انرا با 4.1 چك ميكند چون كوچكتر از 4.1 است انرا چاپ ميكند . دوباره به ان مقدار 0.9 اضافه ميكند و به همين ترتيب ادامه پيدا ميكند تا انكه مقدار count از 4.5 بيشتر شود .
for(count='f';count<'x';count++)
printf("%d=%c",count,count);
اگر در برنامه فوق كمي دقت كنيد متوجه ميشويد كه چاپ كردن يك جدول اسكي با زبان c چقدر ساده و اسان است . قالب برنامه فوق به ان صورت است كه كد اسكي كاراكتر f را درون count ريخته ان كاركتر را با كد اسكي همان كاركتر چاپ ميكند . سپس به مقدار count يك واحد اضافه ميشود كه منجر به چاش شدن حرف بعدي به همراه كد اسكي ميشود كه نهايتا اين كار تا چاپ شدن كاركتر w ادامه پيدا ميكند .
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum