Döngü ifadesi için. Tipik görevler


Görev
100 ile 500 arasındaki tüm tam sayıların toplamını bulun.

Formül kullanmadan bu sorunu çözen bir program yazalım. Örneğin s değişkenine yapılan toplamanın sonucunu şöyle yazarsak
\(s=100+101+102+103+...+500\),

kaydın kendisine çok zaman harcayacağız çünkü bilgisayar üç noktanın aritmetik bir ifadede nasıl kullanılacağını anlamayacak ve 100'den 500'e kadar tüm sayıları yazmamız gerekecek. ihmal edilebilir Özellikle sayılarımızı değiştirip farklı bir aralık almak istiyorsak.

Ne yapmalıyız?
Yukarıdaki girişe dikkat edersek, sürekli olarak "+" ekini kullanırız.
s değişkenine kademeli olarak sayı eklemeyi deneyebilirsiniz. Örneğin, bu gösterimi kullanarak
s = s + i.
Ne yaptık:
1) sağ tarafa s + i, ifadesini koyuyoruz, yani s değişkeninin değerini alıp ekliyoruz değişkenin değeri ona i;
2) solda s değişkeninin adını belirledik, yani sağdaki hesaplama sonucunun tamamı aynı değişken s'de saklanacak, yani s değişkeninin değerini değiştireceğiz. 
Geriye sadece i değişkeninin değerini istenilen aralıkta değiştirmek kalıyor. Bu bir for.
döngüsü ile yapılabilir.  
Aralığımızdaki 100 ile 500 arasındaki sayılar sırayla i değişkenine girmelidir. 
Örnek
// ÖNEMLİ! Öncelikle s değişkenini sıfırlamanız gerekir, // böylece ilk adımda 100 sayısı sıfıra eklenir, // ve hafızadakilere değil! s=0; for ( i = 100; i <= 500; i++) // i değişkeninin içinde bulunduğu döngü başlığı s = s + ben; // değerini 100'den 500'e 1'lik artışlarla değiştirir, // döngü gövdesinde kademeli olarak s değişkenine,   // değişen i değişkeninin değerini topla, // ve sonuç s değişkeninde saklanır Bu çözüm, işlemlerin toplamını hesaplamaya çok benzer:
\(s = 0 + 100 = 100, \\ s = 100 + 101 = 201, \\ s = 201 + 102 = 303 \\ ... \)

Verilen sayılar arasındaki maksimum sayı

Koşullu operatörü incelerken, girilen birkaç sayıdan maksimum sayıyı bulma konusuna değindik. "En fazla dört sayı" probleminde aşağıdaki algoritmayı kullandık:
1. M değişkeninin değerini dört değişkenden ilkine atayın;
2. ikinci değişkenin değeri M değişkenindeki değerden büyükse, değişkeninin değerini ikinci değişkenin değeriyle değiştirin;
3. üçüncü değişkenin değeri M değişkenindeki değerden büyükse, M değişkeninin değerini üçüncü değişkenin değeriyle değiştirin;< br /> 4. dördüncü değişkenin değeri M değişkenindeki değerden büyükse, değişkeninin değerini dördüncü değişkenin değeriyle değiştirin.

Görüldüğü gibi her  M değişkeni ile karşılaştırdığımız sayı (X ile gösterelim) aşağıdaki gibidir:
 
sözde kod
X girişi
eğer (M < X) o zaman
  M = X

Bu koddaki ana şey, M değişkeninin hangi başlangıç ​​değerine sahip olacağını belirlemektir.
Genellikle, bir maksimum veya minimum bulma problemini çözerken, M değişkeninin başlangıç ​​değeri ilk sayıya eşit olarak atanır.
Bu nedenle yukarıdaki kod, sayı sayısından 1 kat daha az çalıştırılmalıdır (çünkü ilk sayının M değişkeninin başlangıç ​​değeri olarak girilip saklanması gerekir).
Klavyeden ayarlanan sayı sayısına sahipsek (örneğin, n değişkeninde), o zaman aşağıdakileri kullanarak bir döngü (2'den n'ye) düzenleyebiliriz. sayı değişkenini depolamak için aynı sayı.

Programı kendiniz yazmaya çalışın.

Maksimum hepsi arasında değil

Girilen tüm sayılar arasında değil, yalnızca belirli bir koşulu sağlayan sayılar arasında maksimum (minimum) bulmamız gerekiyorsa, o zaman maksimumun başlangıç ​​​​değeri olarak aldığımız ilk sayının olduğu gerçeğini dikkate almalıyız. (minimum) her zaman gereksinimlerimizi karşılamaz.

Örneğin, maksimum negatif sayıyı arıyorsak, o zaman veri kümesine sahibiz: \(\{5, -2, 4, 2, -1, -3\}\ ) maksimumun ilk değerinde 5 sayısını alacağız ve bu pozitiftir ve herhangi bir negatiften daha büyüktür. Ve dolayısıyla koşul X > M her zaman yanlış olacaktır.

Bu nedenle, önceki problemden algoritmaya negatif bir sayı için yalnızca bir kontrol eklemek yeterli değildir, ayrıca ilk sayının gerekli koşulu sağlamayabileceğini (bu durumda negatif olabilir) dikkate almak gerekir. ).

Bunu, döngünün içine aşağıdaki koşulu ekleyerek düzeltebilirsiniz:

sözde kod
X negatif ise, o zaman
  M >= 0 veya M < ise; X, o zaman
    M=X

Belirtilen kodda  M >= 0 koşulu, M = X eylemini gerçekleştirmenize izin verir. > değişkeni başlangıçta açıkça diğerlerinden daha büyük bir değer içerir (bizim örneğimizde değer 5'e eşittir).

Ayrıca, sayı aralığı biliniyorsa, belirtilen aralıktaki minimum (maksimum) sayının maksimumun (minimum) ilk değeri olarak alınabileceğini de not ediyoruz.

Görev

N numara verilir. Bir dizideki en büyük ikinci öğeyi bulun.

Bu problem iki yoruma izin verir.
Örneğin, bize bir dizi sayı verilirse: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), o zaman cevap ne olmalıdır? ?
"İkinci en büyük öğe" altında veya basitçe "ikinci maksimum", şu şekilde anlaşılabilir:
1) tüm değerleri azalan olmayan bir düzende düzenlersek (sıralarsak) sondan bir önceki yerde olacak değer (bir sonraki her biri bir öncekinden büyük veya ona eşittir). Ardından, dikkate alınan sayı kümesi için cevap 35 değeri olacaktır;
2) sadece maksimumdan daha büyük olan elemanın değeri. O zaman cevap 20'dir.
Sayı kümesinde yalnızca bir maksimum öğe varsa (diğerleri daha azdır), o zaman her iki yorum da aynıdır ve cevap her iki durum için de aynı olacaktır, aksi halde cevap farklı olacaktır.

İlk durumu ele alalım (algoritmayı sözde kod).
Cevabı bulmak için iki değişken kullanacağız:
1) maksimum1 - maksimum değer (ilk maksimum);
2) maksimum2 - ikinci maksimum (bizim cevabımız).

Değer aralığının değiştiği biliniyorsa, başlangıç ​​​​değerleri olarak, aralığın alt sınırından açıkça daha az olan bir sayı alırız (örneğin, -1000 aralığında) ila 1000 - sayıyı al -1001)
Değer aralığı bilinmiyorsa, ilk iki giriş sayısını max1 ve max2 değişkenlerinin başlangıç ​​değerlerine yazabilir ve ardından bunları karşılaştırabilirsiniz. iki değişken.
giriş N //sayı sayısı
a, b girişi
maks1 = bir
maks2 = b
b > ise; bir, o zaman
    maks1 = b
    maks2 = bir

Sonra, diğer tüm unsurları göz önünde bulunduruyoruz (ilk 2 zaten görüntülendi, bu yüzden 3.'den başlayacağız)
3'ten n'ye i için nc
    bir girin
    eğer bir > maximum1 //max1'den büyük bir değer vardı
      O
        max2 = max1 //önceki ilk yüksek ikinci olur
        max1 = a //yeni eleman ilk maksimum olacak
      aksi takdirde
        //sonraki eleman max1'den fazla değil
        // maximum2 değeri ile karşılaştırılması gerekiyor
        eğer bir > maksimum 2
          O
            max2 = a //yeni değer olarak al max2
                           // max1 bu durumda değişmez
        Tüm
    Tüm
kt

Bu algoritmayı kendiniz uygulamaya çalışın.