Mavzu: Takrorlanuvchi operatorlardan foydalanib dasturlar tuzish. Massivlar bilan ishlash.
Reja:
Takrorlanuvchi operatorlar.
Massivlar haqida ma’lumot.
Massivlarga oid misollar.
Paskal bir butn deb qaraluvchi bir xil turdagi elementlar to`plamidan iborat obyektlar ham ishlatilishi mumkin .Bular massivlar ular bir qancha bir turdagi bir butun deb qaraluvchi obyektlar(sonlar,belgilar,satrlar va hokazo)ning rasmiy birlashmasidir.
Massiv ismi (idenfikator) va massiovning kerakli nelementini ko`rsatish uchun zarur bo`lgan o`lchamlari (koordinatalar) bilan aniqlanadi.Massiv ismi uning hamma elementlari uchuin yagonadir.
Har bir alohida elementga massiv olchamiga bog’liq ravishda bir yoki bir nechta indekslar yordamida murojaat qilish mumkin. Indeks sifatida o`zgarmaslar va ефкеши turdagi o`zgauvchilar bilan bir qatorda murakkab turdagi (massivlar ,satrlar va hokazolar) o`zgaruvchilar ham massiv o`zgaruvchilari bo`lishi mumkin. Massiv turi bayoni quyidagicha ko`rinishda beriladi: =ARRAY [] OF Bu yerda -to`g’ri idenfikator’ ARRAY ,OF-rezerv so`zlar (massiv…dan); - bir biridan vergullar bilan ajratilgan ,indeksli turlar ro`yxati; ro`yxatni o`rab olgan kvadrat qavslar –sintaksis talabi; -Turbo Paskalning ixtiyoriy turi. Indeks turlari sifatida TurboPaskal LONGINT va LONGINT baza-turli soha turlaridan boshqa ixtiyoriy ефкеши turlarni ishlatish mumkin.
To`g’ri tuzilgandasturda indeks soha- turi tomonidan aniqlangan chegaradan tashqarida chiqmasligi kerak.Masalan: a:array[] of real,bo`lsa A[0] ni c:array[] of Boolean,bo`lsa C [38] ni ishlatish mumkin emas. Of dan keyin keluvchi Turbo Paskalning ixtiyoriy turi jumladan boshqa massiv ham bo`lishi mumkin,masalan, Var Mat : array [0..5] of array [-2..2] of array [Char] of byte; Bu yozuvni ixcham holda quyidagicha yozish mumkin: Type Mat:array [0..5,-2..2,char] of byte. Umuman strukturali turlarning ,demak,massivning ichma –ichlik chuqurligi ixtiyoriy ,shuning uchun indeks turning ro`yxatdagi elementlar soniga ham chegara yo`q ,lekin ixtiyoriy massivning ichki uzunligi yig’indisi 65520 baytdan oshmasligi kerak .shaxsiy kompyuter xotirasida massiv elementlari biri ketidan ikkinchisi shunday keladiki , buda kichik adresli xonadan kattasiga o`tganda massivning eng chekka o`ng indeksi tez almashinadi agar , masalan, Var a:array [1..2,1..2] of byte; begin a[1,1]=1; a[2,1]:=2; a[1,2]:=3; a[2,2]:=4; end bo`lsa, xotirada 1,2,3,4 qiymatli baytlar ketma-ket joylashadi. Bu xolda xotirani nusxalashning MOVE standart protsedurasini islatishda muhim bo`lishi mumkin . Turbo Pascalda bitta o`zlashtirish operatori bilan bir massivning hamma elementlarini shu turdagi boshqa massivga uzatish mumkin, masalan, Var a,b:array[1..5] of single; begin ……….. a:=b; ………. End. Shu o`zlashtirishda keyin A massivning hamma beshta elementi B massiv elementlari qiymatlarini qabul qiladi. Lekin massivlar ustida munosabat amallar aniqlanmagan. Masalan, If a=b then… Deb yozish mumkin emas.Ikki massivni elementlari bo`yicha taqqoslash mumkin, Masalan: Var a,b: array [1..5] of single; eg:Boolean; i:Byte; begin ……………… eg:=True; for i:=1 to 5 do if a [i]<>b[i] then eg:=false; if eg then ……………… End. Masalalar yechoshda bir , ikki va uch o`lchovli massivlardan foydalaniladi. Katta o`lchamdagi massivlar amalda oz uchraydi. Bir o`lchovli massivlar: umumiy holda bir olchovchi massivlarni tasvirlash quyidagi ko`rinishida beriladi; VAR V:ARRAY[N..M] OF T Bunda, V-massiv nomi ,N va M-mos ravishda massiv indeksining quyi va yuqori o`zgarish chegarasi ,T – massiv turi. Agar bir nechta massivlarning indeks o`zgarish chegarasi va turi bir xil bo`lsa , u holda bu massivlarni tasvirlashda birlashtirish mumkin , masalan, Var a,b,c:array[1..5] of real; Indekslar turi real va integer dan tashqari boshqa oddiy turlar bo`lishi mumkin, chunki massivlar cheklangan elementlar soniodan iborat bo`ladi. Ko`p hollarda indekslar turi sifatida cheklangan turlardan foydalaniladi. Chunki cheklangan turlarning qiymatlar top’lami tartiblangan va nomerlangan bo`ladi. Masalan: 50 ta elementdan iborat A massiv quyidagicha tasvirlanadi. VAR A:ARRAY[1..50]0F REAL; Indeks o`zgarishning chegarasini butun turli o`zgarmas bilan ham ifodalash mumkin.
Masalan: CONST MMAX=50; VAR A:ARRAY[1..MMAX] OF REAL; Massivlarni TYPE bo`limida yoki to`g’ridan-to`g’ri o`zgaruvchilar bo`limida tasvirlash mumkin. Masalan: a) Type Massiv=1..100 Vector=array[masiv] of real; Мулешк2=array[-109..-1] of integer; Var a,b:vector; c,d:vektor2; b) var a,b:array[1..100] of real; c,darray[-109..-1] of integer. Sanab o`tilgan turlar ham indeks turi sifatida qo`llaniladi. Masalan: Tupe Oy=(yanvar,fevral,aprel,mart,iyun,iyul,avgust,sentyabr,oktyabr,noyabr,dekabr); Hafta=(dushanba,seshanbva,chorshanba,payshanba,juma,shanba,yakshanba); O`zgaruvchilar esa quyudagicha aniqlanadi: Var T,r:array[hafta] of real;
Massiv elementlarini kiritish va chiqarish tsikl kiritish va chiqarish operatorlari orqali amalgam oshiriladi. Masalan: 50 ta elementdan iborat A massiv elementlari quyidagicha kiritiladi: For i:=1 to 50 do Real (A[i]); Masiv elementlarini chiqarish quyidagicha amalgam oshiriladi : For i:=1 to 50 do Write (B[i]); Misol. X(x1,x2,…,x20)Massivning musbat elementlari yig’indisini hisoblash dasturini tuzing. Program summa (imput , output); Typen:=1..20 Var X:array[n] of real; i:integer; s:real; Begin S:=0; For i:=1 to 20 do Read(x[i]){massiv elementlarini kiritish} For i:=1 to20 do If x[i]>=0 then s:=s+x[i]; Writeln(“s=”;s); End. Ikki o`lchovli massivlar: Paskal tilida bir o`lchovli massivlardan tashqari ko` o`lchovli massivlardan ham foydalaniladi. Ular ichida eng ko`p tarqalgani ikki o`lchovli massvlar, ya’ni matritsalar yoki to`g’ri burchakli jadvallardir. Ikki o`lchovli massivlar satr va ustun elementlaridan iborat, ularning elementlari ikki indeks orqali ifodalaniladi. Bu indekslarning biri shu elementning satr bo`yicha o`rnini, ikkinchi indeks ustun bo`yicha o`rnini ko`rsatadi. Ikki o`lchovli massivlarni ifodalash ham bir massiv kabi amalgam oshiriladi. Umumiy holda ikki o`lchovli massiv quyidagicha tasvirlanadi: VAR C:ARRAY[N..M, K..L] OF T; Bunda, C-massiv nomi, N,K vaM,L lar mos ravishda massiv indeksining quyi va yuqori o`zgarish chegarasi, T-massiv turi. Masalan; Type Matritsa=array[1..4,1..5] of real; Matritsa2=array [bush..yaksh] of array[Boolean] of-20..20 Var a,b:matritsa; C:matritsa2; var a,b :array[1..4,1..5] of real; c:array[bush..yaksh] of array[Boolean] of -20..20 Ikki o`lchovli massivlar elementlarini kiritish yoki chiqarish quyidagicha amalgam oshiriladi: Masalan: A matritsa (I,j=1…3) elementlari quyidagicha kiritiladi For i:=1 to3 do For j:=1to3do Read(A[i,j]); B matritsa (i,j=1…3) elementlari quyidagicha chiqariladi: For i:=1 to 3do For j:=1 to3 do Write (B[i,j]); Paskal dasturlash tilida massivlar bilan ishlash. Umumiy nomga ega bo`lgan bir xil ko`rinishda tartiblangan elementlar ketma-ketligi massiv deyiladi. Massiv elementlari uning komponentlari deb ataladi. Komponenta tipi – baza tipi hisoblanadi. Har bir tip o`zining indeksiga va nomiga ega,ular qavs ichiga keltiriladi. Massiv elementlari ixtiyoriy tipda ,hattoki ma’lumotlar ham bo`lishi mumkin. Massiv elementlarining tiplari bazali deyiladi. Massiv elementlarining soni programma ishlash jarayonida o`nga ozlashtirib boriladi. Uning har bir alohida elementiga murojaat massiv elementlariga mos kelgan indekslari bo`yicha bo`ladi. Massiv indeksi tushunchasi xuddi vektorlar indeksi tushunchasi kabi bo`ladi Massivlarni e’lon qilish uchun Array of (massivda) so`z birligi ishlariladi. Yozilishi: TYPE =array[indeks tipi] of ; VAR :; Massivlarni tiplarni e’lon qilmasdan turib ham qo`llash mumkin. VAR <>identifikator,…:array[indeks tipi] of ; Misol; TYPE Klass=(k1,k2,k3,k4); Znak=array[1..255] of char; VAR M1: Znak;{Znak tipi tiplar bo`limida oldindan keltirilgan} M2: array[1..60] of integer;{M2 massivning yozilishi} M3: array[1..4] OF Klass; Mas: array[1..4] of integer; Massivning baza tipi har qanday tip bo;lishi mumkinligi sababli u boshqa massiv ham bo`lishi mumkin.Natijada,Ko`p o`chamli massiv hosil bo`ladi. Masalan. TYPE Vector=array[1..4] of integer; Massiv=array[1..4] of vetor; VAR Matr : Massiv; Xuddi shu strukturani boshqa turdagi yozuvni qo`llash natijasida ham hosil qilish mumkin.: VAR Matr: array[1..4,1..4] of integer; Massiv bilan ishlashda konstantalar ham ishlatilishi mumkin. CONST G1=4 ; G2=6; VAR MasY : array[1..G1,1..G2] of real; Massiv elementlari xotirada ketma-ket joylashadi. Indekslari kichkina bo`lgan elementlar xotoraning pastki indekslarida saqlanadi.Ko`p elementli massivlarda eng o`ng tarafidagi indeks birinchi bo`lib o`sib boradi.Masalan ; Agarda A:array[1..5,1..5] of integer; Bo`lsa u holda massiv elementlari adreslarnig o`sishi bo`yicha joylashadi. A[1,1] A[1,2] ………. A[1,5] A[2,1] A[2,2] Massivlarni bir butun holda ishlatilgan paytda massiv nomlaridagi indekslardagi kvadrat qavsga olinmay ishlatiladi.Massivlar kiritish operatorida “teng” yoki “teng emas” operatsiyalarida ishlatilishi mumkin Bu amallarda ishlatiladigan massivlar bir xil tipdagi indeks va komponentalarda ega bo`lib strukturasi bir biriga o`xshash bo`lishi kerak. Masalan, A va B massivlar Var A,B: array[1..20] of real; Ko`rinishida ifodalangan bo`lsa unda natija quyidagicha bo`ladi. A=B True,agarda A massivning elementlarining qiymatlari V massiv elementlarining qiymatlariga mos ravishda teng bo`lsa. A<>V True, agarda A massiv elementining bron bir qiymati V massiv elementining qiymatlariga mos ravishda mos bo`lsa. A :=V V massiv elementining hamma qiymatlari A massiv elementlari tomonidan o`zlashtirilsa V massiv elementlarining qiymatlari o`zgarmasdan qoladi. Massiv e’lon qilingandan keyin uni elementlarini nomlari qavs ichida ko`rsatilgan holda ishlatish mumkin..Masalan:mas[2],vektorZ[10] massivning ikkinchi va uchinchi elementlariga murojaat etishni bildiradi. Ikki o`lchovli massivlar ikita indeks n o`lchovlilarida esa n ta indeks ko`rsatiladi Masalan, MatrU[4,4] bu yozuv MatrU massivning 4 ta qator 4 ta ustundagi elementini bildiradi.Array tipidagi qiymatlar bilan ishlashda quyidagi holatlar bo`lishi mumkin: VAR A,D : array[1..4] of real; B:array[1..10,1..15] of integer; I,J: integer;K:integer;S:real; Bu operatsiyani FOR operatori yordamida ham bajarish mumkin: FOR I: =1TO 4 Do A[I]:=0; Ikki o`lchovli massivlarga indeks qo`yish uchun ichma-ich joylashgan operatorlar ishlatiladi: FOR I:=1TO 10 DO FOR J:=1 TO 15 DO B[I,J]:=0; Paskal algoritmik tilida massiv elementlarini birdaniga kiritish-chiqarish imkoniyati yo`qligi sababli elementlar bittadan kiritiladi.Massiv elementiga qiymatni o`zlashtirish operatori yodamida beriladi,initsializatsiya misolda ko`rsatilgandek ,lekin ko`p hollarda READ yoki READLN operatori yordamida o`zlashtiriladi va sikl operatoridan foydalanamiz. FOR I:= 1 TO 10 Do FOR J:=1 TO 15 DO READLN(D[I,J]); WRITELN operatori ishlatilishi sababli har bir qiymat yangi qatordan kiritiladi.Alohida elementlarni qiymatlarini ham kiritish mumkin.Bunda quyidagi operatorlardan foydalaniladi: READ (A[3]); READ (B[6,9]); Bu yerda A vektoriga 3ta element qiymati va V matritsaning 6- qator 9-ustuniga joylashgan elementlari qiymatlarini kiritadi. Ikkala qiymat ham ekranning bitta qatorida ,kursirning joriy pazitsiyasidan teriladi. Massiv elementlari qiymatini chiqarish ham xuddi shunday bajariladi, lekin bunda WRITE yoki WRITELN operatori qo`llaniladi. FOR I:=1 TO 4 DO Writeln (A[I]); {A massiv elementlari qiymatini chiqarish} Yoki FOR I:=1 TO 10 DO FOR J:=1 TO 15 DO Writeln (V[I,J]); {B massiv elementlari qiymatini chiqarish} 1-Misol: 5 ta elementdan hosil bo`lgan X massivning elementlarini kiriting. Har bir elementning kvadrati va ildizini ekranga chiqaring. Yechish: PROGRAM P7_2; VAR Sum,I:integer; Sr:real; X:array [1..5] of integer; Kor,Kv:array[1..5] of real; Begin Sum:=0; Writeln(‘5 ta butun qiymatlarni kiriting:’); FOR I:=1 TO 5 DO BEGIN Write(‘I-sonni kiriting: ‘); Readln (X[I]); Kor[I]:= sqrt(X[I]); Kv[I]:=sqr(X[I]); END; FOR I:=1 TO 5 DO Write(Kor[I]:8:2); Writeln; FOR I:=1 TO 5DO Write (Kv[I]:8:2); Readln; END. 2-misol: 3x3 massiv elementlarini kiriting va har bir qator yig’indisini hisoblang. Yechish: PROGRAMP7_8; VAR Xarray[1..3,1..3] of integer; Sum:array[1..3] of integer; I,J:integer; BEGIN Randomize; FOR I=1 TO 3 DO FOR J:=1 TO 3 DO BEGIN X[I,J]:=random(300); END; FOR I:=1 TO 3DO Sum[I]:=0 FOR I:=1 TO 3 DO FOR J:=1TO 3 DO Sum[I]:=Sum[I]+X[I,J]; FOR I:=1 TO 3 DO Write(Sum[I]:3); Readln; END. Massivdan nusxa olish deb, bitta massiv elementlari qiymatlarini boshqa massiv elementlarini o`zlashtirishiga aytiladi. Nusxa olish bitta o`zlashtirish operatori yordamida amalga oshirish mumkin,masalan A:=D yoking FOR operatori yordamida . FOR I: =1TO 4 DO A[I]:=D[I]; Ikkala holda ham massiv elementlari qiymatlari o`zgarmaydi, A massiv elementlarining qiymatlari D massiv elementlari qiymatiga teng bo`lib qoladi. Ko`rinib turibdiki ,ikkala massiv ham struturasi bo`yicha bir-biriga o`xshash. Ko`pchilik holatlarda massivda qaysidir elementlarni izlashga to`g’ri keladi. Masalan: A massivning nechta elementi nol qiymatga ega ekanligini bilish talab etiladi. Buning uchun qo`shimcha o`zgaruvchi K ni kiritamiz va FOR , IF operatorlarida foydalanamiz. K:=0; FOR I:=1 TO 4 DO IF A[I]=0 THEN K:=K+1; Sikl bajarilgandan keyin K o`zgaruvchi A massivning nolga teng bo`lgan qiymatlarini o`z ichiga oladi. Massiv elementlari qiymatlarini joyini almashtirish massivning bazali tipiga o`xshash tipdagi yordamchi o`zgaruvchi yordamida amalga oshiriladi.Masalan, A massivning birinchi va beshinchi elementlari qiymatlarini joyini almashtiring. Vs:=A[5] A[5]:=A[1]; A[1]:=Vs; MASSIVLAR BILAN ISHLASHDA TASODIFIY SONLARDAN FOYDALANIB MISOLLAR YECHISH.
1-misol. Sonlarni ko`paytira olishni tekshirish. Var m1,m2,p: integer; {ko`paytuvchilarni va ko`paytma} jav: integer; {sinaluvchi javobi} begin Randomize; {tasodifiy sonlar generatorini initsializatsiyalash} m1:=rondom (9)+1; {Rondom (a) funktsiyasi qiymati, y} m2:=Rondom (9)+1;{o dan a-1 gacha sohadagi son} p:=m1*m2; writeln (m1, ‘x’,m2, ‘necha bo`ladi?’) writeln (‘Javobini kiriting va ni bosing’); write (‘ ’); readln (jav); if p+jav then writeln (‘To`g`ri.’) else writeln (‘Siz adashdingiz.’, m1, ‘x’, m2,’p); readln; end. 2)-misol. Massiv elementlarini tasodifiy sonlar generatori orqali kiritish. Tasodifiy sonlar uchun Turbo Paskal tilining operatorlari. random:real –Tasodifiy sonlar generator diapazoni 0...0.99. random(i:word):word – Tasodifiy sonlar generator diapazoni 0...1. randomize - изменение базы генератора случайных чисел. program mas1; var a: array [1..10] of integer; i: integer; begin randomize; for i:=1 to 10 do begin a[i]:=random(20); write('a(', i, ')=', a[i], ' ') end; readln; end. 3)-misol: 3x3 massiv elementlarini kiriting va har bir qator yig’indisini hisoblang . Yechilishi: PROGRAM P7_8; VAR X: array[1..3,1..3] of integer; Sum: array[1..3] of integer; I, J: integer; BEGIN Randomize; FOR I:= 1 TO 3 DO FOR J:= 1 TO 3 DO BEGIN X[I,J]:=Random(300); {Massivni tasodifiy qiymatlari bilan to`ldiramiz } END; FOR I:= 1 TO 3 DO Sum[I]:= 0; {yigindini 0 ga tenglashyiramiz} FOR I:= 1 TO 3 DO FOR J:= 1 TO 3 DO Sum[I]:= Sum[I]+X[I,J]; FOR I:=1 TO 3 DO Write(Sum[I]:3); { Yig’indini chiqaramiz} Readln; END. 4)-misol Dastur ekranda 20 ta tasodifiy aylana chizadi. Program krugi; Uses Graph; Var x,y,r,z,i,grDriver,grMode:integer; Label 1; Begin grDriver:=detect; initGraph(grDriver,grMode,’d:/tp/bgi’); randomize; for i:=1 to 20 do begin z:=random(15); y:=random(480); r:=random(100); setcolor(z); 1: x:=random(640); if x>340 then circle(x,y,r) else goto 1; end; readln; closeGraph; end.
Do'stlaringiz bilan baham: |