برگزیده های پرشین تولز

یک سئوال در مورد پرش از حلقه ای به حلقه دیگر

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
فرض کنیم در c++ یک برنامه نوشتیم که چند حلقه تو در تو داره . حالا کامپایلر درحال کامپایل کردن به داخلی ترین حلقه رسیده و ما میخواهیم بعد از کامپایل داخلی ترین حلفه دوباره به خارجی ترین حلقه بپره . اگر از دستور break استفاده کنم فقط به اندازه 1 حلقه به عقب باز می گرده . باید چکار کرد ؟ دستور خاصی برای این کار وجود ندارد ؟

( به عبارت دیگه :چطوری میشه از داخلی ترین حلقه به خارجی ترین حلقه پرید ؟ )
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
روش اصولیشو بلد نیستم اما میتونی کاری کنی که دستوارات شرطی حلقه ها تا حلقه اولیه بر اورده شه تا از حلق ها بیان بیرون
مثلا اگر شرط اینکه
i<5 ای رو برابر 6 کن
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
راه اصولی نداره اما راه غیر اصولی زیاده یه راه رو اقا سعید گفتن یه راه هم اینکه
می تونی یک استثنا برپا کنی و توی حلقه اصلی یه بلوک کنترل استثنا قرار بدی تا استثنا اونجا گیر بیفته و بقیه برنامه از اونجا ادامه پیدا کنه
و چندین راه دیگه
 

Mehdi.T

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
30 سپتامبر 2005
نوشته‌ها
506
لایک‌ها
3
محل سکونت
In Search of Sunrise
اینو ببینید
کد:
#include <stdio.h>
#include <iostream.h>

void main() {
int COND = 1;
	for(int i=0;i<=10 && COND;i++)
		for(int j=0;j<=10 && COND;j++) 
			cin >> COND;
}
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از saeedsmk :
روش اصولیشو بلد نیستم اما میتونی کاری کنی که دستوارات شرطی حلقه ها تا حلقه اولیه بر اورده شه تا از حلق ها بیان بیرون
مثلا اگر شرط اینکه
i<5 ای رو برابر 6 کن

متاسفانه از این روش شما نمیشه استفاده کرد.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
خوب توی شرط ها بجز شرط اصلی یک شرط دیگر هم بگذار
مثلا
کد:
int seccond=1
for (int i=0;i<6 && seccond;i++)
...
هر موقعه خواستی از این حلقه خارج بشه seccond رو برابر 0 کن
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از Arash_j13 :
راه اصولی نداره اما راه غیر اصولی زیاده یه راه رو اقا سعید گفتن یه راه هم اینکه
می تونی یک استثنا برپا کنی و توی حلقه اصلی یه بلوک کنترل استثنا قرار بدی تا استثنا اونجا گیر بیفته و بقیه برنامه از اونجا ادامه پیدا کنه
و چندین راه دیگه

روش برپایی استثناء رو بلد نیستم :eek:
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
سپاس . فکر کنم با این روش درست بشه . الان امتحان می کنم .
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
برپایی استتثنا که بلد بودن نمی خواد یه تقسیم بر صفر انجام بدید استثثنا خودش بر پا می شه
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
به نقل از MehdiTeh :
اینو ببینید
کد:
#include <stdio.h>
#include <iostream.h>

void main() {
int COND = 1;
	for(int i=0;i<=10 && COND;i++)
		for(int j=0;j<=10 && COND;j++) 
			cin >> COND;
}

اینی که شما لطف کردید نوشتید وقتی به cin>>cond برسه به int cond=1 بر می گرده ؟
 

Mehdi.T

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
30 سپتامبر 2005
نوشته‌ها
506
لایک‌ها
3
محل سکونت
In Search of Sunrise
من منظورتون رو درست نفهمیدم کد رو دوباره مینویسم :
کد:
#include <stdio.h>

void main() {
int COND = 1;
	for(int i=0;i<=10 && COND;i++)
		for(int j=0;j<=10 && COND;j++) 
			scanf("%d",&COND);
}
این یک حلقه هست که 100 بار متغییر x را از کاربر می خواهد اگر شما در ورودی مقدار یک(هر چیز بجز صفر) را وارد کنید باز حلقه کار میکنه ولی اگر صفر وارد کنید ازحلقه درونی به کل بیرون میاد
بجای scanf("%d",&COND); میتونه هر چیز دیگه ای باشه اما باید اون عبارت بتواند شرط حلقه را ارضا کنه
 

Vahid.k

Guest
تاریخ عضویت
15 آگوست 2005
نوشته‌ها
144
لایک‌ها
5
روشی که شما فرمودید برای برنامه هایی که ورودی از کاربر می گیره خوبه . برنامه ای که کارش فقط چاپ یه سری کاراکتر باشه ( بدون دریافت ورودی ) نمیتونه از روش شما بهره ببره .
این برنامه ای است که در تاپیک تمرین های سی از پایه هم ذکر شده . تمرین1 : چاپ تمام اعداد 4 رقمی که با ارقام 3و5و7و8 ساخته شده اند. البته راه های بسیار زیادی برای نوشتن این برنامه وجود داره اما راهی که من انتخاب کردم نیاز به پرش از داخلی ترین حلقه for به خارجی ترین حلقه for دارد :

کد:
for (i=1;i<5 ;++i)
{
if (i==1)
cout<<"3";
if (i==2)
cout<<"5";
if (i==3)
cout<<"7";
if (i==4)
cout<<"8";
for (j=1;j<5 ;++j)
{
if (j==1)
cout<<"3";
if (j==2)
cout<<"5";
if (j==3)
cout<<"7";
if (j==4)
cout<<"8";
for (a=1;a<5 ;++a)
{
if (a==1)
cout<<"3";
if (a==2)
cout<<"5";
if (a==3)
cout<<"7";
if (a==4)
cout<<"8";
for(b=1;b<5 ;++b)
{
if (b==1)
cout<<"3";
if (b==2)
cout<<"5";
if (b==3)
cout<<"7";
if (b==4)
cout<<"8";
cout<<"\n";
اینجا باید به خارجی ترین حلقه بپره
}
}
}
}
 

Mehdi.T

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
30 سپتامبر 2005
نوشته‌ها
506
لایک‌ها
3
محل سکونت
In Search of Sunrise
بفرمایید :
کد:
TRUE = 1;
for (i=1;i<5 && TRUE ;++i)
{
if (i==1)
cout<<"3";
if (i==2)
cout<<"5";
if (i==3)
cout<<"7";
if (i==4)
cout<<"8";
for (j=1;j<5 && TRUE ;++j)
{
if (j==1)
cout<<"3";
if (j==2)
cout<<"5";
if (j==3)
cout<<"7";
if (j==4)
cout<<"8";
for (a=1;a<5 && TRUE ;++a)
{
if (a==1)
cout<<"3";
if (a==2)
cout<<"5";
if (a==3)
cout<<"7";
if (a==4)
cout<<"8";
for(b=1;b<5 && TRUE ;++b)
{
if (b==1)
cout<<"3";
if (b==2)
cout<<"5";
if (b==3)
cout<<"7";
if (b==4)
cout<<"8";
cout<<"\n";
TRUE = 0 ;
}
}
}
}
 
بالا