Tarmoqlanuvchi dasturlar tuzish
Tarmoqlanuvchi Chiziqli algoritmlar asosida tuzilgan dasturlar tarmoqlanuvchi dasturlar deyiladi. Quyida chiziqli dasturlar tuzishga misollar ko‘rib chiqamiz.
Masala-1. bo‘lsa, y ning qiymatini hisoblang.
Yechish:
Program Masala_1;
Var x,y: Real;
Begin
Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi}
ReadLn(x);
If x>0 Then y:=x Else y:=abs(x);
WriteLn(‘y=’, y);
End.
Masala-2. Berilgan x da funksiyaning qiymatini hisoblang
Yechish:
Program Masala_2;
Var x,y: Real;
Begin
Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi}
ReadLn(x);
If x>2 Then y:=x-2 Else y:=2*sqr(x)-8;
WriteLn(‘y=’, y);
End.
Masala-3. bo‘lsa, berilgan x da y ning qiymatini hisoblang
Yechish:
Program Masala_3;
Var x: Real;
y:String;
Begin
Write(‘x ni kiriting:’); {ekranga “x ni kiriting:” yozuvi chiqadi}
ReadLn(x);
If x>5 Then y:=’katta’ Else y:=”kichik yoki teng”;
WriteLn(‘y=’, y);
End.
Masala-4. Topishmoq: “Yer tagida oltin qoziq”. Topishmoq javobini kiritganda, to‘g‘ri yoki noto‘g‘ri ekanini aniqlovchi dastur tuzing.
Yechish:
Program Masala_4;
Var javob: String;
Begin
WriteLn(‘Yer tagida oltin qoziq’);
Write(‘topishmoq javobini kiriting:’);
ReadLn(javob);
If javob=’sabzi’ Then WriteLn(‘to‘g‘ri’) Else WriteLn(‘noto‘g‘ri’);
End.
Masala-5. Kiritilgan so‘zda “a” harfi bor yoki yo‘qligini aniqlovchi dastur tuzing.
Yechish: Pos funksiyasi satrdan ko‘rsatilgan belgini izlaydi. Masalan, a:=Pos(‘a’, ‘informatika’); operatori bajarilganda a ning qiymati 7 ga teng. Chunki, “informatika” so‘zida birinchi “a” harfi 6-o‘rinda turibdi. a:=Pos(‘v’, ‘sinf’); operatori bajarilganda esa, a ning qiymati 0 ga teng bo‘ladi. Chunki “sinf” so‘zida “v” harfi yo‘q.
Program Masala_5;
Var satr, javob: String;
Begin
Write(‘so‘z kiriting:’);
ReadLn(satr);
If Pos(‘a’,satr)>0 Then javob:=’bor’ Else javob:=’yo‘q’;
WriteLn(‘Kiritilgan so‘zda “a” harfi ’, javob);
End.
Masala-6. Kiritilgan so‘zda nechta “a” harfi borligini aniqlang. Agar kiritilgan so‘zda “a” harfi bo‘lmasa, “yo‘q” degan javob chiqsin.
Yechish: So‘z uzunligini L bilan belgilaymiz. L ning qiymatini Length funksiyasi yordamida aniqlaymiz. So‘zdagi harflarni birma-bir “a” harfi bilan taqqoslaymiz. Buning uchun i o‘zgaruvchi kiritamiz va unga ketma-ket 1, 2, …L qiymatlarini beramiz. i ning har bir qiymatida taqqoslashni bajarish uchun i ning qiymatini bittaga orttirish oldidan L1 nishon qo‘yamiz va i ning qiymati L ga teng bo‘lmaguncha shu nishonga qaytamiz. So‘zda uchragan “a” harflarni sanash uchun s – o‘zgaruvchi kiritamiz.
Program Masala_6;
Label L1;
Var satr: String;
i,s: Integer;
Begin
Write(‘so‘z kiriting:’);
ReadLn(satr);
L:=Length(satr);
i:=0; s:=0;
L1:
i:=i+1;
If satr[i]=’a’ Then s:=s+1;
If i
If s=0 Then WriteLn(‘yo‘q’) Else WriteLn(‘Kiritilgan so‘zda “a” harfi ’, s, ‘ ta’);
End.
Masala-7. Kvadrat tenglama yechish dasturini tuzing.
Yechish: ax2+bx+c=0 (a≠0) ko‘rinishidagi kvadrat tenglamani yechish algoritmini tuzamiz:
1) diskriminant: hisoblansin;
2) agar D<0 bo‘lsa, tenglama yechimga ega emas deb olinsin;
3) agar D=0 bo‘lsa, yagona yechim ga teng deb olinsin;
4) agar D>0 bo‘lsa, birinchi yechim ga, ikkinchi yechim ga teng deb olinsin;
5) tugallansin.
Demak, bizga a, b, c, d, x1, x2 haqiqiy sonli o‘zgaruvchilar kerak bo‘ladi.
Program Masala_7;
Var a, b, c, d, x1, x2: Real;
Begin
Write(‘a=’); ReadLn(a);
Write(‘b=’); ReadLn(b);
Write(‘c=’); ReadLn(c);
d:=b*b-4*a*c;
If d<0 Then WriteLn(Yechim yo‘q);
If d=0 Then WriteLn(‘x=’,-b/(2*a));
If d>0 Then
begin
x1:=(-b-sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a);
WriteLn(‘x1=’,x1); WriteLn(‘x2=’,x2);
end;
End.
3.2.2. Takrorlanuvchi dasturlar tuzish
Takrorlanuvchi Chiziqli algoritmlar asosida tuzilgan dasturlar takrorlanuvchi dasturlar deyiladi. Quyida chiziqli dasturlar tuzishga misollar ko‘rib chiqamiz.
Masala-1. 1 dan 100 gacha butun sonlar yig‘indisini hisoblovchi dastur tuzing.
Yechish: 1+2+3+…+100 yig‘indida har bir qo‘shiluvchi o‘zidan oldingisigan bittaga ko‘p. Bu qonuniyatdan foydalanamiz. Yig‘indini s deb olib, avval uning qiymatini 0 ga tenglaymiz. Qo‘shiluvchini i deb olamiz, unga 1 qiymat berib, so‘ngra har safar bittaga orttirib boramiz. i=100 bo‘lganda hisoblashni to‘xtatamiz.
1-dastur:
Program Masala_1;
Var i, s: Integer;
Begin
i:=0; s:=0;
While i<100 Do
begin
Inc(i); s:=s+I;
end;
Writeln(‘S=’,s);
End.
2-dastur:
Program Masala_1;
Var i, s: Integer;
Begin
i:=0; s:=0;
Repeat
Inc(i); s:=s+i;
Until i=100;
Writeln(‘S=’,s);
End.
3-dastur:
Program Masala_1;
Var i, s: Integer;
Begin
For i:=1 To 100 do s:=s+i;
Writeln(‘S=’,s);
End.
Bu yerda takrorlanishlar soni avvaldan ma’lum bo‘lgani uchun 3-dastur eng sodda ko‘rinishga ega bo‘ldi.
Masala-2. 1 dan 500 gacha bo‘lgan toq sonlar yig‘indisini topish dasturini tuzing.
Yechish: s=1+3+5+…499 yig‘indini hisoblash kerak. Bu yerda birinchi qo‘shiluvchi 1 ga teng va qolganlari o‘zidan oldingisidan 2 taga ko‘p. 1-misol dasturini bir oz o‘zgartiramiz.
Program Masala_2;
Var i, s: Integer;
Begin
i:=-1; s:=0;
Repeat
i:=i+2; s:=s+i;
Until i=499;
Writeln(‘S=’,s);
End.
Aslida 1- va 2- masalalarni takrorlash operatoridan foydalanmasdan, chiziqli dastur tuzib yechsa ham bo‘ladi. Mustaqil o‘ylab ko‘ring.
Masala-3. Kiritilgan so‘zda nechta “a” harfi borligini aniqlang. Agar kiritilgan so‘zda “a” harfi bo‘lmasa, “yo‘q” degan javob chiqsin.
Yechish: Bu misol oldingi mavzuda berilgandi. Uni tarmoqlanish operatoridan foydalanib yechgandik. Endi takrorlanish operatoridan foydalanamiz.
Program Masala_3;
Var satr: String;
i,s: Integer;
Begin
Write(‘so‘z kiriting:’);
ReadLn(satr);
L:=Length(satr);
s:=0;
For i:=1 To L Do If satr[i]=’a’ Then Inc(s);
If s=0 Then WriteLn(‘yo‘q’) Else WriteLn(‘Kiritilgan so‘zda “a” harfi ’, s, ‘ ta’);
End.
Masala-4. 1 dan 100 gacha bo‘lgan 11 ga karrali sonlar ko‘paytmasini topish dasturini tuzing.
Yechish: Ko‘paytmani p bilan belgilaymiz va uning qiymatini avval 1 ga teng deb olamiz. 1 dan 100 gacha sonlarni birma-bir 11 ga bo‘lib chiqamiz va qoldiqsiz bo‘linganlarini p ga ko‘paytirib boraveramiz. Sonni 11 ga qoldiqsiz bo‘linishini mod funksiyasi yordamida aniqlaymiz.
Program Masala_4;
Var i, p: Integer;
Begin
p:=1;
For i:=1 To 100 Do If i mod 11=0 Then p:=p*i;
Writeln(‘P=’,p);
End.
Bu dastur to‘g‘ri ishlaydi, ammo ortiqcha amallar bajaradi. Masala shartida 11 ga karrali sonlar aytilgan. Birinchi bunday son albatta 11. Keyingilari 22, 33, 44, … va hokazo. Demak biz p=11*22*33*…*99 ko‘paytmani hisoblashimiz kerak. Bu yerda birinchi ko‘paytuvch 11 ga teng va qolganlari o‘zidan oldingisidan 11 taga ko‘p. 3-misol dasturini bir oz o‘zgartiramiz.
Program Masala_4;
Var i, p: Integer;
Begin
i:=0; p:=1;
Repeat
i:=i+11; p:=p*i;
Until i=99;
Writeln(‘S=’,s);
End.
Bu dastur avvalgisidan bir oz “uzunroq” bo‘lsa ham takrorlanishlar soni 11 barobar kam, yani 11 barobar tezroq ishlaydi.
Masala-5. n natural son berilgan. ko‘paytmani hisoblash dasturini tuzing.
Yechish: Bu masala 4-masala kabi yechiladi.
Program Masala_5;
Var i,n,p: Integer;
Begin
Write(‘n=’); ReadLn(n);
i:=1; p:=1;
Repeat
i:=i+1; p:=p*(1/i);
Until i=n;
Writeln(‘p=’,p);
End.
Dasturda Repeat o‘rniga For dan foydalanish mumkin.
Program Masala_5;
Var i,n,p: Integer;
Begin
Write(‘n=’); ReadLn(n);
p:=1;
For i:=2 to n Do p:=p*(1/i);
Writeln(‘p=’,p);
End.
Masala-6. n natural toq son berilgan. ko‘paytmani hisoblash dasturini tuzing.
Yechish: Ko‘paytuvchilar suratida 1 da n gacha toq sonlar, maxrajdagi son esa suratdan bitta ortiq.
Program Masala_6;
Var i,n,p: Integer;
Begin
Write(‘n=’); ReadLn(n);
i:=-1; p:=1;
Repeat
i:=i+2; p:=p*(i/(i+1));
Until i=n;
Writeln(‘p=’,p);
End.
Masala-7. ifodani qiymatini hisoblash dasturini tuzing.
Yechish: Qo‘shiluvchilarni juft-juft qilib ajratsak (birinchi va ikkinchi, uchunchi va to‘rtinchi va hokazo) i=1,3,5,…,99 bo‘lganda, har safar s ga (1/i)-(1/(i+1)) qo‘shilib boradi.
Program Masala_7;
Var i,n,s: Integer;
Begin
i:=-1; s:=0;
Repeat
i:=i+2; s:=s+(1/i)-(1/(i+1));
Until i=99;
Writeln(‘s=’,s);
End.
Aim.uz
100>0>0>
Do'stlaringiz bilan baham: |