Mazkur maqolada mantiqiy fikrlashni o‘stirishga yo‘naltirilgan masalalarni yechish yo‘riqnomasi hamda ularning Turbo Pascal va Borland Delphi dasturlash tillariga mos dasturi keltirilgan.
Kalit so‘zlar: Paskal dasturlash tili, Delphi dasturlash tili, dastur.
Dasturlashga o‘rgatish yo‘nalishida maktab o‘quvchilarining qiziqishlarini oshirishda qo‘shimcha mashg‘ulotlarning o‘rni o‘ziga xosdir. Qo‘shimcha mashg‘ulotlarni sifatini ko‘tarish uchun kichik komandalar tuzib, ular o‘rtasida dasturlash bo‘yicha chempionatlarni tashkil etib borilishi o‘quvchilarni mashg‘ulotga bo‘lgan qiziqishlarini oshiradi. Shuningdek, komandalar o‘rtasida final turlarini tashkil etish mashg‘ulot samaradorligini oshiradi. Musobaqalarda o‘quvchilarni murakkab va uzun dastur tuzishga majbir etadigan masalalar emas, balki mantiqan fikrlashga yo‘naltirilgan qiziqarli masalalar berilishi maqsadga muvofiq bo‘ladi. Shu usul orqali o‘quvchilarda dastur tuzish mahoratini shakllanib borishiga erishiladi. Faol ishtirok etib yurgan va masalalarning original yechimlarini tavsiya etgan komandalar va o‘quvchilarni rag‘batlantirish ko‘zlangan maqsadga erishishga yordam beradi. Quyida qiziqarli misollar va ularni yechish usullarini keltiramiz.
Gorizontal to‘g‘ri chiziq o‘tkazamiz va unda bir xil masofada 1 dan n gacha tartiblangan ellipsli nishonlar joylashtiramiz (1-rasm). Ellipsli nishonlar suv ustida turgan nilufar barglarini bildiradi. Bu barglar ustida Ijrochi Baqa ovqatlanadi. Baqani bundan keyin B harfi bilan belgilaymiz.
Har kuni tongda nilufar barglari ustida bittadan pashsha o‘tirgan bo‘ladi. Baqa tongda ovqatlanish uchun uyidan a tartib raqamli barg ustiga tushadi. U 1 yoki 2 birlik oldinga (2-rasm) yoki 1 yoki 2 birlik orqaga (3-rasm) sakrashi mumkin. Baqa barglar ustida sakrab barcha pashshani yeb tugatishi kerak. Lekin barglar shunchalik nozikki, Baqa biror barg ustidagi pashshani yeb bo‘lgan zahoti barg cho‘ka boshlaydi. Sakrashlar natijasida Baqa b tartib raqamli bargni ustiga borishi kerak, undan uyiga chiqib keta oladi.
if (a=1) or(b=n) then g:= b - a - 1;
if (a>1) and (b
if (a=1) and (b=n) then g:= b - a;
c:= (a - 1) div 2;d:= 1 - (a mod 2);
if a >= 2 then begin e:= a div 2; f:= a mod 2; end;
h:=(n-b+1) div 2;
if (n-b)>=2 then i:= (1-(n-b) mod 2);
j:= (n-b) div 2;k:= (n-b) mod 2;
for l:= 1 to c do write('-2');for l:= 1 to d do write('-1');
for l:= 1 to f do write('1');for l:= 1 to e do write('2');
for l:= 1 to g do write('1');for l:= 1 to h do write('2');
for l:= 1 to i do write('1');for l:= 1 to k do write('-1');
for l:= 1 to j do write('-2');
1: readln;
End.
Masala B. ARALASHTIRISH
Stol ustida ustma-ust taxlangan varaqlari soni 100 tadan oshmaydigan taxlam turibdi. Har bir varaqqa bitta lotin harfi yozilgan. Taxlamdagi varaqlar ustida quyidagicha aralashtirish jarayoni bajariladi:
a) yuqoridan quyiga qarab varaqlar birma-bir olinadi va birichap taxlamga, keyingisi o‘ng taxlamga o‘tkazilaveradi;
b) chap taxlam o‘ng taxlam ustiga joylashtiriladi.
Masalan:
G
|
|
|
|
|
|
A
|
F
|
|
|
|
|
|
C
|
E
|
|
|
|
|
|
E
|
D
|
|
A
|
|
|
|
G
|
C
|
|
C
|
|
B
|
|
B
|
B
|
|
E
|
|
D
|
|
D
|
A
|
|
G
|
|
F
|
|
F
|
Aralashtirish jarayoni K marta amalga oshiriladi.
Kiritiladigan qiymatlar:k (1 ≤ k ≤ 100) natural son va belgilari soni 100 tadan oshmaydigan S satr.Satr bosh lotin harflaridan tashkil topgan. Satrning m-belgisi quyidan qaraganda m-varaqni ifodalaydi.
Chiqariladigan qiymatlar: k-marta aralashtirish jarayoni tugagandan keyin S satr ko‘rinishi.
Misollar:
Kiritish qiymatlari
|
Chiqarish qiymatlari
|
1
ABCDEFG
|
FDBGECA
|
Yechish: Bu masala k marta saralash orqali osongina hal etiladi.
Dasturi:
program aralashtirish;
var s1,s2,s:string; i,j,k:integer;
Begin
readln(s); readln(k);
for i:=1 to k do
BEGIN s1:='';s2:='';
for j:=length(s) downto 1 do
begins1:=s1+s[j]; If j>1 Then begin dec(j); s2:=s2+s[j]; end;end;
s:=s2+s1;
END;
writeln(s);
readln;
end.
Masala D. TURLI RAQAMLAR
O‘nli sanoq sistemasida N natural soni berilgan. Shu sonda qatnashgan turli raqamlar sonini, har bir raqamni qatnashishlar sonini aniqlovchi dastur tuzing.
Kiritiladigan qiymatlar:N (1 ≤ N ≤ 2147483647) natural son.
Chiqariladigan qiymatlar:har bir satrda bittadan raqam sonda qatnashishlar soni bilan tire yordamida ajratilgan, oxirgi satrda sonda qatnashgan turli raqamlar soni.
Misollar:
Kiritish qiymatlari
|
Chiqarish qiymatlari
|
1131313041
|
0-1
1-5
3-3
4-1
4
|
1000000000
|
0-9
1-1
2
|
Yechish: Sonni 10 ga bo‘lgandagi qoldiq sonning oxirgi raqamiga teng bo‘lishidan foydalanib har bir raqamni bittalab “kesib” olishimiz mumkin. Sondan oxirgi raqamni “o‘chirish” uchun 10 ga butun bo‘lishdan foydalanamiz.
Har bir raqamga mos qo‘yish uchun tartib raqami 0 dan 9 gacha bo‘lgan 10 ta elementli yordamchi massiv kiritamiz. Kesib olingan raqamga mos indeksli element qiymatini bittaga oshiramiz. Endi turli raqamlar sonini aniqlash uchun massivning 0 dan farqli elementlari sonini sanash kifoya.
Dasturi:
Program Turli_raqamlar;
Var n :longint; i,k :byte;a: array [0..9] of byte;
BEGIN
readln(n);
for i:=0 to 9 doa[i]:=0;
while n<>0 dobegini:=n mod 10;Inc(a[i]);n:=n div 10;end;
k:=0;for i:=0 to 9 doif a[i]<>0then begin inc(k); writeln(i, '-', a[i]);end;
Write(k);
readln;
END.
Masala E. O‘XSHASH MASSIVLAR
Massivlar o‘xshash deyiladi, agar ularda bir xil sonlar ishtirok etgan bo‘lsa.Natural N va M sonlar, butun qiymatli A[1..N] va B[1..M] sonlar massivlari berilgan. Bu massivlarni o‘xshash yoki o‘xshash emasligini aniqlovchi dastur tuzing.
Kiritiladigan qiymatlar: Nva M(1 ≤ N, M ≤ 255) natural sonlar, A[1..N] va B[1..M] sonlar massivlari.
Chiqariladigan qiymatlar: massivlar o‘xshash bo‘lsa “1”, aks holda “0”.
Misollar:
Kiritish qiymatlari
|
Chiqarish qiymatlari
|
1
3
1
1
1
1
|
1
|
1
2
1
2
0
|
0
|
Yechish: 1-usul. Masalani A va B massivlar asosida hosil qilingan to‘plamlar yordamida hal etish mumkin.
2-usul. A massivning har bir elementi B massivda borligi va B massivning har bir elementi A massivda borligini tekshiramiz.
Dasturi:
Program usul_1;
Type Toplam = Set of Byte;
Var A, B: Toplam; k, N, M,Q: byte;
Begin A:=[]; B:=[]; {Bo`sh to`plamlar}
Write('N='); ReadLn(N); Write('M='); ReadLn(M);
Writeln(' A massiv elementlarini kiriting: ');
For k:=1 To N Do begin Write('A[',k,']='); ReadLn(Q);
A:= A + [Q]; end; {A to‘plamni hosil qilish}
Writeln(' B massiv elementlarini kiriting: ');
For k:=1 To M Do begin Write('B[',k,']='); ReadLn(Q);
B:= B + [Q]; end; {B to‘plamni hosil qilish}
IF A=B THEN Write(' 1 ') ELSE Write(' 0);
End.
Program usul_2;
Var A, B: array [1..255] of Integer; k, s, N, M,Q: byte; bor: Boolean;
Begin
Write('N='); ReadLn(N); Write('M='); ReadLn(M);
Writeln(' A massiv elementlarini kiriting: ');
For k:=1 To N Do begin Write('A[',k,']='); ReadLn(A[k]); end;
Writeln(' B massiv elementlarini kiriting: ');
For s:=1 To M Do begin Write('B[',s,']='); ReadLn(B[s]); end;
For k:=1 To N Do BEGIN Bor:=True; For s:=1 To M Do
IF A[k]=B[s] THEN Bor:=False;
IF Bor THEN begin Write(' 0'); Readln; Halt; end; END;
For s:=1 To M Do BEGIN Bor:=True; For k:=1 To N Do
IF B[s]=A[k] THEN Bor:=False;
IF Bor THEN begin Write(' 0'); Readln; Halt; end; END;
Write(' 1');Readln;
End.
Masala F. SO‘ZDAN SO‘Z YASASH
Berilgan A matn lotin harflari va probellardan iborat. Berilgan B va C so‘zlarni ikkalasini ham A matndagi harflarni o‘rnini almashtirmasdan faqatgina o‘chirish yordamida hosil qilish mumkin yoki mumkin emasligini aniqlovchi dastur tuzing.
Kiritiladigan qiymatlar: A, B va C satrlar.
Chiqariladigan qiymatlar: javob “Mumkin”, aks holda “Mumkin emas”.
Misollar:
Kiritish qiymatlari
|
Chiqarish qiymatlari
|
hkloanxzbjsdjujskksa
jussa
kosa
|
Mumkin
|
hkloanxzbjsdjujskksa
hola
kosa
|
Mumkin emas
|
Yechish: A satr nusxasini AA satrda saqlaymiz.
B so‘zni 1-harfini A satrdan Pos(B[1], A) yordamida qidiramiz. Agar kerakli harf yo‘q bo‘lsa “Mumkin emas” javobini chiqarib dasturni yakunlaymiz. Kerakli harf A satrda K-o‘rinda joylashgan bo‘lsin. U holda B so‘zni 1-harfini va A satrni 1-belgisidan K-belgisigacha o‘chiramiz. Yana B so‘zni 1-harfini qidiramiz. Shu kabi davom ettirsak yoki “Mumkin emas” javobini chiqarib dasturni yakunlaymiz yoki B satr bo‘shaydi.
Xuddi shunday, C so‘z va AA satr bilan amallar bajaramiz.
Dasturi:
Program yasash;
Var A, AA, B, C :String; K: Byte;
Begin
Write('A matnni kiriting: '); ReadLn(A); AA:=A;
Write('B so`zni kiriting: '); ReadLn(B); Write('C so`zni kiriting: '); ReadLn(C);
While (B<>'') AND (Pos(B[1], A)>0) Do
begin K:=Pos(B[1], A); Delete(B, 1, 1); Delete(A, 1, K); end;
While (C<>'') AND (Pos(C[1], AA)>0) Do
begin K:=Pos(C[1], AA); Delete(C, 1, 1); Delete(AA, 1, K); end;
IF (B<>'') OR (C<>'') THEN WriteLn('Mumkin emas') ELSE WriteLn('Mumkin');
Readln;
End.
Adabiyotlar ro‘yxati
B.Boltaev, M.Mahkamov, A.Azamatov. Informatikadan olimpiada masalalarini yechish. Metodik qo‘llanma. Toshkent, 2004 y.
B.Boltayev, A.Azamatov. A.Asqarov, M.Sodiqov, G.Azamatova. Informatika va hisoblash texnikasi asoslari. 9-sinf uchun darslik. Toshkent, 2011 y.
B.Boltayev, A.Azamatov, G.Azamatova, B.Xurramov. Paskal dasturlash tili. Toshkent, 2013 y.
A.Azamatov, B.Xurramov. Informatika fanida Paskal dasturlash tili bo‘yicha berilgan misol va masalalarni yechish usullari. Fizika, matematika va informatika ilmiy-uslubiy jurnal, 2012 yil 6-son.
A.Azamatov.Dasturlash bo‘yicha maktab o‘quvchilarining komanda chempionati. Sankt-Peterburg, 2007 y. Fizika, matematika va informatika ilmiy-uslubiy jurnal, 2008 yil 1-son.