While
گاهی در برنامه نویسی نیاز داریم که یک یا چند کار را چندین بار تکرار کنیم. برای این که از نوشتن مجدد خطوط برنامه جلوگیری کنیم از تکنیکی به نام حلقههای تکرار استفاده میکنیم.
حلقههای تکرار شامل دو نوع حلقههای شرطی و حلقههای شمارشی میشوند.
در این قسمت به مطالعهی حلقههای شرطی میپردازیم.
فرمت کلی حلقه ی شرطی به صورت زیر می باشد:
while(شرط ادامه )
}
اعمالی که در صورت بر قرار بودن شرط باید انجام شوند
{
توجه کنید که شرط ادامه به شرطی گفته میشود که در صورت برقرار بودن آن، میتوان کارهای درون حلقه را انجام داد. پس از بررسی برقرار بودن یا نبودن شرط، اعمال درون حلقه یک بار انجام میشوند و پس از آن کنترل برنامه دوباره به ابتدای حلقه میرود تا دوباره شرط را بررسی کند و اگر شرط همچنان برقرار بود اعمال داخل حلقه دوباره انجام میشوند و این روال تا زمانی که شرط دیگر برقرار نباشد ادامه خواهد داشت. زمانی که شرط دیگر برقرار نباشد کنترل برنامه به دستورات بعد از حلقه میرسد.
تصور کنید بخواهید برنامهای را بنویسید که اعداد 1 تا 100 را در خروجی نمایش دهد. اگر از حلقه استفاده نکنیم برنامه به صورت زیر میشود:
main()
{
int a = 1;
cout << a;
a = a + 1;
cout << a;
a = a + 1;
cout << a;
... getch();
}
برنامهی بالا به این صورت کامل میشود که خطوط دوم و سوم را صد بار تکرار کنیم و بنویسیم. قطعا نوشتن همچین برنامهی سادهای بدون استفاده از حلقه امکانپذیر نخواهد بود. برنامهی بالا را با استفاده از حلقه به صورت زیر مینویسیم:
main()
{
int a = 1;
while(a <= 100)
{
cout << a;
a++;
}
getch();
}
مقداری که در ابتدا به متغیر a دادهایم مقدار اولیه نام دارد. شرط ادامه تا زمانی است که مقدار متغیر a کمتر یا مساوی 100 باشد. در هر بار اجرای حلقه اول مقدار a چاپ میشود سپس به a یک واحد اضافه میشود.
اگر مقدار اولیه a را صفر میدادیم ادامه برنامه به صورت زیر تغییر پیدا میکرد:
main()
{
int a = 0;
while(a < 100)
{
a++;
cout << a;
}
getch();
}
تا الان باید متوجه شده باشید که با تغییر یک عدد از یک به صفر، ادامهی برنامه ممکن است تا حد زیادی دستخوش تغییر بشود تا خروجی برنامه مانند قبل باشد. به تفاوت دو برنامهی بالا دقت کنید.
حال فرض کنیم بخواهیم برنامهای بنویسیم که اعداد زوج دو تا صد را نمایش دهد.
main()
{
int a = 0;
while(a < 100)
{
a = a + 2;
cout << a;
}
getch();
}
این برنامه را به صورت دیگری نیز میتوان نوشت که مقدار اولیه a صفر نباشد. (به عهده ی شما)
برای آشنایی بیشتر با حلقه با چند نمونه از این نوع حلقه بیشتر آشنا می شویم:
مثال 1: برنامه ی زیر از عدد 1 تا عدد 100 را در خروجی چاپ می نماید:
main() { int n = 0; while(n < 100) { n = n + 1; cout << n << "\t"; } getch(); }
مثال2: برنامه ی زیر اعداد زوج 2 تا عدد 100 را در خروجی چاپ می نماید:
main() { int n = 0; while(n < 100) { n = n + 2; cout << n << "\t"; } getch(); }
مثال 3: برنامه ی زیر اعداد مضرب سه یک تا عدد 100 را در خروجی چاپ می نماید:
main() { int n = 0; while(n < 97) { n = n + 3; cout << n << "\t"; } getch(); }
main() { int n = 0; while(n < 100) { if(n % 3 == 0) cout << n << "\t"; n++; } getch(); }
مثال 4: برنامه ای بنویسید که اعداد مضرب 4 سه رقمی را چاپ کند:
main() { int x, sum; x = 100; sum = 0; while(x < 999) { if(x % 4 == 0) cout << x << "\t"; x++; } getch(); }
مثال 5: برنامه ای بنویسید که مجموع اعداد مضرب 4 سه رقمی را چاپ کند:
main() { int x, sum; x = 100; sum = 0; while(x < 999) { if(x % 4 == 0) { sum = sum + x; } x++; } cout << "the sum is: " << sum; getch(); }
مثال 5: برنامه ای بنویسید که یک عدد را از ورودی گرفته و حاصل ضرب اعداد زوج کوچکتر مساوی آن عدد را چاپ کند:
main() { int num; cout << "please enter one number: " << endl; cin >> num; int mult = 1; if(num % 2 == 1) num = num - 1; while(num > 1) { mult = mult * num; num = num - 2; } cout << "the multiple is : " << mult; getch(); }
مثال 5: برنامه ای بنویسید که یک عدد را از ورودی گرفته و حاصل ضرب اعداد مضرب 3 کوچکتر مساوی آن عدد را چاپ کند:
main() { int num; cout << "please enter one number: " << endl; cin >> num; int mult = 1; while(num > 0) { if( num % 3 == 0) mult = mult * num; num--; } cout << "the multiple is : " << mult; getch(); }
مثال 6: برنامه ای بنویسید که یک عدد را از ورودی گرفته و فاکتوریل آن را محاسبه و چاپ کند:
main() { int num; cout << "please enter one number: " << endl; cin >> num; int fact = 1; while(num > 0) { fact = fact * num; num--; } cout< < "the factorial of your number is : " << fact; getch(); }
مثال 7: برنامه ای بنویسید که مختصات مرکز دایره را از ورودی گرفته و 10 دایره ی متحد المرکز رنگارنگ بکشد:
main() { int x, y; cout << "Please enter 2 numbers: " << endl; cin >> x >> y; int r = 10, c = 1; initwindow(900, 900); while(r <= 100) { setcolor(c % 16); circle(x, y, r); r = r + 10; c = c + 1; } getch(); }
مثال 8: برنامه ای بنویسید که تا دریافت یک ورودی خاص، از ورودی کاراکتر دریافت کند و همان کاراکتر را چاپ کند.
main() { char c; cout << "Please enter one character, $ for terminate ... " << endl; cin >> c; while(c != '$') { cout << c << endl; cin >> c; } getch(); }
مثال 9: برنامه ای بنویسید که مقسوم علیه های یک عدد را چاپ کند:
main() { int num, sum, i = 1; cout << "Please enter a number" << endl; cin >> num; while(i <= num) { if(num % i == 0) cout << i << "\t"; i++; } getch(); }
مثال 10: برنامه ای بنویسید که مجموع مقسوم علیه های یک عدد را چاپ کند:
main() { int num, sum, i = 1; cout << "Please enter a number" << endl; cin >> num; sum = 0; while(i <= num) { if(num % i == 0) sum = sum + i; i++; } cout << "sum is " << sum; getch(); }
مثال 11: برنامه ای بنویسید که تعداد مقسوم علیه های یک عدد را چاپ کند:
main() { int num, sum, i = 1; cout << "Please enter a number" << endl; cin >> num; sum = 0; while(i <= num) { if(num % i == 0) sum = sum + 1; i++; } cout << "sum is " << sum; getch(); }
مثال 12: برنامه ای بنویسید که اول بودن یا نبودن یک عدد را اعلام کند:
main() { int num, sum, i = 1; cout << "Please enter a number" << endl; cin >> num; sum = 0; while(i <= num) { if(num % i == 0) sum = sum + 1; i++; } if(sum == 2) cout << "aval"; else cout << "morakab"; getch(); }
main() { int num, sum, i = 1; cout << "Please enter a number" << endl; cin >> num; sum = 0; while(i <= num) { if(num % i == 0) sum = sum + i; i++; } if(sum == 2 * num) cout << "Kamel"; else cout << "Kamel nist"; getch(); }
مثال 14: برنامه ای بنویسید که یک عدد را بدون محدودیت در تعداد ارقام، از ورودی گرفته و مجموع ارقام را چاپ کند:
main() { int num; cout << "Please enter one number: " << endl; cin >> num; int sum = 0, b; while(num > 0) { b = num % 10; sum = sum + b; num = num / 10; } cout << "The sum of your number is : " << sum; getch(); }
مثال 15: برنامه ای بنویسید که یک عدد را بدون محدودیت در تعداد ارقام، از ورودی گرفته و معکوس عدد( یا متقارن) را چاپ کند:
main() { int num; cout << "Please enter one number: " << endl; cin >> num; int revnum = 0, b; while(num > 0) { b = num % 10; revnum = revnum * 10 + b; num = num / 10; } cout << "The reverse of your number is : " << revnum << endl; getch(); }
مثال 16: برنامه ای بنویسید که یک عدد را از ورودی بگیرد و تعداد ارقام آن را محاسبه و اعلام کند:
main() { int num; cout << "Please enter one number: " << endl; cin >> num; int sum = 0; while(num > 0) { num = num / 10; sum++; } cout << "This number has " << sum << " digits" << endl; getch(); }
مثال 17- برنامه ای بنویسید که یک عدد را از ورودی گرفته و مجموع ارقام در جایگاه زوج آن عدد را چاپ کند:
main() { int num; cout << "Please enter one number: " << endl; cin >> num; int sum = 0, b; num = num / 10; while(num > 0) { b = num % 10; sum = sum + b; num = num / 100; } cout << "The sum of your number's even digits is : " << sum; getch(); }
مثال 18- برنامه ای بنویسید که 100 عدد را از ورودی بگیرد و معدل این اعداد را اعلام کند:
main() { int num; int sum = 0, c = 100; cout << "Please enter your numbers: " << endl; while(c > 0) { cin >> num; sum = sum + num; c--; } cout << "Sum of your number is " << sum << endl; getch(); }
مثال 19- برنامه ای بنویسید که تا دریافت عدد 1- از ورودی عدد مثبت بگیرد و پس از دریافت عدد 1- بدون احتساب خود عدد 1-، معدل اعداد وارد شده را اعلام کند:
main() { int num; double sum = 0, c = 0; cout << "Please enter your numbers: " << endl; cin >> num; while(num != -1) { sum = sum + num; c++; cin >> num; } cout << "Average of your numberس is " << sum / c << endl; getch(); }
مثال 20- برنامه ای بنویسید که تا دریافت عدد 1- از ورودی عدد مثبت بگیرد و پس از دریافت عدد 1- بدون احتساب خود عدد 1-، تعداد اعداد وارد شده را اعلام کند:
main() { int num; int c = 0; cout << "Please enter your numbers: " << endl; cin >> num; while(num != -1) { c++; cin >> num; } cout << "You have entered " << c << " numbers" << endl; getch(); }
مثال 21- برنامه ای بنویسید که تا دریافت عدد 1- از ورودی عدد مثبت بگیرد و پس از دریافت عدد -1 بدون احتساب خود عدد 1-، ماکزیمم اعداد وارد شده را اعلام کند:
main() { int num; cout << "Please enter your numbers: " << endl; cin >> num; int max = num; while(num != -1) { if(num > max) max=num; cin >> num; } cout << "Maximum of the entered numbers is " << max << endl; getch(); }
مثال 22- برنامه ای بنویسید که تا دریافت عدد 1- از ورودی عدد مثبت بگیرد و پس از دریافت عدد 1- بدون احتساب خود عدد 1-، دو ماکزیمم بالاتر اعداد وارد شده را اعلام کند:
main() { int num, max1, max2, t; cout << "please enter your numbers: " << endl; cin >> max1 >> max2; if(max2 > max1 && max2 != -1 && max1 != -1) { t = max1; max1 = max2; max2 = t; } cin >> num; while(num != -1) { if(num > max1) { max2 = max1; max1 = num; } else if(num > max2) max2 = num; cin >> num; } cout << "First maximum of the entered numbers is " << max1 << "\n and the second maximum is " << max2; getch(); }
مثال 23- برنامه ای بنویسید که 10 کاراکتر را از ورودی گرفته و تعداد کاراکترهای حروف صدادار را بشمرد:
main() { int c = 10, count = 0; char ch; cout << "Please enter ten characters ... "; while(c > 0) { cin >> ch; if(ch == 'a' || ch == 'u' || ch == 'i' || ch == 'o' || ch == 'e') count++; c--; } cout << count; getch(); }
مثال 24: برنامه ای بنویسید که دو عدد را از ورودی گرفته و ب.م.م آنها را چاپ کند:
main() { int a, b; cout << "Please enter 2 numbers: " << endl; cin >> a >> b; int c = 0; while(b != 0) { c = a % b; a = b; b = c; } cout << "B.M.M= " << a << endl; getch(); }
مثال 25: برنامه ای بنویسید که دو عدد را از ورودی گرفته و ک.م.م آنها را چاپ کند:
main() { int a, b; cout << "Please enter 2 numbers: " << endl; cin >> a >> b; int c = 0; int k = a * b; while(b != 0) { c = a % b; a = b; b = c; } cout << "K.M.M= " << k / a << endl; getch(); }
مثال 26- برنامه ای بنویسید که عدد n را از کاربر بگیرد و جمله n ام سری فیبوناچی را اعلام کند:
... , f: 1 , 1 , 2 , 3 , 5 , 8, 13 سری فیبوناچی
main() { int n; cout << "Please enter a number ... " ; cin >> n; if(n < 0) cout << " I'm sorry, What?! ... "; else if(n == 1 || n == 2) cout << "1"; else { int a = 1, b = 1, c; n = n - 2; while(n > 0) { c = a + b; a = b; b = c; n--; } cout << c; } getch(); }
مثال 27- برنامه ای بنویسید که یک عدد در مبنای 10 را از ورودی گرفته و آن را به مبنای دو ببرد:
main() { double f = 0, s = 0; int a, n; cout << "Please enter a number ... " ; cin >> n; while(n > 0) { a = n % 2; s = s + a * pow(10, f); f++; n = n / 2; } int m = 0; while(s > 0) { a = s % 10; m = m * 10 + a; m = m / 10; } cout << m; getch(); }
در برنامه ی بالا اگر متغیر f و s را از نوع ممیزی انتخاب نکنیم چه اتفاقی رخ خواهد داد؟ در این مورد فکر کنید .
سلام خانوم،خانوم ما برنامه فاکتوریل ناقص رو وارد سی++ کردیم اما نه ارور میده عمل میکنه مشکل چیه؟