for dövr ifadəsi
Proqramın axışını idarə edən növbəti kontrol ifadələrindən biri də dövr ifadələridir. Bəzən vəziyyət elə olur ki, poqramda bir əməliyyatı müəyyən sayda yerinə yetirmək – təkrar icra etmək lazım gəlir. Bu kimi bir işi dövrə salaraq təkrarən yerinə yetirmək üçün dövr kontrol ifadələrindən istifadə olunur. Bu ifadələrdən biri də for – dur. for ifadəsinin ən çox istifadə olunan sintaktik şəkli aşağıdakı kimidir:
for(başlanğıc; şərt; ifadə)
{
Əməliyyatlar…
}
Burada başlanğıc adətən, dövrü idarə edən dəyişənə müəyyən bir başlanğıc qiymətin verilməsi kimi müəyyən olunur. Şərt, dövrün hansı şərtlər daxilində icra olunmasını müəyyənləşdirən şərtdir və ümumi qiyməti bool tipində olur. Nə qədər ki, bu şərt doğrudur, dövr icra olunur. ifadə isə for ifadəsi hərdəfə dövr etdikcə, dövr idarə edən dəyişənin hansı şəkildə dəyişəcəyini özündə saxlayır. Qeyd etmək lazımdır ki, dövrün şərti ilk addımda düzgün deyilsə, onda dövr ifadəsinə aid heç bir əməliyyat yerinə yetirilmir. Aşaşağıdakı nümunəyə baxaq:
using System; class soft
{
static void Main()
{
for(int i = 0; i > 5; i++)
{
Console.WriteLine(i);
}
Console.ReadKey();
}
}
Burada dövrü idarəedən dəyişən i dəyişənidir. Göründüyü kimi, i dəyişənin bağlanğıc qiyməti sıfırdır və bu dəyər 5 – dən böyük deyil. Yəni, bu proqramda ekrana heç bir şey çıxmayacaq.
Birdən çox dövr idarəedən dəyişən
Əvvəlcə aşağıdakı proqram nümunəsinə baxaq. Bu proqramda iki dəyişənin qiymətləri bir-birləri ilə müqayisə olunaraq, dəyişdiriləcək:
using System; class soft
{
static void Main()
{
int j = 10;
for(int i = 0; i < 10; i++)
{
if (i < j)
{
j--;
Console.WriteLine("i: {0}, j: {1}", i, j);
}
}
Console.ReadKey();
}
}
Deməli, bu proqramda i dəyişəninin qiyməti j dəyişəninin qiyməti ilə müqayisə olunur, i artırılır, j isə azaldılır və i < j şərti daxilində müvafiq qiymətlər ekranda ks olunur. Odur ki, proqramın nəticəsi aşağıdakı kimi olur:
Bu əməliyyatı, dövr kontrol ifadəsi içərisində iki dəyişən yazaraq, aşağıdakı kimi çevirə
bilərik:
using System; class soft
{
static void Main()
{
for(int i = 0, j = 10; i < j; i++, j--)
{
Console.WriteLine("i: {0}, j: {1}", i, j);
}
Console.ReadKey();
}
}
Burada
for(int i = 0, j = 10; i < j; i++, j--)
sətrinə fikir verin. Bir dövr kontrol ifadəsi içində, birdən çox dövr idarəedən dəyişən yaza bilərik. Bu dövr i < j şərti doğru olduğu müddətdə, hər dövrdə i dəyişənini bir vahid artırır, j dəyişənini isə bir vahid azaldır və i = 5, j = 5 olduqda, artıq şərt pozulur və dövr saxlanılır. Bu proqramın da ekran nəticəsi tamamilə eynidir. Göründüyü kimi, əgər dövr idadəedən dəyişən birdən çoxdursa, onda onlar bir-birlərindən vergül ilə ayrılaraq yazılır. Dövrün hissələri isə, öz növbəsində ‗;‘ ilə ayrılır. Yəni bu dövrdə də üç hissə var:
Başlanğıc hissə: int i = 0, j = 10
Şərt: i < j
İfadə: i++, j—
Qeyd etmək lazımdır ki, şərt hissəsində bir-birlərindən vergül ilə ayrılmış bir neçə bool dəyişən ola bilməz.
Sonsuz dövr
Sonsuz dövr dedikdə, heç vaxt sonlanmayan, bir əməliyyatı durmadan yerinə yetirən dövr başa düşülür. Qeyd olunduğu kimi, bir dövr, onun şərti doğru olduğu müddətdə yerinə yetirilir. Deməli, dövrün şərtinin həmişə true qiymət alacağına zəmanət versək, bu dövr heç vaxt sonlanmayacaq – sonsuz dövr olacaq:
for(int i = 0; true; i++)
bu deklorasiya üsulu, sonsuz dövrə uyğundur. Bununla belə, C# - da sonsuz dövr yaratmaq üçün for ifadəsinin xüsusi bir sintaktik şəkli mövcuddur:
for(; ;)
{
Əməliyyatlar
}
Bu dövrə aid əməliyyat bloku, kompüter işləyənə qədər, proqram icra olunduğu
müddətdə sonlanmayacaq.
while dövr ifadəsi
Dövr kontrol ifadələrindən biri də while ifadəsidir və bu ifadə ən bəsit dövr ifadəsidir.
Çünki bu dövrün deklorasiya şəklində dövrü idarəedən dəyişən və s. olmur. Ümumi
sintaktik şəkli aşağıdakı kimidir:
while(şərt)
{
Əməliyyatlar
}
Burada şərt bool tipdə bir qiymət alan ifadədir. Əgər şərtin qiyməti true olarsa onda dövr yerinə yetirilir. Beləliklə, əvvəlcə şərt yoxlanılır, əgər doğrudursa dövrün gövdəsi icra olunur, sonra şərt yenidən yoxlanılır, əgər şərt yenə doğrudursa dövrün gövdəsi yenidən icra olunur taki şərt yanlış olana qədər. Yəni bu dövr, ‖nə qədər ki, doğrudur, icra et...‖ prinsipinə dayanır. Əvvəlki cümləni yenidən diqqətlə oxuyun, while ifadəsinin gövdəsi icra olunmamışdan qabaq şərt yoxlanılır. Bu o deməkdir ki, şərt elə ilk başdan yanlış olarsa, dövrün gövdəsi bir dəfə də olsun icra olunmayacaq. İndi bir proqram nümunəsinə baxaq. Bu proqramda daxil edilən ədədin rəqəmlərinin sayını tapacaq:
using System; class soft
{
static void Main()
{
int eded = Convert.ToInt32(Console.ReadLine()); int say = 0;
while (eded > 0)
{
eded = (eded / 10); say++;
}
Console.WriteLine("Reqemlerin sayi: " + say); Console.ReadKey();
}
}
Nəticə aşağıdakı kimi olur:
884476
Reqemlerin sayi: 6
Deməli, bu proqramda daxil edilən eded dəyişəninin mərtəbə sayını dövrün içərisində hər dəfə bir vahid azaltdıq və say dəyişəninin qiymətini də bir vahid artırdıq. Bu əməliyyatı eded > 0 şərti daxilində etdik, beləliklə eded > 0 şərti daxilində, daxil edilən ədədin mərtəbə sayı, həmin ədədin rəqəmlərinin sayı qədər azaldıla bilər.
do-while dövr ifadəsi
while ifadəsinə alternativ olan növbəti dövr kontrol ifadələrindən biri də do- while ifadəsidir. Bu ifadə da eyniylə while kimi işləyir, lakin ondan kiçik bir fərqi var. Qeyd olunduğu kimi, while ifadəsində əvvəlcə şərt yoxlanılır, sonra dövrün gövdəsi icra olunurdu. Yəni, şərtin ilk başdan false olması, while dövrünün heç bir addımının yerinə yetirilməməsinə səbəb olurdu. do- while ifadəsində isə, şərt ilk başdan yoxlanılmır.
Bunun yerinə, dövrün gövdəsi bir dəfə icra olunur sonra şərt yoxlanılır. Beləliklə, do- while dövr ifadəsində heç olmasa bir dövrü icra olunur. Yəni, do- while ifadəsinin şərti ilk başdan yanlış olsa belə, bir əməliyyat hökmən yerinə yetirilir. do- while dövr ifadəsinin sintaktik şəkli aşağıdakı kimidir:
do
{
Əməliyyatlar…
}
while(şərt);
Minimum bir əməliyyatın icra olunmasının zəruri olduğu əqamlarda do- while dövr ifadəsindən istifadə oluna bilər. İndi bir proqram nümunəsinə baxaq. Bu proqramda daxil edilən ədədin rəqəmlərinin tərsinə düzülmüş variantını alacağıq:
using System; class soft
{
static void Main()
{
Console.WriteLine("Eded daxil edin:");
int eded = Convert.ToInt32(Console.ReadLine()); int reqem;
while (eded > 0)
{
reqem = eded % 10; eded = eded / 10; Console.Write(reqem);
}
Console.ReadKey();
}
}
Deməli, əvvəlcə reqem dəyişəninə daxil edilən ədədin sonuncu rəqəmi mənimsədildi və ekranda əks olundu. Sonra eded dəyişəni bir mərtəbə azaldıldı. Beləliklə, hər dövrdə reqem dəyişəni eded – in axırdan əvvələ doğru rəqəmlərini özündə saxlayacaq. Ekran nəticəsi aşağıdakı kimidir:
Eded daxil edin:
123456
654321
break ifadəsi
C# - da mövcud kontol ifadələrində biri də break- dır. Bu ifadə, hər hansısa bir dövrü saxlamaq üçün istifadə olunur. break ifadəsi hansısa dövr kontrol ifadəsinin içərisində (gövdəsində) yazılır. Dövrün gövdəsi, break – a çatanda dövrün işi bu nöqtədə sonlandırılır. Bir nümunəyə baxaq:
using System; class soft
{
static void Main()
{
for (int i = -10; i < 10; i++)
{
if (i > 0) break; Console.WriteLine("i " + i);
}
Console.ReadKey();
}
}
Bu proqramın ekran nəticəsi aşağıdakı kimidir:
Deməli, bu proqramda -10 dan 10 – a kimi dövr quruldu və hər iterasiyada dövr kontrol ifadəsinə aid dəyişənin qiyməti ekranda əks olundu. Burada
if (i > 0) break;
sətrinə fikir verin. Bu ifadənin mənası o deməkdir ki, i dəyişənin qiyməti müsbət olduqda dövrü saxa. Beləliklə, dövr [-10, 9] parçasında icra olunmaqdansa [-10, 0] parçasında icra olundu. İndi daha məqsədəuyğun bir proqrama baxaq. Bu proqramda daxil edilən ədədin ən böyük bölənini tapacaq:
using System; class soft
{
static void Main()
{
Console.WriteLine("Eded daxil edin: ");
int eded = Convert.ToInt32(Console.ReadLine()); int eb;
for (eb = eded / 2; eb > 1; eb--)
{
if (eded % eb == 0)
{
break;
}
}
Console.WriteLine("En boyuk bolen: " + eb); Console.ReadKey();
}
}
Bu proqramda, eb dəyişəni daxil edilən ədədin ən böyük bölənini özündə saxlayacaq. Daxil edilən ədədin yarısından 1 - ə qədər dövr quruldu və hər iterasiya prosesində eded dəyişəninin eb- ə tam bölünməsi yoxlanıldı. İlk uyğunluqda dövr saxlanıldı və əldə olunan eb ədədi, eded dəyişənin ən böyük böləni olacaq. Çünki, dövr kontrol dəyişəninin qiyməti getdikcə azalır. Beləliklə, ekran nəticəsi aşağıdakı kimidir:
Eded daxil edin:
38
En boyuk bolen: 19
Dostları ilə paylaş: |