|
Паскаль-программалау тілі (авторы:В.Н.Кирнос) Аудармашы Бексарыұлы.М |
|
§8. Бір өлшемді жиымдар Паскальда Бейсиктегі сияқты
жиымдарды пайдалануға болады. Оларды алдынала программа басында
сипаттау қажет(программа-да қолданылатын айнымалылармен бірге).
Жиым-бұл бір атпен бел-гіленген шамалардың реттелген тізбесі
екендігін еске саламыз. Жиым элементтері болып табылатын мәліметтер
индекс түрінде беріліп, белгілі бір ретпен орналасады. Біз Бейсикте бір және екі өлшемді
жиымдарды оқып үйрендік. Паскальда да ондай мүмкіндіктер
бар және мұнда жиымдардың үлкен өлшемдерін(үш
өлшемді және т.б) беруге болады. Алайда біз, бір және екі өлшемді
жиымдармен шектелеміз. Бір өлшемді жиымды сипаттау былай жүргізіледі: var жиым аты array[1..жиым ұзындығы] of типі мұнда жиым аты-Паскальда қолдануға
болатын кезкелген атау(бір-іншісі әріп болатын, латынның 8 әрпі
мен цифрынан аспайтын). Жиым ұзындығы – берілген жиымда қанша элемент
болатындығын көрсететін сан, типі – Паскальда қолданылатын(real,
integer,char т.б) кезкелген тип. Жиым индекстері тік жақшаға
алынып жазылады.
8.1-мысал. ai
= i2, b1 = 1, bi = b[i/2] +
bi -1, I = 2,3,…10 ережесі арқылы жасалатын a1,a2,…,a10
және b1,b2,…,b10 тізбектерін есептеп шығару, мұнда [i/2]
жазбасы i/2-нің бүтін бөлігін білдіреді. Program mys8_1; var i:integer;
a,b:array[1..10] of real; begin b[1]:=1; a[1]:=1; writeln(‘a[1]=’,a[1],’b[1]=’,b[1]); for
i:=2 to
10 do begin a[i]:=sqr(i); b[i]:=b[i div 2]+b[i-1]; writeln(‘a[‘,i,’]=’,a[i],’b[‘,i,’]=’,b[i]); end end.
Паскальда,
Бейсиктен өзгеше, жиымның өлшемін(сырттан енгізіп) өзгертуге
болмайды. Бұл Паскальдың Бейсиктен басты ерекшелігі-не
негізделген. Бейсик – интерпретатор, сондықтан ол программа-ны жол
бойынша біртіндеп орындайды, ал Паскаль – транслятор, ал ол алдымен бүкіл
программаны машиналық тілге «аударады»(яғни трансляция кезінде
жиым үшін жадыдан орын бөледі), содан соң ғана оны
орындай бастайды. Алайда жеке жағдайда
бұл проблеманы реттеуге болады. Ол үшін тұрақтылар қолданылады,
оны программа басында (белгіден кейін, бірақ айнымалы мен жиым типін
сипаттаудан бұрын) сипаттау керек. Тұрақты былай
сипатталады: const
тұрақты аты = тұрақты мәні тұрақты
аты әдеттегіше (айнымалы аты сияқты)
беріледі. Берілген тұрақтының мәнін программа ішінде өзгертуге
болмайды!
8.2-мысал.
8.1-мысалындағы берілген тізбектерді тұрақтыны қолданып есептеу. Program mys8_2; const n=10; var i:integer;
a,b:array[1..n] of real; begin b[1]:=1; a[1]:=1; writeln; writeln(‘a[1]=’,a[1],’b[1]=’,b[1]); for
i:=2 to
n do begin a[i]:=sqr(i); b[i]:=b[i div 2]+b[i-1]; writeln(‘a[‘,i,’]=’,a[i],’b[‘,i,’]=’,b[i]);
end end.
Осындай программада тұрақтыны
қолданудың артықшылығы неде?. Мұнда тұрақтының
мәнін өзгерту арқылы (программаны кезекті орындауға
жіберерде) еш қиындықсыз жиымның қажетті ұзындығын
да өзгертуге болады, сол кезде жиыммен жұмыс істеуге арналған
циклдерде қажет түрге жөнделеді. Бақылау сұрақтары 1.Жиым деген не? 2.Паскальда бір өлшемді жиым қалай
сипатталады?. Жиымның өл- шемін
сырттан мән енгізу арқылы неге өзгертуге болмайды? 3.Тұрақты деген не және ол қалай
сипатталады? Практикалық тапсырмалар 8.1. n элементтен тұратын жиым берілген.Тақ нөмірлі
элементтерді квадрат дәрежеге шығарыңыз. 8.2. n элементі бар жиым берілген. Жұп нөмірлі элементтер мен тақ
нөмірлі элементтердің қосындыларын
бөлек-бөлек табыңыз. 8.3. n элементі(натурал сандар) бар жиым
берілген. Ондағы жұп сандарды 0-мен, тақ сандарды
(-1)-мен ауыстырыңыз. Қорытынды жиымды басып шығарыңыз. 8.4. n элементі бар(n-жұп) жиым берілген. Оларды мына ретпен: a1,an,a2,an-1,…,an/2,an/2+1 басып шығарыңыз. 8.5. n элементі бар(n-жұп) жиым берілген. Мұндағы жұп
және тақ нөмірлі элементтердің
орнын былайша: а1 мен а2-ні, а3-пен а4-ті
т.с.с ауыстырыңыз. Қорытынды
жиымды шығарыңыз. 8.6. Әрқайсысы n элементтен тұратын екі жиым берілген. Құрамына кезекпен 1-жиым,
сосын 2-жиым элементтері енетін 3-жиым құрып оны баспаға
шығарыңыз. 8.7. n элементі бар(n-жұп) жиым берілген. Элементтері берілген жиымның 1-і мен соңғысының
және 2-і мен соңғының алдында- ғы элементтерінің т.с.с қосындыларынан
тұратын екі есе кіші жиым құрыңыз. Қорытынды
жиымды басып шығарыңыз. 8.8. n элементі(натурал сандар) бар жиым
берілген. Мүшелері тақ сан болатын элементтер санын анықтаңыз. 8.9. n элементі(натурал сандар) бар жиым
берілген. 3-ке еселі элементтер санын анықтаңыз. 8.10. n элементі(натурал сандар) бар жиым берілген. Реттік нөмірі жұп және өзі тақ
сан болатын элементтердің санын анықтаңыз. 8.11. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі элементтердің қосындысын
анықтаңыз. 8.12. n элементі(бүтін сандар) бар жиым
берілген. Тақ және теріс мәнді элементтердің қосындысын
анықтаңыз. 8.13. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі,
бірақ 10-ға еселі емес элементтердің арифметикалық
орта шамасын анықтаңыз. 8.14. n элементі(натурал сандар) бар жиым берілген. Берілген р санына еселі элементтердің көбейтіндісін
анықтаңыз. 8.15. n элементі(натурал сандар) бар жиым берілген. 3-ке
еселі, бірақ 5-ке еселі емес элементтер санын анықтаңыз. 8.16. n элементтен тұратын жиым берілген. Оларды мына ереже бойынша түрлендіріңіз ( кейінгі k-шы элементінің мәні): а) 1<=i<=k болғанда б) жиым элементтерін кері ретпен
орналастырыңыз; в) жиым элементтерін солға циклді түрде бір позицияға жылжытыңыз: 8.17. Кемуі бойынша реттелген екі Х және У жиымдары берілген. Оларды бір Z жиымына тағы да кемуі бойынша орналасатын- дай етіп біріктіріңіз. Есептердің шешуі. §8. Бір өлшемді жиымдар 8.1. n элементтен тұратын жиым
берілген.Тақ нөмірлі элементтерді квадрат дәрежеге шығарыңыз. Есепті шешу программасы: program e8_1; const n=5; var a:array[1..n]
of integer; i:integer; begin for
i:=1 to
n do begin write(i,‘-нөмірлі
элементті енгізіңіз:’); readln(a[i]); end; for
i:=1 to
n do if i
mod 2=1 then write(‘ ’,a[i]*a[i]) end. 8.2. n элементі бар жиым берілген. Жұп
нөмірлі элементтер мен тақ нөмірлі элементтердің қосындыларын
бөлек-бөлек табыңыз. program e8_2; const n=5; var a:array[1..n]
of integer; i,s1,s2:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі
элементті енгізіңіз:’); readln(a[i]); end; s1:=0; s2:=0; for
i:=1 to
n do if i
mod 2=0 then s2:=s2+a[i] else s1:=s1+a[i]; writeln; write(‘жұп нөмірлі элементтер қосындысы =’,s2);writeln; write(‘тақ нөмірлі элементтер қосындысы =’,s1) end. 8.3. n элементі(натурал сандар) бар жиым
берілген. Ондағы жұп сандарды 0-мен, тақ сандарды
(-1)-мен ауыстырыңыз. Қорытынды жиымды басып шығарыңыз. program e8_3; const n=5; var a:array[1..n]
of integer; i:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; for i:=1 to n do
if a[i] mod 2=0 then a[i]:=0
else a[i]:=-1; writeln; for
i:=1 to
n do write(‘ ’,a[i]); end. 8.4. n элементі бар(n-жұп) жиым
берілген. Оларды мына ретпен: a1,an,a2,an-1,…,an/2,an/2+1 басып шығарыңыз. program e8_4; const n=6; var a:array[1..n]
of integer; i:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі
элементті енгізіңіз:’); readln(a[i]); end; for
i:=1 to
n do
write(‘
’,a[i],’ ’,a[n-1+1]) end. 8.5. n элементі бар(n-жұп) жиым берілген. Мұндағы жұп
және тақ нөмірлі элементтердің
орнын былайша: а1 мен а2-ні, а3-пен а4-ті
т.с.с ауыстырыңыз. Қорытынды
жиымды шығарыңыз. program e8_5; const n=6; var a:array[1..n]
of integer; i,x:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; for i:=1 to n-1 do if i mod 2=1 then
begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x end; for
i:=1 to
n do write(‘ ’,a[i]); end. 8.6. Әрқайсысы n элементтен тұратын
екі жиым берілген. Құрамына кезекпен 1-жиым,
сосын 2-жиым элементтері енетін 3-жиым құрып оны баспаға
шығарыңыз. program e8_6; const n=5; var a,b:array[1..n]
of integer; c:array[1..2*n] of integer; i,k:integer; begin for
i:=1 to
n do begin write(i,‘-нөмірлі
a және b элементін енгізіңіз:’); readln(a[i],b[i]); end; for
i:=1 to
n do begin
k:=k+1;
c[k]:=a[i]; k:=k+1; c[k]:=b[i] end; for i:=1 to n*2 do
write(‘
‘,c[i]); end. 8.7. n элементі бар(n-жұп) жиым берілген. Элементтері берілген жиымның 1-і мен соңғысының
және 2-і мен соңғының алдында- ғы элементтерінің т.с.с қосындыларынан
тұратын екі есе кіші жиым құрыңыз. Қорытынды
жиымды басып шығарыңыз. program e8_7; const n=6; var a:array[1..n]
of integer; b:array[1..n div 2] of integer; i:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; for i:=1 to n div 2 do b[i]:=a[i]+a[n-i+1]
for
i:=1 to
n div 2 do write(‘ ’,b[i]); end. 8.8. n элементі(натурал сандар) бар жиым
берілген. Мүшелері тақ сан болатын элементтер санын анықтаңыз. program e8_8; const n=5; var a:array[1..n]
of integer; i,s:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; s:=0; for i:=1 to n do
if a[i] mod 2=1 then s:=s+1; write(‘тақ элементтер саны =’,s) end. 8.9. n элементі(натурал сандар) бар жиым
берілген. 3-ке еселі элементтер санын анықтаңыз. program e8_9; const n=5; var a:array[1..n]
of integer; i,s:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; s:=0; for i:=1 to n do
if a[i] mod 3=0 then s:=s+1; write(‘3-ке еселі элементтер саны =’,s) end. 8.10. n элементі(натурал сандар) бар жиым берілген. Реттік нөмірі жұп және өзі тақ
сан болатын элементтердің санын анықтаңыз. program e8_10; const n=5; var a:array[1..n]
of integer; i,s:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; s:=0; for i:=1 to n do
if (i mod 2=0) and
(a[i] mod 2=1) then
s:=s+1; write(‘Нөмірі жұп, өзі тақ
элементтер саны =’,s) end. 8.11. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі элементтердің қосындысын
анықтаңыз. program e8_11; const n=5; var a:array[1..n]
of integer; i,sum:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; sum:=0; for i:=1 to n do
if a[i] mod 5=0 then sum:=sum+a[i]; write(‘5-ке еселі элементтер саны =’,sum) end. 8.12. n элементі(бүтін сандар) бар жиым берілген. Тақ және
теріс мәнді элементтердің қосындысын
анықтаңыз. program e8_12; const n=5; var a:array[1..n]
of integer; i,s:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; s:=0; for i:=1 to n do
if (a[i] mod 2=1) and
(a[i]<0) then
s:=s+a[i]; write(‘тақ және теріс элементтер саны =’,s) end. 8.13. n элементі(натурал сандар) бар жиым берілген. 5-ке еселі, бірақ 10-ға еселі емес
элементтердің арифметикалық орта шамасын анықтаңыз. program e8_13; const n=5; var a:array[1..n]
of integer; i,s,k:integer; c:real; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; s:=0; k:=0; for i:=1 to n do
if (a[i] mod 5=0) and
(a[i] mod 10<>0) then begin s:=s+a[i]; k:=k+1 end; c:=s/k; write(‘5-ке еселі, бірақ 10-ға еселі
емес элементтердің арифметикалық ортасы =’,c) end. 8.14. n элементі(натурал сандар) бар жиым берілген. Берілген р санына еселі элементтердің көбейтіндісін
анықтаңыз. program e8_14; const n=5; var a:array[1..n]
of integer; i,kob,p:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; pr:=1; write(‘p-ны
енгізіңіз:); readln(p); for i:=1 to n do
if a[i] mod p=0 then kob:=kob*a[i]; write(‘p-ға еселі элементтердің көбейтіндісі
=’,kob) end. 8.15. n элементі(натурал сандар) бар жиым берілген. 3-ке
еселі, бірақ 5-ке еселі емес элементтер санын анықтаңыз. program e8_15; const n=5; var a:array[1..n]
of integer; i,s:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(a[i]); end; s:=0; for i:=1 to n do
if (a[i] mod 3=0) and (a[i] mod 5<>0) then s:=s+1; write(‘3-ке еселі, бірақ 5-ке еселі емес элементтер саны =’,s) end. 8.16. n элементтен тұратын жиым берілген. Оларды мына ереже бойынша түрлендіріңіз ( кейінгі k-шы элементінің мәні): а) 1<=i<=k болғанда б) жиым элементтерін кері ретпен
орналастырыңыз; в) жиым элементтерін солға циклді түрде бір позицияға жылжытыңыз:
a) program e8_16a; const n=5; var x:array[1..n]
of integer; i,k,max:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(x[i]); end; for k:=1 to n do
begin max=x[k]; for i:=1 to k do if x[i] >max then max:=x[i]; x[k]:=max; end; for
i:=1 to
n do write(‘ ’,x[i]) end. б) program e8_16b; const n=5; var x:array[1..n]
of integer; i,z:integer; begin for
i:=1 to
n do begin write(i,‘ -нөмірлі элементті енгізіңіз:’); readln(x[i]); end; for i:=1 to n do
begin z=x[i]; x[i]:=x[n-i+1]; x[n-i+1]:=z end; for
i:=1 to
n do write(‘ ’,x[i]) end. в) program e8_16v; const n=5; var x:array[1..n]
of integer; i:integer; begin for
i:=1 to
n do begin
write(i,‘
-нөмірлі элементті
енгізіңіз:’); readln(x[i]); end; z:=x[n]; x[n]:=x[1]; for
i:=1 to n-2
do x[i]:=x[i+1]; x[n-1]:=z; for
i:=1 to
n do write(‘ ’,x[i]) end. 8.17. Кемуі бойынша реттелген екі Х және У
жиымдары берілген. Оларды бір Z жиымына тағы да кемуі бойынша
орналасатындай етіп біріктіріңіз. program e8_17; const n=5; var x,y:array[1..n]
of integer; z:array[1..2*n] of integer; i,j,k,m:integer; begin for i:=1 to n do begin write(i,‘-нөмірлі
X және Y элементін енгізіңіз:’); readln(x[i],y[i]); end; k:=0; for
i:=1 to
n do
begin k:=k+1; z[k]:=x[i]; k:=k+1; z[k]:=y[i]; end;
for i:=1 to n do
begin m:=z[i];
k:=i; for j:=1 to n do if z[j]>m then begin m:=z[j]; k:=j end; y:=z[i]; z[i]:=z[k]; z[k]:=y end; for i:=1 to n do
write(‘
‘,z[i]); end. |