Programlama. Parametreli döngüler. §9 Parametre için döngü talimatı. Aralık tabanlı for döngüsü for döngüsü parametresi için değişken türü tamsayıdır

ifade1 ve İfade2- döngü parametresinin ilk ve son değeri.

Şu türdeki döngü operatörünün eylemi (doğrudan sayma):

2. koşul kontrol edildi: değişkenin değeri ifade2'nin değerinden büyük mü?

3. evet ise, döngü durur; değilse, operatör yürütülür, değişkenin değeri bir artırılır ve ardından eylem 2. noktadan başlayarak tekrarlanır.

Downto (geri sayım) türündeki döngü operatörünün eylemi:

1. değişkene ifade1 değeri atanır;

2. koşul kontrol edildi: değişkenin değeri ifade2'nin değerinden küçük mü?

3. evet ise, döngü durur; değilse, operatör yürütülür, değişkenin değeri bir azaltılır ve ardından 2. noktadan başlayarak eylem tekrarlanır.

Tüzük:

1. döngü parametresi sadece bir tamsayı değişkeni olabilir.

2. Döngü parametresi döngünün gövdesinde açıkça değiştirilemez.

Örneğin:

i için: = 1 ila 10 arası

ben: = ben + 1; (yanlış)

3. Döngünün adımı yalnızca +1 (to ile döngü) veya –1 (aşağı ile döngü) olabilir.

4. Genel görüşe göre, çevrimin gövdesi bir operatörden oluşmalıdır, eğer birkaç operatör varsa, bileşik operatör ve operatör parantezleri start..end ;.

5. Döngü bir kez bile yürütülmeyebilir.

Görev: Klavyeden girilen n adet sayının ortalama değerini hesaplayan bir blok diyagram ve program yazınız.

var i, n: tamsayı; x, s: gerçek;

write ('Sayıların sayısını girin');

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

yazın ('Numara numarasını girin', i);

writeln ('Ortalama =', s / n);

Ön koşullu döngü operatörü (while)

while döngüsü ifadesi Daha önce bilinmeyen sayıda tekrar içeren bir döngü operatörüdür.

Genel form:

boole ifadesi do deyimi yaparken;

boole ifadesi döngünün devamının şartıdır.

Şebeke

Operatör eylemi:

1. mantıksal ifade hesaplanır;

2. doğruysa, operatör yürütülür, ardından tüm eylemler 1. noktadan başlayarak tekrarlanır;

3. Boole ifadesi yanlışsa, döngü sonlandırılır.

Tüzük:

1. Döngünün gövdesi yalnızca bir operatörden oluşmalıdır, eğer birkaç tane varsa bir bileşik operatör kullanırız.

2. Koşul, döngünün başında kontrol edildiğinden, döngü bir kez bile yürütülmeyebilir.

3. Döngünün sonsuz hale gelmemesi için mantıksal ifadedeki değerlerin döngünün gövdesinde değişmesi gerekir.

Örneğin:

bir süre<100 do

Görev. Bir blok diyagram ve fonksiyon değerleri tablosunu hesaplayan ve yazdıran bir program yazın.

var x, xn, xk, y, h: gerçek;

writeln ("x'in ilk, son değerini ve x değişim adımını girin");

writeln ("| x | y |");

x iken<=xk do

writeln ("|", x: 7: 2, "|", y: 7: 2, "|");

Son koşullu döngü operatörü (repeat..until loop).

Döngü operatörü tekrarla.. kadarönceden belirlenmiş sayıda tekrarlı bir döngü operatörüdür.

Genel form:

operatörler;

boole ifadesine kadar;


Döngü operatörünün eylemi tekrarla.. kadar:

Döngünün gövdesindeki ifadeler, mantıksal ifadenin değeri FALSE olduğu sürece yürütülür; boole ifadesi TRUE olarak değerlendirilir değerlendirmez, döngü ifadesinin yürütülmesi sonlandırılır.

Tüzük:

1. Koşul döngünün sonunda olduğundan, döngünün gövdesi her zaman en az bir kez yürütülür.

2. Bu döngü operatöründe bileşik deyime gerek yoktur, döngü gövdesindeki tüm deyimler tekrar..until anahtar sözcükleri ile sınırlıdır.

Görev. Hesaplamak için bir akış şeması ve bir program yazın .

program rep_unt;

var n, k, s: tamsayı;

yazın ("k girin");

yaz ("Özetlenebilir", s);

Veri dizileri

Dizi Aynı ada ve türe sahip ve birbirinden bir sayı (indeks) ile farklı olan sıralı veriler topluluğudur. Diziler tek boyutlu ve çok boyutludur. Dizi örnekleri:

2 5 –15 10 20 - 6 elemanlı tamsayı türü dizisi;

2.3 9 2.45 4.78 5.32 - 5 elemanlı gerçek tür dizisi;

Ivanov Ivan Ivanovich - 20 elementten oluşan bir karakter dizisi;

Tek boyutlu dizilerin açıklamasının genel görünümü:

var dizi adı: dizi [başlangıç ​​dizin değeri .. bitiş dizin değeri] türünde;

nerede ilk indeks değeri ve nihai indeks değeri- dizi indeksinin aralığını belirten tamsayı değerleri.

Örneğin:

var vector: gerçek dizisi;

Çok boyutlu dizilerin açıklamasının genel görünümü:

var dizi adı: dizi [başlangıç ​​dizin değeri .. bitiş dizin değeri, ..., ...]<тип>;

Örneğin:

varmatrix: tamsayı dizisi; - 3´5 boyutundaki matrisin tanımı.

Dizi öğelerine erişim.

Bir dizinin öğelerine, adını belirterek ve dizininin değerlerini köşeli parantez içinde (virgülle ayrılmış çok boyutlu dizilerde) listeleyerek başvurabilirsiniz.

Bu tür indeksler olarak sadece tamsayı sabit değerleri kullanılabilir.

Örneğin:

a [i], b, v1, bir

VERİ TABANI

Veritabanı konsepti

Bilgisayarlar başlangıçta çözmek için tasarlandı bilgi işlem görevleri Bununla birlikte, zamanla, giderek daha fazla inşa etmek için kullanılmaya başladılar. belge işleme sistemleri, daha doğrusu içerdikleri bilgiler. Bu tür sistemler denir bilgi... Bir örnek sistemlerdir işletmede gerçekleştirilen iş hacminin muhasebeleştirilmesi, maaş bordrosu, stok muhasebesi, kütüphanedeki muhasebe kitapları vb.

Bu tür Bilgi sistemi bilgisayar belleğinde oluşturulmasını gerektirir dinamik olarak güncellendi modeli konu alanı tek bir depo kullanarak - Veri tabanı (DB). Konu alanı - kontrolü ve nihayetinde otomasyonu organize etmek amacıyla incelenecek gerçek dünyanın bir parçası. Her biri konu alanı herhangi bir set içerir nesneler... Bunların grupları nesneler, herhangi biri tarafından birleştirilmiş gruplama özelliği, aramak adettendir varlıklar ... Örneğin, bir depodaki ürünlerin muhasebesinden bahsediyorsak, varlıkları seçebilirsiniz " ürün", "müşteri", "irsaliye". Nesneler kendi özel temsilcileri olacaktır, örneğin, Şeker, JSC "Gefest", 252 numaralı sevk irsaliyesi.

Veri tabanı - bu gerçek hakkında bir bilgi koleksiyonudur nesneler, süreçler veya fenomen belirli bir konuyla ilgili konu alanı, bu kümenin hem bir bütün olarak hem de herhangi bir parçası olarak uygun bir temsilini (erişim, görüntüleme) sağlayacak şekilde organize edilmiştir.

Bilgi depoları veri tabanı NS tablolar , her biri aynı tür hakkında bilgi içerir nesneler(Birleşik gruplama özelliği) oluşturan öz... Her biri astar tablolar birinde veri içerir nesne, misal varlıklar(Örneğin, emtia, alıcı, genel gider), ancak sütunlar tablolar bu nesnelerin çeşitli özelliklerini içerir - Öznitellikler (Örneğin, ürün adları, alıcının isimleri ve fatura numaraları).

Veritabanları açısından Teller tablolar denir kayıtlar ve onun sütunlarkenar boşlukları ... Her şey kayıtlar aynı yapıya sahipler - aynı yapıdan oluşuyorlar alanlar , farklı değerleri saklayan Öznitellikler nesne. Her biri faydalı kayıtlar bir özellik içerir nesne ve kesin olarak tanımlanmış bir veri tipi(ör. metin dizisi, sayı, tarih). Aynı tablonun tüm kayıtları aynı alanlar, sadece farklı değerler içeriyorlar Öznitellikler.

Veri girmeden önce tablolar, tanımlamanız gerekir yapı bunların tablolar... Bu açıklama anlamına gelir başlıklar ve alan türleri, ayrıca bir dizi başka özellik (örneğin, alan boyutu, giriş doğrulama kriterleri). Bir müşteri tablosunun yapısını tanımlamanın bir örneği Şekil 8.1'de gösterilmektedir.

"Alıcı" tablosunun yapısı.

Açıklamanın yanı sıra yapılar tablolar oldukça karmaşık veri tabanı tanımlamam gerekiyor bağlantılar tablolar arasında. Bağlantı İki kişi arasında kurulmuş bir dernek mi? tablolar... Örneğin, bir önceki tablodaki müşteri bilgilerine başka bir "Mal İhracı" tablosu eklenebilir.

Çok Veri tabanı arandı ilişkisel(itibaren ilişki- bağlantı, tutum). İlişkisel veritabanı birbiriyle ilişkili bir dizidir tablolar, her biri hakkında bilgi içeren nesneler belirli bir türden.

Bağlar ilişkisel veritabanları değerlerin tesadüfi tarafından belirlenir alanlar farklı tablolarda. Tablolar arasındaki ilişkinin kurulduğu alanlara denir. iletişim alanları ... Verilen örnekte bu tarla Alıcının adı.

İçerisindeki bilgilerin türüne bağlı olarak tablolar veritabanları arasında üç ana bağlantı türü olabilir: bire çok, bire bir, çoktan çoğa.

Davranış bire çok içinde bir kayıt olması durumunda tablolar arasında ayarlanır. ebeveyn yan kuruluş tablo. Verilen örnekte, "Alıcı" ve "Mal çıkışı" tabloları arasında bu tür bir ilişki kurulmuştur.

Davranış bire bir bir giriş yapıldığında gerçekleşir ebeveyn tablo, içinde birden fazla kayda karşılık gelmez yan kuruluş tablo.

ilişki olması durumunda çoktan çoğa bir giriş ebeveyn tablo herhangi bir sayıda kayıtla eşleşebilir yan kuruluş tablo ve tersi.

İlişkiye bağlı tablolar ilkeye göre etkileşim ana(usta) - ast(detay). Örneğimizde, "Alıcı" tablosu - ana ve "Serbest bırakılan mallar" tablosu - ast. Ana tablo da sıklıkla denir ebeveyn, ancak astyan kuruluş... Aynı tablo belki ana biriyle ilgili olarak tablo veritabanları ve yan kuruluş diğeriyle ilgili olarak.

Veritabanı yönetim sistemleri (DBMS). sınıflandırma

Verilerle çalışmak için kullanılır veritabanı yönetim sistemleri (DBMS). VTYS Verileri tanımlamak (veritabanlarının yapısını - tablolar, bağlantılar tanımlamak), verileri işlemek ve yönetmek için tasarlanmış yazılım araçlarıdır. DBMS örnekleri - FoxPro, Oracle, SQL-Server, Delphi, dBase, Clipper, MS Access, vb.

Üç ana DBMS türü vardır: endüstriyel evrensel kullanım, endüstriyel özel amaçlı ve belirli bir müşteri için geliştirildi (özel).

Uzmanlaşmış VTYS belirli bir amaç için veritabanlarını yönetmek için oluşturulur - muhasebe, depo, bankacılık vb.

Evrensel VTYS açıkça tanımlanmış bir uygulama çerçevesine sahip değildirler, "her durum için" tasarlanmıştır ve sonuç olarak oldukça karmaşıktır ve kullanıcıdan özel bilgi gerektirir.

farklı EndüstriyelSUBÖzelleştirilmiş müşterinin çalışmasının (bu veya bu kuruluş) özelliklerini maksimum ölçüde dikkate alın, arayüzleri genellikle kullanıcılar için sezgiseldir ve onlardan özel bilgi gerektirmez. Diğer tarafta, uzmanlaşmış ve evrensel endüstriyel DBMS nispeten ucuz, yeterince güvenilir (hata ayıklanmış) ve hemen çalışmaya hazır özel VTYSönemli maliyetler gerektirir ve bunların hazırlanması ve hatalarının ayıklanması önemli bir zaman alır (birkaç aydan birkaç yıla kadar).

DBMS'nin konumuna bağlı olarak, arasında bir ayrım yapılır. yerel ve dağıtılmış(müşteri sunucusu) DBMS. Tüm bölümler yerel VTYS veritabanı kullanıcısının bilgisayarında barındırılır. Birden fazla kullanıcı bir bilgisayar ağı üzerinden aynı veritabanına aynı anda erişiyorsa, her kullanıcı bilgisayarının yerel VTYS'nin kendi kopyası olması gerekir. Buna karşılık, yazılım ve donanımın önemli bir kısmı dağıtılmış DBMS merkezi ve yeterince güçlü bir bilgisayarda bulunur (sunucu), Kullanıcıların bilgisayarları, DBMS'nin nispeten küçük bir bölümünü taşırken müşteri. Yerel DBMS'ler ağ üzerinde çalışabilir veya çalışmayabilir. dağıtılmış DBMS mutlaka çalışır bilgisayar ağı.

Konumun kendisinin Veri tabanı DBMS'nin özelliklerini hiçbir şekilde etkilemez: yerel DBMS'nin kendisi veri tabanı hem kullanıcının bilgisayarında hem de ağa bağlı uzak bir bilgisayarda (dosya sunucusu) bulunabilir.

koşulsuz saygınlık istemci-sunucu sistemleri merkezileşme olasılığıdır giriş kontrolu NS veri tabanı... Bu tür sistemlerde veri tabanı büyük ölçüde korumalı hem kazara hem de kasıtlı çarpıtmalardan, içlerinde uygulanması daha kolaydır bütünlük ve veri tutarlılığı.

DBMS en önemli bileşendir bilgi sistemi... Oluşturmak ve yönetmek için bilgi sistemi Bir DBMS'ye ihtiyaç duyulduğu kadar ihtiyaç duyulur çevirmen geliştirme için programlarüzerinde algoritmik dil.

DBMS tarafından gerçekleştirilen ana işlevler:

Veri yönetimi harici bellek(disklerde);

Veri yönetimi rasgele erişim belleği;

- Kerestecilik değişiklikler ve veritabanı kurtarma başarısızlıklardan sonra;

dilleri korumak veritabanları(veri tanımlama dili SDL dilidir, veri işleme dili DML dilidir veya veritabanı ile çalışmak için gerekli tüm araçları içeren tek bir entegre dildir - yapılandırılmış sorgu dili SQL).

Genel anlamda, bugün Pascal'daki döngülerin her biri hakkında daha fazla şey öğreneceğiz ve bunların nasıl ayarlandıklarını göreceğiz. sökeceğiz ön koşullu while döngüsü, parametreli döngü için ve tekrarla - son koşullu döngüye kadar.

1. Pascal'da parametreli döngü - FOR

FOR döngüsü, programın çalıştırılmadan önce çalışacağı belirli bir koşul belirler, diyelim ki programı 5 (veya n) kez döngüye almamız gerekiyor, o zaman bu döngü kullanılarak bu kolayca yapılabilir. FOR döngüsünün bir özelliği vardır - genellikle i veya j harfi ile gösterilen bir sayaç.

Pascal'da parametreli bir döngünün görünümü:

i için: = 1'den n'ye // i'yi önce bire, sonra ikiye, üçe, ..., n'ye ata

1. geçişten sonra i değişkenine 1, ikinciden sonra 2 atarız ve bu şekilde n'ye ulaşana kadar devam ederiz. to is up .. artan düzende, ayrıca azalan düzende downto - to .. vardır.

Parametreli bir döngünün blok şeması:

2. Pascal'da ön koşullu döngü - WHILE

Ön koşullu döngü operatörü, eylemi bilinmeyen sayıda önceden gerçekleştirir. Bazı mantıksal ifadeler veya sonucu yanlış olduğu ortaya çıkarsa döngüden çıkılır. Mantıksal ifadenin doğruluğu başlangıçta kontrol edildiğinden, döngünün gövdesi bir kez bile yürütülemeyebilir.

Ön koşullu döngü yapısı:

SONRA başlarken;

Döngüsel operatörün yürütülmesinin başlangıcında doğruluğu kontrol edilen Boole ifadesi;

Herhangi bir yürütülebilir dil ifadesi.

Döngü yürütme sırası:

Koşul doğru olduğunda, döngünün gövdesi yürütülür. Koşul yanlış olduğunda, döngünün yürütülmesi sonlandırılır.

Ön koşullu bir döngünün blok şeması:


Not: dikdörtgen bloklar, bir döngüde veya ondan sonra (döngü adımı), ovallerde - tüm programın veya bölümünün başlangıcı veya sonu - gerçekleştirilen herhangi bir eylemi gösterir. Bu blok diyagramdaki ana rol, merkezi kısmı tarafından oynanır.

Örnek:

Görev: 1 + 1.5 + 2 + 2.5 + 3 + 3.5 + .. + 30 serisinin toplamını hesaplayın

program örneği-while;

Var sum: real; n: gerçek; BAŞLANGIÇ toplamı: = 0; n: = 1; n iken

3. Son koşullu döngü - Tekrarla - kadar.

Bu operatör, bir önkoşullu bir döngü operatörüne benzer, ancak döngünün gövdesi (eylemleri) yürütüldükten sonra koşulun kontrol edilmesinden farklıdır. Bu, daha önce ayrıştırılmış döngülerden farklı olarak en az bir kez yürütülmesini sağlar.

Lütfen bu döngü operatörünün, döngü gövdesinde birkaç operatörün bulunduğunu varsaydığını, yani birkaç eylem gerçekleştirebileceğinizi, böylece Başlangıç ​​ve Bitiş hizmet sözcüklerine gerek olmadığını unutmayın.

Döngünün gövdesinde yer alan deyimlerin sırası bir kez yürütülür, ardından Hizmet sözcüğüne kadar yazılan koşul kontrol edilir. Koşul sağlanmazsa döngü sona erer. Aksi takdirde, döngünün gövdesi bir kez daha tekrarlanır ve ardından koşul tekrar kontrol edilir.

Son koşullu bir döngünün blok diyagramı:

Kayıt formatı, döngü yapısı:
E KADAR TEKRAR EDİN;

Örnek:

Program testi2; Var b: Gerçek; b'ye başlayın: = 100; b'yi tekrarlayın: = b / 2; b'ye kadar

Sonuçlar:

1. Parametreli bir döngü, döngü parametresi veya sayaç adı verilen bir değişken kullanır. Döngü yürütülmeden önce parametre (sayaç) başlangıç ​​değerine ayarlanır. Döngü adımı yürütüldükten sonra parametre değeri bir artırılır. Döngü, parametrenin sonunda (aşağıya) ile gösterilen son değerine ulaşana kadar devam eder.

2. Ön koşullu döngü, yürütme koşulu yanlış olana kadar yürütülür ve koşul doğruysa devam eder.

3. Son koşullu döngü, koşul doğru olana kadar yürütülür, koşul yanlışsa döngü devam eder.

Çoğu programda, belirli bir ifadeyi (veya ifade bloğunu) tekrar tekrar yürütme ihtiyacı vardır. Bu tür yapıları düzenlemek için döngü operatörleri kullanılabilir. Pascal programlama dilinde aşağıdaki döngü operatörleri kullanılır: for, while, tekrar (PascalABC.NET'te foreach döngüsü operatörü de kullanılır).

Birden çok kez yürütülmesi gereken bir ifade bloğuna döngünün gövdesi denir.

ifade için Pascal

Eğer vücut tekrarları döngü önceden bilinir, daha sonra kullanılır döngü operatörü için bu da genellikle parametre döngüsü operatörü olarak adlandırılır.

For ifadesi iki bölümden oluşur: döngünün gövdesi ve döngü parametresinin ilk ve son değerlerini ve ayrıca değiştirme seçeneğini tanımlaması amaçlanan başlık.

Pascal'da döngü parametresinin (artan - veya azalan - değişim yönüne bağlı olarak, for döngüsü operatörü iki biçimden biriyle yazılabilir:

  • parametre için: = başlangıç_değerinden bitiş_değerine do
  • Şebeke;
  • parametre için: = başlangıç_değeri bitiş_değerine kadar do
  • Şebeke;

Döngü parametresi değişkeni herhangi bir sıra tipi alabilir. Bu durumda ilk ve son değerler parametre değişkeninin tipi ile uyumlu tipte olmalıdır.

Şimdi for döngüsünün nasıl çalıştığına bir göz atalım.

Döngü operatörünün çalıştırılmasına başlamadan önce parametre değişkenine atanan başlangıç ​​değeri ve son değer hesaplanır. Ardından, aşağıdaki işlemler döngüsel olarak gerçekleştirilir:

  1. Parametrenin mevcut değeri, nihai değer ile karşılaştırılır.
  2. bitiş_değeri koşul parametresi doğruysa, döngünün gövdesi yürütülür, aksi takdirde for ifadesi sona erer ve kontrol, döngüyü izleyen operatöre aktarılır.

Dikkat: Pascal'da döngü parametresi, artan veya azalan olmasına bakılmaksızın her seferinde bir değişir.

Bir görev. 10'dan 1'e kadar tam sayıların karelerinin bir listesini görüntüleyin.

Çözüm. Eldeki görevde, döngü parametresi azalır.

(Program kodunun bir parçası)

  • i için: = 10'dan 1'e kadar
  • writeln (i: 2, "", ben * ben);

Dikkat: Döngü gövdesinde birden fazla operatör kullanılması gerekiyorsa, bileşik operatör kullanılır (operatör parantezleri başlar ve biter).

Örnek 2. Başvuranın dört sınavdaki puanları biliniyor. Onun tarafından atılan puan miktarını belirleyin.

Bir görev. Başvuranın dört sınavdaki puanları bilinmektedir. Onun tarafından atılan puan miktarını belirleyin.

Çözüm. Döngü operatörünü programdaki parametrelerle kullanacağız, çünkü gerçekleştirilen eylemlerin tekrar sayısı biliniyor (başvuru sahibi tam olarak dört puan aldı)

(Program kodunun bir parçası)

  • s: = 0;
  • i için: = 1 ila 4
  • başlamak
  • readln (işaret);
  • s: = s + işareti;
  • writeln(ler);

for döngüsü ifadesi algoritmik bir yapı uygular parametreli döngü(veya sayaçlı bir döngü). for döngüsü, programda, döngü talimatlarını çalıştırmadan önce, bu döngünün adımlarının sayısı bilinir (veya önceden belirlenmiş) olduğunda kullanılır. Blok diyagramda for ifadesi aşağıdaki gibi gösterilir:

Sözdizimi:

İçin ( başlatma; Koşul; değişiklik) (Döngü gövdesi talimatları;)

Döngünün gövdesinde bir talimat varsa, o zaman () ihmal edilebilir. Döngü parametresi değişkeni (sayaç) herhangi bir sayısal türde olabilir. Bu, bir C++ for döngüsünü while döngüsü kadar çok yönlü yapar. Değişiklik bölümünde, en sık kullanılan işlem sonek veya önek artırmadır (veya azaltma), ancak bir döngü parametresinin değerini değiştiren herhangi bir atama ifadesi kullanılabilir. Döngü şu şekilde çalışır:

  • Başlangıçta, sayaç değişkeninin bir açıklaması ve başlatılması vardır.
  • Ardından, koşulu kontrol edin: ifadenin bir değeri varsa NS, yineleme gerçekleşecek
  • Döngü gövdesinin talimatlarını yürüttükten sonra sayaç değeri değiştirilir

Not: C++'da döngü başlığındaki sayaç değişkenini tanımlamak bir kuraldır. Ancak bu, özellikle Program 9.2'de uygulandığı gibi başlatma bölümünde birkaç değişkeni başlatmayı planlıyorsanız gerekli değildir. Bununla birlikte, bir döngü başlığında bir sayaç değişkeninin tanımının kullanılması, döngü bittiğinde otomatik olarak yok edilen bir yerel değişkenin tanımıyla sonuçlanır. Bu nedenle, kesinlikle gerekli olmadıkça, sayaç değişkenini for döngüsü dışında tanımlamamalısınız.
for döngüsü çalışırken, döngü başlığı ifadelerinde işlenenlerin değiştirilmesi önerilmez - bu her türlü hataya yol açar! Ancak değişken değerleri (sayaç) dahil olmak üzere değişkenlerin (veya sabitlerin) değerleri kullanılabilir. Klasik bir örneğe bakalım.

Program 9.1 Verilen bir doğal sayı N. Bu sayının tüm bölenlerini yazdırın.

#Dahil etmek << "N = "; cin >> N; for (int ben = 2; ben< N / 2; i++) { if (N % i == 0) cout << i << " "; } return 0; } N = 16000 2 4 5 8 10 16 20 25 32 40 50 64 80 100 125 128 160 200 250 320 400 500 640 800 1000 1600 2000 3200 4000

Bir for döngüsünde bir devam ifadesi kullanma

Bir for döngüsünde devam deyimini kullanırken, bu döngünün işleyişinin özelliklerini dikkate almak gerekir:

  • Devam eden talimatlar atlanacak
  • Daha sonra sayaç değiştirilir
  • Sonraki yinelemeye git (aksi takdirde durumu kontrol et)

Bunu bir örnekle gösterelim: int main() (for (int i = 1; i< 20; i++) { if (i % 2 == 0) continue; cout << i << " "; } 1 3 5 7 9 11 13 15 17 19

Not... Lütfen dikkat: koşula göre sayıların çıktısı atlansa da, sayaç artışı gerçekleştirilir. Bu örnek sadece gösterim amaçlıdır, böyle bir döngü programlamamalısınız! Bu sorunu şu şekilde çözmek daha iyidir:

Int ana () ((int i = 1; i için)< 20; i += 2) cout << i << " ";

Başlatma ve değiştirme bölümündeki birkaç ifade

Daha önce de belirttiğimiz gibi, for ifadesinin başlığında üç bölüm olmalıdır. Bu bölümlerdeki ifadeler atlanabilir, ancak ";" ... Sonunda, sadece gidebilirsin; ... Formda bir başlık:

İçin (;;) (...)

"sonsuz" bir döngünün başlığıdır. (Döngüden çıkış, döngü gövdesi içinde programlanmalıdır).
C ++, for ifadesinin başlığındaki başlatma ve değiştirme bölümlerinde birden çok ifadeyi destekler. Bu durumda döngüye devam etme koşulu aynı olmalıdır!
Örneğin. Problem ifadesi: 20'yi aşmayan bir sayının faktöriyelini hesaplayın.
Program 9.2

#Dahil etmek ad alanı std kullanarak; int ana () (işaretsiz uzun uzun n; int i, k; cout<< "k = "; cin >> k; // 0<= k <= 20 for(n = 1, i = 1; i <= k; n *= i, ++i); cout << k << "! = " << n << endl; return 0; } k = 20 20! = 2432902008176640000

Not: 12. satırdaki çıktı akışının döngünün gövdesi olmadığına dikkat edin! (Başlığın sonunda -;). Böylece gövdedeki bu döngü boş bir ifadeye sahiptir ve tüm ifadeler başlıkta değerlendirilir. Program 9.2, 0 ile 20 arasındaki bir sayının faktöriyelini doğru bir şekilde hesaplar.

Menzil tabanlı for döngüsü

Bir dizinin veya kapsayıcının öğelerini yinelemek için, hantal kod kullanırken aynı tür eylemleri gerçekleştirmeniz gerekir. C++'da kaplarla çalışmayı basitleştirmek için, for döngüsü - aralık tabanlı for (döngü) için özel bir form vardır. menzile dayalı için veya için bir aralık).
Sözdizimi:

İçin ( duyuru : sıra_adı) döngü_ifadesi

Bir C dizisi örneğinde aralık tabanlı kullanma:
Program 9.3

#Dahil etmek ad alanı std kullanarak; int main () (int x (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); for (auto & s: x) (cout<< s << " "; } return 0; }

Dizinin elemanlarının değiştirilebilmesi için s değişkeninin bir referans değişken olması gerekir (yukarıdaki örnekte olduğu gibi). Değişken bir referans değilse, veriler kopyalanacaktır. Bu döngüde otomatik tür çıkarımı için otomatik belirteç kullanılır. range-based for, dinamik dizilerle çalışma konusunda bir sınırlamaya sahiptir: dizinin sonuna sabit bir işaretçi içerdiğinden, bir dizinin yeniden boyutlandırılmasını desteklemez. Sabit boyutlu dizilerle çalışırken, for aralığı normal for için mükemmel ve güvenli bir alternatiftir.

Döngüler için iç içe

Diğer döngü ifadeleri gibi for, iç içe döngü yapısını destekler. İki boyutlu dizilerin giriş ve çıkışını düzenlemek için iç içe for döngülerini kullanmak, bir while döngüsü kullanmaktan çok daha kompakttır.
Ancak, bu tür dizilerin çapraz geçiş problemlerini çözerken koşullu if deyimini kullanmaktan kaçınmalısınız. Çoğu zaman, görev, endeksleri manipüle ederek daha rasyonel bir şekilde uygulanabilir (i ve j döngü değişkenleri). Yani, bir indeksin değişimini diğerinin değerinin değerine bağlı hale getirmek. İki örneğe bakalım.
Program 9.4 Elemanları 0'a eşit olan n boyutunda bir kare matris veriliyor. Aşağıda ve ana köşegen üzerinde bulunan elemanları birler ile doldurun.

#Dahil etmek ad alanı std kullanarak; int ana () (int n; cout<< "n = "; cin >> n; int mas [n] [n]; // için sıfırlarla doldurun (int i = 0; i< n; i++) for(int j = 0; j < n; j++) mas[i][j] = 0; // Реализация for(int i = 0; i < n; i++) for(int j = 0; j <= i; j++) mas[i][j] = 1; // Вывод for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout.width(2); cout << mas[i][j]; } cout << "\n"; } return 0; } n = 10 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

Program 9.5 Bir diziyi Pascal üçgeninden sayılarla doldurmak ve bu dizinin çıktısını almak için bir program oluşturun. Pascal üçgeni:


Bu üçgende tepede ve yanlarda birimler vardır (Program 9.5'te üçgen “yanına yerleştirilir” - üçgenin kenarları: ilk sütun ve ana köşegen). Her sayı, üstündeki iki sayının toplamına eşittir. Üçgenin çizgileri dikey eksene göre simetriktir ve binom katsayıları içerir.

#Dahil etmek ad alanı std kullanarak; int ana () (int n; cout<< "n = "; cin >> n; int pas [n] [n]; for (int ben = 0; ben< n; i++) for (int j = 0; j < n; j++) pas[i][j] = 0; pas = 1; for (int i = 1; i < n; i++) { pas[i] = 1; for (int j = 1; j <= i; j++) { pas[i][j] = pas + pas[j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { cout.width(4); cout << pas[i][j]; } cout << "\n"; } return 0; } n = 12 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1

sorular
  1. Bir programda for döngüsü ifadesi while döngüsü ifadesi ile değiştirilebilir mi? Bu her zaman yapılabilir mi?
  2. Döngüleri düzenlemek için for ifadesini kullanmak ne zaman daha uygundur? süre?
  3. a for ifadesinin başlığında aşağıdaki ifadeler kullanılabilir mi: a) for (; a> b &&! (A% 2));) b) for (a> b ;;) c) for (;; i = 0) d) ( ; i = 0;) için e) için (;; i ++, --b) f) için (--i ;;) g) için (b = 0; b! = a;)?
  4. i değişkeni, dış döngünün parametresidir ve j, iç içe olanın parametresidir. j dış döngüde mevcut olacak mı? iç içe bir döngüde miyim?
ders kitabı
Ev ödevi
  1. Geri. 29. Doğal sayıların girildiği bir program yazınız a ve B ve ekran, aralıktaki tüm asal sayıları gösterir. aönce B(Algoritma Programı 8.5 fikri)
  2. Geri. 30. Mükemmel, kendisinden küçük olan tüm bölenlerinin toplamına eşit bir sayıdır (örneğin, 6 = 1 + 2 + 3 sayısı). N doğal sayısını giren ve N sayısının mükemmel olup olmadığını belirleyen bir program yazın.
  3. n = 10 için şöyle görünen bir kare nxn sayısal tablosu yazdıran bir program yazın: 1 * * * * * * * * * 2 * * * * * * * * * 3 * * * * * * * * * * 4 * * * * * * * * * 5 * * * * * * * * 6 * * * * * * * * * 7 * * * * * * * * * * 8 * * * * * * * * * * 9 * * * * * * * * * 10
Edebiyat
  1. Laforêt R. C++'da Nesne Yönelimli Programlama (4. baskı). Peter: 2004
  2. Prata, Stephen. C++ programlama dili. Dersler ve alıştırmalar, 6. baskı: Per. İngilizceden - M.: LLC "I.D. Williams", 2012
  3. Lippmann B. Stanley, Josie Lajoye, Barbara E. Mu. C++ programlama dili. Temel kurs. Ed. 5. M: LLC “I. D. Williams”, 2014
  4. Ellain A.C++. Lamerden programcıya. SPb.: Peter, 2015
  5. Schildt G. C ++: Temel Kurs, 3. baskı. M.: Williams, 2010



Parametreli bir döngü aşağıdaki biçime sahiptir:

(başlatma; ifade; değişiklikler) operatörü için;

başlatma döngüde kullanılan değerleri bildirmek ve başlatmak için kullanılır. Bu bölümde, virgülle ayrılmış birkaç operatör yazabilirsiniz ("sıralı yürütme" işlemi), örneğin şöyle:

for (int i = 0, j = 2; ...

için (k = 1, m = 0; ...

Döngünün başlatma bölümünde bildirilen değişkenlerin kapsamı döngü 1'dir. Başlatma, döngü yürütmesinin başlangıcında bir kez gerçekleştirilir.

İfade döngü yürütmenin koşulunu belirler: sonucu, bool türüne dönüştürülürse doğruysa, döngü yürütülür. Parametreli bir döngü, ön koşullu bir döngü olarak uygulanır.

Değişiklikler döngünün her yinelemesinden sonra yürütülür ve genellikle döngünün parametrelerini değiştirmek için kullanılır. Değişiklikler bölümünde, virgülle ayrılmış birkaç operatör yazabilirsiniz. Basit veya bileşik Şebeke döngünün gövdesini temsil eder. for ifadesinin herhangi bir kısmı atlanabilir (ancak noktalı virgülleri yerinde bırakın!).

Örnek (1'den 100'e kadar olan sayıların toplamını hesaplayan operatör):

for (Int i = 1, s = 0; 1<=100; i++) s += i;

Örnek (program bir fonksiyon değerleri tablosu yazdırır y = x 2 +1 girilen aralıkta):

#Katmak

yüzer Xn, Xk, Dx, X;

printf (“Argüman değiştirme aralığını ve adımını girin:");

scanf (“% f% f% f”, & Xn, & Xk ve Dx);

printf (“| X | Y | \ n");

için (X = Xn; X<=Xk; X+=Dx)

printf ("|% 5.2f |% 5.2f | \ n", X * X + 1);

Örnek (program bir pozitif tamsayının tüm bölenlerini bulur):

#Katmak Int ana () (

Int sayı, yarım, div;

cout<< “\n Введите число: "; cin >> sayı;

for (yarım = sayı / 2, div = 2; div<= half; div++)

if (! (sayı % div)) cout<< div <<"\n";

Son iki örnek, bir önkoşullu döngü örnekleriyle aynı eylemleri gerçekleştirir, ancak daha kompakt ve net bir şekilde yazılmıştır: döngü kontrolü ile ilgili tüm eylemler başlığında yerelleştirilir.

Herhangi bir while döngüsü, aşağıdaki şemaya göre eşdeğer for döngüsüne dönüştürülebilir ve bunun tersi de yapılabilir:

(b1: b2; b3) operatörü için b1;

while (b2) (operatör; bЗ;)

Sık programlama döngülerindeki hatalar - döngü gövdesinde başlatılmamış değişkenlerin kullanılması ve döngü çıkış koşulunun yanlış yazılması.

q döngü gövdesindeki atama ifadelerinin sağ tarafındaki tüm değişkenlere daha önce başlangıç ​​değerlerinin atanıp atanmadığını (ve ayrıca diğer ifadelerin yürütülüp yürütülmediğini) kontrol edin;


q döngü çıkış koşuluna dahil edilen en az bir değişkenin döngüde değişip değişmediğini kontrol edin;

Belirli sayıda yinelemeye ulaşıldığında döngüden acil çıkış sağlayın;

q ve elbette, döngünün gövdesinde birden fazla ifade yürütmeniz gerekiyorsa, bunları kaşlı ayraçlar içine almanız gerektiğini unutmayın.

Döngü operatörleri birbirinin yerine kullanılabilir, ancak bazılarından alıntı yapabilirsiniz. öneri her durumda en iyinin seçimine göre.

do while ifadesi genellikle döngünün en az bir kez yürütülmesi gerektiğinde kullanılır (örneğin, döngüye veri giriliyorsa).

Yineleme sayısının önceden bilinmediği, belirgin döngü parametrelerinin olmadığı veya parametrelerin modifikasyonunun döngü gövdesinin sonunda olmayan şekilde yazılması daha uygun olduğu durumlarda operatörün kullanılması daha uygundur.

for operatörü diğer birçok durumda tercih edilir (açıkça - sayaçlarla döngüleri düzenlemek için).

Konunun devamı:
Android

Ukraynalılar, Maidan yetkilileri tarafından engellenen Rus sosyal ağı VKontakte'nin bir analogunu oluşturamadı. Bu, Facebook'ta yazarlardan biri tarafından bildirildi ...