B. J. Boltayev, A. R. Azamatov, G. A. Azamatova, B. S. Xurramov nazariya, algoritm, dastur toshkent 2013


Download 372.89 Kb.
bet61/68
Sana02.11.2023
Hajmi372.89 Kb.
#1740971
1   ...   57   58   59   60   61   62   63   64   ...   68
Bog'liq
Algoritmlash va dasturlash asoslari seriyasidan Kitob – II b. J.-fayllar.org

eslab qoling!) ko‘rinishdagi o‘zlashtirish operatorlaridan foydalanamiz.
Dasturi:
Var A, B, D: array [1..4] of string;



91
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 bu-


tun 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):



92
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. Manti-
qiy 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 masa-
la 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



93
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 372.89 Kb.

Do'stlaringiz bilan baham:
1   ...   57   58   59   60   61   62   63   64   ...   68




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