Penyataan gelung dengan syarat - manakala


Apabila mengkaji gelung untuk, kami berkata bahawa jika bilangan pengulangan sebarang tindakan diketahui, maka anda boleh memendekkan atur cara menggunakan pengendali gelung untuk. Tetapi bagaimana jika bilangan ulangan tidak diketahui? Dan ini berlaku agak kerap.
Sebagai contoh, mari kita ingat penukaran nombor daripada sistem nombor perpuluhan kepada yang lain: kita perlu membahagikan nombor (dan kemudian hasil pembahagian) dengan asas sistem nombor sehingga kita mendapat sifar dalam jawapan. Berapa kali kami akan berkongsi tidak diketahui. Dan terdapat banyak program yang melaksanakan algoritma sedemikian. 
Bagaimanakah ini dilaksanakan?
Untuk kes sedemikian dalam pengaturcaraan, terdapat pengendali gelung dengan syarat. 
Dalam bahasa pengaturcaraan Pascal, pernyataan gelung bersyarat bermula dengan perkataan while dan mempunyai struktur berikut. sementara <condition> mulakan badan gelung tamat Seperti yang kita sedia maklum:
- syarat ialah ungkapan, hasilnya boleh sama ada benar atau salah (seperti dalam pernyataan bersyarat)
- badan gelung ialah arahan yang perlu diulang
- mula dan akhir boleh ditinggalkan jika badan gelung hanya terdiri daripada satu operator

Cara pengendali berfungsi:
1. Pertama, program menilai keadaan selepas perkataan sambil. Jika syarat dipenuhi (benar), maka atur cara melaksanakan pernyataan (s) yang terkandung dalam badan gelung.
2. Seperti dalam gelung for, jika badan gelung mengandungi hanya satu pernyataan, maka perkataan bermula dan berakhir yang menyerlahkan badan gelung boleh ditinggalkan.
3. Selepas pelaksanaan badan gelung selesai, atur cara kembali untuk menyemak keadaan dan menyemaknya semula.
4. Tindakan ini (menyemak keadaan - melaksanakan badan gelung) diulang sehingga keadaan menjadi palsu.
5. Jika pada pelaksanaan pertama pengendali ini, syarat tidak segera dipenuhi (salah), maka program tidak akan melaksanakan badan gelung.

Menganalisis kerja operator ini, haruslah jelas bahawa badan gelung mesti mengandungi operator yang mempengaruhi keadaan.
Contohnya, gelung boleh menambah nilai pembolehubah yang digunakan dalam keadaan.

Contoh program yang akan kami panggil "Kiraan senyap"
Mari jadikan program dikira sebagai ganti kita, contohnya, sehingga 10.
Program ini harus mengeluarkan frasa, "Mula" dan "Selesai", dan antara tindakan ini memaparkan nombor yang sedang dikira.
Seperti ini, 
Mulakan
1 2 3 4 5 6 7 8 9 10
Selesai
Program yang menggunakan gelung sementara akan kelihatan seperti ini. var i: integer; bermula     writeln('Mula');     i := 1;     manakala saya <= 10 bermula         tulis(i, ' ');         i += 1; //Operator yang mempengaruhi perubahan pembolehubah dalam keadaan         akhir;     writeln();     writeln('Selesai'); tamat. Dalam program ini, kami memberikan nilai kepada pembolehubah i := 1 - asal
Selanjutnya, selagi kita mempunyai nilai pembolehubah i tidak lebih besar daripada (iaitu, kurang daripada atau sama dengan) nilai yang kita perlukan, kita 
 1 - paparkan nilai pembolehubah i 
 2 - naikkan nilai pembolehubah i sebanyak 1 - operator ini mempengaruhi nilai keadaan dalam kurungan. Pembolehubah i dinaikkan, iaitu pada satu ketika keadaan i<=10 akan menjadi palsu. Ini akan berlaku apabila saya menjadi sama dengan 11. Dalam kes ini, badan gelung tidak lagi akan dilaksanakan dan program akan melaksanakan pernyataan seterusnya selepas gelung, i.e. writeln();
writeln('Selesai');

Mari cuba menulis atur cara untuk menyelesaikan masalah berikut:

Anda mesti memasukkan nombor (biar kurang daripada 3,000,000) dan tentukan bilangan digit di dalamnya.

Idea penyelesaian


Mari kita mulakan pembilang digit bagi suatu nombor. Pada mulanya, pembilang ialah 0. Kita hanya perlu memotong digit terakhir secara berurutan daripada nombor (ini boleh dilakukan dengan mengurangkan nombor sebanyak 10 kali, menggunakan pembahagian integer sebanyak 10), dan setiap kali kita perlu meningkatkan pembilang sebanyak 1. 
Akibatnya, selepas kita memotong semua digit, di kaunter kita akan mendapat bilangan digit dalam nombor itu.
Dengan cara lain, algoritma boleh dirumuskan seperti berikut:
SEHINGGA NOMBORNYA TIDAK SIFAR, TURUNKAN 10 kali ganda dan TAMBAH KAUNTER 1. Program akan kelihatan seperti ini. var n, count: integer; bermula     baca(n);     kiraan := 0;     manakala n <> 0 untuk bermula         kiraan += 1;         n:= n div 10;     akhir;     writeln('Nombor - ', n, ' mengandungi ', kiraan, ' digit'); tamat. Anda perlu tahu program ini dengan hati, kerana. berdasarkannya, banyak masalah lain yang berkaitan dengan pengiraan nombor mengikut digit diselesaikan.

nombor (n) counter
123 0
12 1
1 2
0 3

Tugas

Input program ialah aliran data — jujukan integer yang berakhir dengan sifar (sifar tidak termasuk dalam jujukan). Anda perlu mencari jumlah unsur jujukan ini.
 
Algoritma penyelesaian
jumlah=0 input x // masukkan nombor pertama manakala x != 0 // tanda tamat input ditetapkan dalam keadaan,  nc // iaitu sehingga anda memasukkan sifar    jumlah = jumlah + x // anda boleh melakukan sesuatu dengan nombor asal. // Anda boleh menambah semakan nombor untuk beberapa syarat, dsb.    masukan x // masukkan nombor seterusnya kts jumlah cetak //hasil keputusan