O’rta maxsus


-§. ALGORITMIKA MASALALARI



Download 2,24 Mb.
bet48/54
Sana30.04.2022
Hajmi2,24 Mb.
#597939
1   ...   44   45   46   47   48   49   50   51   ...   54
Bog'liq
paskal dt dars

5-§. ALGORITMIKA MASALALARI


75*. A va B butun turdagi o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring, ya’ni: A=3, B=4 bo‘lsa, A=4, B=3 bo‘lsin.

Yechim:
Bu kabi masala yechimini algoritmik tafakkur sari qo‘yilgan asosiy qadam deb hisoblash mumkin, chunki masalani yechishda matematik va mantiqiy bilimning o‘zi yetarli emasligi ko‘rinadi. Masalani A=3, B=4 holda ko‘raylik.
Ko‘pincha “sodda” dasturchi masala shartidagi “o‘zgaruvchilar qiymatini almashtirib” qismiga e’tibor bermay quyidagicha yechim taklif etadi:
Var A, B: integer;
Begin A:=3; B:=4;
Writeln(‘Marhamat: A= ’, B, ‘; B= ‘, A); End. Holbuki, “o‘zgaruvchilar qiymatini almashtirib” deganda kompyuter xotirasidagi qiymatini almashtirish ko‘zda tutilgan bo‘ladi, yuqoridagi kabi chiqarish protsedurasidagi “aldov” emas.
O‘ylab qaralsa masala yechimi baribir soddadek ko‘rinadi:
Var A, B: integer;
Begin A:=3; B:=4;
A:=B; B:=A; Writeln(‘Marhamat: A= ’, A, ‘; B= ‘, B); End.

tamom-vassalom. Dastur ishlatib ko‘rilganda quyidagicha natija beradi:
Marhamat: A= 4; B= 4
Natija xatoku, 3 qayerga ketdi?! Xatolikni aniqlash uchun dasturni tahlil qilamiz:
A:=3; B:=4; bu o‘zlashtirish operatorlari bajarilgach xotirada A o‘zgaruvchi uchun ajratilgan joyga 3, B o‘zgaruvchi uchun ajratilgan joyga 4 yoziladi. A:=B; o‘zlashtirish operatori bajarilgach A o‘zgaruvchi uchun ajratilgan xotiradagi joy tozalanib B o‘zgaruvchining qiymati 4 yoziladi. Demak, xotirada A=4 va B=4 hosil bo‘ladi, ya’ni 3 qiymat xech qayerda yo‘q, o‘chib ketdi. B:=A; o‘zlashtirish operatori bajarilgach B o‘zgaruvchi uchun ajratilgan xotiradagi joy tozalanib A o‘zgaruvchining qiymati 4 yoziladi. Demak, dastur xato tuzilgan!
Masalani hayotiy bir masalaga qiyoslaylik: ikkita bola (3 va 4) ikkita (A va B) stulda o‘tirishibdi. Bitta stulda faqat bitta bola o‘tirishi mumkin. Bolalar stullarini almashtirishlari kerak. Lekin, bir vaqtda ikkita bola o‘rnidan turishi mumkin emas. O‘ylab ko‘rib, shunday fikr bildirishingiz tabiiy: bolalardan biri (masalan, A stuldagi 3) biror bo‘sh stulga (masalan, D ga) o‘tadi, keyin “bo‘shagan” stulga (ya’ni, A ga) ikkinchi bola (endi bu B stuldagi 4 bo‘ladi) o‘tadi, oxirida “bo‘shagan” stulga (ya’ni, B ga) birinchi bola (endi bu D stuldagi 3) o‘tadi.
Demak, masalaga mos dasturda qo‘shimcha D o‘zgaruvchi kiritish kerak ekan.

Dasturi:
Var
A, B, D: integer;
Begin
Write(‘A ni qiymatini kiriting: ’); ReadLn(A); Write(‘B ni qiymatini kiriting: ’);
ReadLn(B);
D:=A; A:=B; B:=D; Writeln(‘Marhamat: A= ’, A, ‘; B= ‘, B); End.

76. A va B haqiqiy turdagi o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring, ya’ni: A=3.5, B= –4.2 bo‘lsa, A= –4.2, B=3.5 bo‘lsin (yo‘llanma: avvalgi masala yechimida o‘zgaruvchilar turi Real tanlanadi).
77*. A va B satrli turdagi o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring, ya’ni: A=‘403‘, B=‘34‘ bo‘lsa, A=‘34‘, B=‘403‘ bo‘lsin (yo‘llanma: avvalgi masala yechimida o‘zgaruvchilar turi String tanlanadi).
78*. Elementlari satrli va soni 4 ta bo‘lgan A va B massivlar qiymatini almashtirib ekranga chiqaring.

Yechim:
Bu masalada ham qo‘shimcha massiv turidagi o‘zgaruvchidan foydalanamiz. Massivlar qiymatlarini almashtirish uchun D:=A; A:=B; B:=D; (bu xossani eslab qoling!) ko‘rinishdagi o‘zlashtirish operatorlaridan foydalanamiz.

Dasturi:
Var A, B, D: array [1..4] of string;

Begin
Write(‘A[‘,1,’]=’); ReadLn(A[1]); Write(‘A[‘,2,’]=’); ReadLn(A[2]);
Write(‘A[‘,3,’]=’); ReadLn(A[3]); Write(‘A[‘,4,’]=’); ReadLn(A[4]);
Write(‘B[‘,1,’]=’); ReadLn(B[1]); Write(‘B[‘,2,’]=’); ReadLn(B[2]);
Write(‘B[‘,3,’]=’); ReadLn(B[3]); Write(‘B[‘,4,’]=’); ReadLn(B[4]);
D:=A; A:=B; B:=D; Writeln(‘Marhamat:’);
Write(‘A[‘,1,’]=’, A[1]); Writeln(‘ A[‘,2,’]=’, A[2]);
Write(‘A[‘,3,’]=’, A[3]); Writeln(‘ A[‘,4,’]=’, A[4]);
Write(‘B[‘,1,’]=’, B[1]); Writeln(‘ B[‘,2,’]=’, B[2]);
Write(‘B[‘,3,’]=’, B[3]); Writeln(‘ B[‘,4,’]=’, B[4]); End.

79*. A=21 va B=7 bo‘lsa, A va B o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring.

Yechim:
Avval ko‘rilgan masaladan farqli A va B o‘zgaruvchilar qiymati aniq va butun son bo‘lgani uchun quyidagi ko‘rsatmalarni hisoblab olishimiz mumkin:
A=(21+7)–A=28–A=28–21=7 va B=(21+7)–B=28–B=28–7=21.
Demak, bu holda qo‘shimcha o‘zgaruvchisiz ham masalani hal etish mumkin ekan.

Dasturi: Var A, B: integer;
Begin
A:=21; B:=7; Writeln(‘Berilgan: A= ’, A, ‘; B= ‘, B);
A:=28–A; B:=28–B; Writeln(‘Marhamat: A= ’, A, ‘; B= ‘, B); End.

80*. Qo‘shimcha o‘zgaruvchidan foydalanmay A va B butun turdagi o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring.

Yechim:
1-usul. Avvalgi masalada A+B qiymatni hosil qilinishi yechimga olib kelgan edi. Lekin bu masalada A+B avvaldan ma’lum emas. Shunga qaramay quyidagicha ish bajaramiz. Deylik, A=3, B=4 bo‘lsin. Agar A=A+B=3+4=7 deb olsak, u holda B=A–B=7–4=3 va A=A–B=7–3=4 qiymatlar hosil bo‘ladi.
O‘zgaruvchilarga qiymat berayotgan bu ko‘rsatmalarni tahlil etaylik:
A=A+B ko‘rsatma A o‘zgaruvchida A va B ning qiymatlarini saqlab turibdi;
B=A–B ko‘rsatma A da saqlab turilgan B ni qiymatini ayirib B da A ni qiymatini qoldirdi;
A=A–B ko‘rsatma A o‘zgaruvchida saqlab turilgan “yangi” B ni, ya’ni “eski” A ni, qiymatini ayirib A da B ni “eski” qiymatini qoldirdi.
Ko‘rsatmalarni yozish ketma-ketligining buzilishi xato natijaga olib keladi.
Masalan, A=A+B (=3+4=7); A=A–B (=7–4=3); B=A–B (=3–4=–1).

Dasturi (1-usul):

Var A, B: integer;
Begin
Write(‘A ni qiymatini kiriting: ’); ReadLn(A);
Write(‘B ni qiymatini kiriting: ’); ReadLn(B);
A:=A+B; B:=A–B; A:=A–B; Writeln(‘Marhamat: A= ’, A, ‘; B= ‘, B); End.

2-usul. Deylik, A=3, B=4 bo‘lsin. Endi A=A∙B=3∙4=12 deb olsak, u holda B=A/B=12/4=3 va A=A/B=12/3=4 qiymatlar hosil bo‘ladi. Faqatgina Paskalda bo‘lish amali natijasi haqiqiy turdagi sonni hosil qilishini nazarda tutib B=trunc(A/B) va A=trunc(A/B) kabi yozish shart.

Dasturi (2-usul):
Var A, B: integer;
Begin
Write(‘A ni qiymatini kiriting: ’); ReadLn(A);
Write(‘B ni qiymatini kiriting: ’); ReadLn(B);
A:=A*B; B:=TRUNC(A/B); A:=TRUNC(A/B);
Writeln(‘Marhamat: A= ’, A, ‘; B= ‘, B); End.

3-usul. Deylik, A=32767, B=10 bo‘lsin. Bu qiymatlarda 1- va 2-usullar xato natijaga olib keladi, chunki A+B=32777>32767 va A∙B=327670>32767, ya’ni oraliq qiymatlar Integer turdagi miqdor chegarasidan chiqib ketdi. Shuning uchun mantiqiy XOR amalidan foydalanish haqida o‘ylab ko‘rsa arziydi. Mantiqiy XOR amali butun turdagi ixtiyoriy sonlarda o‘rinli.

Dasturi (3-usul):
Var A, B: integer;
Begin
Write(‘A ni qiymatini kiriting: ’); ReadLn(A);
Write(‘B ni qiymatini kiriting: ’); ReadLn(B);
A:=A XOR B; B:=A XOR B; A:=A XOR B; Writeln(‘Marhamat: A= ’, A, ‘; B= ‘, B); End.

81. Qo‘shimcha o‘zgaruvchidan foydalanmay A va B haqiqiy turdagi o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring (yo‘llanma: avvalgi masala yechimlaridan 1-usulda o‘zgaruvchilar turini Real, chiqarish formatini A:0:11 va B:0:11 kabi tanlanadi).
82*. Qo‘shimcha o‘zgaruvchidan foydalanmay A va B satrli turdagi o‘zgaruvchilar qiymatini almashtirib ekranga chiqaring.

Yechim:
Satrli miqdorlar uchun A+B ifoda ma’noga ega. Deylik, A=‘oyi‘, B=‘dada‘ bo‘lsin. Agar A=A+B=‘oyi‘+‘dada‘=‘oyidada‘ deb olsak, u holda Copy funksiyasi yordamida B=Copy(A,1,Length(A)–Length(B))=
=Copy(‘oyidada‘,1,7–4)=Copy(‘oyidada‘,1,3)=‘oyi‘
va Delete protsedurasi yordamida

Delete(A,1,Length(B))=Delete(‘oyidada‘,1,3)=‘dada‘
qiymatlar hosil bo‘ladi. O‘zgaruvchilarga qiymatini o‘zgartirayotgan bu ko‘rsatmalarni tahlil etaylik:
A=A+B ko‘rsatma A o‘zgaruvchida A va B ning qiymatlarini saqlab turibdi;
B=Copy(A,1,Length(A)–Length(B)) ko‘rsatma A da saqlab turilgan A ni qiymatini nusxasini B ga o‘tkazdi;
Delete(A,1,Length(B)) ko‘rsatma A o‘zgaruvchida saqlab turilgan “yangi” B ni, ya’ni “eski” A ni, qiymatini o‘chirib A ga B ni “eski” qiymatini qoldirdi.

Download 2,24 Mb.

Do'stlaringiz bilan baham:
1   ...   44   45   46   47   48   49   50   51   ...   54




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish