Koşullu döngü deyimi - while


For döngüsünü incelerken, herhangi bir eylemin tekrar sayısı biliniyorsa, for döngüsü operatörünü kullanarak programı kısaltabileceğinizi söyledik. Peki ya tekrar sayısı bilinmiyorsa? Ve bu oldukça sık olur.
Örneğin, bir sayının ondalık sayı sisteminden herhangi bir başkasına dönüştürülmesini hatırlayalım: cevapta sıfır elde edene kadar sayıyı (ve ardından bölme sonucunu) sayı sisteminin tabanına bölmemiz gerekir. Daha kaç kez paylaşacağız bilinmez. Ve böyle bir algoritma uygulayan pek çok program var. 
Bu nasıl uygulanır?
Programlamada bu tür durumlar için koşullu bir döngü operatörü vardır. 
Pascal programlama dilinde bir koşullu döngü ifadesi while kelimesi ile başlar ve aşağıdaki yapıya sahiptir.
while <durum> başla
  döngü gövdesi
bitiş
Zaten bildiğimiz gibi:
- koşul, sonucu doğru veya yanlış olabilen bir ifadedir (koşullu ifadede olduğu gibi)
- döngü gövdesi tekrarlanması gereken komutlardır
- Döngü gövdesi yalnızca bir operatörden oluşuyorsa begin ve end atlanabilir

Operatör nasıl çalışır:
1. Program öncelikle while kelimesinden sonraki koşulu değerlendirir. Koşul karşılanırsa (true), program döngü gövdesinde bulunan ifadeleri yürütür.
2. for döngüsünde olduğu gibi, döngü gövdesi yalnızca bir ifade içeriyorsa, döngü gövdesini vurgulayan başlangıç ​​ve bitiş sözcükleri atlanabilir.
3. Döngü gövdesinin yürütülmesi tamamlandıktan sonra, program durumu kontrol etmek için geri döner ve tekrar kontrol eder.
4. Bu işlemler (koşulun kontrol edilmesi - döngü gövdesinin çalıştırılması), koşul yanlış olana kadar tekrarlanır.
5. Bu operatörün ilk çalıştırılmasında koşul hemen karşılanmazsa (yanlış), program hiçbir zaman döngü gövdesini yürütmez.

Bu operatörün çalışması analiz edildiğinde, döngü gövdesinin koşulu etkileyen bir operatör içermesi gerektiği anlaşılmalıdır.
Örneğin, bir döngü, bir koşulda kullanılan bir değişkenin değerini artırabilir.

"Sessiz sayım"
olarak adlandıracağımız bir program örneği Programı bizim yerimize saydıralım mesela 10'a kadar.
Program, "Başlat" ifadesini vermelidir. ve "Bitti" ve bu işlemler arasında hesaplanmakta olan sayıları görüntüler.
Bunun gibi 
Başlat
1 2 3 4 5 6 7 8 9 10
Bitir
While döngüsü kullanan bir program şöyle görünür.
var i: tamsayı;
başlamak
    writeln('Başlat');
    ben := 1;
    i <= 10 iken başlar
        yaz(i, ' ');
        ben += 1; //Koşuldaki değişkenin değişimini etkileyen operatör    
    son;
    writeln();
    writeln('Bitti');
bitiş.
Bu programda i := 1 - orijin
değişkenine bir değer atadık. Ayrıca, i değişkeninin değeri ihtiyacımız olan değerden büyük (yani küçük veya ona eşit) olmadığı sürece, biz 
 1 - i 
değişkeninin değerini göster  2 - i değişkeninin değerini 1 artır - bu operatör, koşulun parantez içindeki değerini etkiler. i değişkeni artırılır, yani bir noktada i<=10 koşulu yanlış olur. Bu, i 11'e eşit olduğunda gerçekleşir. Bu durumda, döngü gövdesi artık yürütülmez ve program döngüden sonraki bir sonraki ifadeyi yürütür, yani. writeln();
writeln('Bitir');

Aşağıdaki problemi çözmek için bir program yazmaya çalışalım:

Bir sayı girmeli (3.000.000'den küçük olsun) ve içindeki basamak sayısını belirlemelisiniz.

Çözüm fikri


Bir sayının basamaklarını saymaya başlayalım. Başlangıçta sayaç 0'dır. Sadece sayıdan son basamağı sırayla kesmemiz gerekir (bu, tamsayıyı 10'a bölerek sayıyı 10 kez azaltarak yapılabilir) ve her seferinde sayacı artırmamız gerekir. 1. 
Sonuç olarak sayaçtaki tüm rakamları kestikten sonra sayının basamak sayısını elde ederiz.
Başka bir şekilde, algoritma şu şekilde formüle edilebilir:
SAYI SIFIR DEĞİLENE KADAR 10 KAT AZALTIN ​​ve SAYACI 1 ARTIRIN. sayı (n) sayaç Program böyle görünecek.
var n, sayım: tamsayı;
başlamak
    oku(n);
    sayı := 0;
    iken n <> 0 başlamak için
        saymak += 1;
        n := n böl 10;
    son;
    writeln('Sayı - ', n, ' içerir ', say, ' basamak');
son.
Bu programı ezbere bilmeniz gerekiyor, çünkü. temelde, sayıların rakamlarla hesaplanmasıyla ilgili diğer birçok problem çözülmüştür.

123 0
12 1
1 2
0 3

Görev

Programın girdisi, veri akışıdır — sıfırla biten bir tam sayı dizisi (sıfır diziye dahil değildir). Bu dizinin elemanlarının toplamını bulmanız gerekir.
 
Algoritmayı çözme
 toplam=0
 x girişi // ilk sayıyı girin
 x != 0 // koşulda giriş bitiş işareti ayarlanırken,
 nc // yani siz sıfır girene kadar
   toplam = toplam + x // orijinal sayıyla bir şeyler yapabilirsiniz.
                  // Bazı koşullar vb. için bir sayı kontrolü ekleyebilirsiniz.
   x girin // sonraki sayıyı girin
 kts
 toplamı yazdır // sonuç çıktısı