11.5. Programma. Uchta natural son berilgan. Ularning eng katta umumiy bo'luvchisini topish uchun programma yaratilsin.
11.6. type natur=1..maxint;
var m,n: natur;
function EKUB(a,b: natur): natur;
begin
while a<>b do
if a>b then a:=a-b else b:=b-a;
EKUB :=a
end;
a) m:=8; n:=6; writeln(EKUB(m,n),m,n) bajarilganda nima chop etiladi;
b) Nima uchun EKUB(m,n) hisoblanganda m,n o'zgaruvchilarning qiymatlari o'zgarmaydi, garchi funktsiya tanasida bu ikkala parametrlarning qiymatlari o'zgarsa ham?
11.7. Funktsiyalarni tasvirlashdagi xatolar topilsin:
a) function f (a : 'a'..'z') : integer;
begin f := ord(a)-ord('p');
if f<0 then f:=-f end.
b) function g(k: integer): 0..maxint;
var i,s: 0..maxint;
begin s:=0;
for i:=1 to k do s:=s+sqr(i) end;
v) function h(x:integer):integer;
begin h(x):=(sqr(x)+x)/2 end.
11.8. Programma tuzilsin. a,b,c,d kesmalar berilgan. Ulardan har uchtasidan uchburchak qurish mumkin bo'lsa, shu uchburchak yuzasi chop etilsin. (Bunday uchburchak mavjud bo'lsa, x,y va z tomonlari bo'yicha uchburchak yuzasini hisoblab, chop etadigan maydon(x,y,z) protsedurasi tuzilsin).
11.9. var c,d: integer;
procedure P(x,y : integer);
begin y:=x+1 end;
procedure Q(x:integer; var y : integer);
begin y:=x+1 end;
procedure R(var x,y : integer);
begin y:=x+1 end;
a) har bir protsyedura parametrlarining qaysi birlari parametr-qiymat yoki parametr-o'zgaruvchi ekanligi ko'rsatilsin.
b)* s:=2; d:=0; P(sqr(c)+c,d); writeln(d);
s:=2; d:=0; Q(sqr(c)+c,d); writeln(d);
Yuqorida keltirilgan amallar bajarilganda nima chop etiladi. Nima uchun protsyedura ichida parametr-qiymat o'zgarganda ham, unga mos keluvchi faktik parametr o'zgarmaydi? Uni o'zgartirish uchun nima qilish kerak?
v) R(sqr(c)+c,d) yoki R(c,d) ko'rinishida protsyeduraga murojaat qilish mumkinmi? Nima uchun protsyeduraning ichida o'zgarmaydigan parametrni parametr-o'zgaruvchi qilib tasvirlash maqsadga muvofiq emas?
11.10. Butun a,b,p,q (b0) parametriga ega qisqart(a,b,p,q) protsyedurasi a/b kasrni qisqarmaydigan p/q ko'rinishiga olib kelsin.
a) a,b,s,d parametrlaridan qaysi birlari protsyedura uchun boshlag'ich qiymatlar, qaysilari natijalar bo'ladi? Qaysi parametrlarni parametr-qiymat va qaysilarini parametr-o'zgaruvchi qilib tasvirlash kerak.
b) k,n - butun o'zgaruvchilar bo'lsa, qisqart(k+1,14,n,7) va qisqart(k,sqrt(36),k,n) ko'rinishida protsyeduralarga murojaat qilish mumkinmi?
v) qisqart(a,b,p,q) protsyedura aniqlansin va undan 1+1/2+1/3+...+1/20 kasrni qisqarmaydigan c/d ko'rinishiga keltirishda foydalanilsin.
11.11. Berilgan x,u haqiqiy sonlarning kattasini x o'zgaruvchisiga, kichigini u o'zgaruvchisiga beradigan maxmin(x,y) protsyedurasi tuzilsin.
a) Shu protsyeduraning parametrlaridan qaysi biri boshlang'ich qiymat, qaysi biri natija hisoblanadi. Qaysi parametrlarni parametr-qiymat va qaysilarini parametr-o'zgaruvchi qilib tasvirlash kerak?
b)* z-haqiqiy, k-butun o'zgaruvchilar bo'lsa, maxmin(5.2,sin(z)) yoki maxmin(z,x) ko'rinishidagi protsyeduraga murojaat qilish mumkinmi?
v)* Berilgan protsyedura aniqlansin va uning yordamida a,b,c haqiqiy o'zgaruvchilar qiymatlari shunday o'zgartirilsinki, natijada abc bo'lsin.
11.12. const n = 1000;
type vektor = array[1..n] of real;
var a,b,c,d: vektor;
Sum(x,y,z) protsyedurasi x va u vektorlar yig'indisini z vektorga bersin.
a) Tushuntirilsin. Nima uchun x,u parametrlar protsyedura natijalari bo'lmasa ham, ularni parametr-qiymatlar qilib tasvirlash maqsadga muvofiq emas?
b) Mazkur protsyedura aniqlansin va undan foydalanib d=a+b+c hisoblansin.
11.13. Quyida keltirilgan masalalarning har biri uchun savollarga javob berilsin:
Masalani qaysi qismini unda bir necha marta yechishga to'g'ri keladi? Masalaning ushbu qismini yechish uchun qanday ko'rinishda - funktsiya yoki protsyedura ko'rinishida amalga oshirgan ma'qul? Bu funktsiya yoki protsyeduraning nechta parametrlari bo'ladi? Ularning ma'nosi nima? Ulardan qaysilari parametr-qiymat, qaysilari parametr-o'zgaruvchi?
Mazkur funktsiya yoki protsyedura yaratilsin va uning yordamida masala yechilsin.
a) type satr = array[1..60] of char;
var s,t: satr; k: integer;
Agar satrning birinchi yarmida 12 tadan kam raqam bo'lsa va t satrning oxirgi choragida (to'rtinchi qismida) 'a','b','c',...,'z' harflar bo'lmasa, u holda s satrning o'rtadagi uchtadan bir bo'lagi uchragan '*' belgilar soni - k hisoblansin.
b) var a,b : real; t : boolean;
Agar x2+6.2x+a2=0 va x2+ax+b-1=0 tenglamalarning yechimlari haqiqiy bo'lsa va birinchi tenglamaning yechimlari ikkinchi tenglamaning ikkala yechimi ham orasida yotsa, t o'zgaruvchi true qiymatini olsin, aks holda false.
v) const n=10;
type matrisa = array[1..n,1..n] of real;
vektor = array[1..n] of real;
var A,B,C : matrisa; x,y,z,u : vektor;
Berilgan A,B,C matritsalar va x,y,z vektorlardan u vektor elementlari hisoblansin, bunda u=Ax+By-Cz+Bx.
g) type vektor = array[1..n] of integer;
var x,y,z: vektor;
Agar x vektorning eng katta elementi 10 ga teng bo'lib, u vektorning birinchi yarmida joylashgan bo'lsa va u vektorning musbat elementi bo'lmasa, u holda z vektorning barcha elementlari ularning kublari bilan almashtirilsin (eng katta element har bir vektorda bitta deb hisoblansin).
11.14. Quyida keltirilgan programma xatolari topilsin:
program errors (input, output);
const n=10;
type vector = array[1..n] of real;
var a,b: vektor;
function sum(var x,y: vector): vektor;
var i: integer; z: vektor;
begin for i:=1 to n do z[i]:=x[i]+y[i]; sum:=z end;
procedure reverce(x: vektor);
var i: integer; r: real;
begin for i:=1 to n div 2 do
begin r:=x[i]; x[i]:=x[n+1-i];
x[n+1-i]:=r end
end;
begin read(a); b:=sum(a,reverce(a));
writeln(b) end.
0>
Do'stlaringiz bilan baham: |