4-Tajriba ish Mavzu: Takrorlanuvchi tuzilmali algoritmlar va ularning dasturi Ishdan maqsad


Download 152.57 Kb.
bet5/7
Sana05.01.2022
Hajmi152.57 Kb.
#221668
1   2   3   4   5   6   7
Bog'liq
Dasturlash. 4-Tajriba ishi

Ichma-ich siklga misollar.

Ichma-ich sikl

Chiquvchi ma’lumot

Tushintirish

for (int i = 1; i <= 3; i++) {

for (int j = 1; j <= 4; j++) {

cout << "*";

}

cout << endl; }


****

****


****

Har biri 4 ta * dan iborat 3 ta qator chiqaradi

for (int i = 1; i <= 4 i++) {

for (int j = 1; j <= 3; j++) {

cout << "*";

}

cout << endl;}


***

***


***

***


Har biri 3 ta * dan iborat 4 ta qator chiqaradi

for (int i = 1; i <= 4; i++){

for (int j = 1; j <= i; j++) {

cout << "*";

}

cout << endl;}


*

**

***



****

Uzunliklari 1,2,3,4 ga teng bo’lgan 4 ta qator chiqariladi

for (int i = 1; i <= 3; i++){

for (int j = 1; j <= 5; j++){

if (j % 2 == 0) { cout << "*";}

else { cout << "-"; }

}

cout << endl;}


-*-*-

-*-*-


-*-*-

Juft ustunlarda * chiqaradi, toq ustunlarda - chiqariladi.

for (int i = 1; i <= 3; i++){

for (int j = 1; j <= 5; j++){

if ((i + j) % 2 == 0) { cout << "*"; }

else { cout << " "; }

}

cout << endl;}


* * *

* *


* * *

Shaxmat doskasi

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:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling