Apabila mengkaji gelung untuk, kami berkata bahawa jika bilangan pengulangan sebarang tindakan diketahui, maka anda boleh memendekkan atur cara menggunakan pengendali gelung untuk. Dan bagaimana jika bilangan ulangan tidak diketahui. Dan ini berlaku agak kerap.
Contohnya:
mengingati terjemahan 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 C, pernyataan gelung bersyarat bermula dengan perkataan while dan mempunyai struktur berikut.
semasa (<syarat>){
badan gelung
}
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
- pendakap kerinting boleh diabaikan jika badan gelung hanya terdiri daripada satu operator
Cara pengendali berfungsi:
1. Pertama, program menilai keadaan dalam kurungan selepas kata 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 pendakap kerinting yang menyerlahkan badan gelung boleh diabaikan.
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.
#include<iostream>
menggunakan ruang nama std;
utama()
{
int i;
cout << "Mula\n";
i=1;
manakala(i<=10)
{
cout << i<<" ";
i++; //Operator yang mempengaruhi perubahan pembolehubah dalam keadaan
}
cout << "\nSelesai";
}
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. cout << "\nSelesai";
|
Mari cuba menulis atur cara untuk menyelesaikan masalah berikut:
Anda mesti memasukkan nombor (biarkan ia kurang daripada 3,000,000 dan tentukan bilangan digit di dalamnya.
Idea penyelesaian
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 menambah pembilang.
Akibatnya, selepas kita memotong semua nombor, 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.
nombor (n) |
counter |
123 |
0 |
12 |
1 |
1 |
2 |
0 |
3 |
Program akan kelihatan seperti ini.
#include<iostream>
menggunakan ruang nama std;
utama()
{
intn, kiraan;
cin>> n;
kiraan = 0;
manakala (n != 0)
{
kira++;
n = n / 10;
}
cout << "Nombor-" <<n<< " mengandungi " << kira << " digit";
}
Anda perlu tahu program ini dengan hati, kerana. berdasarkannya, banyak masalah lain yang berkaitan dengan pengiraan nombor mengikut digit diselesaikan.
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
|
|