4-Tajriba ish Mavzu: Takrorlanuvchi tuzilmali algoritmlar va ularning dasturi Ishdan maqsad
Download 152.57 Kb.
|
Dasturlash. 4-Tajriba ishi
- Bu sahifa navigatsiya:
- Murakkab siklni sindirish. Masala.
- Topshiriqlar
Misol. Ko’paytmalarning umumiy yi’gindisini hisoblang. Bu masalani ko’paytmalarning yi’gindisi deb nomlanadi. i o’zgaruvchining har bir qiymatida m o’zgaruvchi 1 dan 14 gacha qiymatlarni barchasini ifodaga qo’yib, ko’paytmasini topiladi. Har bir ko’paytmaning yig’indisi masalaning javobi bo’ladi. #include #include using namespace std; int main(){ float t,r,f; int i,m,n; cout<<"t="; cin>>t; cout<<"r="; cin>>r; cout<<"f="; cin>>f; cout<<"n="; cin>>n; double s=0; for(i=1;i<=32;i++){ double p=1; for(m=1;m<=14;m++){ p *= (log(i)+t*pow(m, 1.0*i))/(r * pow(m, 1.0*i)+f * pow(n, 2.0*i)); } s=s+p; } cout<<"s="< return 0; } Murakkab siklni sindirish. Masala. To’g’ri burchakli uchburchakning barcha tomonlari uzunliklari natural sonlar. Uning gipatenuzasi c berilgan. Uning katetlarini topish lozim. To’gri burchakli uchburchak shartini qanoatlantiradigan istalgan javoblardan birini topish yetarli. (1≤c≤103). Yechimi. c≤1000 bo’lganligi uchun uchburchak katetlari uzunliklari ham 1000 dan oshmaydi. Katetlarni mumkin bo’lgan barcha variantlarini tekshirib chiqish uchun a katetni i paramertli sikl sifatida qaraymiz, b katetni i sikl ichida j parametrli sikl sifatida to’g’ri burchakli uchburchak bo’lish shartini qanoatlantirilishini tekshirish lozim(i2+j2=c2): #include using namespace std; int main() { int c; cout<<"c="; cin>>c; bool found = false; int a = 0, b = 0; for (int i = 1; i <= 1000; i++) { for (int j = 1; j <= 1000; j++) { if (i*i + j*j==c*c) { a = i; b = j; found = true; } } } if (found) cout< else cout<<"Bunday sonlar yo'q"; } Dastur yechimin tahlil qilib chiqamiz. c-gipotenuza uzunligini kiritamiz. found mantiqiy o’zgaruvchi e’lon qilamiz, bu o’zgaruvchida bunday gipotenuzali to’gri burchakli uchburchak mavjud yoki yo’qligi haqidagi mantiqiy ma’lumotni saqlaymiz. Dastlab bunday uchburchak mavjud emas deb tasavvur qilamiz(found = false). a katet sifatida i o’zgaruvchi bilan 1 dan 1000 gacha bo’lgan(1000 ning o’rniga c gacha tekshirish ham mumkin) iteratsiya qilamiz, bu sikl ichida b katet sifatida j o’zgaruvchi bilan iteratsiya aylantiramiz. Agar i, j va c sonlari to’g’ri burchakli uchburchak shartini qanoatlantirsa(if (i*i + j*j==c*c)) , u holda a katet sifatida i o’zgaruvchini, b katet sifatida j o’zgaruvchini qiymatlarini o’zlashtiramiz (a = i;b = j;) va topilganligi haqidagi ma’lumotni saqlaydigan mantiqiy o’zgaruvchiga rost qiymatini o’zlashtiramiz(found = true;). Lekin bu ichma-ich sikl barcha variantlarni ko’rib chiqadi. Bizga faqat bitta variant kerak bo’lganligi sababli agar katetlar topilsa, siklni to’xtatishimiz foydaliroq bo’ladi. Siklni to’xtatish uchun quyidagicha yozish mumkin: for (int i = 1; i <= 1000; i++) { for (int j = 1; j <= 1000; j++) { if (i*i + j*j==c*c) { a = i; b = j; found = true; break; } } } Bu shaklda siklni sindiradigan bo’lsak faqat ichki sikl sinadi, tashqi sikl keyingi iteratsiyadan davom qiladi. Siklni butunlay sindirish uchun har bir tashqi sikl iteratsiyasidan oldin tekshiramiz, agar javob topilgan bo’lsa u holda tashqi siklni sindiramiz. for (int i = 1; i <= 1000; i++) { if (found) break; for (int j = 1; j <= 1000; j++) { if (i*i + j*j==c*c) { a = i; b = j; found = true; break; } } } Topshiriqlar Topshiqlarni unda ko’rsatilgan sikldan foydalanib yozing. Download 152.57 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling