Pascal döngü operatörleri şunlardır: Pascal dili operatörleri. While veya önkoşullu döngü

  • 31.10.2019

Sorunların büyük çoğunluğunu çözerken (çok basit olanlar dahil), yapılması gereken tüm işlemleri bir programda açıkça belirtmek neredeyse imkansızdır. Aslında harmonik serinin ilk n teriminin toplamını hesaplamak gerekli olsun:

Y= 1+ 1/2+ 1/3 + …+ 1/ n

Yalnızca yukarıda tartışılan operatör türlerini kullanarak, yalnızca sabit bir n değeri için bir program oluşturmanın mümkün olduğu açıktır. Örneğin, n=5 olduğunda gerekli hesaplamalar aşağıdaki formun atama operatörü kullanılarak belirtilebilir:

Y:= 1+1/2+1/3+1/4+1/5

Eğer n değeri sabit değilse ve programın yürütülmesi sırasında girilen ilk veriyse (ve hatta programda açıklanan bir sabitse), bu durumda benzer bir atama operatörü yazılamaz. Çünkü programlama dillerinde Y:= 1+1/2+1/3+…+1/ n şeklinde bir gösterim kabul edilemez.

Ortaya çıkan zorlukları ortadan kaldırmak için kullanılırlar döngü ifadeleri. Programın ayrı ayrı bölümlerinin yürütülmesini tekrarlamanıza izin verirler. Dört tane var döngü operatörü, tüm programlama dillerinde şu veya bu biçimde bulunur: basit aritmetik döngü operatörü(adım 1'deki parametreli döngü), karmaşık aritmetik döngü operatörü(isteğe bağlı adım parametreli döngü), ön koşullu yinelemeli döngü operatörü, sonkoşullu yinelemeli döngü operatörü.

Basit Pascal döngüsü aritmetik operatörü (parametreli döngü)

Yukarıda tartışılan, n'nin değeri önceden sabitlenmemişse kuralları aritmetik bir ifade biçiminde belirlenemeyen bir harmonik serinin ilk n teriminin toplamını hesaplama sorununa dönelim.

Aslında, bu toplamın hesaplanması çok basit ve kompakt bir algoritma kullanılarak yapılabilir: önce y=0'ı ayarlayın (atama operatörünü y:=0 kullanarak) ve ardından atama operatörünü y:= y+1/ i'yi çalıştırın. ardışık değerler i= 1 ,2,…, n. Bu operatör her çalıştırıldığında, bir sonraki terim y'nin mevcut değerine eklenecektir. Gördüğünüz gibi bu durumda hesaplama süreci döngüsel olacaktır: operatör y:= y+1/i tekrar tekrar yürütülmelidir, yani döngüsel olarak, i'nin farklı değerleri için.

Döngüsel hesaplama sürecinin bu örneği oldukça tipiktir; karakteristik özellikleri şu şekildedir

  • döngünün tekrar sayısı, yürütmenin başlangıcında bilinir (bu durumda, bu zamana kadar belirlendiği varsayılan n değerine eşittir);
  • döngü, bu döngüsel süreçte belirli bir başlangıçtan belirli bir son değere kadar sıralı değerler alan sıralı tipte bir değişken kullanılarak kontrol edilir (bizim durumumuzda bu, 1'den 1'e kadar sıralı değerler alan bir tamsayı değişkenidir. N).

Bu tür hesaplamalı süreçlerin kompakt bir görevi için hizmet eder parametreli döngü operatörü. Bu operatörün Pascal'da en sık kullanılan şekli:

V:= E1 ila E2 için S yapın,

Nerede için(İçin), ile(artan) ve Yapmak(gerçekleştir, yap) – işlev sözcükleri, V– döngü parametresi olarak adlandırılan sıralı tipte bir değişken, E1 Ve E2– döngü parametresiyle aynı türden ifadeler, S– döngünün gövdesi olarak adlandırılan, bir döngüde tekrar tekrar yürütülen bir operatör.

Pascal'da şunu unutmayın: Yapmak bir operatör olmalıdır; birden fazla eylemin gerçekleştirilmesi gerekiyorsa, bunlar operatör parantezleri içine alınarak tek bir bileşik operatörde birleştirilmelidir.

Bu Pascal döngü operatörü, döngü parametresi V'yi, E1 ifadesinin değerine eşit başlangıç ​​​​değerinden E2 ifadesinin değerine eşit son değere kadar ardışık değerler atar, yani. her tekrar atama operatörünü çalıştırır V:=succ(V) ve döngü parametresi V'nin her değeri için S operatörünün yürütülmesi. Bu durumda, E1 ve E2 ifadelerinin değerleri döngü operatörüne girildikten sonra bir kez hesaplanır ve döngü parametresi V'nin değeri hesaplanmamalıdır. S operatörünün yürütülmesinin bir sonucu olarak değişiklik. Belirtilen son değer, başlangıç ​​​​değerinden küçükse (ki bu kabul edilebilir), o zaman S operatörü bir kez bile çalıştırılmaz.

Pascal'da, bir döngü ifadesinin normal tamamlanması üzerine döngü parametresinin değerinin tanımsız olduğu varsayılır.

Kullanma parametreli döngü operatörü Harmonik serinin ilk n teriminin toplamını hesaplamak için kullanılan algoritma şu şekilde belirtilebilir:

Harmonik serinin ilk n terimini toplamak için örnek program kodu

Readln(n);
Y:= 0;
i:= 1'den n'ye kadar y:= y+1/i;

Bazı durumlarda Pascal döngü parametresinin sıralı ancak artan değil azalan değerler alması uygundur. Bu gibi durumlarda Pascal, aşağıdaki biçimdeki bir parametreyi içeren bir döngü operatörü sağlar:

V:= E1'den E2'ye kadar S yapın,

Nerede aşağı(k azalan) bir hizmet kelimesidir ve diğer tüm kelime ve ifadeler aynı anlama gelir. Döngü parametresinin daha büyük bir değerden daha küçük bir değere değiştirilmesi V:=pred(V) ataması gerçekleştirildiğinde gerçekleşir. Başlangıç ​​değerinin nihai değerden küçük olabileceğini unutmayın. Bu durumda S operatörü bir kez bile çalıştırılmayacaktır. Böyle bir döngünün tamamlanmasının ardından döngü parametresinin değeri de tanımsız olarak kabul edilir.

Ayrıca her iki kayıt seçeneği için de unutulmamalıdır. parametreli döngü doğru: başlangıç ​​ve son değerler eşitse, döngünün gövdesi (S operatörü) bir kez çalıştırılacaktır.

Şunu da belirtelim döngü parametresi döngünün gövdesinde kullanılamaz, dolayısıyla asıl amacı döngünün tekrar sayısını kontrol etmektir. Örneğin, n>=0'ın bir tam sayı olduğu y= x n değeri aşağıdaki algoritma kullanılarak hesaplanabilir: önce y=1 olarak ayarlayın ve ardından bu değeri n kez x ile çarpın:

Örnek Pascal Döngü Program Kodu

Readln(n);
Readln(x);
Y:= 1;
i:= 1'den n'ye kadar y:= y*x;

Gördüğünüz gibi burada i döngü parametresi yalnızca döngünün gövdesinin (y:= y* x operatörü) gereken sayıda yürütülmesini sağlamaya yarar.

Rastgele adımlı aritmetik Pascal döngü operatörü

Pascal'ın basit aritmetik döngüsünün doğal bir komplikasyonu, döngü parametresinin 1 değil keyfi bir değerle değiştirildiği bir döngüdür - artış adımı. Bu durumda döngünün yürütülmesi sırasında adım belirli bir yasaya göre değişir. Forth'ta böyle bir döngüyü uygulamak için standart operatörler vardır; diğer dillerde bunların basit bir aritmetik döngüden düzenlenmesi gerekir.

Yinelemeli Pascal Döngü Operatörleri

Yinelemeli döngüler, içlerindeki tekrar sayısının önceden bilinmemesi nedeniyle parametreli döngülerden farklıdır.

Mantar toplayalım, sepet dolduğunda eve dönelim. Tüm mantar toplayıcılar 2 kategoriye ayrılır:

  • Sepette yer olup olmadığına bakarlar ve ancak o zaman sepete yerleştirilebilecek mantarları toplarlar. (Doğru, hayatımda bu kadar mantar toplayıcılarla hiç tanışmadım)
  • Önce mantarları toplarlar ve ancak o zaman onları sepete nasıl koyacaklarını düşünürler.

Bu bize yinelemeli döngüleri uygulamak için iki seçenek sunar:
önkoşul ve sonkoşul ile.

Önkoşul döngüsünde öncelikle koşul kontrol edilir ve ardından bir adım atılır. Mantar toplayıcı dolu veya neredeyse dolu bir sepetle birlikte gelecektir. Son koşulu olan bir döngüde - önce bir adım, sonra bir kontrol. Herhangi bir normal mantar toplayıcı gibi, bu da dolu veya biraz fazla doldurulmuş bir sepet getirecektir.

Hangi algoritmayı seçmelisiniz? Belirli göreve bağlıdır.

Kontrol etmeden bir adım attıktan sonra bir deliğe düşebilirseniz, önce kontrol etmek daha iyidir (kör bir adamın sopasıyla yaptığı gibi). Doğrulamasız adım sizi korkutmuyorsa, adım tamamlanana kadar erteleyebilirsiniz.

Beklediğimiz olayı da analiz etmemiz gerekiyor. İlk adımdan önce gerçekleşebilirse, önkoşulu olan bir döngüye ihtiyaç vardır. Ve eğer olay ilk adımdan önce gerçekleşemiyorsa, o zaman son koşulu olan bir döngüye ihtiyaç vardır.

Sonkoşullu Pascal döngü operatörü

Şimdi bir matematik problemini ele alalım. 0 olmak üzere 1/i>= e koşulunu sağlayan harmonik serinin ilk terimlerinin toplamını hesaplamamız gerekiyor.< e<1, а i=1,2,3…...Эту задачу можно решить по следующему алгоритму: положить предварительно y=0 и i=0, а затем в цикле увеличивать i на 1, к значению y добавлять очередное слагаемое 1/ i до тех пор, пока текущее значение 1/ i впервые окажется больше заданного значения 0< e<1.

Açıkçası, bu döngünün tekrar sayısı önceden bilinmemektedir. Bu gibi durumlarda, yalnızca bir sonraki terimi toplama ekleme işleminin tamamlanması gereken bir koşul formüle edebiliriz.

Bu tür hesaplamalı süreçleri belirtmek için bir sonkoşullu Pascal döngü operatörü kullanılır. Bu operatör şuna benzer:

S1'i tekrarlayın; S2;…; Si B'ye kadar,

Nerede tekrarlamak(tekrar) ve değin(to) – işlev sözcükleri, aracılığıyla Si herhangi bir Pascal operatörünü belirtir ve İÇİNDE– mantıksal ifade.

Bu döngü deyimi çalıştırıldığında, Repeat ve Until sözcükleri arasındaki deyim dizisi bir veya daha fazla kez yürütülür. Bu süreç, belirli bir ifade dizisinin bir sonraki yürütülmesinden sonra mantıksal B ifadesinin (ilk kez) doğru olarak değerlendirilmesiyle sona erer. Böylece mantıksal B ifadesi kullanılarak döngü operatörünün yürütülmesinin tamamlanmasına yönelik koşul belirtilir. Bu durumda koşul, bir dizi operatör (döngü gövdesi) yürütüldükten sonra kontrol edildiğinden, bu döngü operatörüne sonkoşulu döngü operatörü adı verilir.

Bu tip Pascal döngüsü operatörünü kullanarak, belirli bir koşulu karşılayan bir harmonik serinin ilk terimlerinin toplanması problemi aşağıdaki şekilde uygulanabilir:

Readln(e);
ben:=0;
y:=0;
Tekrarlamak
ben:=i+1;
y:=y+1/i;
1/i tarihine kadar

Sonkoşullu döngü operatörünün, parametreli döngü operatöründen daha genel olduğuna dikkat edin; parametreli bir döngü kullanılarak tanımlanan herhangi bir döngüsel süreç, sonkoşullu bir döngü olarak temsil edilebilir. Tersi ifade doğru değildir. Örneğin, daha önce tartışılan bir harmonik serinin ilk n terimini sonkoşulu bir döngü operatörüyle toplama problemi şöyle görünecektir:

Sonkoşulu Pascal döngü operatörü için örnek kod

Readln(n);
ben:=0;
y:=0;
Tekrarlamak
ben:=i+1;
y:=y+1/i;
i>n'ye kadar;

Ön koşullu Pascal döngü operatörü

Sonkoşullu bir Pascal döngü operatörü durumunda, içerdiği operatör dizisi kesinlikle en az bir kez yürütülecektir. Bu arada, döngünün tekrarlama sayısının da önceden bilinmediği durumlarda, sıklıkla bu tür döngüsel süreçler vardır, ancak ilk verilerin belirli değerleri için döngüde sağlanan eylemler hiç gerçekleştirilmemelidir ve hatta bu eylemlerin tek başına yürütülmesi yanlış veya belirsiz sonuçlara yol açabilir.

Örneğin, bir M gerçek sayısı verilsin. 3 k> M olan, negatif olmayan en küçük tamsayı k'yı bulmanız gerekir. Bu problem aşağıdaki algoritma kullanılarak çözülebilir: ilk önce y=1 ve k=0'ı ayarlayın. ; daha sonra bir döngüde, y'nin değerini 3 ile çarpın ve k'nin değerini, y'nin mevcut değeri ilk kez M'nin değerinden büyük olana kadar 1 artırın. İlk bakışta, bir döngü operatörünü kullanabilirsiniz. sonkoşul burada:

Sonkoşulu Pascal döngü operatörü için örnek kod

Y:=1; k:=0;
Tekrarlamak
y:=y*3;
k:=k+1;
y>M'ye kadar;

Ancak M için bunu doğrulamak kolaydır.<1 будет получен неправильный результат k=1, тогда как должно быть получено k=0: в этом случае предварительно сформированное значение k=0 является окончательным результатом и действия, предусмотренные в цикле, выполняться не должны.

Bu tür hesaplamalı süreçleri belirlemek için, döngünün tekrar sayısının önceden bilinmediği ve döngüde öngörülen eylemlerin hiç gerçekleştirilemeyeceği durumlarda, ön koşullu bir döngü operatörü kullanılır. Bu döngü operatörü Pascal'da aşağıdaki forma sahiptir:

Nerede sırasında(Hoşçakal), Yapmak(yapmak, gerçekleştirmek) işlev sözcükleridir, İÇİNDE– mantıksal ifade, S- Şebeke. Burada S ifadesi sıfır veya daha fazla kez yürütülür, ancak sonraki her yürütmeden önce B ifadesinin değeri değerlendirilir ve S ifadesi yalnızca B ifadesinin değeri doğruysa yürütülür. Döngü ifadesi, B ifadesi ilk kez false olarak değerlendirildiğinde sona erer. B ifadesi ilk değerlendirme sırasında bu değeri alırsa S operatörü bir kez bile çalıştırılmayacaktır.

Ele aldığımız problemde herhangi bir M değeri için doğru k değeri şu şekilde elde edilebilir:

Pascal'ın ön koşullu döngü operatörü için örnek kod

Y:=1; k:=0;
Başlarken
y:=y*3;
k:=k+1;
Son;

Önkoşullu Pascal döngü operatörü en evrensel olarak kabul edilebilir; bu tür operatörleri kullanarak, döngü operatörleri tarafından tanımlanan bir parametre ve sonkoşulla tanımlanan döngüsel süreçleri de tanımlayabilirsiniz.

Not İyi bir çalışma tarzının farklılıkları ve özellikleri dikkate alınan döngüsel operatörlerle.

Ön koşullu döngü While (koşul doğruyken) Tekrar sonkoşulu döngü (koşul doğru olana kadar)
  • Döngüye başlamadan önce döngüye doğru girilebilmesi için döngü koşulunu kontrol eden değişkenlerin başlangıç ​​ayarları yapılmalıdır.
  • Döngünün gövdesi, belirli sayıda yinelemeden sonra döngünün sona ermesi için koşul değişkenlerini değiştiren operatörler içermelidir.
  • Döngü, koşul doğru olduğu sürece çalışır (Doğru iken)
  • Döngü, koşul yanlış olduğu sürece çalışır (Yanlış iken)
  • Koşul yanlış olduğunda döngü sona erer (Yanlış'tan önce)
  • Koşul doğru olduğunda döngü sona erer (True'dan önce)
  • Döngüye girerken koşulun başlangıç ​​değeri Yanlış ise döngü bir kez bile yürütülmeyebilir
  • Döngü en az bir kez çalıştırılmalıdır
  • Döngünün gövdesinde birden fazla ifadeyi çalıştırmanız gerekiyorsa, bileşik bir ifade kullanmanız gerekir.
  • Döngü gövdesindeki ifadelerin sayısına bakılmaksızın bileşik ifadenin kullanılması gerekli değildir.
Sayaçlı döngü (parametreli)
  • Başlıktan önce döngü sayacı değişkeninin ilk ayarı gerekli değildir
  • Döngü gövdesindeki başlıktaki değişkenlerin değerlerinin değiştirilmesine izin verilmez.
  • Döngü yinelemelerinin sayısı, alt ve üst sınırların değerleri ve artış adımıyla her zaman ve kesin olarak belirlenir.
  • Bir döngünün normal akışı, bir goto ifadesi veya Break ve Continue prosedürleri tarafından bozulabilir.
  • Döngü adımı sayaç değerini alt sınırdan üst sınıra ters yönde değiştirirse döngü bir kez bile çalışmayabilir

Bir döngüde yürütülen bir ifadenin kendisi de bir döngü olabilir. Bu her türlü döngü için geçerlidir. Sonuç olarak elde ederiz İç içe geçmiş döngüler. Bir parametreli iç içe döngüler örneğini kullanarak iç içe döngülerin çalışma mekanizmasını dikkate almak en uygunudur. Diyelim ki bir elektronik saatin çalışmasını 0 saat, 0 dakika, 0 saniyeden başlayarak tanımlamamız gerekiyor. Dakika değeri ancak saniyeler 0'dan 59'a kadar ardışık tüm değerleri geçtikten sonra 1'e eşit olacaktır. Saat, ancak dakikalar 0'dan 59'a kadar ardışık tüm değerleri geçtikten sonra değerini 1'e değiştirecektir. Böylece günün başından sonuna kadar tüm zaman değerlerinin çıktısı aşağıdaki program parçasıyla temsil edilebilir:

h:=0'dan 23'e kadar
m:=0'dan 59'a kadar
s:=0 ila 59 için şunu yapın
Writeln(h,":",m,":",s);

Pascal'da döngüsel yapıların uygulanmasının kolaylığı için dilin en son sürümlerinde operatörler tanıtıldı kırmak Ve devam etmek, döngülerin içinde kullanılır. Döngü kullanma olanaklarını genişletir ve programın yapısını geliştirir.

Döngü tamamlanana kadar döngünün gövdesini çalıştırırken, döngünün sonlandırılmasını gerektiren ek koşullar ortaya çıkabilir. Bu durumda döngü break komutu ile sonlandırılabilir.

Bir döngünün yürütülmesi sırasında, döngüyü tamamen durdurmadan döngüde sağlanan eylemlerin tamamının veya bir kısmının atlanmasının gerekli olduğu bir durum ortaya çıkabilir. Bunu yapmak için, kontrolü programda döngüyü sürdürme veya sonlandırma koşulunun kontrol edildiği noktaya aktaran devam operatörünü kullanın.

Sorunları çözerken aynı eylemleri birkaç kez veya birçok kez tekrarlamak gerekebilir. Programlamada birden fazla tekrarlanması gereken kod blokları özel yapılara sarılır. döngüler. Döngülerin bir başlığı ve gövdesi vardır. Başlık, döngünün gövdesinin ne kadar veya kaç kez yürütüleceğini belirler. Gövde, döngü başlığındaki ifadenin mantıksal gerçeği (Doğru, sıfır değil) döndürmesi durumunda yürütülen ifadeleri içerir. Gövdenin son talimatına ulaşıldıktan sonra uygulama akışı tekrar döngü başlığına döner. Döngü yürütme koşulu tekrar kontrol edilir. Sonuca bağlı olarak döngünün gövdesi ya tekrarlanır ya da yürütme akışı tüm döngüden sonraki bir sonraki ifadeye geçer.

Pascal programlama dilinde üç tür döngü yapısı vardır.

döngü için

For döngüsüne genellikle sayaç döngüsü denir. Bu döngü, tekrar sayısının döngü gövdesinde olup bitenlerle ilgili olmadığı durumlarda kullanılır. Onlar. tekrar sayısı önceden hesaplanabilir (her ne kadar hesaplanmasa da).

Döngü başlığı iki değeri belirtir. İlk değer, sayaç değişkeni olarak adlandırılan değişkene atanır ve yinelemelerin (tekrarlamaların) sayısının sayımı bu değerden başlar. Geri sayım her zaman bire eşit bir adımla ilerler. İkinci değer döngünün hangi sayaç değerinde durması gerektiğini belirtir. Başka bir deyişle döngünün yineleme sayısı, ikinci ve birinci değerlerin bir artısı arasındaki farkla belirlenir. Pascal'da döngü gövdesi sayacı değiştiren ifadeler içermemelidir.

For döngüsü iki biçimde gelir:

sayaç için: = final_value'ya değer do loop_body;

sayaç için: = final_value'ya kadar olan değer do loop_body;

Tezgah numaralandırılmış türlerden herhangi birinin (tamsayı, boolean, karakter, aralık, numaralandırma) bir değişkenidir. Başlangıç ​​ve bitiş değerleri yalnızca değerlerle değil, sayaç türüyle uyumlu veri türlerini döndüren ifadelerle de temsil edilebilir. Başlangıç ​​ve bitiş ifadesi arasında bir işlev sözcüğü belirtilmişse ile, daha sonra döngünün her adımında parametre değeri bir birim artacaktır. Belirtilmişse aşağı, parametre değeri bir azalacaktır.

Döngü yinelemelerinin sayısı için yürütülmeden önce kesin olarak bilinir, ancak programın tamamı yürütülmeden önce bilinmez. Aşağıdaki örnekte döngü yürütme sayısı kullanıcı tarafından belirlenmektedir. Değer bir değişkene atanır ve daha sonra döngü başlığında kullanılır. Ancak kullanıldığında döngü zaten tam olarak kaç kez yürütülmesi gerektiğini bilir.

"İşaret sayısı: ") );

readln(n);

for i : = 1'den n'ye yazın ("(*) " ) ; okuma sonu. döngü sırasında Döngü sırasında ön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse doğru

ise döngünün gövdesi yürütülür; Döngü YANLIŞ ön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse- o zaman hayır. Döngünün gövdesi yürütüldüğünde program akışı döngü başlığına geri döner. Gövde yürütme koşulu yeniden kontrol edilir (mantıksal ifadenin değeri bulunur). Döngünün gövdesi, mantıksal ifadenin döndürülme sayısı kadar yürütülür. Bu nedenle, döngünün başlığında görünen değişkenin değiştirilmesinin döngü gövdesinde sağlanması çok önemlidir, böylece bir gün bu durum kesinlikle ortaya çıkar.

. Aksi halde sözde "İşaret sayısı: " döngü<= n do begin write ("(*) " ) ; i : = i + 1 end ; readln end .

programlamadaki en sinir bozucu hatalardan biridir.

for i : = 1'den n'ye yazın ("(*) " ) ; okuma sonu. var i, n: tamsayı ; ön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse yazmaya başla (

) ); readln(n); ben := 1; okuma sonu. ben iken Döngü tekrar döngüsü ön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse başlıktaki Boolean ifadesi hemen döndürülürse bir kez bile yürütülemeyebilir

. Ancak bu durum her zaman kabul edilebilir olmayabilir. Boole ifadesinin ne döndürdüğüne bakılmaksızın bir döngünün gövdesinin en az bir kez çalıştırılması gerekir. Bu durumda, bir tekrarlama döngüsü kullanılır - son koşulu olan bir döngü.
Bir döngüde
tekrarlamak

Mantıksal ifade döngü gövdesinden sonra gelir. Üstelik döngüden farklı olarak

Farklı döngü türlerini kullanarak çözeceğimiz bir problemi ele alalım.

Görev 1. 1'den klavyeden girilen sayıya kadar tüm sayıları yazdırın.

While veya önkoşullu döngü

Muhtemelen başlıktan da anladığınız gibi, okuma sonu. durumun vücuttan önce geldiği bir döngüdür. Ayrıca döngünün gövdesi ancak ve ancak koşul sağlandığı takdirde yürütülür. Döngü; durum ortaya çıktığı anda ön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse

Şu formata sahipken:

okuma sonu. < условие> Yapmak<оператор 1>; (Güle güle...yap....)

Bu döngü yalnızca bir ifade için uygundur, ancak kodunuzda birden fazla ifade kullanmak istiyorsanız, bunları ifade parantezleri içine almalısınız – başlamak Ve son;.

Sorunun çözümü.

Program örneği_while; var i, N: tamsayı; (değişkenleri bildirin) begin i:= 1; ( i'yi 1'e ayarlayın) readln(N); (Son rakamı okuyun) ben<= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

Tekrarlama veya sonkoşullu bir döngü

Tekrarlamak- tamamen tersi okuma sonu.. Tekrarlamak durumun vücuttan sonra geldiği bir döngüdür. Ayrıca, ancak ve ancak koşulun sonucu olması durumunda yerine getirilir. ön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse;mantıksal ifade olur olmaz Döngü döngü yürütme durur.

Tekrarlama şu formata sahiptir:

readln(n);( tekrarlamak … )
<оператор 1>;
< оператор 2>;

değin(önce…) <условие>

Başlamak Ve son gerekli değil.

Sorunun çözümü.

Program örneği_tekrar; var i, N: tamsayı;( değişkenleri bildir) begin i:= 1; ( i'yi 1'e ayarlayın) readln(N); ( Son rakamı okuyun ) tekrarlayın (tekrardan sonra başlangıç ​​ve bitişe gerek yoktur) write(i, " "); (Çıktı i) Inc(i); (i'yi birer artırın.) i = N + 1'e kadar; (Örneğin i = 11 ve N = 10. Döngü duracağından koşul doğru olur.) sona erer.

For veya parametreli döngü

İçin gövdenin belirli sayıda çalıştırıldığı bir döngüdür.

Bu döngüyü kaydetmenin iki biçimi vardır:

İlk biçim

için<счетчик1> := <значение1>ile<конечное_значение>Yapmak<оператор1>;

<счетчик1>1 artacak.

<значение1>sayacın başlangıç ​​değeridir. Bir değişken veya bir sayı olabilir.
<конечное_значение>: değer olur olmaz<счетчик1>Daha çok olacak<конечное_значение>

Döngünün gövdesine birkaç ifade yazmanız gerekiyorsa şunu kullanın: başlamak Ve son.

VE<счетчик1>, Ve<конечное_значение>, Ve<значение1>- değişkenler bütün tip.

Çoğu zaman i değişkeni sayaç olarak kullanılır.

İkinci form

için<счетчик2> := <значение2>aşağı<конечное_значение>Yapmak<оператор1>;

Her yinelemeden sonra değer<счетчик2>1 oranında azalacaktır.

<значение2>sayacın başlangıç ​​değeridir.
<конечное_значение>: değer olur olmaz<счетчик2>küçülecek<конечное_значение>döngü yürütmesi duracaktır.

İki önemli not:

  1. Sayaç değeri [değer; final_value].
  2. Gövde içindeki sayaç değerini değiştirme yasaktır! Derleyicinin çıktısı budur:

Sorunun çözümü:

Program örneği_için; var i, N: tamsayı; okumaya başla(N); (10 girdiğimizi varsayarsak) for i:= 1'den N'ye do write(i, " "); (yineleme sayısı - 10 - 1 + 1 = 10) biter.

Katılıyorum, bu kod öncekilerin hepsinden daha basit ve daha özlü. Ve döngü içinçok sıradan bir döngü değil; mantıksal bir koşulu yok. Bu nedenle programlamada parametreli bir döngüye sözdizimsel şeker adı verilir. Sözdizimsel şeker, bir programlama dilinin sözdizimine yeni özellikler eklemeyen, ancak dili insanların kullanımı için daha uygun hale getiren eklemelerdir.

Birkaç problemi çözelim.

1 için. Verilen K ve N tam sayıları (N > 0). Sayıyı K N kez yazdırın.

1'den gerekli sayıya kadar basit bir döngü düzenliyoruz.

1 Programı; var K, N, i: tamsayı; okumaya başla(K, N);

i:= 1'den N'ye yazmak için (K, " "); (K'yi boşlukla ayırarak yazıyoruz) son.. < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

2 için< B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

A'dan beri

2 Programı; var A, B, i, count: tamsayı; okumaya başla(A, B);. for i:= A'dan B'ye şunu yazın(i, " "); (sayıları en küçükten en büyüğe yazıyoruz) say:= B - A + 1; (sayıların sayısını sayın) writeln;< B). Найти сумму квадратов всех целых чисел от A до B включительно.

write("Sayı sayısı - ", say); son.

9 için

A ve B olmak üzere iki tam sayı verildiğinde (A. Önceki problemdeki gibi aynı döngüyü düzenliyoruz ama aynı zamanda tüm sayıların karelerini topluyoruz. Kareyi hesaplamak için işlevi kullanın.

9 Programı; var A, B, i, S: tamsayı; okumaya başla(A, B);

S:= 0; (PascalABC bunu otomatik olarak yapar ancak farklı bir derleyiciniz varsa değişkenleri manuel olarak sıfırlamanızı öneririz) for i:= A to B do S:= S + Sqr(i); (tüm kareleri ekleyin) writeln;

write("Karelerin toplamı - ", S); son.. 13° için

Bir N (> 0) tamsayı verilmiştir. 1.1 – 1.2 + 1.3 – … ifadesinin değerini bulun (N terim, işaretler dönüşümlü). Koşullu operatörü kullanmayın.

İşareti değiştirmek için döngünün her yinelemesinde özel değişkenin değerini tersine değiştiririz.

13 kişilik program; var N, A, i: tamsayı;.Bir N (> 0) tamsayı verilmiştir. Eğer 3'ün kuvvetiyse True, değilse False yazdırın.

Şu şekilde ilerliyoruz: N üçe bölünebilirken, N'yi bir bütüne bölün. O halde, eğer N = 1 ise sayı üçün kuvvetidir; eğer N<>1 ise sayı üçün kuvveti değildir. Bu sorunu çözmek için ne olduğunu ve nasıl çalıştığını bilmeniz gerekir.

Program while4; var N: tamsayı; readln(N)'yi başlat;

N mod 3 = 0 iken N:= N div 3; (Üçe bölümden kalan sıfır olduğu sürece N'yi bir tama bölün) writeln(N = 1); (boolean ifadesi) end.

Hepsi bugün için! Web sitemizi sık sık ziyaret etmeyi ve yorumların önünde yer alan butonlara tıklamayı unutmayın.Çoğu zaman aynı ifadenin (veya ifade grubunun) birkaç kez yürütülmesine ihtiyaç duyulur. Bu amaçla dilde Pascal'ın tedarik edilen

döngü operatörleri.

1. Ön koşullu döngü operatörü. Giriş formu:<условие>sırasında<оператор>;

Yapmak Giriş formu:Burada Yapmak (Hoşçakal),(Yapmak)

- Ayrılmış kelimeler.<оператор>Operatör herhangi bir basit veya bileşik operatör olabilir. Burada<условие>yalnızca doğru olduğu sürece yürütülürön koşulu olan bir döngüdür. Döngü başlığı mantıksal bir ifade içerir. Eğer geri dönerse , ifadenin her yürütülmesinde kontrol edilir. Eğer en başından itibaren durum önemliyse

döngü operatörü bir kez bile çalıştırılmayacaktır.

Böyle bir operatörün çalışma algoritmasının blok diyagramı Şekil 1'de gösterilmektedir. 1.

Pirinç. 1. Ön koşullu döngü operatörü

Örnek BEN

. yol Bir sayının faktöriyelini hesaplamak P(yani ürünler 1 2 ...):

P

Program Gerçeği_1;

Sabit n=5;

Başlamak

Değişken i, olgu:tamsayı;

ben:=1; Gerçek:=1;<=n do {заголовок цикла}

ben iken

başla (döngü başlangıcı)

gerçek:= gerçek*i;

ben:= ben + 1

son; (döngünün sonu)

WriteLn("faktöriyel", n, " = ",Gerçek:10)

Son. 2. Sonkoşulu döngü operatörü.

Operatörün çalışma algoritmasının blok şeması Şekil 2'de gösterilmektedir.

Giriş formu:

<оператор1>; <оператор2>;

Tekrarlamak<условие>;

Değin İşte Tekrarla (e kadar tekrar edin) Değin (Yapmak)

(şart sağlanana kadar) Bir ifade dizisi bir veya daha fazla herhangi bir ifadeden oluşabilir. Öncekinden farklı olarak, bu döngüde koşul her zaman operatörün (veya operatör dizisinin) çalıştırılmasından sonra kontrol edilir; eğer yanlışsa operatör tekrar çalıştırılır, aksi halde döngü geri döner.kaybolur. Böyle bir yapıyla operatör en az bir kez zorunludur

yerine getirilecektir.

Örnek: BEN

. yol Bir sayının faktöriyelini hesaplamak P(yani ürünler 1 2 ...):

II

Program Gerçeği_1;

Sabit n=5;

Başlamak

Değişken i, olgu:tamsayı;

Tekrarlamak

Program Gerçek_2;

başla (döngü başlangıcı)

gerçek:= gerçek*i;

başla (döngü başlangıcı)

son; (döngü gövdesinin sonu)

i >n'ye kadar; ( durum )

WriteLn("faktöriyel", n, " = ",Gerçek:10)

WriteLn(' Faktöriyel ", n, " = ",Gerçek:10) işte ben

döngüde manuel olarak değiştirilmesi gereken bir tekrar sayacıdır.

3. Parametreli döngü operatörü.

Sayaç, bir döngünün kaç kez tekrarlandığını sayan bir değişkendir. Böyle bir döngüde sayaç göstergesi otomatik olarak tam 1 artar.

1. Ön koşullu döngü operatörü.

İÇİNsayaç= başlangıç_değeriİLEfinal_valueYAPMAK

BAŞLAMAK

. . . .

SON;

Parametrenin 1 oranında azalması gerekiyorsa şunu kullanın: kelimeyi çağır Aşağı(başlangıç ​​değeri nihai değerden büyüktür).

Örnek:

III BEN

Bir Sayının Faktöriyelini Hesaplamak Bir sayının faktöriyelini hesaplamak(yani ürünler 1 2 ...(yani ürünler 1 2 ...):

Program Bilgisi_3;

Program Gerçeği_1;

Sabit n=5;

Başlamak

Gerçek:=1;

i:=1'den n'ye yapmak için

Program Gerçek_2;

başla (döngü başlangıcı)

son; (döngünün sonu)

WriteLn("Faktöriyel", n, "=",Gerçek:10)

Son.

Herhangi bir basit veya karmaşık operatörü operatör olarak kullanabilirsiniz.daimi operatör.

Bu döngü operatörünü kullanırken aşağıdaki kuralları unutmayın:

1) Basit bir değişkeni parametre olarak kullanabilirsiniz.aynı blokta açıklanan;

2) parametre ayrı bir türde olmalıdır;

3) başlangıç ​​ve bitiş değerleri aynı türde olmalıdır parametre;

4) döngünün (operatör) gövdesinde parametrenin değerinde açık bir değişiklik(örneğin, bir atama operatörü tarafından) sonsuzluğa yol açabilir döngü;

5) Döngünün başlangıç ​​ve bitiş değerlerini döngü gövdesinde değiştiremezsiniz.değişkenler tarafından belirtilmişlerse parametreler;

6) Döngü tamamlandıktan sonra, eğer döngü kesintiye uğramadıysa parametre değeri parametrenin son değerine eşit olur.geçiş operatörü

KENDİ BAŞINA

1. Sayıları bölge formatında görüntüleyen bir program yazın:

7 49

5 25

3 9

1 1

2. Sorunu üç şekilde çözün(farklı döngü türlerini kullanarak):

Kaç yılda L yatırılan tutar istenilen miktara ulaşacak S (RUB), ilk depozito ile V (rub.), bankanın garanti ettiği yıllık faiz, mevduat tutarının% 10'u ise.

Algoritmayı şu adreste yürütün: S = 100.000 ovmak, V = 10.000 ovmak.

14. Pascal'da döngü operatörleri: önkoşullu, sonkoşullu ve parametreli.

Uygulamada karşılaşılan çoğu problemde, bazı eylemlerin birden çok kez yapılması gerekir. Hesaplama sürecinin tekrar tekrar tekrarlanan bu bölümüne döngü denir.

Gerekli tekrar sayısı önceden biliniyorsa döngü denir. aritmetik . Tekrar sayısı önceden bilinmiyorsa, o zaman hakkında konuşurlar. yinelemeli döngü.

Yinelemeli döngülerde belirli bir koşul kontrol edilir ve bu kontrolün sonucuna bağlı olarak ya döngüden çıkılır ya da döngü gövdesinin yürütülmesi tekrarlanır. Eğer koşul, bir ifade bloğunu yürütmeden önce kontrol edilirse, böyle bir yinelemeli döngüye ön koşullu bir döngü ("while" döngüsü) adı verilir ve eğer kontrol, döngünün gövdesi yürütüldükten sonra yapılırsa, o zaman bu bir döngüdür. bir sonkoşulu olan döngü ("kadar" döngüsü).

Bu döngülerin özelliği, sonkoşulu olan bir döngünün gövdesinin her zaman en az bir kez çalıştırılması, önkoşulu olan bir döngünün gövdesinin ise hiçbir zaman çalıştırılmamasıdır. Çözülen soruna bağlı olarak, bir veya daha fazla yinelemeli döngü türünün kullanılması gerekir.

Aritmetik döngüler (parametreli döngüler)

Sözdizimi:

için<loop_par> := <нач_значение>ile<кон_değer> Yapmak<operatör>

için<loop_par> := <нач_значение>aşağı<кон_değer> Yapmak<operatör>

For ifadesi, değer 1'den değer 2'ye kadar olan aralıktaki her değer için do'dan sonra ifadeyi bir kez çağırır.

Döngü değişkeni, başlangıç ​​ve bitiş değerleri sıralı tipte olmalıdır. to sözcüğüyle döngü değişkeninin değeri döngünün her yinelemesinde 1 artırılır. Downto kelimesi ile döngü her yinelendiğinde döngü değişkeninin değeri 1 azaltılır. Bir kontrol değişkeninin değerini bir döngü içinde kendiniz değiştirmemelisiniz.

Koşullu atlama operatörünün kullanılması durumunda olduğu gibi, dil sözdiziminin do anahtar sözcüğünden sonra yalnızca bir operatörün yazılmasına izin verdiğini unutmamalısınız; bu nedenle, bir döngüde bir grup operatörü yürütmek istiyorsanız, bunları bir araya getirmeniz gerekir. bir bileşik operatör (işleç parantezleri ile çevrelenmiş başlangıç ​​.. .son).

Örnek 2. Latince alfabe.

ch:="A"'dan "Z"'ye Writeln(ch);

Örnek 3: Downto ile bir döngü kullanma.

i:=10'dan 1'e kadar WriteLn(i);

Örnek 4: Bileşik operatör kullanma.

x:=1'den 10'a kadar başlar

WriteLn("f(",x,")=",y);

Ön koşullu yinelemeli döngüler

Sözdizimi:

okuma sonu.<koşul> Yapmak<operatör>

Boolean ifadesi True olarak değerlendirildiği sürece do'dan sonraki ifade yürütülür. Mantıksal ifade döngüyü sürdürmenin koşuludur. Doğruluğu, yalnızca mantıksal ifade doğru olduğu sürece yürütülecek olan döngü operatörünün bir sonraki tekrarından önce her seferinde kontrol edilir. Boolean ifadesi False olarak değerlendirildiğinde, while ifadesini takip eden ifadeye geçer.

İfade, ifade yürütülmeden önce değerlendirilir, dolayısıyla başlangıçta Yanlış ise ifade hiçbir zaman yürütülmeyecektir.

Örnek.

x > eps ise x:=x/2;

Sonkoşullu yinelemeli döngüler

Sözdizimi:

<operatör>;

<operatör>;

operatör>

değin<koşul>

Repeat ve Until arasındaki ifadeler, Boolean ifadesi False olduğu sürece tekrarlanır. Boolean ifadesi True olarak değerlendirildiğinde döngüden çıkılır.

İfade, ifadeler çalıştırıldıktan sonra değerlendirildiğinden, her durumda ifadeler en az bir kez yürütülecektir.

WriteLn("Pozitif bir sayı giriniz");