Tugas
Cari jumlah semua integer antara 100 dan 500.
Mari tulis atur cara yang menyelesaikan masalah ini tanpa menggunakan formula. Jika kita hanya menulis hasil penambahan kepada pembolehubah s , contohnya, sebagai
\(s=100+101+102+103+...+500\),
kami akan menghabiskan banyak masa untuk rakaman itu sendiri, kerana komputer tidak akan memahami cara menggunakan elipsis dalam ungkapan aritmetik dan kami perlu menulis semua nombor dari 100 hingga 500. Dan nilai program sedemikian akan menjadi boleh diabaikan. Terutamanya jika kita ingin menukar nombor kita dan mengambil julat yang berbeza.
Apa yang perlu kita lakukan?
Jika kita perhatikan entri di atas, maka kita sentiasa menggunakan penambahan " +".
Anda boleh cuba menambah nombor pada pembolehubah s secara beransur-ansur. Contohnya, menggunakan notasi ini
s = s + i .
Perkara yang kami lakukan:
1) di sebelah kanan kami meletakkan ungkapan s + i , , iaitu, kami mengambil nilai pembolehubah s dan menambah nilai pembolehubah kepadanya i ;
2) di sebelah kiri kami menetapkan nama pembolehubah s , iaitu, keseluruhan hasil pengiraan di sebelah kanan akan disimpan dalam pembolehubah s yang sama, jadi kami akan menukar nilai pembolehubah s .
Ia kekal hanya untuk menukar nilai pembolehubah i dalam julat yang dikehendaki. Ini boleh dilakukan dengan gelung for .
Nombor dari 100 hingga 500 yang berada dalam julat kami hendaklah masuk ke dalam pembolehubah i seterusnya.
Contoh
// PENTING! Mula-mula anda perlu menetapkan semula pembolehubah s,
// supaya pada langkah pertama nombor 100 ditambah kepada sifar,
// dan bukan apa yang ada dalam ingatan!
s=0;
untuk ( i = 100; i <= 500; i++) // pengepala gelung di mana pembolehubah i
s = s + i; // menukar nilainya daripada 100 kepada 500 dalam kenaikan 1,
// dalam badan gelung secara beransur-ansur kepada pembolehubah s,
// tambah nilai pembolehubah berubah i,
// dan hasilnya disimpan semula dalam pembolehubah s
Penyelesaian ini sangat serupa dengan mengira jumlah atas tindakan:
\(s = 0 + 100 = 100, \\ s = 100 + 101 = 201, \\ s = 201 + 102 = 303 \\ ... \)
|
Nombor maksimum antara nombor yang diberikan
Apabila mengkaji pengendali bersyarat, kami menyentuh topik mencari nombor maksimum daripada beberapa nombor yang dimasukkan. Dalam masalah "Maksimum empat nombor" kami menggunakan algoritma berikut:
1. tetapkan nilai kepada pembolehubah M kepada yang pertama daripada empat pembolehubah;
2. jika nilai pembolehubah kedua lebih besar daripada nilai dalam pembolehubah M , maka gantikan nilai pembolehubah M dengan nilai pembolehubah kedua;
3. jika nilai pembolehubah ketiga lebih besar daripada nilai pembolehubah M , maka gantikan nilai pembolehubah M dengan nilai pembolehubah ketiga;< br />
4. jika nilai pembolehubah keempat lebih besar daripada nilai dalam pembolehubah M , maka gantikan nilai pembolehubah M dengan nilai pembolehubah keempat.
Dapat dilihat bahawa setiap nombor (mari kita nyatakan dengan X ) kita bandingkan dengan pembolehubah M , seperti berikut:
pseudokod
input X
jika (M < X) maka
M = X
Perkara utama dalam kod ini adalah untuk menentukan nilai awal yang akan dimiliki oleh pembolehubah M .
Biasanya, apabila menyelesaikan masalah mencari maksimum atau minimum, nilai awal pembolehubah M ditetapkan sama dengan nombor pertama.
Oleh itu, kod di atas mesti dilaksanakan 1 kali kurang daripada bilangan nombor (kerana nombor pertama mesti dimasukkan dan disimpan sebagai nilai awal pembolehubah M ).
Jika kita mempunyai bilangan nombor yang ditetapkan daripada papan kekunci (contohnya, dalam pembolehubah n ), maka kita boleh mengatur kitaran (dari 2 hingga n ), menggunakan nombor yang sama untuk menyimpan pembolehubah nombor.
Cuba tulis program itu sendiri.
|
Maksimum bukan antara semua
Jika kita perlu mencari maksimum (minimum) bukan antara semua nombor yang dimasukkan, tetapi hanya antara nombor yang memenuhi syarat tertentu, maka kita mesti mengambil kira fakta bahawa nombor pertama yang kita ambil sebagai nilai awal maksimum (minimum) tidak akan sentiasa memenuhi keperluan kami.
Sebagai contoh, jika kita mencari nombor negatif maksimum, maka mempunyai set data: \(\{5, -2, 4, 2, -1, -3\}\ ) kita akan mendapat nombor 5 dalam nilai awal maksimum, dan ia adalah positif dan lebih besar daripada mana-mana negatif. Dan oleh itu keadaan X > M akan sentiasa palsu.
Oleh itu, tidak cukup untuk menambah hanya satu cek untuk nombor negatif kepada algoritma dari masalah sebelumnya, ia juga perlu mengambil kira fakta bahawa nombor pertama mungkin tidak memenuhi syarat yang diperlukan (dalam kes ini, menjadi negatif ).
Anda boleh membetulkannya dengan menambah keadaan berikut di dalam gelung:
pseudokod
jika X adalah negatif, maka
jika M >= 0 atau M < X, kemudian
M=X
Dalam kod yang ditentukan, syarat M >= 0 membolehkan anda melakukan tindakan M = X walaupun M > pembolehubah pada mulanya mengandungi nilai yang jelas lebih besar daripada yang lain (dalam contoh kami, nilainya adalah sama dengan 5).
Kami juga ambil perhatian bahawa jika julat nombor diketahui, maka nombor minimum (maksimum) daripada julat yang ditentukan boleh diambil sebagai nilai awal maksimum (minimum).
|
Tugas
N nombor diberikan. Cari elemen kedua terbesar dalam jujukan.
Masalah ini membenarkan dua tafsiran.
Sebagai contoh, jika kita diberi satu set nombor: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), maka apakah jawapan yang sepatutnya ?
Di bawah "elemen kedua terbesar" atau hanya "maksimum kedua", boleh difahami sebagai:
1) nilai yang akan berada di tempat kedua terakhir jika kita menyusun (mengisih) semua nilai dalam susunan tidak menurun (setiap yang berikutnya lebih besar daripada atau sama dengan yang sebelumnya). Kemudian untuk set nombor yang dipertimbangkan jawapannya ialah nilai 35;
2) nilai elemen, yang lebih besar daripada maksimum sahaja. Maka jawapannya ialah 20.
Jika terdapat hanya satu elemen maksimum dalam set nombor (semua yang lain kurang), maka kedua-dua tafsiran adalah sama, dan jawapannya akan sama untuk kedua-dua kes, jika tidak, jawapannya akan berbeza.
Pertimbangkan kes pertama (kami akan menulis algoritma pada pseudokod).
Untuk mencari jawapan, kami akan menggunakan dua pembolehubah:
1) maksimum1 - nilai maksimum (maksimum pertama);
2) maksimum2 - maksimum kedua (jawapan kami).
Jika julat nilai berubah diketahui, maka sebagai nilai awal kita mengambil nombor yang jelas kurang daripada had bawah julat (contohnya, dengan julat dari -1000 kepada 1000 - ambil nombor -1001 )
Jika julat nilai tidak diketahui, maka anda boleh menulis dua nombor input pertama ke dalam nilai awal pembolehubah max1 dan max2 , dan kemudian membandingkannya dua pembolehubah.
input N //bilangan nombor
input a, b
maks1 = a
maks2 = b
jika b > a, kemudian
maks1 = b
maks2 = a
Seterusnya, kami mempertimbangkan semua elemen lain (2 yang pertama telah dilihat, jadi kami akan bermula dari yang ke-3)
nc untuk i dari 3 hingga n
input a
jika a > maksimum1 //ada nilai yang lebih besar daripada maksimum1
Itu
max2 = max1 //bekas tinggi pertama menjadi kedua
max1 = a //elemen baharu akan menjadi maksimum pertama
sebaliknya
//elemen seterusnya tidak melebihi max1
// ia perlu dibandingkan dengan nilai maksimum2
jika a > maksimum 2
Itu
max2 = a //anggap ia sebagai nilai baharu max2
// max1 tidak berubah dalam kes ini
Semua
Semua
kts
Cuba laksanakan sendiri algoritma ini.
|