Назар аударыңыз. Бұл материалды сайт қолданушысы жариялаған. Егер материал сіздің авторлық құқығыңызды бұзса, осында жазыңыз. Біз ең жылдам уақытта материалды сайттан өшіреміз
Жақын арада сайт әкімшілігі сізбен хабарласады
Бонусты жинап картаңызға (kaspi Gold, Halyk bank) шығарып аласыз
Инф олимпиада есептері
Дипломдар мен сертификаттарды алып үлгеріңіз!
Материалдың толық нұсқасын
жүктеп алып көруге болады
Информатика пәні бойынша оқушыларды олимпиадаға дайындау
(әдістемелік құрал)
М А З М Ұ Н Ы
Кіріспе.....................................................................................................
К І Р І С П Е
Қазақстан Республикасы білім беру жүйесінің стратегиялық мақсаты- жоғары білімді, бәсекелесуге қабілетті шығармашыл тұлғаның қалыптасуына қажетті оң жағдайларды жасау. Өскелең,болашағы зор жас ұрпақты қоғам талаптары мен оның мақсат,мүдделеріне сай өмір сүруге бейімдей отырып,оқытып,логикалық ой тұжырымдатып,таңғажайып ғылым саласына тартуда мектептегі пән мұғалімдерінің атқаратын ролі зор.
Ең дарынды оқушыларды анықтау,олардың бойында алға қойған мақсатқа жетудегі табандылықты,өз бетімен жұмыс істеу әдетін қалыптастыру мақсатында олимпиядалар өткізіледі. Олимпияда-оқушыларды білім жағынан өсуге ынталандыратын,олардың бойында информатикаға қызығушылықты,табандылықты тәрбиелейтін жарыс.
Олимпиядалар әр түрлі деңгейлерде өткізіледі: Мектепішілік,аудандық,қалалық,т.с.с.
Ұсынылып отырған «Информатика пәні бойынша оқушыларды олимпиадаға дайындау» әдістемелік құралда информатика пән мұғалімдеріне Паскаль программалау тілінде олимпиадаға дайындық үшін еспетер тізбегі ғана беріліп қоймай, өз тәжірибемнен алынған олимпиадаға дайындау кезеңдерін ұсынып отырмын. Бұл құралда информатика пән мұғалімдері сабақ барысында оқушылардың шығармашылық қабілеттерін көтеруге арналған денгейленген тапсырмалар берілген.. Оқушылардың білім сапасын арттыру мақсатында әр тарау соңында бақылау сұрақтарымен, тест тапсырмаларын пайдалануға болады. Теориялық материалдар қысқа және тарау мазмұнын ашатын тұрінде көрсетілген. Құрал соңында оқушыларға 2007-2009 жылдар аралығында республикалық, облыстық, аудандық олимпиада есептері, шығарлау программаларымен берілген.
Егер олимпада нәтижесі оқушының, мұғалімнің жоғары шығармашылық денгейнің көрсеткіші болса, онда мұғалімнің алданда қойлатын талаптар ерекше. Соның біреу ол осы жарысқа дайындалу кезеңі. Қызылорда облысы бойынша жалпы информатика пәні бойынша жетістіктер мәз емес. Ол мұғалімнің әлде болса олимпиадаға ғылыми зерттеу жұмысының бір түрі ретінде қарамауы. Сондықтан болар мен осы әдістемелік құралымда информатика пән мұғалімдеріне жеке –жеке әр тақырыпты өтетін мезгілі бойынша жаспарын енгіздім. Былайша айтқанда олимпиадаға дайындық журналы.
Сонымен бірге олимпиядалар информатиканы оқытудың жалпы деңгейіне де жақсы әсер етеді,оқушыларды білім сапаларын анықтауға мүмкіндік береді және жоғары деп саналатын дайындық деңгейін сипаттай отыра қандай да бір дәрежеде мүғалімге бағыт береді.Бірақ олимпиядалар оқушылар үшін жаңа,оларды қызықтыратын ақпараттың елеулі көзі болып табылмайтындығына,сондықтан тереңдетіп дайындаудың негізгі түрі бола алмайтындығына назар аудару керек.
І тарау. Турбо Паскаль ортасында
І.1. Тіл альфавиті
Компьютер белгілі бір есептерді шешу үшін адам тарапынан сол есепті қандай жолмен және қалай шығару керектігі туралы тапсырма алуы қажет. Бұл тапсырмалар бір жағынан компьютерге түсінікті болып жазылуы керек болса екінші жағынан тапсырма беруші кісіге де ыңғайлы болғаны жөн. Осындай компьютерлік тілде жазылған тапсырмалар мен командалар жинағы программа деп аталады. Ал программалық тексттерді шешу үшін пайдаланатын символдардың жиынтығы компьютерлік тіл альфавитін құрайды.
Кез келген программалық тіл символдардан, сөздерден, сөз тіркестері және сөйлемдерден тұрады. Сөздер символдардан құралады, ал операторлар сөз тіркестерінен тұрады. Turbo Pascal
тілі құрылымының қарапайымдылығы мен игеруге жеңілдігінің арқасында программалаушылар арасында кеңінен қолданылады. Turbo Pascal тілінің альфавиті келесі символдардан тұрады.
1. Латын альфавитінің 26 әрпінен;
2. Араб цифрларынан: 0,1,2,3,4,5,6,7,8,9;
3. Ұлттық альфавит әріптерінен;
4. Аранайы символдардан: + - ; ‘ , . </> () : ;
І.2. ПАСКАЛЬ ТІЛІНІҢ ОПЕРАТОРЛАРЫ
Меншіктеу операторы
Меншіктеу операторы барлық тілдерде пайдаланылатын негізгі оператор болып табылады.
Меншіктеу операторының жалпы жазылу түрі төмендегідей:
W:=Е.
Мұнда: W - айнымалы атауы, ":=" меншіктеу белгісі, Е-арифметикалық өрнек.
Мысалы: К:=19.36; М:="завод";
Џ1:=3.5+sqrt(sqrt(x)+1);
Y1:=3.5+sin(x)
Бос оператор
Бос оператор ешқандай да амал орындамайды. Бос оператор қалдырылып кеткен (жоқ оператор) оператордың орнын белгілеу үшін пайдаланылады. Әдетте бос оператор орнына нүктелі үтір ";" қойылады. Мысалы:
S:=А; R:=5;
М:=19.36;
Мұнда үшінші оператор бос оператор болады.
Мәліметтерді енгізу операторы
Енгізу операторы READ (READ-ағылшынша оқу дегенді білдіреді) пайдаланылады.
Енгізу операторының жалпы түрі (форматы) төмендегідей:
READ(а1,а2,...,аn);
Мұңдағы а1,а2,...,аn - айнымалы атаулары, оларды енгізу операторының параметрлері деп те атайды.
Мәліметтерді шығару операторы
Паскаль тілінде нәтижені экранға шығару үшін WRITE (жазу) операторы пайдаланылады:
WRITE(а1,а2, ...,аn);
Мұндағы а1,а2,...,аn - жай айнымалылар немесе апострофтар ішіне алынған символдар тобы болуы мүмкін. Мысалы, егер В=17.15 болып,
WRITE ('В =', В)
командасы орындалғанда, экранда В=17.15 дерегі көрінеді.
Нақгы сан үшін формат екі саннан түрады:
І-сан - санға берілетін барлық орын,
ІІ-сан - үтірден кейін алынатын бөлшек бөлік саны.
Мысалы:
WRITE (Џ : 5 : 2);
Мұндағы 5-нәтижеге берілген барлық орын, 2-үтірден соң алынатын бөлшек бөліктің саны.
WRITE операторын түсініктеме беруге пайдалануға болады. Мысалы, WRITE('А,В,С - мәндерін енгіз:'); READ(А,В,С)
Бүл жағдайда экранға:
А, В, С мәндерін енгіз: деген түсініктеме сөз шығады. Мәндер арасына қажетті бос орын калдыру үшін: ' ' пайдаланылады.
Айталық, Х=7, У=15, 2=11, ал, К=450,08 болсын, оларды
экранға шығарудың әр түрлі жағдайын көрсетейік.
Оператордың жазылуы: Экранда
WRITE (Х,Џ); 715
WRITE (X,'__',Y); 7_ _15
WRITE ('X=',X); Х=7
WRITE (X,'' : 3, Z); 7 11
WRITE('Х+Џ=', Х+Џ); Х+Џ=22
WRITE(Z, 'соңы'); 11 - соңы
WRITE('бітті'); бітті
WRITE(R); 4.5008+2
Мысалдар:
1-мысал. Радиусы R болатын шардың көлемін есептеуге
программа құрындар.
(*_______-______! шар көлемін есептеу ! ______._________*)
program B1(input, output);
const
рі=3.14
Var
г : геаl; (*шар радиусы*)
V : геаl; (*шар кљлемі*)
Begin
writeln ('r-мѕнін енгіз:');
геаd(г);
v:=(3/4) * рі * r * r * r;
writeln;
writeln ('нѕтиже:');
writeln ('шар кљлемі v=', V : 8 : 3);
end.
экранда R-мәнін енгіз:
0.2 Enter
нәтиже:
шар көлемі v=0.033
Паскаль тілінде дәрежелеу амалы жоқ, сондықтан дәрежелеуді жеке программа көмегімен немесе хn-дәрежесін - ехр(ln(х*n))
формуласы арқылы табады. Мысалы, у =S*x(1+x)n /15(1+x)n -1 өрнегін есептеу қажет болса, онда мына үзінді пайдаланылады: ... а:=ехр(1n(1+х)*n); у:=(S*х*а)/(15*а-1);....
2-мысал. Берілген төрт орынды санның цифрларының көбейтіндісін табуға программа құрыңдар.
Программа.
Program kob;
Var х, р, d: integer;
Begin
write ('төрт орынды сан енгіз!');
readln(х);
р:=1;
d:= х div 1000; р:=р*d;
d:= (х div 100)mod 10; р:=р*d;
d:=(x mod 100) div 10; p:=p*d;
d:=x mod 10; p:=p*d;
Write('нѕтиже=', р);
End.
Сұрақтар және жаттығулар.
1. Енгізу және шығару операторларының міндеттерін көрсетіндер?
2. Тұрақтылар - енгізу операторының параметрлері бола ала ма?
3. Енгізу жѕне шығару операторларында енгізілетін жѕне шығарылатын параметрлер санына шек қойыла ма?
4. Программада түсініктеме қалай жазылады?
5. Төмендегі Паскаль тілінде жазылған өрнектердің мағынасы қалай? Экранда не көрінеді? (*цилиндр көлемі*)WRITELN ('цилиндр көлемі')
6. Мына айнымалыларды енгізу түрін жазыңдар:
а) А, А2, АЗ, А4;
б) х және у;
7. Егер х=3, у=5 болса, онда (5,х+у) мәндерін шығарғанда экранда кандай сандар көрінеді?
8. Паскаль тілінде жазылған төмендегі операторлардың қатесін табыңдар:
а) write (у1, у2);г) write [у1,у2];
б) write (у1, у2)д) write 1.62
в) write (y1,у2;е) write (А, В/Ғ)
Программа құрылымы
Программалық текст келесі бөлімдерден тұруы мүмкін:
-
Программа тақырыбы (program);
2.Пайдаланушылар модульдерін көрсету бөлімі (uses);
3.Таңбалар бөлімі (label);
4.Тұрақтылар бөлімі (const);
5.Типтер бөлімі (type);
6.Айнымалылар бөлімі (var);
7.Процедуралар мен функциялар бөлімі (procedure, function);
8.Операторлар бөлімі (begin…end.);
9.Түсініктемелер
Пәнаралық байланыста кезең бойынша бөлінген есептер жинағы:
Сызықты программа құру
Геометрия пәнінен алынған есептер
1. Есептің шарты берілген, программасын құр.
Көлбеу призманың бүйір қабырғасы мен арасындағы бұрыш берілген. Биіктігін тап.
2. Програма денесі берілген, толықтыр.
.............................
.............................
.............................
У: = х div 10;
............................
...........................
3. Құрылған программаның қатесін тексер
Program;
Var X: integer; y:real;
Begin read (x,a);
Y:=sqr (x) + 2*a – sqr(p/2+5*sin(0.1));
End.
4. Программа құрылған, шартын өзің жаз.
Program taban;
Var a,b,c:integer; s:real;
Begin read(a,b,c);
P:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
Write(s);
End.
5. Программаның басы мен аяғы берілген, денесін тап.
Program paralli;
Var p,s:integer; h:real;
Begin read(p,s);
…………….
Write(h);
End.
6. Есептің шарты берілген, программасын құр.
Тік төртбұрыштың екі қабырғасы берілген. Оның ауданын табатын программа жаз.
7. Программасы берілген, шартын жаз.
Program uzyndyk;
Const m:=3.14;
Var r,l:real;
Begin read;
R:=5.5;
L:=2*pi*r;
Write(‘radiusy 5.5 cm bolatyn shenber uzyndygy 35cm’);
End.
8. Программаның қатесін тап.
Program san;
Var x,y:integer; k:real;
Begib read(x,y);
Sqr(r)=(sqr(x)+sqr(y));
Write(r);
End.
9. Программа денесі берілген, басы мен аяғын толықтыр.
....................
....................
....................
P:=(a+b+c)/2;
S:=sqrt( p*(p-a)*(p-b)*(p-c));
V:=s*4/3;
…………….
…………….
10. Басы мен аяғы берілген, денесін құрастыр.
Program ktb;
Var r,r1,h,l,v,s:real;
Begin
Writeln(‘radiustarymen biktikti’);
Readln(r,r1,h);
…………
Writeln(‘konus parametrleri’);
Writeln(‘r=’,r:3, r1=’,r1:3, h=’,h);
Writeln(‘v=; v:8:P3;’3;,’s=’,s:8:3);
End.
11. Есептің шарты берілген, программасын жаз.
Тік бұрышты үшбұрыштың екі катеті берілген, гипотинузасын тап.
12. Программа денесі берілген, толықтыр.
.................
.................
С:=sqrt(sqr(a)+sqr(b);
………….
Физика пәнінен алынған есептер
1. Программа құрылған, шартын өзің жаз.
Program tok;
Var I,U,A:integer; t:real;
Begin read(I,U,A)
t:=sqr(A)/sin(U)+I;
write(t);
end.
2. Құрылған программаның қатесін тексер
Program tok1;
Var I,U,A: integer;
Begin readln(I,U);
t:=i*U mod 15+a;
writeln(t);
end.
3. Программа денесі берілген, толықтыр
………….
………….
Y:=sqrt(x/(a*tan(b)+c)-);
………….
………….
4. Есептің шарты берілген, программасын құр.
Ток күші болғанда тасымалдау қаншф уақытқа созылады.
5. Программаның басы мен аяғы берілген, денесін тап.
Program sum;
Var a,b:integer; t:real;
Begin read(a,b);
……………..
Write(t);
End.
6. Есептің шарты берілген, программасын өзің құр.
Дененің жылдамдығы мен уақыты берілген. Жүріп өткен жолын табатын программа құр.
7. Құрылған программаның қатесін тап.
Program uekyt;
Var I,U,A:integer; t:real;
Begin real(I,U,A);
t:=A/*U*I
writ(t)
end.
8. Программасы құрылған, шартын жаз
Program jumyc;
Var P,t:integer; A:real;
Begin read(P,t);
A:=P*t/S+v;
Write(A);
End.
10. Программаның басы мен аяғы берілген, денесін құрастыр
Program tygyzdyk;
Var m,v:integer; p:real;
Begin read(m,v);
…………
Write(p);
End.
11. Есептің шарты берілген, программасын құр
Егер дененің массасы мен тығыздығы белгілі болса, онда оның көлемін табатын программа жаз.
12. Есептің программасы құрылған, шартын жаз.
Program kuat;
Var A,t:integer; n:real;
Begin read(A,t);
N:=A/t;
Write(n);
End.
13. Программаның қатесін тексер.
Program ;
Var a:real;
Begin read(u,r);
A=sqr(u)/r;
Write(a);
End.
14. Есептің денесі берілген, басы мен аяғын толықтырып жаз.
…………..
…………..
F:=m*A;
…………..
…………..
15. Программаның басы мен аяғы берілген, денесін жаз.
Program audan;
Const m:=3.14;
Var k:integer; s:real;
Begin
……………
Writeln(‘audan s=’,s:6:4);
Readln end.
Алгебра пәнінен алынған есептер
1. Программа денесі берілген, басы мен аяғын жаз
……………
……………
Y:=sqr(x)+2*cos(x);
……………
……………
2. Құрылған программаның қатесін тексер
Program tendeu;
Var 2,x:integer; real;
Begin read(x);
Y:=cos(sqrx+20 mod 10/sqrt(x);
Write(y);
End.
3. Есептің шарты берілген, программасын құр
Y:=cosx+(x – ni becke bolgendegi ,utin boligi):√x+5;
4. Программаның басы мен аяғы берілген, денесін тап
Program esep;
Var a,b:integer; c:real;
Begin readln(a,b);
………………
Writeln(c);
Readln end.
5. Программа құрылған, шартын жаз
Program esep1;
Var x,y:real;
Begin read(x);
Y:=sqrt(sqr(x)+sqr(5))/sqr(sin(x))*3;
Write(y);
End.
6. Есептің шарты берілген, программасын құр
y=sin(x-6x+8);
7. Программа денесі берілген, толықтыр
………….
………….
Y:=cos((sqr(x)-3*x+2)/(2*sqr(x)-5*x+3));
………….
………….
8. Программаның басы мен аяғы берілген, денесін құрастыр
Program bolu;
Var x:integer; y:real;
Begin read(x);
……………….
Write(y);
End.
9. Құрылған программаның қатесін тап
Program galia
Var x,6,1);
Begin read(x)
Y:=1/ln(sqr+(6-x-sqr(x));
Write(x);
End.
10. Программа денесі берілген толықтыр
…………….
…………….
M:=sqrt(x*x*x*x+19);
D:=sqrt(9-sqr(x))-sqrt(x+9);
N:=sqrt(x*x*x-x*x)-8*x+20);
…………….
……………
11. Есептің шарты берілген, программасан құр
Математикалық y:=(x*x+B)(A*A+cosx)+B(A+2x) есептеу программасын құр. X – айнымалы, A=3.7; B=10;
12. Есептің программасы құрылған, шартын жаз
Program ornek;
Var x,y:real;
Begin write(‘x-?’); readln(x);
Y:=sqr(ln(x)/ln(10))-exp(x)/(4*sqr(x)-1)+cos(4*x);
Writeln(‘y=’,y:4:1);
Readln end.
13. Берілген программаның қатесін тексер
Program san,
Var a:integer;
Begin readln(A);
Writeln (‘tubir=’,sqrt(A):2:4);
Readln end.
14. Есептің денесі берілген, программасын
құр
……………..
……………..
X:=sqr(a)+sqr(b);
…………….
…………….
15. Программаның басы мен аяғы берілген, денесін тап
Program ikc;
Var x,a,b,c:integer;
Begin readln(x);
……………
Writeln(‘x – tyn keri cany=’,x);
Rteadln end.
16. Есептің шарты берілген, программасын құр
Төрт таңбалы бүтін х санынының цифрларының қосындысын табу программасын құр.
17. Берілген программаның қатесін анықта
Program symbol;
Var A,b:Boolean;
Begin a:=false; b:=not b; c: not a
Writeln(‘a=’,not a,’b=’,b);
Readln end.
18. Есептің программасы құрылған, шартын жаз
Program bool;
Var a,b,c,x,y:string;
Begin a:=’men’;
B:=’mektepte’; c:=’okimyn’;
X:=a+bv+c; y:=a+b;
19. Программаның денесі берілген, толықтыр
…………..
…………..
T:=y*z/x;
…………..
…………..
20. Программаның, басы мен аяғы берілген, денесін жаз
Program syzyk;
Var a,b,c:byte; d,e:longint; x,y:real;
Begin readln(a);
…………….
…………….
Writeln(‘x=’,x:4:2); writeln(‘y=’,y:4:2);
Readln end.
Химия пәнінен алынған есептер
-
Есептің шарты берілген программасын жаз.
Егер заттың берілген газ көлемі және зат мөлшері белгілі болса, онда молярлық көлемді табатын программа жаз.
-
Есептің программасы құрылған шартын жаз.
Program tigizdik;
Var m,b: integer; s:real;
Begin read (m,v);
S (H2) = 2 г / моль /22.4л/моль = 0.089 г/л
S (ауа) = 29 г/моль /22.4л/моль = 1.295 г/л
S(CO2) = 44г/моль /22.4л/моль = 1.96г/л
S:= m/v
Write (S sqr (H) = 0.089 г/л; S (ауа) = 1.295 г/л; S(CO2) = 1.96г/л);
End.
-
Берілген программаның қатесін анықта
Program kolem;
Var v, t: integer; u:real;
Begin read (v, t);
U:= v/t;
Write (v);
End.
-
Программаның денесі берілген, басы мен аяғын жаз
………………
……………...
……………...
M:= j/v
……………..
……………..
-
Программаның басы мен аяғы берілген, денесін жаз
Program jily;
Var v, t:integer; vm: real;
Begin read (v,t);
………………
Write (Vm);
End.
Биология пәнінен алынған есептер
1. Есептің шарты берілген программасын жаз.
Түн аруы гүлінің қызыл түсі ақ түске толымсыз доминантты осы өсімдіктерді өзара будандастыр –ғанда қызғылт гүл алынды. Ғ1 және Ғ2 ұрпақтар алудың сызбанұсқасын жазатын программа жаз.
-
Есептің программасы құрылған шартын жаз.
Program kocindi;
Var A a, B b:integer; F:real;
Begin read (Aa, Bb);
F:= Aa + Bb + Cc;
Write (F);
End.
3. Берілген программаның қатесін анықта
Program gul;
Var A,B,C,D:integer; S:real; L:real;
Begin read (A,B,C,D);
L:=A*B/C*D
Write (L);
End.
4. Программаның басы мен аяғы берілген, денесін жаз
Program tozandandiry;
Var Fa, Fb: integer; Fb,Fa:real;
Begin read (Fa, Fb)
Begin read (Fb, Fa);
…………………..
Write (Fa, Fb);
End.
5. Программаның денесі берілген, басы мен аяғын жаз
………………
………………
……………...
A:= B+C;
……………
Тест сұрақтары
-
Программа дегеніміз не?
а) Компьютерлік тілде жазылған тапсырмалар мен командалар жиынтығы
ә) Программада айнымалылар мен тұрақтылардың аттарын анықтайтын, әрі программалаушының өзі белгілейтін қызметші сөздер
б) Программаның орындалу барысында әр түрлі мәндерді қабылдай алатын шама
в) Программаның орындалу барысында мәндерді өзгеріссіз қабылдайтын шама
-
Айнымалылар мен тұрақтыларды сипаттайтын типтер форматына қарай нешеге бөлінеді?
а) 4
ә) 5
б) 7
в) 2
-
Идентификатор деп –
а) Программаның орындалу барысында әр түрлі мәндерді қабылдай алатын шама
ә) Компьютерлік тілде жазылған тапсырмалар мен командалар жиынтығы
б) Программаның орындалу барысында мәндерді өзгеріссіз қабылдайтын шама
в) Программада айнымалылар мен тұрақтылардың аттарын анықтайтын, әрі программалаушының өзі белгілейтін қызметші сөздер
4. Программаның орындалу барысында әр түрлі мәндерді қабылдай алатын шама
а) Тұрақтылар
ә) Айнымалылар
б) Идентификатор
в) Программа
-
Тұрақтылар дегеніміз не?
а) Программаның орындалу барысында әртүрлі мәндерді қабылдай алатын шама
ә) Компьютерлік тілде жазылған тапсырмалар мен командалар жиынтығы
б) Программаның орындалу барысында мәндерді өзгеріссіз қабылдайтын шама
в) Программада айнымалылар мен тұрақтылардың аттарын анықтайтын, әрі программалаушының өзі белгілейтін қызметші сөздер
6.Паскаль тілінің дұрыс жазылған меншіктеу операторыының
белгісін көрсет:
а) ;
ә) : =
б) >
в) =
7. Паскаль тілінде қандай сандар типтері болады?
а) Бөлшек, аралас
ә) Оң, теріс, натурал
б) Бүтін, нақты
в) натурал, бөлшек
8. Өрнек дегеніміз не?
а) Берілген элементтерге қолданылатын амалдарды белгілі бір тәртіппен орындауды реттеп тұратын жазу
ә)Компьютерге белгілі бір әрекетті орындау үшін қолданылатын программалық тіл
б) Компьютерлік тілде жазылған тапсырмалар мен командалар жиынтығы
в) Программада айнымалылар мен тұрақтылардың аттарын анықтайтын, әрі программалаушының өзі белгілейтін қызметші сөздер
9. Паскальдағы қарапайым типтерге мыналардың қайсысы жатады?
а) dim, put, input, output
ә) array, text, set, record
б) type, string, false, true
в) integer, char, real, Boolean
10. Паскаль тілінің дұрыс жазылған стандартты функциялары:
а) Tan (x), ctr (x), log (x), lg (x)
ә) Real (x), string (x), log (x)
б) Int (x), sqr (x), sgrt (x), sin (x), cos (x)
в) Int (x), Col (x), load (x), sin (x), cos (x)
11. Компьютерге белгілі бір әрекетті орындау үшін қолданылатын программалық тіл қалай айтамыз?
а) Программа
ә) Оператор
б) Өрнек
в) Жазу
12. Программа құрылымы
а) POGRAM;
UESES;
CONST
VAR;
BEGIN;
END.
ә) POGRAM;
UESES;
CONST
TYPE
VAR;
BEGIN;
END.
б) POGRAM;
UESES;
LABEL;
TYPE;
PROCEDURE, FUNCTION;
BEGIN END.
в) POGRAM;
UESES;
LABEL;
CONST;
TYPE;
VAR;
PROCEDURE, FUNCTION;
BEGIN END.
13. Мына теңдіктегі х мәні нешеге тең?
X DIV 5 = X MOD 5
а) 30
ә) 45
б) 12
в) 14
14. Оператор дегеніміз не?
а) Компьютерлік тілде жазылған тапсырмалар мен командалар жиынтығы
ә) Компьютерге белгілі бір әрекетті орындау үшін қолданылатын программалық тіл
б) Программаның орындалу барысында әртүрлі мәндерді қабылдай алатын шама
в) Берілген элементтерге қолданылатын амалдарды белгілі бір тәртіппен орындауды реттеп тұратын жазу
15. READ операторының қызметі
а) енгізу
ә) шығару
б) сипаттау
в) тақырыбы
16. Turbo Pascal – да операторлар құрамына байланысты нешеге бөлінеді?
а) 4
ә) 8
б) 2
в) 3
17. Мына теңдіктегі х мәні нешеге тең?
16 mod 7
а) 0
ә) 9
б) 2
в) 8
18. Мына өрнектің мәні нешеге тең?
20 div = 20 mod x
а) 0
ә) 19
б) 10
в) 12
19. Turbo Pascal – да программаның орындалу қадамы бойынша жүзеге асыратын перне қандай?
а) Ғ4
ә) Ғ8
б) Ғ7
в) Ғ2
20. Turbo Pascal – дың екпінді терезесіндегі файлды басқа атау бойынша дискіге қалай сақтауға болады?
а) File - Save
ә) File – Edit - Save
б) File – Save as
в) File – Save all
21. Мына теңдіктегі х мәні нешеге тең?
X div 5 = 8
а) 30
ә) 75
б) 42
в) 52
22. Ғ8 пернесінің атқаратын қызметі
а) Программаны орындайды
ә) Программаны қадам бойынша қосалқы программаларды және модульдерді іске қоспай орындайды
б) Қорытындылар терезесін іске қосады
в) Программаны қадам бойынша орындайды
г) Дискіде орналасқан барлық Turbo Pascal программалар өшіреді
23. Ағымдағы программаны дискіде сақтау пернесі қандай?
а) Ғ2
ә) Ғ8
б) Ғ1
в) Ғ9
г) Ғ3
24. Div мағынасын түсіндір
а) Қалдық бөлігі
ә) Бүтін бөлігі
б) Сан қосу
в) Сан азайту
25. Inc (a, 5) түсіндір
а) а + 5
ә) а – 5
б) 5*а
в) 5/а
26. Айнымалылар дегеніміз не?
а) Программаның орындалу барысында әр түрлі мәндерді қабылдай алатын шама
ә) Компьютерге белгілі бір әрекетті орындау үшін қолданылатын программалық тіл
б) Компьютерлік тілде жазылған тапсырмалар мен командалар жиынтығы
в) Берілген элементтерге қолданылатын амалдарды белгілі бір тәртіппен орындауды реттеп тұратын жазу
27. Берілген элементтерге қолданылатын амалдарды белгілі бір тәртіппен орындауды реттеп тұратын жазу не деп атаймыз?
а) Оператор
ә) Өрнек
б) Идентификатор
в) Тұрақты
28. Программада айнымалылар мен тұрақтылардың аттарын анықтайтын, әрі программалаушының өзі белгілейтін қызметші сөздер .......................... деп аталады.
а) Идентификатор
ә) Программа
б) Жазу
в) Айнымалы
29. программа тақырыбынан кейін қандай тыныс белгі қойылады (POGRAM).
а) .
ә) «»
б) ;
в) :
І.3. ТАРМАҚТАЛҒАН АЛГОРИТМДЕР ЖӘНЕ ОНЫ ПРОГРАММАЛАУ
Паскаль тілінің басқару операторлары
Шартсыз көшу операторы
Паскаль тілінде негізінен операторлар ретімен орындалады. Олардың бүл орындалу тәртібін өзгерту үшін көшіру операторы – GO ТО пайдаланылады. Оқылуы: гоу ту, жазылу түрі
GOTOбелгі
Бұл оператор бойынша, программаны басқару белгісі көрсетілген операторға көшіріледі. Белгі ретінде таңбасыз 1-9999 дейінгі бүтін сан немесе символ пайдаланылады. Әдетте, шартсыз көшіру операторы программаның кейбір бөліктерін орындамай өтіп кету үшін пайдаланылады. Мысалы:
GOTO 34
10: А:=2;
34: Џ:=X/Z
Мұнда GO ТО 34 операторынан соң 34 белгісі бар оператор орындалды.
Көшіру операторы қарапайым оператор катарына жатады.
Белгі LАВЕL (белгі)-белгі бөлігінде өрнектеледі.
Мысалы, LАВЕL 10,34.
Құрама операторлар
Бірнеше операторларды бір операторға біріктіргенде шыққан операторды құрама оператор дейді. Ол оператордың жазылу түрі: ВЕОІК
1-оператор;
2-оператор;
n-1 – оператор
n – оператор
END.
Бұл жағдайда BEGIN (басы), END (соңы) қызмет сөздері операторлық жақшалар деп аталады.
Құрама операторларға шартты көшіру, тандау және қайталау операторлары жатады.
Шартты көшіру операторы
Тармақгалуы бар процестерді ұйымдастыру үшін шартты оператор пайдаланылады. Тармақталу белгілі бір шарттың орындалуы немесе орыңдалмауына тәуелді басқарылады. Бұл оператордың толық түрі алгоритмдік тілдегі тармақталу командасына сәйкес келеді.
Егер шарт ІҒ шарт ТНЕN І-серия
онда І-серия ЕLSE ІІ-серия
әйтпесе II-серия (оқылуы-иф, зен, элс).
Бітті.
Жалпы түрде бүл оператордың форматы (жазылуы):
ІҒ шарт (логикалық өрнек) Then І-оператор
Else II-оператор
Мұндағы I жѕне II операторлардың өзі қарапайым немесе құрама оператор болуы мүмкін.
Егер ІҒ сөзінен кейінгі жазылған шарт сақталса (ақиқат болса), онда ТНЕN (онда) сөзінен кейін жазылған операторлар сериясы орындалады, онда II-серия операторлары орындалмайды.
ІF сөзінен соң жазылатын шартты жазу үшін Паскаль тілінде өрнектерді салыстыру :=, >, >=, <, <=, <> белгілері пайдаланылады.
1-Есеп. Берілген х нақты саны 0-ге тең болса, онда х-ті екіге арттыр, әйтпесе х-тің үш дәрежесін екі еселе.
Шешуі.
Program Е (input,output);
Vаг х, у : геal;
begin
readln (х);
if x=0 then у:=х+2 else у:=2*х*х*х;
writeln('у=', у : 6 : 3);
write('есептеу бітті')
END.
Паскаль тілінде бірнеше қарапайым операторлардан бір құрама оператор құруға болады. Бұған мысал ретінде ах2+вх+с=0 (а<>0) шешуге арналған программа құруды қарастырайық.
-
Квадрат тендеудің түбірлерін табуға программа құрыңцар.
Шешуі.
Program В5;
Vаг а,b,с,х1,х2,d : геаl;
Begin
writeln ('а,b,с-лардың мѕнін енгіз:');
readln(а,Ь,с);
d:=sqr(b)-4*f*c;
If d<0 then
Begin
D:=0;
writeln ('нақгы түбір жоқ d=', d)
end
else
Begin
d:=ssqrt(d);
а:=2*a
х1:=(-b+d)/а; х2:=(-b-а)/а;
write (х1,х2);
end;
end.
І.4.Таңдау операторы
Берілген өрнектің мәніне тәуелді бір немесе бірнеше оператор орындалатын жағдайда тандау операторы пайдаланылады. Тандау операторы алгоритмдік тілдегі таңдау командасына ұқсағанымен бірге, аз өзгешелігі бар. Алгоритмдік тідде тандау шарт бойынша орындалса, Паскаль тілінде тұрақгылар бойынша іске асырылады.
Жазылу түрі:
Таңдау CASE өрнек ОҒ CASE -жағдай
жағдай 1-шарт: 1-серия 1-тұрақгы: 1-оператор; OҒ -солар,
жағдай 2-шарт: 2-серия 2-тұрақгы: 2-оператор; төмендегілер.
жағдай n-шарт: n-серия n-тұрақгы: n-оператор
бітті END.
Таңдау операторы былай орындалады: өрнектің мәні берілген тұрақтының қайсысына тең болса, оған сәйкес оператор орындалады да, басқару тандау операторының соңындағы операторға беріледі.
Егер өрнектің мѕні тұрақтылардың ешқайсысымен тең болмаса да, басқару таңдау операторынан кейінгі операторға беріледі.
Өрнектің мәні және тұрақтылар әрқашанда бүтін сан, тұрақты типі мен өрнек типі бірдей болу керек.
Мысалы:
CASE K+1 ОҒ
5: у:=sqr(x);
11: у:=sqrt(x);
4: z:=у*(а-b);
7: write(а,b)
END.
6-Мысал: Апта күндерінің нөмірі бойынша аттарын анықтауға программа құрындар.
(*-------------------! апта күндері !-----------------------*)
Ргоgram АРТА (input, output);
Vаг N: ; (*аптадағы кџн нљмірі*)
Веgіn
Writeln ('күн нөмірін енгіз:');
Read(n)
Case n of
1:WRITELN('дүйсенбі');
2:WRITELN('сейсенбі');
3:WRITELN('сәрсенбі');
4:WRITELN('бейсенбі');
5:WRITELN('жұма');
6:WRITELN('сенбі');
7: WRITELN ('жексенбі')
END
Экранда:
күн нөмірін енгіз: 5
жұма
7-Мысал. Кез келген жыл мерзімін енгізіп, сол жылдың шығыс календары (қазақша жыл санау) бойынша қай жануардың атына сәйкес келетінін анықтайтын программа құрайық.
Program jil
Vаг g : іnteger;
Begin
Write ('жыл мөлшерін енгіз:')
Read1n(g);
Write(g:4,'жыл');
CASE n (g mod 12) OF
0:WRITE ('мешін');
1:WRITE('тауық');
2: WRITE('ит');
3:WRITE('доңыз');
4:WRITE('тышқан');
5: WRITE('сиыр');
6:WRITE('барыс');
7: WRITE('қоян');
8: WTRITE(ұлу');
9:WRITE('жылан');
10:WRITE('жылқы');
11:WRITE('қой');
END;
WRITELN('жыл болды');
END.
Сұрақтары және жаттығулар.
1. Қандай жағдайларда шартты оператор пайдаланылады?
2. Шартты оператордың жазылуының қандай түрлерін білесіндер. Олардың мағына жағынан ерекшелігі неде?
3. Операторлық жакдіа қай жағдайда пайдаланылады?
4. Қай жағдайларда оператор соңына ";" нүктелі үтір қойылады, ал қай жағдайда қойылмайды?
5. Шартты операторға мысалдар келтіріңдер?
6.Шартты операторды пайдаланып, у=1/(х-1)+1/(х-2) мәнін есептеуге программа құрыңдар?
7. үш санның ішінен үлкенін табуға программа құрыңцар.
8. Мына программада анықгалған функцияның графигін
сызыңдар:
IF SQR(х)>2 THEN Begin if х>2 then у:=х*х*х else у:=8 end else у:=8*sqr(х)
9.Берілген нақты х аргументі үшін төмендегі функциялардың мәндерін есептеуге арналған программалар жазындар:
10.Көп тармақгы алгоритмдерді программалаудың әдістерін пайдаланып, функциялардың мәндерін есептеуге программа жазындар:
12.Таңдау операторы қандай жағдайларда пайдаланылады? Оның алгоритмдік тілден өзгешелігі неде?
13.Тандау операторына мысал келтіріндер.
І.5. ЦИКЛДІК АЛГОРИТМДЕР
Есептерді шешу барысында біртипті әрекеттерді көп рет қайталау қажеттілігі жиі кездеседі. Бұл ѕрекеттерді анықтайтын параметрлердің мәндері әртүрлі болады.
Осындай әрекеттерді жүзеге асыратын алгоритмдер циклдік, ал әрекеттердің көп рет қайталанатын бірізділігі(циклдің денесі) циклдер деп аталады. Циклдерді пайдалану ықшам программалар көмегімен есептеулердің үлкен көлемдерін орындауға мүмкіндік береді. Алдын-ала берілген жѕне белгісіз сандар қайталауларымен циклдер ажыратылады.
Қайталану саны белгісіз циклдер
Циклді қанша рет қайталау керек екені алдын-ала белгісіз болады, бірақ бір шарт орынды болып тұрғанда ол орындалуға тиіс.
Қaйталанатын процестерге программа құру
Паскаль тілінде қайталау процесін үш түрлі жолмен ұйымдастыруға болады:
- алдын ала берілген шарт бойынша қайталауды ұйымдастыру;
- келесі шарт бойынша қайталауды ұйымдастыру;
- параметрдің мәні бойынша қайталауды ұйымдастыру.
Алдын ала берілген шарт бойынша қайталау
Алдын ала берілген шарт бойынша қайталау кљп жағдайларда қайталаудың саны белгісіз болған жағдайда пайдаланылады. Бұл оператор WHILE (оқьшуы-уаил) – әзір және DO (оқылуы-ду) – орындау қызмет сөздерінің Көмегі арқылы орындалады да, алгоритмдік тілдегі «әзір» қайталану командасына сәйкес келеді. Оның жазылу түрі мынадай:
Әзір шарт WHILE шарт DО
Цб BEGIN
сериясерия (цикл денесі)
Цс END
Мұнда шарт орнында логикалық өрнек тұруы да мүмкін. Серия көп жағдайларда циклдің денесі деп аталады да, операторлық ашылатын BEGIN және жабылатын END жақша ішіне алынып жазылады. Бұл операторды жалпы түрде былай жазуға да болады:
While b do p
Мұндағы В – шарт (логикалық љрнек), Р – операторлар (циклдың денесі). Бұл оператор былай орындалады: алдымен шарт тексеріледі, егер шарт орындалса (сақгалса), онда циклдың денесі орындалады, одан соң қайтадан шарт тексеріледі, жѕне тағы сол сияқгы, бұл процесс қашан шарт сақталудан қалғанша қайталанады. Егер шарт сақталмаса, басқару операторлық жақшаның END соңында тұрған операторға көшіріледі. Басқаша айтқанда, логикалық өрнектің мәні жалған болғанша, қайталану денесі қайталанып орындала береді.
6-мысал. Берілген натурал М санынан үлкен Фибоначчи санын табу керек.
Шешуі. Фибоначчи саны.
Un+2 =Un+1 +Un , U0 =1, U1 =1 заңдылығы бойынша анықталады:
PROGRAM ҒІВОNАSHІ;
Vаr m,u,u1,u2:integer;
Begin
Write('m-санын енгіз:');
Readln(m);
u:=0; u1:=1; u2:=1;
While u2<m do
begin
u2:=u1+u;
u:=u1; u1:=u2
end;
Writeln('u=',u)
END.
7-мысал. Sinх функциясының мѕнін Е=10-5 дәлдігі бойынша қатарға жіктеуді пайдаланып табуға программа құрайық.
Sinх=х= x-x3 /3!+x5 /5!+…+(-1)n-1 x2n-1 /(2n-1)!+… = (-1)n-1 x2n-1/(2n-1)!
Алгоритмді құру барысында бұл қатардың келесі мүшесінің мәнін табу үшін оның қатар орналасқан екі мүшесінің қатынасын тауып, есептелген әрбір мүшені сол қатынастың мәніне көбейту кaжет.
Ап+1 /an= x2n+1/(2n +1)!: x2n-1/(2n-1)!=х2n+1[(2n +1)!/x2n-1 (2n +1)!=x2 /2n(2n+1)
Программа
PROGRAM SINX;
Vаr n : integer;
а, х, sinx : real;
Begin
Write('х-ті енгіз:');
readln(х);
х:=х*Р/180;
а:=х;
sinx:=а;
n:=1;
While ABS(а)>ерs do
Begin
а:=-а*х*х/(2*n*(2*n+1));
sinx:=sinx+а;
n:=n+1
END
Writeln('sinх=', sinх : 6 : 4)
END.
Келесі шарт бойынша қайталау операторы
Бұл оператор көп жағдайларда қайталаудың саны белгісіз болған жағдайда пайдаланылады. Оның жазылу түрі:
REPEAT
қайталау денесі (серия)
UNTIL логикалық өрнек
Мұндағы REPEAT – қайтала, UNTIL – соған дейін – қызмет сөздері.
Оның орындалуы: қашан логикалық өрнектің мѕні ақиқат болғанша циклдің денесі қайталана береді.
Алгоритмдік тілде бұл қайталануды «Цикл-дейін» дейді, оның жоғарыда көрсетілген «Цикл-әзір»-ден өзгешелігі мұнда қайталанатын командалар сериясы (қайталау денесі) кемінде бір рет орындалады. Демек, бұл қайталануда алдымен циклдың денесі орындалады да, одан соң шарт тексеріледі (блок-схеманы қараңыз).
Оператордың соңы UNTIL қызмет сөзімен бітетін болғандықтан, мџнда операторлық ашылатын және жабылатын жақшалар орнына жазылатын BEGIN және END қызмет сөздері жазылмайды.
Егер қайталау денесінде көшіру операторы болып, ол циклдың сыртындағы оператордың белгісіне басқаруды берсе, онда циклдың орындалуы ары қарай жалғаспайды.
8-мысал. Х=8,6,4,2 болғанда, у= х2 мәндерін табатын программа құрайық.
PROGRAM В10;
Vаr х, у : integer
Begin
Writeln('--------');
Writeln('!x ! y !');
Writeln('--------');
X:=8;
Repeat
у:=х*х;
Writeln ('!', х:3, '!', у:5, '!');
х:=х-2;
Until=0;
Writeln('-------------`)
END.
Бұл программада циклдың денесі қашан х-тің мәні нөлге тең болғанша (яғни, егер өрнек болса, онда өрнектің мәні ақиқат болғанша) қайталанады. Мәндер кесте түрінде беріледі.
9-мысал. Табуляция есебі.
F(X)=sinax+ /cosax
функциясының [0,8] аралығында (жалпы тџрде [b,с] аралығында) h қадам бойынша кестесін программа жазайық.
Программа.
Program В11;
Vаr f, h, а, х : rеаl;
Begin
Writeln ('а, h-енгіз:');
Readln(а,h);
Writeln('--------`);
Writeln (' ! х ! F(х) ! ');
Writeln (' ------ ');
х:=0;
Repeat
f:= sin(а*х)+sqrt(а*х)/cos(а*х);
Writeln ('!', х : 3 : 2,`!`, Ғ : 7 : 3, '!');
х:=х+h;
Until X=8;
Writeln (' ---- ')
END.
10-мысал. N! Есептеуге программа құрайық.
1-вариант. N!=1*2*3*...*n
Рrogram В12; (*факгориал есептеу*)
Vаr n, і : іnteger;
р : rеаl;
Begin
Write ('n-енгіз:');
Readln (n);
р:=1; і:=0;
While і<n do
Begin
і:=і+1;
р:=р*і
end;
Writeln ('n!=', р)
END.
Көп жағдайларда қайталану саны белгілі болғанда, шартты параметрлі қайталану операторын пайдалануға болады. Параметрлі қайталану операторының жалпы түрі алгоритмдік тілдегі параметрлі қайталану командасына:
і үшін m1 бастап m2 дейін h қадам
Цб
серия
Цс
сәйкес келеді де, былай жазылады:
ҒОR і:=m1 ТО (DOWNTО) m2 do
BEGIN
END
Мұндағы ҒОR – үшін, ТО – дейін, DО – орындау деген мағынаны беретін қызмет сөздері; і-циклдің параметрі. І-Паскаль тілінде міндетті түрде бүтін типтегі айнымалы болуы қажет;
M1, M2 – сәйкес параметрдің бастапқы және соңғы мәндері, олар бүтін сандар болуы немесе бүтін мән беретін арифметикалық өрнектер болуы мүмкін.
Паскаль тілінде параметрдің қадамы тек екі мән: 1 немесе -1-ді ғана қабылдай алады.
Қадамның мәніне тәуелді операторда ТО немесе (DOWNTO-төмен, ТО-дейін, DOWNTO-азайту) қызмет сөздері пайдаланылады. Егер кадам 1-ге тең болса, онда ТО, ал қадам -1-ге тең болса, онда DOWNTO пайдаланылады.
Оператордың орындалу тәртібі:
а) параметрдің мәні m2-мен салыстырылады, егер ол m2-ден кіші болса, онда циклдің денесі бір рет қайталанады. Ал ол m2-ден үлкен болса, онда басқару цикл денесінің соңындағы операторға беріледі де, қайталану аяқгалады;
ѕ) әрбір қайталанғанда, параметрдің алғашқы мәніне бір қосыла отырып, параметрдің ағымдағы мәні m2-ден артық болғанша циклдың денесі қайталана береді.
Егер m1 жѕне m2 арифметикалық өрнектер болса, онда олардың мәндері циклдың орындалу алдында бір-ақ рет орындалады.
Мысалдар.
Оператор Нәтиже
FOR і:=1 TO 6 DO WRITE(і:2);
123456
FOR і:=6 TO 6 DOWN TO 1 DO WRITE(і:2);
654321
FOR С:='а' TO 'е' DO WRITE (С:2);
а b с d е
FOR С:='е' DOWNTO 'а' DO WRITE (С:2);
e d c b a
11-мысал. Барлық латын әріптерін экранға шығаруға программа құру.
Шешуі:
Program В16;
Vаr SIМ : СНАR;
Веgin
Writeln('латын әріптері:');
FOR SIМ:='А' ТО 'Z' DO
Write(',', SIМ)
END.
Нәтиже: латын әріптері: А; В, ..., Z экранға шығады.
12-мысал. A1 а2,..., аn сандарының арифметикалық орта мәнін табуға программа құру.
S= i /n
Шешуі:
Программа:
Program В17;
Vаг n, і : integer;
t,а :геаl;
Begin
і:=0;
Writeln ('N-санын еніз:');
Read (a);
Ғоr і:=1 Іо N do
Begin
Writeln ('а-ларды енгіз:');
Read (а);
t:=t+a;
END;
t:=t/n;
Writeln ('арифметикалық орта t=', t : 5 : 3)
END.
13-мысал. N!- ды есептеуге программа құрайық.
Программа.
Рrogram ҒОSТ;
Vаr p, і : integer;
Веgin
Write ('n-санын енгіз:');
Readln(n); p:=1;
For і:=2 tо n do Р:=Р*і;
Write (n, '1=', Р)
END.
Сұрақтары және жаттығулар.
1. Қайталану операторлары қандай міндеттер атқарады?
2. Үш қайталану операторларының бір-бірінен өзгешелігі неде?
3. WHILE операторында қай кезде циклдің денесі орындалады, қай кезде орындалмайды?
4. FOR операторында параметрлі қайталану қадамы қандай болады? Оған тәуелді оператордың жазылуында қандай өзгеріс болады?
5. REPEAT операторының шарты бірден орындалса, онда оның циклдің денесі орындала ма?
6. Қандай жағдайларда бұл үш оператордың қайсысын пайдалану қолайлы болады?
7. Р-натурал сан болса, ap есептеуге программа құрыңдар.
8. Төмендегі өрнектердің мәндерін табута программа құрындар:
а) 1+1/2+1/3+…1/n, n>=2;
б) 1/1*2+1/2*3+…1/(n-1)n , n>=2;
b) 1-1/2-1/4-…+(-1)n/n, n>=2;
g) (1+1/12)(1+1/22)…(1+1/n2); n>=2;
9.Берілген санның барлық бөлгіштерін өсу тәртібімен жазуға программа құрыңдар.
10.Берілген n санның ішіндегі оң жѕне теріс сандарының қосындысын, қосындылардың абсолют шамасы бойынша үлкенін табындар.
11. Берілген нақты тізбектің элементтерінің ең үлкені мен ең кішісінің айырмасын табуға программа құрындар.
І.6. Массивтер
Паскаль тілінде жеқе айнымалыларды ғана өңдеп қоймай, айнымалылардың жиынын (тобын) да өңдеуге болады.
Массив дегеніміз - бір типтегі берілгендер жиыны. Басқаша айтқанда, массив - бір атауға біріктірілген айнымалылардың реттелген тізбегі. Айнымалылардың - массив элементтерінің типтері бірдей болады. Массив бір ғана атпен белгіленеді. Мысалы, нақты сандардан құрылған тізбекті К атаулы массив деуге болады.
Мысалы:
1.6, 14.9, -5.0, 8.5, 0.46 - ны бір өлшемді массив деп, оған А деп атау беруге болады. Массивтің әр элементі массивтің атымен белгіленеді де, оның индексі қойылады. Массив элементтері индекстері бойынша реттеліп жазылады. Мысалы, А,, А2,...,Аn немесе жалпы түрде Аj,i=1,2,...,n. Паскаль тілінде массив элементтерінің индексі алгоритмдік тілдегі тәрізді тік жақшаға алынып жазылады, мысалы, А[і]. Жоғарыдағы массивте А[1]=1.6, А[2]=14.9 және т.с.с. мәндер қабыддайды.
Сөйтіп, Паскаль тіліндегі массив ұғымы алгоритмдік тіддегі таблица үғымына сәйкес келеді. Алгоритмдік тілдегі ТИП АТАУ өлшем (мысалы, нақ таб А[1:14]) орнына Паскаль тілінде атау : массив [индекстердің алғашқы .. соңғы мәні] ОF элемент типі - түрінде жазылады.
Егер программада массив пайдаланылатын болса, онда ол айнымалы VАR бөлігінде немесе тип ТҮРЕ бөлігінде бейнеленуі қажет.
Массив айнымалы бөлігінде былай бейнеленеді:
VАR массив аты : ARRAY[t1] ОҒ t2;
Мұндағы ARRAY (массив), ОF (одан) - қызмет сөздері, t1-REAL, INTEGER базалық типінен өзге кез келген стандартты тип. Индекстің типі ретінде шектелген, саналатын, логикалық жѕне литерлік типтер пайдаланылады. Мысалы,
Vаг lit=аrrау[сhаr] оf геаl; оgr=аггау[5..15] оf сhаr; bоl=аrrау[bоо1еаn] оf іnteger;
t2-құраушылар типі, Паскаль тілінде пайдалануға болатын массив элементтерінің типі. Мұны пайдалансақ, жоғарыдағы мысалдағы массивті айнымалы бөлігінде былай бейнелеуге болады:
Vаr а : аrrау[1..5] оf real;
Мұндағы А - элементтері, REAL типтегі массив аты, ал индекс 1-ден 5-ке дейін өзгереді.
Индекс типі стандартты, бүтін немесе нақты бола алмайды. Сондықтан бейнелеуді былай жазуға болмайды:
VAR а : аггау[1..5] оf real;
немесе
VAR а : arrау[integer] оf real;
Массивтерді дұрыс жазуға мысалдар келтірейік:
VAR mas: аrrау[1..n] оf real;
жыл : аrrау[қаңтар.. желтоқсан] оf integer;
L: аrrау[жол] оf boolean;
М1 : аrrау[сhаr] оf шеңбер;
Егер бірнеше массив бірдей базалық, жѕне индекстік типте болса, онда оларды бейнелегенде бір массив ретінде үтір арқылы бөліп жазуға болады. Мысалы:
Vаr а, b, с : аrrау[1..10] оf real;
мұнда әрбір А,В,С - массивтері, элемент - типтері нақты болатын 10 элементтен тұрады.
Программада "индекс" және "индекстің типі" ұғымдарын шатастыруға болмайды.
Индекс типі массивті бейнелегенде пайдаланылса, индекс массив элементтерін белгілеу үшін операторлық бөлікте пайдаланылады. Индексті бейнелегенде қандай тип берілсе, индекс сол типте ғана болуы қажет.
Индекс өрнек, айнымалы немесе тұрақты болып берілуі мүмкін.
Сондықтан да көп жағдайларда массивтерді индексті айнымалылар деп те атайды. Ал индекссіз айнымалыларды массивтерден ажырату үшін қарапайым айнымалылар дейді. Базалық типтегі айнымалыларға қандай амалдар қолданылса, массив элементтеріне де сондай амалдарды қолдануға болады.
Мысалы, программаның операторлық бөлігінде массив элементтеріне мынадай амалдар:
А[3]:=С[4]+5;
S:=S+Х[К];
Р:=Х[3*і+1];
және т.с.с. қолданылады.
Егер массив атауында бір ғана индекс болса, онда ол массивті бір өлшемді, ал екі индекс болса - екі өлшемді және т.с.с. п индекс болса, n өлшемді массив дейді. Бір өлшемді массив вектор элементтері, ал екі өлшемді массив матрица деп аталады.
Массив элементтерін енгізу немесе шығару бөліктерін программа үзінділері арқылы көрсетейік:
А)енгізу:
For і:=1 tо n do геаd(A[i]);
Ә)шығару:
Foг і:=1 tо n dо
Write (A[i],' ' );
--------------------
Массив элементтерін кездейсоқ сандармен де енгізуге болады. Мысалы, массив өлшемі алдын ала енгізіледі де, 100-ге дейінгі сандардан кездейсоқ түрде массив элементтері енгізіледі:
For і:=1 tо n dо
с[і]:=random(100);
Мысал. 13 бүгін саннан тұратын тізбектің (массивтің) арифметикалық орташасын және әр элементтің арифметикалық орташадан өзгерісін табуға программа құрайық.
Program ВОL1;
Vаг х : аrrау[1.13] оf integer;
і : іnteger;
S : геаl;
Веgin
S:=0;
Writeln('сандарды бос орын қалдырып енгіз:');
For i:=1 to 13 do
bеgin
read(х[і]);
S:=S+х[і];
End;
Writeln;
S:=S/13;
Writeln('S=', S:8:4);
For і:=1 tо 13 dо
Writeln(S-х[і])
END.
Массивтің тип бөлігіндегі жазылуы. Массив тип бөлігінде былай бейнеленеді:
TYPE тип аты= ARRAY[T1] OF T2
VAR массив аты : тип аты;
Мұнда тип ТҮРЕ бөлігінде массивтің типі көрсетіледі де, одан соң айнымалы VAR бөлігінде осы типке жататын массивтер көрсетіледі. Массивті ТҮРЕ бөлігінде бейнелеу, бейнелеулер бөлігінің көлемін үлкейтеді, бірақ программаны тез жөндеуге, Программада кљп қате жібермеуге көмектеседі.
Мысалы, программада нақгы 40 элементтен тұратын А массив пайдаланылатын болса, онда оны тип бөлігінде былай өрнектейді:
ТҮРЕ m=аrrау[1..40] оf геаl;
VAR а : m;
Мұндай бейнелеудің тиімділігі сонда, егер программада типі М болатын бірнеше массив А,В,С,В пайдаланылатын болса, онда олар үшін:
VAR А, В, С, В : m;
түрінде жазса жеткілікті.
Мысал. Мына заңдылыққа ai= a[i/2]+ai-1; a1=1,2,...,20 бағынатын а1, а2, ... , а20 тізбегін құруға программа жазайық.
Шешуі.
Ргоgram ВОL2 ;
Туре р=аггау[1..20] оf integer;
Vаг a, р, і :integer;
Веgіn
a[1]:=1;
Writeln(a[1]);
Fог і:=2 tо 20 dо
Begin
A[i]:=a[i div 2]+a[i-1];p
Writeln(а[і])
End
ЕND.
Енді масив элементтеріне қолданылатын амалдарға мысалдар қарастырайық.
Массивті толтыру. Массивті мына формула бойынша толтырайық: с[і]=а*і2.
Program summa ;
Uses crt;
Vаг с:аrrау[1..100] оf word;
і,n:integer;
а:іnteger;
Веgin
Write('n=');
Readln(n); Write('а='); Readln(а);
Fоr і:=1 tо n do c[і]:=а*sqr(і);
Fоr і:=1 to n do
Writeln('c[',i,']=' ,c[i], ' ');
Repeat until keypressed
END.
Массив элементтерін алмастыру.
Бүтін сандардан құрылған екі өлшемді массив берілген. Массив элементтерінің арифметикалық ортасынан кіші болатын барлық элементтерін бүтін мәніне дейін дөңгелектелінген арифметикалық орта мәнімен алмастыратын программа кұру. Массив 0-ден 100-ге дейінгі сандармен кездейсоқ түрде толтырылады.
Ргоgrаm almastyru;
Uses crt
Vаг с:аrrау[1.. 100,1. .100] оf word;
і:іnteger; а:геаl;
Веgіn
Writeln('n='); Readln(n);
а:=0;
Fоr і:=1 tо n dо
For j:=1 tо n dо
Bеgіn
с[і,j]:=гаndom(100);
а:=а+с[i,j]
end;
Fоr і:=1 tо n dо
For j:=1 to n dо
writeln('c[' ,i, ' ,'j,']',c[i,j],' ');
а:=а/n;
Writeln('arif.orta=,' a:5:2);
Fоr і:=1 to n dо
Fоr j:=1 to n do
If c[i,j]<a then с[і,j]:=round(а);
Fоr і:=1 to n do
For j:=1 to n do
Repeat until keypressed;
END.
Массив элементтерін өшіру. Бүтін сандардан құрылған сызықтық массив берілген. Массивтің к-сыншы элементін өшіретін программа құру.
Ргоgram Misal;
Uses Crt;
vаr с:аrraу[1..100] of integer;
і,n,l:integer;
Begin
Randomize;
Write('n='); {массив өлшемін енгізу}
геаdln(n);
(массивті толтыру}
For і:=1 tо n dо
с[і]:=random(100);
For і:=1 tо n dо (алғашқы массив элементтін шығару}
read(i);
{көрсетілген элементті өшіру}
For і:=1 tо n do
{көрсетілген элемент өшірілгеннен кейінгі массивті шығару}
Ғоr і:=1 tо n-1 do
writeln (c[i]);
end.
Массивке элементтер қосу. Массивке элемент қосқанда қандай да бір мән қойылатын орыннан бастап, массив элементтері оңға жылжиды. Бұдан массивтің ұзындығы 1-ге артады.
Бүтін сандардан құрылған к-сыншы элементінің орнына массивтің ең кіші элементіне тең мәнді қоятын программа құру.
Элементтерінің саны алдын-ала белгілі бір типті индексті айнымалылардың жиынтығын массив деп атайды. Массивтің типі күрделі болып табылады. Массивтерді программада қолдану үшін, оларға белгілі бір ат беріледі. Содан соң программаның VAR немесе TYPE бөлімінде ARRAY қызметші сөзімен сипаттап, компьютердің жадынан массив элементтеріне орын бөледі. Жалпы жазылу түрі төмендегідей:
TYPE “массив атауы”=ARRAY[X1]OF X2;
VAR “массив атауы”:ARRAY[X1]OF X2; мұндағы:
“массив атауы” – массивті белгілеген идентификатор, X, A, MAS т.б.
ARRAY – массив ұғымын білдіретін қызметші сөз.
OF – қызметші сөз(бұл жерде жалғауларын білдіреді, мысалы бүтін шамалардан)
X1 – массив индексінің типі, нақтыдан басқа барлық типтер қолданылады.
X2 – массив элементінің негіздік типі.
Программада массивтерді сипаттаудың бірнеше жолдары бар. Алдымен типтер бөлімінде массивті бір идентификатор арқылы сипаттап алып, кейін айнымалылар бөлімінде массив атауын сол идентификатор арқылы сипаттауға болады. Сондай-ақ бірден айнымалылар бөлімінде де массивті толық сипаттап кетуге де болады.
Егер программада бірнеше массивтің индекстері мен негіздік типтері бірдей болса, онда оларды бір тізімге біріктіріп жазып сипаттауға болады, төмендегі мысалдарда элементтері нақты сан болатын А, В, С массивтерінің бәріне де компьютердің жадынан 100 элемент бөлінген, сондықтан олар бір тізімге біріктіріліп сипатталған.
Массивтердің типтер бөлімінде сипатталуы:
CONST N=100; {N-элементтер саны}
TYPE Mas=Array[1..N] Of Real;
Element=(Ge,C,O,N,Na,K,Li,Cu,Zn);
Gaz=Array[Ge..N] Of Integer;
VAR A,B,C:Mas; X:Gaz;
Массивтердің айнымалылар бөлімінде сипатталуы:
CONST N=100;
VAR A,B,C:Array[1..N] Of Real;
D,E:Array[1..5] Of Char;
Mezgil:Array[1..10]Of String;
Y,Z:Array[1..20] Of Byte;
R:Array[‘A’..’Z’] Of Char;
P:Array[1..10] Of String;
Жоғарыда сипатталған массивтердің барлығының да элементтерінің бір индексі бар. Бұндай массивтерді бір өлшемді массивтер дейді.
Есептеулерде бір өлшемді массивтермен қатар көп индексті массивтер де кездеседі. Оларды индексінің санына қарай - өлшемді массивтер деп атайды. Солардың ішінде Паскаль программаларында екі индексті массивтер кеңінен қолданылады. Оларды көбінесе матрицалар деп атайды. Матрица элементтерінің бірінші индексі қатардың , екіншісі – бағанның нөмірін білдіреді.
Екі өлшемді массивтердің типтер бөлімінде сипатталуы:
CONST N=100; M=100;
TYPE Mas=Array[1..N, 1..M] Of Real;
VAR A:Mas;
Екі өлшемді массивтердің айнымалылар бөлімінде сипатталуы:
CONST N=100; M=50;
VAR A:Array[1..N, 1..M] Of Real;
B:Array[1..3, 1..7] Of Integer;
Массивтермен амалдар орындау.
Массивтердің өзімен жұмыс істеу үшін массивтің өз атауы қолданылады. Массивтің өзі тек қана “тең ”, “тең емес” және меншіктеу амалдарына ғана қатыса алады. Бұл амалдарға қатысатын массивтердің типтері мен элементтер саны бірдей болуы керек.
Мысалы мынадай массивтер берілсе:
VAR X,Y: Array[1..5] Of Byte;
Бұл массивтерге келесі амалдар қолданғанда:
X=Y – егер массивтердің индекстері сәйкес элементтері тең болсатең болса, онда нәтиже “ақиқат” болады(True).
X<>Y – егер массивтердің индекстері сәйкес элементтерінің кемінде біреуі тең болмас, онда нәтиже “ақиқат” болады(True).
X:=Y – X массиві Y массивінің барлық элементтерін меншіктейді, ал Y массивінің элементтері өзгеріссіз қалады.
Массив элементтерімен амалдар орындау.
Массивті сипаттап болғаннан кейін, операторлар бөлімінде массив элементтеріне жай айнымалылармен орындалатын әртүрлі амалдар қолдануға болады. Оларды әртүрлі өрнектерде операндалар орнына, For, While, Repeat операторларының параметрлерінде, логикалық амалдарда салыстыау элементі ретінде пайдалануға болады. Программалық тексте массивтің әр элементі массивтің аты мен индексі арқылы жазылады. Элементтер индекстің мәндері арқылы реттеледі. Бір ескеретіні “индекс” және “индекстің типі” түсініктерін араластыруға болмайды. “Индекстің типі” түсінігі тек массивті сипаттайтын бөліктерде ғана қолданылады. Ал “индекс” түсінігі операторлар бөлігінде массив элементтерін белгілегенде қолданылады. Индекс ретінде әртүрлі өрнектер қолдануға болады. Көбінесе өрнектердің қарапайым бір түрі ретінде тұрақтылар мен айнымалылар қолданылады. Сондықтан да массив элементтерін басқаша индексті айнымалылар деп атайды. Егер математикада индекс жай жақшаға алынып немесе төменгі регистрде жазылса, Паскаль программаларында массив индекстері тік жақшаларға алынып жазылады.
Массив элементтері программадағы өрнектер мен меншіктеу операторларының сол жағында да, оң жағында да тұруы мүмкін. Массив элементтерінің негіздік типіне қолдануға болатын амалдарды массив элементтеріне қолдануға болады, мысалы:
А(51, -15, 5.5, -8.1, 15, 0, 8) – А массиві 7 элементтен тұрады, элементтердің программада сипатталуы мен жазылуы:
VAR A:ARRAY[1..7] Of Real;
A[1]= 51; A[2]= -15; A[3]= 5.5; A[4]=-8.1; A[5]=15; A[6]= 0;A[7]=8
Массив элементерінің индекстері өрнектер мен операторларда тік жақшаларға алынып жазылады:
Y:=5*A[1]+SQR(A[2]+A[3]); X:=COS(A[5])+Sin(A[5]);
For k:=1 To 10 Do Begin
Read(A[k]); Writeln(A[k]); A[k]:=A[k+1];
If A[k]<5 Then S:=S+A[k];
While A[k]>=80 Do Begin S:=S+A[k]; k:=k+1 End; End;
Массив элементтерін ендіру және шығару.
Массив элементтерін ендіру және шығару цикл арқылы жүзеге асырылады. Егер элементтеді ендіру үшін Read операторы қолданылса, онда элементтер бір қатарға жазылып ендіріледі. Ал Readln операторы қолданылса, онда әр элементті жаңа қатардан енгізу керек.
........................................
Readln(N);
For K:=1 To N do Read(A[K]);
…………………………………..
Readln(N); K:=1;
Repeat Read(A[K]); K:=K+1
Until K>N;
…………………………………..
Readln(N); K:=1;
While K=<N Do Begin
Rеadln(A[K]); K:=K+1 End;
…………………………………..
Програманың орындалу нәтижесінде N элементтен тұратын массив эементтерін клавиатурадан ендіруді ұйымдастырады, программа циклді оқығанда Read операторын N рет оқып тоқтап, массив элементтері мәндерін қашан клавиатурадан енгізілген күтіп тұрады, бұл жерде К айнымалысы цикл параметрі қызметімен қоса массив индексі ретінде де қолданылып тұр.
Кейде программаның әр орындалуында массив элементтерінің мәндерін қайта-қайта клавиатурадан енгізу керек болады, бұл әсіресе енгізілетін элементтер саны өте көп болған кездерде программа орындаушы кісіні жалықтырып жібереді, сондықтан бұндай жағдайларда оларды бірден тұрақтылар (CONST) бөлімінде енгізіп қойса да болады:
CONST N=5; A:ARRAY[1..N] OF REAL=(40.5, 48, 47.1, 52.3, 11.2);
B:ARRAY[1..9] OF REAL=(31, 25, 40, 1.5, 48, 54.7, 12.3, 54.5, 21);
Массив элементтерін шығару процесі де ендіруге ұқсайды. Егер цикл денесінде элементтерді ығару үшін Write операторы қолданылса, онда массив элементтері экранға бір қатарға бір-біріне жабысып жазылып шығады. Бұл жағдайда нәтиженің көрнекілігін арттыру үшін Write операторында массивтен кейін бос орын жазылады, Ал Writeln операторы қолданылса, онда массивтің әрбір элементі жаңа қатарға жазылып шығады.
................................................
For K:=1 To N Do Write(‘A[‘,K,’]=’,A[K], ‘ ‘);
……………………………………..
K:=1;
Repeat Writeln(A[K]; K:=K+1
Until K>N;
…………………………………......
K:=1;
While K=<N do
Begin Write(A[K], ‘ ‘); K:=K+1 End;
……………………………………..
Программаның орындалу нәтижесінде N элементтен тұратын массив элементтері экранға шығады, бұл жерде де K айнымалысы цикл параметрі қызметімен қоса массив индексі ретінде де қолданылып тұр.
Екі өлшемді массивтердің элементтерін ендіру немесе шығару үшін екі цикл ұйымдастырылады, сыртқы цикл – қатарлар бойынша және ішкі цикл – бағандар номері бойынша.{ N – қатарлар саны, М – бағандар саны}
......................................
Readln(N,M);
For K:=1 To N Do
For I:=1 To M Do // матрица элементтерін ендіру циклі
Read(A[K,I]);
……………………….
………………….
Readln(N,M);
For K:=1 To N Do
For I:=1 To M Do // матрица элементтерін шығару циклі
Write(A[K,I]);
...................................................
бұл жерде K,I айнымалылары йикл параметрлері мен массив индекстерінің қызметтерін атқарып тұр.
Массивтерге программа құру.
Массивтерді көшіру.
А және В массивтері берілген. А массивіндегі элементтерді В массивіне көшіру программасын құру.
Бұл программаны екі түрлі жолмен құруға болады, бір массивке басқа бір массивтің элементтерінің мәндерін көшіру үшін төмендегідей операторларды қолдануға болады:
а) В:=А; - В массиві А массивінің барлық элементтерін меншіктейді.
ә) For K:=1 To N Do В[К]:=А[К]; - циклдің әр орындалуында В массивінің К нөмірлі элементі А массивінің К нөмірлі элементінің мәнін меншіктейді, мұндағы К – цикл параметрімен бірге массив индексінің қызметін қоса атқарады.
Екі жағдайда да А массивінің элементтерінің мәні өзгермейді, ал В массивінің әрбір элементі А массивінен өзіне индексі сәйкес элементтің мәнін қабылдайды.
а) жай меншіктеу операторымен:
PROGRAM Kosh1;
USES Crt;
VAR K:Integer; A,B:Array[1..100] of Real;
BEGIN Clrscr;
For K:=1 To 12 Do Readln(A[K], B[k]);
B:=A; Writeln;
For K:=1 To 12 Do Write(B[k]:6:1);
Readln END.
ә) циклдік оператормен:
PROGRAM Kosh2;
VAR K:= Integer; X,Y:Array[1..100] of Real;
BEGIN For K:=1 To 12 Do Readln(X[K], Y[k]);
For K:=1 To 12 Do B[k]:=A[k];
Writeln; For K:=1 To 12 Do Write(B[k]:6:1);
Readln END.
Массив элементтерінің қосындысын табу.
Егер массив элементтерінің қосындысын S идентификаторымен белгілесек, онда қосынды табатын формула мынадай болады:
S:=X[1]+X[2]+X[3]+…+X[N];
мұндағы: X – массив элементтері, N – массивтегі элементтер саны.
Қосындыны сызықты программа құрып, жай меншіктеу операторы арқылы жоғарыдағы формуламен шығара салуға болады. Бірақ массив өте көп элементтерден тұрса, бұл формуланы ұзақ жазуға тура келеді. Сондықтан бұл формуланы циклдің ішіне кіргізіп қосындыны төмендегі формуламен есептеп шығаруға ыңғайлы болады:
FOR K:=1 TO N DO S:=S+X[K];
мұндағы:
K – цикл параметрі және массив индексінің қызметін бірге атқарып тұр.
N – элементтер саны.
өрнектің сол жағында тұрған S – қосынды.
өрнектің оң жағында тұрған S – қосындының бастапқы(К=К-1болғандағы)
мәні, цикл басталмай тұрғандағы мәні 0-ге тең. X[K] – индексі К мәніне тең массив элементі(мысалы К=1болғанда X[1] ).
Массив элементтерін шығару.
Кейбір есептеулерде белгілі бір шарттың орындалуына байланысты массив элементтерін іздеп табу керек болады. Ол үшін цикл арқылы массивтің барлық элементтерін берілген шамамен салыстыру процесін ұйымдастыру керек. Егер циклдің әр орындалуында массивтің жаңа элементі берілген шартты қанағаттандырса, онда бұл элемент ізделінген элемент болып табылады. Мысалы:
1.Массивтің 5-ке тең элементтерін экранға шығару:
.......If A[K]=5 Then Write(A[K], ‘ ‘);………….
2.Массивтің жұп элементтерінің нөмірлерін(индекстерін ) шығару:
........If A[K] Mod 2=0 Then Write(‘K=’, K, ‘ ‘ )…………
3.Массивтің 7-ден үлкен және 15-тен кіші элементтерінің санын табу:
N:=0;…If(A[K]>7)And(A[K]<15) Then N:=N+1;………..
Writeln(‘N=’, N);
4.Массивтің 10-нан үлкен элементтерінің қосындысын табу:
S:=0;……….If A[K]>10 Then S:=S+A[K];…………….
Writeln(‘S=’,S);
5.Массивтің 5-тен кіші элементтерінің көбейтіндісін табу:
P:=1; ………… If A[K]<5 Then P:=P*A[K];………
Writeln(‘P=’,P);
X(7) массивіндегі теріс элементтер санын табу.
PROGRAM Santabu;
VAR K,S:Integer; X:Array[1..100] Of Real;
BEGIN For K:=1 To 7 Do Read(X[K]);
S:=0;
For K:=1 To 7 Do If X[K]<0 Then S:=S+1;
Writeln(‘Теріс эл.саны = ‘,S);
Readln END.
Жылдық , жаз айларының , қыс айларының , көктем және күз айларының орта температурасын шығару.
PROGRAM Ortatemp;
CONST
X:Array[1..12] OF Real=(-12,-5,-1,8,14,21,37,39,32,19,13,4);
VAR K: Integer; S,S1,S2,S3: Real;
BEGIN For K: =1 To 12 Do Write(X[K]:4:1); Writeln;
S:=0; For K:=1 To 12 Do S:=S+X[K];
S1:=0; For K:=6 To 8 Do S1:=S1+X[K];
S2:=0; For K:=1 To 12 Do If (K<3) Or (K>11) Then S2:=S2+X[K];
S3:=0; For K:=3 To 11 Do If (K<6) Or (K>8) Then S3:=S3+X[K];
Writeln (‘жылдық орта температура =’, S/12:4:1);
Writeln (‘ жаздық орта темп-ра =’, S1/3:4:1);
Writeln (‘қыстық орта темп-ра =’,S2/3:4:1);
Writeln (‘күздік-көктемдік орта т-ра =’, S3/6:4:1);
Readln End.
2 Бөлім
Кезеңдер бойынша есептер
1. Х және У массивтері берілген. Х массивіндегі элементтерді В массивіне көшіру программасын құру.
2. Program АL;
VAR K,S:Integer; y:Array[1..100] Of Real;
BEGIN For K:=1 To 9 Do Read(y[K]);
S:=0;
For K:=1 To 9 Do If y[K]<0 Then S:=S+1;
Writeln(‘Теріс эл.саны = ‘,S);
Readln END.
Мына есептің шартын жаз.
3.а0хn + а1хn-1 +а2хn-2…+аn-1 х+аn
көпмүшелігінің мәнін Горнер схемасы бойынша есептеу керек.
4. Program ns;
Type mas = Array [1…100]of Integer;
Var x: integer; K:Mas;
Begin For x:=1 to 10 do read(x[k]);
X:=1 Repeat write(x[k]);
While k>10;
Readln end;
Readln end.
Осы прогамманың қатесін тап.
5.Төмендегі программаның денесін тап.
Program Go;
Const n = …; type ms=array[0..n] of real;
Var a:ms; k:integer; x,y:real;
Begin write(,[x мәнін енгіз=?’);
Readln (x); y:=0;
For k:=0 to n do
Begin write (‘a [’,k,’] =?’); readln(a[k]);
Y:=Y*x+a [k] end;
Write (‘y(‘,x:4:2,’)=’,y:5:3)
End
І.7. ҚОСАЛҚЫ ПРОГРАММА
Жалпы түсінік
ПАСКАЛЬ тіліндегі бағынышты программалар -процедуралар
Кез келген процедура программаға ұқсас түрде жазылады. Олардың басы, бейнелеу және операторлар бөліктері болады.
PROCEDURE
LABEL…;
CONST…;
TYPE…;
VAR…;
PROCEDURE…;
FUNCTION…;
BEGIN
END;
Процедураны параметрсіз де пайдалануға болады. Процедуралық программа схемасы төмендегідей болады:
PROGRAM P(INPUT,OUTPUT);
PROCEDURE P1;
BEGIN
END;
PROCEDUREP2;
BEGIN
END;
BEGIN
END.
Программаның орындалуы негізгі программаның операторларының орындалуынан басталады. Негізгі программада әрқашан процедураның орындалуы қажет болғанда ғана процедураға көшеді. Бұл жағдайда берілгендер негізгі программадан процедураға (енетін параметрлер) беріледі. Процедура орындалып болған соң оның нәтижесі (шығатын параметрлер), процедураға негізгі программадан қай жерден көшті, сол жерге береді. Одан соң негізгі программа орындала бастайды.
Атаулардың пайдаланылу аймағы
Негізгі программада хабарландырылған (бейнеленген) атау, негізгі және қосалқы программада да (процедураларда да, функцияларда да) пайдаланыла алады.
Мұндай атаулар ортақ (глобальды) атаулар деп аталады. Қосалқы программада хабарланған атаулар тек сол қосалқы программада ғана пайдаланылады. Мұндай атауларды жергілікті (локальды) атаулар дейді.
Негізгі программада процедураны шақыру түрі төмендегідей болады:
процедура аты (формальды параметрлер тізбегі);
Мұнда параметрлер формальды параметрлер тізімінен тұрады. Бұлардың ішіндегі процедураға берілетіндері - айнымалы, тұрақты типті өрнек болуы да мүмкін.
2-мысал. Дөңес төртбұрыштың төрт қабырғасы мен диагоналының ұзындығы бойынша оның ауданын табуға программа құрайық.
Шешуі. Дөңес төртбұрыштың диагоналы оны екі үшбұрышқа бөледі.
3-сурет. Дөңес төртбұрыш.
Әр үшбұрыштың ауданын табу үшін белгілі Герон формуласын пайдалануға болады.
S= р(р - а)(р - b)(р - с); р = a+b+c/2
Мұндағы а,b,с-үшбұрыштың қабырғалары, р-жарты периметрі: р=(а+b+с)/2. Бұл есепті шешу џшін џшбұрыштың ауданын табу программасын екі рет пайдаланады. Бџл есепті шешудегі негізгі және көмекші программа төмендегідей болады:
PROGRAM В20 (INPUT, OUTPUT);
Vаг АВ, ВС, СD, DА, АС, S1, S, а,b,с,р : rеal;
PROCEDURE strl;
Веgin
р:=(а+b+с)/2; S:=SQRT(р*(р-а)*(р-b)*(р-с))
END;
Begin
Read(АВ, ВС, СD, DA, АС);
а:=АВ; b:=ВС; с:=АС; strl; S1:=S;
а:=DА; b:=АС; с:=СD; strl; S1:=S1+S;
Write('S1=', S)
END.
Паскаль тіліндегі процедуралардың ерекшеліктері
Процедуралар.
Процедура деп белгілі бір идентификатормен аталып, сол атпен программаның кез-келген жерінен шақырып, белгілі бір есептеулерді орындауға болатын программаның тәуелсіз бөлігін айтады. Процедураның құрылымы программаның құрылымына ұқсас келеді.
Процедураның құрылымы:
{тақырыбы:}
PROCEDURE аты (формальды параметрлер: типтері);
Сипаттамалар бөлімдері; (*бұл бөлімдер болмауыда мүмкін*)
BEGIN Операторлар; (*процедура денесі*)
END;
Программада процедураны пайдалану үшін процедураның атын нақты параметрлерімен бірге жазып шақырады, ол жерді процедураны шақыру нүктесі деп атайды. Программада процедураның шақыруын оқыған заматта процедураның орындалуы басталады. Мысалы программа тақырыбы төмендегідей болса:
PROCEDURE SUMMA(N,M,X:INTEGER);
онда процедураны программада мынадай жолмен шақыруға болады:
SUMMA(19,A,50);
жақшадағы 19, А, 50 – нақты параметрлер болып табылады. Нәтижесінде процедурадағы формальды параметрлер мынадай мәндерге ие болады:
N-19, M=A,X=50.
Процедура шақыру процесінде формальды параметрлердің мәндері нақты параметрлердің мәнін қабылдайды да, процедура денесіндегі есептеулерде сол жаңа мәндер пайдаланылады.
Процедураның параметрлері мәндік және айнымалы мәндік және айнымалы болып екіге бөлінеді. Мәндік(аргументтік) параметрлер тек қана нақты параметрлердің мәнін өзіне қабылдайды да, қайтып оларға өзінің мәнін бере алмайды. Ал айнымалы параметрлер нақты параметрлердің мәнін қабылдап, оларды процедураның орындалу барысында өзгертіп, нақты параметрлерге жаңа мәндерін қайтып береді. Процедураның бір орындалу барысында негізгі программаның бірден бірнеше идентификаторлары жаңа мән қабылдай алады. Айнымалы параметрлердің алдында VAR қызметші сөзі қойылып жазылады.
Мысалы
PROCEDURE Misal(A,B:Integer; VAR X,Y:Longint);
VAR S:Integer;
BEGIN S:=A+5*B;
X:=Sqr(S); Y:=Sqr(X); END.
Бұл процедураны программалық тексте төмендегідей жазып щақыруға болады:
Misal(10,5,K,I);
Программа орындалу барысында Misal(10,5,K,I) шақыру идентификаторын оқып, басқаруды Misal процедурасына жібереді де, төмендегідей әрекеттер орындалады:
1. Процедураның А,В,Х,Y формальды параметрлері 10,5,K,I нақты параметрлердің мәнін қабылдайды:
А=10, B=5, X=K, Y=I,;
2. Процедура денесіндегі операторлар орындалады:
S=10+5*5=35, X=35*35=1225,
Y=1225*1225=1500625;
3. VAR қызметші сөзінен кейін жазылған формальды Х және Y параметрлері процедураның орындалу барысында меншіктеген өздерінің жаңа мәндерін нақты K-мен I параметрлеріне бергеннен кейін, басқару Misal(10,5,K,I) шақыру идентификаторынан кейін тұрған операторға өтеді;
K=X=1225, I=Y=1500625.
4. Әрі қарай программаның есептеулерінде K және I айнымалылары жаңа меншіктеген мәндерімен қатысады.
1. Паскаль тілінде процедураның құрылымы негізгі программаның кұрылымымен бірдей. Процедура тақырыбынан соң (PROCEDURE атау) жаңа айнымалыларды (локальды айнымалыларды) бейнелейді, одан соң BEGIN және END операторлық жақша арасына процедура денесі (операторлар тізбегі) жазылады. Бірақ END қызмет сөзінен соң міндетті түрде ";" тұру қажет. Себебі процедурадан соң негізгі программаның операторлары жалғасады.
2. Процедура атауынан соң формальды параметрлер тізімінің болу, болмауы шарт емес. Онымен бірге процедура мәні белгілі сан болуы да шарт емес. Мысалы, арнайы белгілер көмегімен бірнеше (мысалы, үш) квадрат сызу қажет болсын. Оны мына программа арқылы орындауға болады.
1-мысал.
Program ВН;
Procedure КW;
Begin
Writeln(`* * * * *'); Writeln('* *'); Writeln('* *');
Writeln(`* * * *'); END;
Веgin
KW;
Writeln(*2жол қалдырылады*);
KW;
Writeln;
Writeln;
KW
END.
Программа орындалып болғанда экраннан араларында екі бос жолы бар, қабырғалары "*"-дан құралған мынадай үш квадрат шығады:
* * * * * *
**
* *
* *
* * * * * * *
Бұл программада Wrіlеln('* *') операторы үш рет қайталанып отыр, ал квадратты одан үлкен етіп жасау қажет болса, онда бұл жолмен процедура құру өте қолайсыз болады. Бұл кемшіліктен құтылу үшін параметрлі процедураны пайдаланған ыңғайлы. Бұны екі түрлі жолмен ұйымдастыруға болады:
а) глобальды немесе локальды айнымалыны пайдалану;
б) формальды параметрлерді пайдалану.
Бұған мысал ретінде төмендегі процедураны келтіруге болады.
2-мысал.
Procedure KW1;
Vаr і : integer;
Веgin
Ғоr і:=1 tо 5 do
Fоr і:=1 dо 3 do Writeln('* *');
Ғоr і:=1 to 5 dо Writeln('*');
Writeln;
END.
Бұл процедурада локальдық айнымалыны пайдаландық. Енді формальды параметрлерді пайдалану жолын қарастырайық.
3-мысал.
Program ВК;
Ргосеdure КW (LР : integer);
Vаг і, k : іntеgег;
Веgіn
For i:=1 tо LР-2 dо
Веgіn
Write('*');
For k:=1 tо LР-2 dо Write(' ');
Write1n ('*); (*ортасы сызылды*)
END;
Ғог і:=1 to LР dо Write('*');
Writeln; (*тљменгі қыры сызылды*)
END;
Веgіn
КW(3);
Writeln; Writeln; (*2 жол бос*); КW(5)
ЕND.
Бұл программа бойынша адыммен қабырғалары үште-үш "*"-дан тұратын квадрат сызылады. Себебі КW(3) деп берілген, бұл жағдайда LP=3, ал КW(5) арқылы қабырғалары 5x5 жұлдызшадан тұратын квадрат сызылады, себебі LР=5.
3. Процедураның формальды параметрлерінің типтері әр түрлі болуы мүмкін. Мысалы,
Ргосеdure ОW(а,b,с : іnteger;
D, Р1, F2 : геаl;
L, L2 : сһаг);
4. Процедураның параметрлері айнымалы түрінде берілуі мүмкін. Бұған мысал ретінде айнымалылардың мәндерін алмастыруға программа құрайық.
4-мысал.
Ргоgrаm АINА;
Vаr а, b : іnteger;
Ргосеdure АLМАSТRЏ (Vаr х, у : іnteger);
Vаr Н : іnteger;
Веgіn
Н:=х; х:=у; у:=Н
ЕND;
Веgіn
а:=1; b:=2;
Write1n(а,b);
АLМАSТRЏ(а,b);
Writeln(а,b);
АLМАSТRЏ(а,b)
Writeln(a,b)
ЕND.
Экраңда көрінетін нәтиже:
1 2
2 1
1 2
Бұл программада А және В айнымалыларына нақты 1 жѕне 2 деген сәйкес мәндер меншіктедік. Программа әмбебап болу үшін олардың мәндерін READ (немесе READLN) операторы арқылы беру дұрыс. Процедурада параметрлердің мәндерін X, Џ арқылы, ал негізгі программада олардың орына Х, Y А және В айнымалылары пайдаланылды. Бұдан ешнәрсе өзгермейді. Себебі процедураға оралғанда ALМАSТRЏ(А,В) дегендіктен, Х-ке А-ның, Џ-ке В-ның мәні меншіктеледі. Процедура денесіндегі операторлар былай орындалады:
Н:=А; А:=В; В:=Н
5. Процедураның параметрлері тұрақты, айнымалы типті арифметикалық өрнекті де алғашқы мән ретінде қабылдауы мүмкін. Мысалы:
а) Ргосеdure АҮDАN(а,b,с : геаі; Џаr 8 : геаі);
б) Ргосеdure MSAL (k:іnteger; Vаr Р : іnteger);
Алдында VAR қызмет сөзі пайдаланылмаған формальды параметрлер - мәндер деп аталады. Бірінші процедурадағы а,в,с - формальды параметрлері - мәндер болады да, ал S формальды параметрі - айнымалы, екінші мысалда сәйкес К формальды параметрі - мән, ал р формальды параметрі - айнымалы. Сондықган - процедураға былай оралуға болады:
АЏDAN (З.14, X, sqrt(10-sqr(х)), Џ)
Бұл жағдайда үшбұрыштың ауданын табу процедурасы төмендегідей болады.
5-мысал.
Рrосеdure АЏDAN(а,b,с : rеаl; Vаг S : rеal);
Vаг р : rеal;
Веgіn
Р:=(а+b+с)/2;
S:=sqrt(р*(р-а)*(р-b)*(р-с))
ЕND;
онда АЏDAN процедурасының операторларының орындалуы:
Веgіn а:=3.14; b:=х; с:=sqrt(10-sqr(х));
Р:=(а+b+с)/2;
у:=sqrt(р*(р-а)*(р-b)*(р-с))
END;
болады.
6. Процедурада тек қарапайым айнымалыларды ғана емес, индексті айнымалыларды (массивтерді) пайдалануға болады.
6-мысал. Нақты сандар тізбегі (бір љлшемді кесте) Аі, і=1,n берілген. Осы тізбектегі ең кіші элементті және оның нөмірін табуға процедураны пайдаланып программа құрайық.
Ргоgram ВК1;
Туре МА=arraу[1..50] оf real;
Vаr (*жалпы айнымальшар*)
А : МА; М:rеа1, (*мин.элемент*)
К : іntеgег; (*рет нљмірі*)
N : іntеgеr; (*массив љлшемін*)
J:intеgеr;(*параметр*)
Рrосеdure МІN;
Vаr і : іnteger; (*локальды параметр*)
Веgіn
М:=А[1]; К:=1;
Ғог і:=2 to N do
ІF А[і]<М then begin М:=А[і]; К:=1
END;
END;
Веgіn
Writeln ('N-массив љлшемін енгіз:');
Readln(N);
Writeln ('массив элем."ENTER" арқылы енгіз:');
For j:=1 to N readА[і];
МIN; (*МІN-поцедурасын шақыру*);
writeln;
Writeln('мин.элемент М=', М : 5 : 2);
Writeln('мин.элемент нљмірі К=', К : 3);
END.
Алгоритмдер кітапханасын қолдана отырып программалау
Жаңа алгоритмдер құрастырғанда бұрын құрастырылған алгоритмдер қолданыла алады. Көмекшіге сілтемесі бар алгоритм белгілі жағдайда өзі көмекші алгоритм рөліне түсе алады. Бұрын құрастырылған алгоритмдерді жаңаларын құрастыруда қолдану алгоритмдеу практикасында кеңінен таралған. Кейінгі қолданысқа тџсетін алгоритмдердің бәрі ерекше фондқа - алгоритмдер кітапханасына - біріктірілген.
Алгоритмдер кітапханасына ұқсас, қазіргі заман ЭЕМ - дерінің программалар жүйесінің бағыныңқы програмалар кітапханалары бар. Бұл COS(X), SIN(X) және т.б. функцияларын есептеуге арналған түрлі құрамдас программалар. Олар пайдаланушыдан нәтиже алу үшін тек Х аргументі мѕнѕн көрсетуді талап етеді. Осының арқасында пайдаланушы программаларды дайындау және жөндеуге жұмсайтын уақытын едәуір қысқартады.
7 - мысал: Алгоритмдер кітапханасынан ЕСУ алгоритмін (екі санның үлкені) көмекші ретінде қолданып, үш санның ішінен үлкенін таңдау.
Шешуі:
Орындалу хаттамасы
алг ЕСУ(арг зат C, D,
F нѕт.зат Х)
басы зат К
енгізу C, D, F C=15; D=1; F=8
ECY(C,D,K) K=Y (K=5)
ECY(K,F,X) X=Y (X=8)
шығару Х X=8
соңы
алг ЕСУ(арг зат А,В A=C (A=5) A=K (A=5)
нѕт.зат У) B=D (B=1) B=F (B=8)
басы
егер A>B 5>1?(ИЅ) 5>8?(жоқ)
онда Y:=A Y=5 Y=8
ѕйтпесе Y:=B
болды
соңы
ЕСУ алгоритмі Џ айнымалысына А және В сандарының үлкенін жазады.
Көмекші алгоритмді шақыру командасы:
ЕСУ (C, D, K)
ЕСУ алгоритмінің көмегімен С және шамаларының үлкенін анықтауға, нәтижесін К айнымалысына меншіктеуге мүмкіндік береді.
Команда:
ЕСУ (C, D, K)
ЕСУ алгоритміне қатынасып, оған К жѕне F - ні аргументтері ретінде табыс етеді және нәтижесін Х айнымалысына меншіктейді. Кестеде осы алгоритмнің орындалу хаттамасы келтірілген.
GOSUB, RETURN операторлары Basic - тің алғашқы нұсқаларында бағыныңқы программалар ұйымдастыру үшін қолданылады.
Мұндай алгоритмді іске асыратын программаны құрастырғанда, оны кішігірім тәуелсіз модульдерге - процедураларға бөлген жөн.
Оператор Жол пішіні АТЫ
CALL шақырудағы Процедура шақыру операторы
процедураның аты(apг1,apг2,...)
apг1,apг2,…-нақтылы параметрлер.
SUB Процедура аты (пар1, пар2,…) Процедура операторы
пар1, пар2,… - формальді параметрлер
END SUB END SUB Процедура соңы операторы
Алгоритм мен программаның процедуралармен әрекет принципі ұқсас:
алг ЕСУ(арг зат C, D, F нѕт.зат Х) DECLARE SUB BID (A!, B!, Y!)
басы зат К REM БИТ
енгізу C, D, F
ECY(C,D,K) INPUT C, D, F
ECY(K,F,X) CALL BID (C, D, K)
шығару Х CALL BID (K, F, X)
соңы PRINT X
алг ЕСУ(арг зат А,В, нѕт.зат У) SUB BID (A, B, Y)
басы
егер A>B IF Y>=B THEN Y=A ELSE Y=B
онда Y:=A
ѕйтпесе Y:=B
болды
соңы END
Жолдарын енгізген соң:
SUB BID (A, B, Y)
Qbasic жеке диалог терезесін ашады, онда процедураны құрайтын операторларды іске қосуға болады:
Просмотр SUBs командасы процедуралар мен негізгі программа (немесе F2 пернесін пайдалануға болады) арасында ауыстырып қосуға мүмкіндік береді.Егер негізгі программаның әлі аты жоқ болса, редактор оны Untitled (аты жоқ) деп жариялайды. Экранға пайдаланылған процедуралардың толық тізімі шығады.
Программаны дискіге сақтағанда QBasic редакторы негізгі программаның басында автоматты түрде DECLARE операторын қосады да, ол бағыныңқы программаның бар екені туралы хабарлайды.
Сұрақтар мен тапсырмалар:
1. Процедура қалай жасалып, қалай шақырылады?
2. Процедура ретінде шыршаны салу алгоритмін пайдаланып, шырша орманын салатын программаны жазу.
3. Екі санның џлкені процедурасын пайдаланып, 10 санның џлкенін анықтайтын Q Basic тіліндегі программаны жазу.
4. Қабырғалары мен бір сүйір ұшынан шығатын екі диагоналінің ұзындығы берілетін болса, "үшбұрыштың ауданы" процедурасын пайдаланып, бесбұрыштың ауданын табу программасын құрастыру.
Процедураға мысалдар.
1.
PROGRAM Proced 1;
VAR A,B,C,S:Real;
PROCEDURE Ushbur(M,N:Real; VAR T,Q:Real);
BEGIN Readln(A,B);
{негізгі программадан Ushbur проседурасын шақыру:}
Ushbur(A,B,S,C);
Writeln(‘gip=’,C:4:2); Writeln(‘aud=’,S:4:2);
Readln END.
2.
PROGRAM Proced2;
VAR A,B,C:Real;
PROCEDURE Ushbur(M,N:Real; VAR T:Real; VAR Q:Real);
BEGIN T:=M*N/2;
Q:=Sqrt(Sqr(M)+Sqr(N)); END;
BEGIN Readln (A,B);
Ushbur(A,B,S,C);
Writeln(‘gip=’,C:4:2);
Writeln(‘aud=’,S:4:2);
Readln END.
3.
PROGRAM Proced3;
VAR A,B,C,S:Real;
PROCEDURE Ushbur;
BEGIN
S:=A*B/2; C:=Sqrt(Sqr(A)+Sqr(B)); END.
BEGIN READLN(A,B);
Ushbur;
Writeln(‘gip=’,C:4:2);
Writeln(‘aud=’,S:4:2);
Readln END.
4. Екі санның үлкенін табатын процедура
PROGRAM Maxsan;
VAR A,B,Max:Real;
PROCEDURE Maxim(K,I:Real; VAR S:Real); {Maxim процедурасы}
Begin If K>I Then S:=K
Else S:=; End;
BEGIN Write(‘2 сан енгіз:’); Readln(A,B); {негізгі программа}
Maxsim(A,B,Max); Writeln(‘Max=’,Max:4:1); Readln End.
5. Екі санның үлкенін табатын процедураны қолданып, берілген үш және төрт санның үлкенін табу программасы:
PROGRAM Maxsan2;
VAR A,B,C,D, Max:Real;
PROCEDURE Maxsim(K,I:Real; VAR S:Real); {Maxsim процедурасы}
Begin If K>I Then S:=K Else S:=I; End;
BEGIN Write(‘4 сан енгіз’); Readln(A,B,C,D); {негізгі программа}
Maxsim(A,B,Max);
{процедураның орындалуы нәтижесінде Max А мен В сандарының үлкенін меншіктейді}
Maxsim(Max,C,Max);
{процедураның орындалуы нәтижесінде Max A,B,C сандарының үлкенін меншіктейді}
Writeln(‘A,B,C сандарының үлкені:’,Max:4:1);
Maxsim(Max,D,Max);
{процедураның орындалуы нәтижесінде Max A,B,C,D сандарының үлкенін меншіктейді}
Writeln(‘A,B,C,D сандарының үлкені:’,Max:4:1);
Readln End.
6. N-нен M-ге дейінгі бүтін сандар қосындысын табу процедурасы.
PROGRAM Proc7;
VAR N,M,K:Integer; S:Longint;
PROCEDURE Sum(N,M:Integer; VAR X:Longint);
{Сандардың енгізу процедурасы}
Begin X:=0; For K:=N To M Do X:=X+K; End;
BEGIN Readln(N,M);
Sum(N,M,S);
Writeln(‘SUM=’,S);
Readln END.
7. Даны три тройки чисел: а1,b1,c1; a2,b2,c2; a3,b3,c3. Найти в каждой из них наибольшее и наименьшее, а затем наибольшее и наименьшее среди наибольших и отдельно-среди наименьших.
PROGRAM pr10 2;
VAR A1,B1, C1 A2,B2,C2,A3,B3,C3:Real;
VAR
Max1,Max2,Max3,Min1,Min2,Min3,Max4,Min4,Max5,Min5:Real;
PROCEDURE MaxMin (X,Y,Z:Real; VAR Max,Min:Real);
Begin
If (X>=Y) and (X>=Z) Then Max:=X;
If (X<=Y) and (X<=Z) Then Min:=X;
If (Y>=X) and (Y>=Z) Then Max:=Y;
If (Y<=X) and (Y<=Z) Then Min:=Y;
If (Z>=X) and (Z>=Y) Then Max:=Z;
If (Z<=X) and (Z<=Y) Then Min:=Z;
End;
Begin Write(‘енгіз A1,B1,C1’); Readln (A1,B1,C1);
Write(‘енгіз A2,B2,C2’); Readln (A2,B2,C2);
Write(‘енгіз A3,B3,C3’); Readln (A3,B3,C3);
MaxMin (A1,B1,C1,Max1,Min1);
MaxMin (A2,B2,C2,Max2,Min2);
MaxMin (A3,B3,,C3,Max3,Min3);
MaxMin (Max1,Max2,Max3,Max4,Min4);
MaxMin (Min1,Min2,Min3,Max5,Min5);
Writeln (‘бірінші үш сан Max=’,Max1,’Min=’,Min1);
Writeln (‘екінші үш сан Max=’,Max2,’Min=’,Min2);
Writeln (‘үшінші үш сан Max=’,Max3,’Min=’,Min3);
Writeln (‘үлкен Max=’,Max4,’Min=’,Min4);
Writeln (‘кіші Max=’,Max5,’Min=’,Min5);
End.
8. Выдать на печать в обратном порядке цифры целого положительного числа n (брать остаток от деления n на 10 и делать до техпор, пока n, деленное на 10 (нацело!) не станет нулём, т.е. применим рекурсивную процедуру).
Program pr10 4;
var n:integer;
Procedure cifra (n:integer);
begin write(n mod 10);
if (n div 10)<>0 then cifra (n div 10)
end;
begin writeln (‘введи число N’); readln(n); cifra(n)
end.
9. N санының цифрларының санын шығару процедурасы.
Program proc8;
var N:longint;
Procedure san;
var k:integer;
begin k:=0;
repeat
k:=k+1; n:=n div 10; until n=0;
write(‘n санының цифрларының саны=’,k) end;
begin readln(n); san;
readln end.
10. Бүтін Х санының бүтін Y дәрежесін табу процедурасын құру.
Program proc9;
var x,y:integer; s:longint;
Procedure inp(var a,b:integer);
begin write(‘санды енгіз:’); readln (a);
write(‘дәрежесін енгіз:’); readln(b) end;
Procedure dar(a,b:integer; var s:longint);
var k:byte;
begin s:=1;
for k:=1 to b do s:=s*a; end;
Procedure out(s:longint); {нәтиже шығару процедурасы}
begin writeln(x,’санының’,Y,’дәрежесі=’,s) end;
begin inp(x,y); dar(x,y,s); our(s);
readln end.
11. Массив элементтерінің қосындысын табу программасын парольмен ашылатындай етіп құру:
Program proc10;
lavel 1;
var n:longint; k:integer;
Procedure parol;
begin writeln(‘пароль дұрыс емесб қайта енгізіңіз:’);
readln(n); if k=3 then halt; k:=k+1; end;
Procedure mas;
const a:array[1..5] of integer=(10,150,-80,50,60);
var s:integer;
begin s:=0;
for k:=1 to 5 do s:=s+a[k];
writeln(‘s=’,s) end;
begin k:=1; {негізгі программа}
writeln(‘пароль енгізіңіз:’); readln(n);
1: if n<>123456 then begin parol; goto 1 end;
mas; readln end.
12. Массив элементтерін ендіру, шығару процедурасын құру мысалдары.
а) массив элементтерінің қосындысы мен көбейтіндісін табу:
Program massiv1;
const n=5;
type mas=array[1..n] of integer;
var a,b:mas; s,p,k:integer;
Procedure inp(n:integer; var x:mas);
begin for k:=1 to n do raed(x[k]); end;
Procedure out(n:integer; var x:mas; var s,p:integer);
begin s:=0; p:=1;
for kk:=1 to n do begin s:=s+x[k];
p:=p*x[k] end end;
begin inp(n,a); out(n,a,s,p); {негізгі программа}
writeln(‘қосынды=’,s); writeln(‘көбейтінді=’,p);
inp(n,b); out(n,b,s,p); writeln(‘қосынды=’,s);
writeln(‘көбейтінді=’,p);
readln end.
13.
Program bikvur;
var
a,b,c:real; {глобальныепеременные}
y1,y2:real;
flag:boolean;
Procedure kvur(var y1,y2:real;
var flag:boolean);
var
d:real; {дискриминант – локальная переменная}
begin
d:=sqr(b)-4*a*c; {глобальные переменные а, б и с известные процедуре}
if d>=0 then
begin
flag:=true;
y1:=(-d+sqrt(d))/2/a;
y2:=(-d-sqrt(d))/2/a;
end
else flag:=false;
end; {kvur}
begin
write(‘введите значения коэффициентов а,b,c:’);
readln(a,b,c);
kvur(y1,y2, flag);
if flag then
begin
if y1>=0 then writeln(‘x1=’,sqrt(y1):10:5,’x2=’,-sqrt(y1):10:5)
else writeln (‘вещественных корней x1 и х2 нет’);
if y2 >=0 then writeln(‘x3=’,sqrt(y2):10:5,’x4=’,-sqrt(y2):10:5)
else writeln (‘вещественных корней х3 и х4 нет’)
end
else writeln (‘вещесственных корней х3 и х4 нет’)
end
else writeln(‘вешественных корней нет’);
end.
14.
Program time conversion;
var
choice:integer;
Procedure menu;
begin
writeln(‘1. преобразовать часы минуты и секунды в секунды’);
writeln(‘2. преобразовать секунды в часы, минуты и сикунды’);
writeln(‘3. завершить работу’);
writeln;
writeln(‘введите номер (1-3)’);
end;
Procedure seconds to time;
var
total seconds: longint;
hours, minutes, seconds: longint;
temp: longint;
begin
writeln(‘введите суммарное количество секунд:');
readln (total seconds);
writeln;
temp:=total seconds div 60;
seconds:=total seconds mod 60;
hours:=temp div 60;
minutes:=temp mod 60;
writeln;
writeln(total seconds,’секунд-это’);
writeln
writeln(hours,’часов,’,minutes,’минут,’,seconds,’секунд’);
writeln;
writeln(‘для продолжения работы нажмите <enter>’);
readln;
end;
Procedure time to seconds;
var
total seconds:longint;
begin
writeln(‘введите минуты:’);
readln(minutes);
writeln;
writeln(‘введите секунды:’);
raedln(seconds);
writeln;
total seconds:=hours*3600+minutes*60+seconds;
writeln;
writeln(hours,’часов,’,minutes,’минут,’,seconds,’секунд это’,
total seconds,’секунд’);
writeln;
writeln(‘для продолжения работы нажмите <enter>’);
readln;
end;
begin
choice:=0;
wrile choice<>3 do
begin
menu;
readln(choice);
case choice of
1:=time to seconds;
2:seconds to time;
end;
end;
end.
15.
Program strings to chars demo;
uses crt;
const
nstrings=100;
nchars=80;
type
array of strings=
array [0..nstrings] of string;
array of chars =
array[0..nchars*nstrings] of char;
var
ArSt:array of strings;
ArSt:array of chars;
i:word;
Procedure Strings to chars
(var strings: array of strings;
var chars: array of chars);
var
I, j:byte;
begin
for i:=1 to nstrings do
begin
for j:= 1 to nchars do
begin
chars [ncars*(i-1)+j]:=
strings[i][j];
end;
end;
end;
begin
ClrScr;
Randomize;
ArSt[1]:= ‘imagine there’’s no heaven’;
ArSt[2]:= ‘it’’s easy if you try’;
ArSt[3]:= ‘no hell below us’;
ArSt[4]:= ‘above us only sky’;
ArSt[5]:= ‘imagine all the people’;
ArSt[6]:= ‘living for today’;
ArSt[7]:= ‘imagine there’’s no countries’;
ArSt[8]:= ‘it isn’’t hard to do’;
ArSt[9]:= ‘nothing to kill or die for’;
ArSt[10]:= ‘and no religion too’;
ArSt[11]:= ‘imagine all the people’;
ArSt[12]:= ‘living life in peace.’;
Strings to chars (ArSt, ArCh);
i:=1;
repeat
textcolor(random (15)+1);
write(ArCh[i]);
inc(i);
until ArCh[i]=’.’;
readln;
wrile not keypressed do
begin
delay (300);
ClrScr;
i:=1;
repeat
textcolor(random (15)+1);
gotoxy (random (40), random(20));
write(ArCh[i]);
inc(i);
until ArCh[i]=’.’;
end;
readln;
ClScr;
i:=1;
repeat
textColor (random (15)+1);
write (ArCh[i]);
inc (i);
until ArCh [i]=’.’;
writeln;
writeln (‘для завершения нажмите <enter>:’);
readln;
end.
16. Массив элементтерінің қосындысы мен көбейтіндісін табу процедурасын параметрсіз құру:
Program massiv2;
cost n=5;
var x,a,b:array[1..n] of integer; s,p,k:integer;
Procedure inp;
begin for k:=1 to n do read(x[k]); writeln end;
Procedure out;
begin s:=0; p:=1; for k:=1 to n do
begin s:=s+s+x[k];p:=p*x[k] end end;
begin inp; out; {негізгі программа}
writeln(‘қосынды=’,s); writeln(‘көбейтінді=’,p);
inp; out;
writeln(‘қосынды=’,s); writeln(‘көбейтінді=’,p);
readln end.
17. Футбол чемпионатына қатысқан 12 команданың алған ұпайлары бойынша, алғашқы 3 және соңғы 5 орын алған командалар тізімін шығару процедурасын құру.
Program futboll;
USES crt;
type m=array[1..12] of integer; n=array[1..12] of string;
var k,I,p:integer; a:n;b:m;
Procedure engiz(var b:m; var a:n);
begin for k:=1 to 12 do begin writeln(k,’команданың аты:’);
readln (a[k]); writeln(‘оның алған ұпайы:’); readln(b[k]) end;
end;
Procedure kemu(b:m; var a:n);
var max,f:=1 to 11 do begin
max:=b[12]; f:=12; m:=a[12];
for i:=12 downto k do
if b[i]>max then begin f:=I; max:=b[i]; m:=a[i]; end;
b[f]:=b[r]; b[k]:=max; a[f]:=a[k]; a[k]:=m; end;
writeln; end;
Procedure autsaider(b:m; var a:n);
begin kemu(b,a); writeln;
writeln(‘артта қалған командалар:’);
for k:=8 to 12 do write(a[k]:7); end;
Procedure juideger(b:m; a:n);
begin writeln;
writeln(‘жүлдегер командалар:’);
for k:=1 to 3 do write(a[k]:7); end;
begin Clrscr; engiz9b,a); {негізгі программа}
autsaider(b,a); juldeger(b,a); readln end.
18. Космос кораблі Күн системасындағы тоғыз планетаның бірінен шығып барлық планеталарды айналып қайтып келуі тиіс. Жанар майды үнемдеу үшін ол әр жолы арақашықтығы ең аз деген қашықтықта орналасқан планетаға баруы тиіс. Космос кораблінің ең тиімді маршруты мен оның барлық жүрген жолын анықтау программасы.
Program planeta;
USES crt;
var m:set of 1..10;
a:array[1..10] of integer;
b:array[1..10,1..10] of integer;
n,x,c,d,k,I,y,min:integer;
Procedure inp;
begin for k:=1 to n do
for i:=1 to k do begin read(b[I,k]);
b[k,i]:=b[I,k]; end; end;
Procedure out;
begin for k:=1 to n do begin
for i:=1 to n do write(b[k,i]:4);
writeln; end; end;
begin Clrscr; {негізгі программа}
write(‘матрица өлшемін енгіз:’); Readln(n);
inp; out;
write(‘қай планетадан шықты, нөмірін енгіз:’); readln(x);
m:=[x]; a[1]:=x; c:=x; d:=0;
for i:=1 to n-1 do begin min:=maxsint; y:=1;
for k:=1 to n do
if (b[x,k]<min) and not (k in m) and (b[x,k]<>0)then
begin min:=b[x,k]; y:=k; end;
d:=d+min; m:=m+[y];
a[i+1]:=y; x:=y end;
writeln(‘корабльдің барлық жүрген жолы:’,d+b[c,x]);
write(‘корабльдің ең тиімді маршруты:’);
for k:=1 to n do write(a[k]:4); write(‘’,c);
readln end.
19. N санының цифрларының жұп тақтығын анықтайтын процедурасын құру.
Program proc9;
var n:longint; k,i:integer;
Procedure san(i:longint);
begin k:=0;
repeat k:=0;
repeat k:=k+1;
i:=I div 10; until i=0; end;
procedure dar(i:integer; var p:longint); {Дар процедурасы}
var j:integer; {онның ш дәрежесін есептеу}
begin p:=1;
for j:=1 to I do p:=p*10; end;
Procedure jup(n:longint);
var x,d:longint;
begin {санның цифрларының жұп-тақтығын анықтайтын цикл}
for i:=1 to k do begin
dar(k-I,d); {D идентификаторы Dar процедурасының орындалуы нәтижесінде 10-ның к-і дәрежесін меншіктейді}
x:=n div d; {х идентификаторы I=1 болғанда санның 1-ші цифрын, І=2 болғанда – 2 ші цифрын, ...,i=k болғанда л цифрын меншіктейді}
write(I,’цифр=’,x);
n:=n mod 2=0 {келесі циклге қалатын санның шамасы}
if x mod 2=0 {цифрлардың жұп-тақтығын салыстыру}
then write(‘бұл цифр жұп’)
else write(‘бұл цифр тақ’); writeln; end; end;
begin readln(n); san(n); jup(n); {негізгі программа}
readln end.
Функциялар
Функция - программаның процедура - программадан ерекшелігі мынада:
- функция бір ғана белгілі мән қабылдайды, функция -программадан алынатын нәтиже біреу;
- нәтиже функция аты арқылы алынады да, негізгі программада пайдаланылады.
Функция - программаның жазылу түрі:
FUNCTION
LABEL…;
CONST…;
TYPE…;
PROCEDURE…;
FUNCTION…;
BEGIN
END;
Функция шынайы параметрлердің мәндері берілгеннен кейін өз аты арқылы шақырылады. Онымен қатар функцияны тікелей өрнектің ішінде шақыруға болады.
Сонымен бұл программаларды салыстырғанда мынаны анықтадық:
-процедура мен функцияның ұқсастығы - олардың екеуіне де айнымалыларды, белгілерді, тұрақтыларды бейнелеу бөліктері болады;
-олардың бір-бірінен өзгешілігі -Procedure, ал Function қызмет сөздері пайдаланылады.
- процедурада нәтиже (айнымалы) параметрінің типі процедура атауынан соң тұратын кіші жақша ішінде бейнеленсе, ал функцияда нәтиже үшін арнайы параметр алынбайды, нәтиже (функция мәні) функция атына меншіктеледі, сондықтан функция типі, аргументтер типтері бейнеленген жақша сыртында, қос нүкте ":" арқылы көрсетіледі.
1-мысал. F= m! - k! есептейтін программа құрайық.
Ргоgram FAК;
Vаr Ғ : rеal; m, k : іnteger;
Function FАСТ(N : іnteger) : rеаl;
Vаr і : іnteger;
р:rеаl;
Веgіn
р:=1;
For і:=1 to N do
р:=р*і
FАСТ:=р
END;
Веgіn
Readln(m,k);
Ғ:=ҒАСТ(m)-ҒАСТ(k);
Writeln('F=', F)
END.
2-мысал. Күннің, айдың және жылдың берілуін а, в және с сандарымен енгізілсін. Жылдың басынан бастап есептегендегі осы кџннің қаншасыншы номер (яғни қаншасыншы күн) екенін анықтайтын программа қүрайық.
Високос жыл деп - номері 400-ге бөлінетін жылдарды есептейміз.
Виcoкос емес жылдардың айларынан М(1,11) массивін құрамыз және МOD(n,m) функциясын пайдаланамыз.
Program calendar;
Vаr а,b,с,і,j:іntegеr;
m: аrrау[1..11] of integer;
function D(х:іntegег):bоо1еаn;
bеgіn
D:=(с mod х)=0
еnd;
bеgіn
Writeln(`a,b,с:=`);
Readln(а, b,с);
Writeln;
Fог і:=1 to 11 do
case і оf
1,3,5,7,8,10:m[і]:=31;
4,6,9,11:m[і]:=30;
2:m[і]:=28;
еnd;
j:=a;
Fог і:=1 to b-1 do j:=j+m[і];
If(b>2) and (D(4) and not D(100) ог D(400)) then j:=j+1;
Writeln(j);
END
Сұрақтар және жаттығулар
1. Қосалқы программа деп кaндай программаны айтады?
2. Процедура түрінде жазылған қосалқы программаның ерекшелігін көрсетіңцер?
3. Функция түрінде жазылған қосалқы программаның ерекшелігін көрсетіндер?
4. Формадды параметрлер мен шынайы параметрлер арасында қандай байланыс бар?
5. Процедураны параметрсіз жазуға болады ма?
6. Жергілікті және жалпы параметрлер дегенді Ісалай түсінесіз?
7. Функцияны қосалқы программа деп атауға бола ма?
8. Қосалқы программалар қалай шақырылады?
9. Функция мен процедураның шақырылу жѕне мѕндер беру ерекшелігі неде?
10.Процедура мен функция арасында қандай ұқсастық және айырмашылықгар бар?
11. Герон формуласы бойынша 1-суреттгі үшбұрыштардың ауданын есептейтін процедура және функцияны пайдаланып, төмендегі фигураның ауданын есептеу керек:
12. Төмендегі функциялардың мәндерінің құрыңдар:
1. y=sinx+3x/6+0.3x2 ; x [-3,8], n=20
2. y=zlnx+z(sinx+cosx)/z+cosx; x [-1,1]
3. z=sinx+cosy/x+y; x [-6,6]
І.8. Жолдық қатарлар
Программада кездесетін әр түрлі символдардан тұратын тізбектерді жолдық қатарлар деп атайды.Өрнектерде жолдық қатарлар апострофқа алынып жазылады.
Турбо Паскальда жолдық қатарларға компьютердің жадынан 0 байттан 250 байтқа дейін орын беріледі.
Жолдық қатарлардан тұратын идентифиикатарлар string типі арқылы спатталады.Идентифтификатордың типінен кейін тік жақшаның ішінде осы идентификатордың ұзындығының мәні неше символдан тұратыны көрсетіліп кетеді.
Жолдық өрнектермен амалдар
Операндалары жолдық катар болып табылатын өрнектерді жолдық өрнектер деп атайды.Идентификаторларға жолдық айнымалардың мәнін беру үшін меншіктеу операторы қолданылады.
Жолдық қатарларды салыстыру амалы екі жолдық қатарды салыстыру үшін қолданады.Қатарларды салыстыру солдан оңға қарай ең бірінші кездесетін бірдей емес символға дейін жүргізіледію
Жолдық процедуралар мен функциялар
Жолдық қатардың ұзындығын есептеу үшін LENGTH функциясы қолданылады,нәтиженің типі 0-ден 255-ке дейінгі бүтін сан (Вуte) болып табылады. . Жазылуы:
Х:= LENGTH(А);
Жолдық қатардан фрагмент көшіріп алу үшін COPY функциясы қолданылады. Жазылуы:
COPY(А,N,M);
Жолдық қатарлар фрагменттерін біріктіру үшін СONCAT функциясы қолданылады. Жазылуы:
СONCAT(Х,А);
Жолдық қатарлардың ішіндегі тұрған бір фрагменттің орнын анықтау үшін POS функциясы қолданылады.Бұл функция мәнінің типі бүтін және ол жолдық қатарда берілген фрагменттін басталатын нөміріне тең болады. Жазылуы:
POS(Х,А);
Жолдық қатардан бір фрагмент өшіріп тастау үшін DELETE процедурасы қолданылады.Жазылуы:
DELETE(А,N,M);//А Жолдық қатарының N позициясындағы символдан бастап М символ өшіріп тастайды.
Жолдық қатарға бір фрагмент қосу үшін INSERT процедурасы қолданылады.Жазылуы:
INSERT (А,Х);
.Латын алфавитінің кіші әріптерін бас әріпке айналдыру үшін UPCASE функциясы қолданылады.Жазылуы:
UPCASE(Х);
STR процедурасы кез-келген сандық шаманы бір жолдық қатарға қою үшін қолданылады.Жазылуы:
STR(150,Х);
Жолдық қатарды сандық шамаға айналдыру үщін VAL процедурасы қолданылады.Жазылуы: VAL(Х,А,С)
Кезең бойынша жасалған есептер
Алгебра пәнінен жасалған есептер:
І-кезең
Әр түрлі тіркестерді қолдана отырып,тұрақтыларды
анықтайтын программа құр.
Program katarlar1;
Const S=’Kaisar’;
Type Gymn=String[10];
Var X:String[17];
A:String[6];
B:String;
C:Gymn;
Writeln (‘C=’,C);
Readln End.
II-кезең
Program Kat2;
Var X:String;A:Integer;
Begin X:=’Pentium-III’;
A:=Length(X);
Writeln (‘A=’,A);
Readln End.
Х жолдық қатарының ұзындығын есептейтін программа
жаз
ІІІ-кезең
Қате жазылған программа
Program kat3;
Var X:String;K:Byte;
Begin Write (‘Katardin manin engiz:’);Readln (X);
For K:=1 To Length(X) Do X[K]:=Upcase(X[K]);
Writeln (‘Katardin gana mani X=X)
Readln End
Қатесіз дұрыс жазылған программа
Program Kat3;
Var X:String;K:Byte;
Begin Write (‘katardin manin engiz:’);Readln(X);
For K:=1 To Length(X) Do X[K]:=Upcase (X[K]);
Writeln (‘Katardin gana mani X=’,X);
Readln End.
IV-кезең
Y:=Copy(X,N,M);
A:=Copy(X,1,3);B:=(X,10,8);
C:=Concat(A,B)
Program Katar4;
Var X:String[17];Y,A,B,C:String;N,M,Z,P:Integer;
Begin X:=’Oblistik gimnazia’;
Z:=Length(X);
P:=Pos(‘azia’,’Oblistik gimnazia’);
Readln (N,M);
Y:=Copy(X,N,M);
A:=Copy(X,1,3);B:=(X,10,8);C:=Concat(A,B);
Writeln (Z,’’,Y,C);
Readln End.
V-кезең
Program Katar5;
Const X=’Oblistik’;Y=’gimnazia’;
Var A,B,C,D:String[15];K:String;I,N:Byte;
Begin A:=’Pentium-I’;B:=’Pentium-II’;C:=’Pentium-III’;
If A>B Then D:=A Else D:=B;
If D>C Then Writeln (‘max=’,D) Else Writeln (‘max=’,C);
K:=X+’’+Y;
If K=Concat(X,Y) Then Writeln (‘K=X+Y’) Else Begin
Writeln (‘K ten emes X+Y’);Writeln (‘K=’,K) End;
Delete(A,8,2);
Writeln (‘A=’,A);
Delete (B,2,6);
Writeln (‘B=’,B);
Insert (‘entium’,B,2);
Writeln (‘B1=’,B);
K:=Copy(Y,1,4);
Writeln (‘K1=’,K);
I:=Pos(K,Y);
Writeln (‘I=’,I);
N:=Length(X+Y);
Write (‘N=’,N);
Writeln (Concat(x’,’,y));
Writeln (‘a-max=’,Upcase(‘a’));
Readln End.
І-кезең
Х жолдық қатарында кездесетін “а”символдарын санап,оларды “в”символымен ауыстыру программасын құру.
Program kat6;
Var X:String;K,N:Byte;
Begin Write (‘Katardin manin engiz:’);Readln (X);
For K:=1 to Length(X) do If X[K]=’a’ Then
Begin N:=N+1;X[K]:=’b’ End;
Writeln (‘Katardin gana mani X=’,X’,katarda’,N,’’a’’ simvoli boladi’);
Readln End.
ІІ-кезең
Program kar7;
Type Katar=String;
Var X:Katar;K,I:Byte;
Begin Write (‘Katardin manin engiz:’);Readln (X);
Repeat
K:=Pos(‘{‘,X);If K>0 Then Begin I:=Pos(‘}’,X);
If I>K Then Delete (X,K,I-K+1) End;
Until K=0;
Writeln (‘Katardin gana mani X=’,X);
Readln End.
Х қатарындағы фигуралық жақшалар ішінде тұрған фрагмент
терді алып тастап шығару программасы
ІІІ-кезең
Қате жазылған программа
Program Kat8;
Var X,Y:String;K:Byte;
Begin Write (‘Katardin manin engiz:’);Readln (X);Y:=’’;
For K:=Length(X) Downto 1 Do Y:=Y+Copy(X,K,1);
If X=Y Then Writeln (‘Eki gakka da birdei’);
Else Writeln (‘Birdei emes’)
Readln End.
Қатесіз дұрыс жазылған программа
Program Kat8;
Var X,Y:String;K:Byte;
Begin Write(‘Katardin manin engiz:’);Readln(X);Y:=’’;
For K:=Length(X) Downto 1 Do Y:=Y+Copy(X,K,1);
If X=Y Then Writeln (‘Eki gakka da dirdei’)
Else Writeln (‘Birdei emes’);
Readln End.
IV-кезең
For K:=1 To Length (X) Div 2 Do
If X[K]=X[(Length(X)+1-K] Then N:=N+1
Program Kat9;
Var X,Y:String;K:Byte;
Begin Write(‘Katardin manin engiz:’);Readln(X);N:=0;
For K:=1 To Length (X) Div 2 Do
If X[K]=X[(Length(X)+1)-K] Then N:=N+1;
If N=Length(X) Div 2 Then Writeln (‘Katar eki gakka da birdei okiladi’)
Else Writeln (‘Okilmaidi’);
Readln End.
V-кезең
Program Kat10;
Const T:Array[1..5] of String=(‘Tobol’,’Kaisar’,’Irtysh’,’Taraz’,Tor’);
Var K,N,I:Byte;
Begin For K:=1 To 5 Do Write (T[K]:7);Writeln;
N:=5;K:=0;Repeat K:=K+1;
While Copy (T[K],1,1)=’T’ Do Begin I:=K;
Repeat T[I]:=T[I+1];I:=I+1;Until I>=N;
T[N]:=’’;N:=N-1;End;
Until K>=N;
Writeln (‘Gana tizim:’);
For K:=1 To N Do Write (T[K]:7);
Readln End.
Информатика пәнінен жасалған есептер
І-кезең
Берілген футбол командалары аттарын кері шығару программасы
Program Kat12;
Const T:Array[1..5] of String=(‘Tobol’,’Kaisar’,’Irtysh’,’Taraz’,’Kairat’);
Var K,I:Byte;S:Char;P:Array[1..5] Of String;
Begin For K:=1 to 5 do Write (T[K]:7);Writeln;
For K:=1 To 5 Do Begin P[K]:=’’;
For I:=Length(T[K]) Downto 1 Do P[K]:=P[K]+Copy(T[K],I,1) End;
Writeln (‘Gana massiv:’);
For K:=1 to 5 do Write (P[K]:7);
Readln End.
ІІ-кезең
Program Kat15;
Var S:String;X,C:Integer;
Begin Writeln (‘matin engiz’);Readln(Y);
Val(S,C,X);
If C<>0 Then Write (‘San emes’)
Else If X Mod 9=0 Then Write (‘9-ga bolinedi’)
Else Write (‘9-ga bolinbeidi’);
Readln End.
Берілген мәтіннен санның 9-ға бөлінетіндігін ,бөлінбейтіндігінанықтайтын программа
ІІІ-кезең
Қате жазылған программа
Program Kat16;
Const T:Array[1..5] Of String=(‘Tobol’,’Kaisar’,’Irtysh’,’Taraz’,’Kairat’);
Var K,I:Byte;S:Char;
Begin For K:=1 To 5 Do Write(T[K]:7);Writeln;
For K:=1 To 5 Do
For I:=1 To Trunc(Length(T[K]/2) Do
Begin S:=T[K][I];T[K][Length(T[K])-I+1];
T[K][Length(T[K])-I+1]:=S End;
Writeln(‘gana massiv futbol komandalarinin keri attarinan turadi:’);
For K:=1 To 5 Do Write(T[K]:7)
Readln End
Қатесіз дұрыс жазылған программа
Program kat16;
Const T:Array[1..5] Of String=(‘Tobol’,’Kaisar’,’Irtysh’,’Taraz’,’Kairat’);
Var K,I:Byte;S:Char;
Begin For K:=1To 5 Do Write (T[K]:7);Writeln;
For K:=1 To 5 Do
For I:=1 To Trunc(Length(T[K])/2) Do
Begin S:=T[K][I];T[K][I]:=T[K][Length(T[K])-I+1];
T[K][Length(T[K])-I+1]:=S End;
Writeln (‘gana massiv futbol komandalarinin keri attarinan turadi:’);
For K:=1 To 5 Do Write (T[K]:7);
Readln End.
IV-кезең
For G:=I+1 To N Do;
Begin C:=I+1 To N Do;
Begin C:=F[I]
Program kat8;
Const N=10;
Var F:Array[1..N] of String[20];
I,K,G:Integer;
C,B:String[20];
Begin For I to N do
Begin Writeln (‘familialardi engiz:’);
Readln (F[I]);
End;
For I 1 to N-1 Do
Begin B:=F[I];
K:=I;
For G:=I+1 To N Do;
Begin C:=F[I];
If C<B Then Begin B:=F[I];
K:=I End;End;
C:=F[I];F[I]:=F[K] End;
Writeln ;
For I:=1 To N Do Writeln (F[I]);
Readln End.
V-кезең
Program kat18;
Var X:String;K:Byte;
Begin X:=’Internet’;For K:=1 To Length(X) Do X[K]:=Upcase (X[K]);
Writeln (‘X=’,X);
Readln End.
І-кезең
Берілген сөйлемнен барлық t әрпінен кейін тұрған h әрпін алып тастап,өңделген сөйлемді қайта шығаратын
Turbo Pascal тілінде программа құр
Program ovr;
Label m1;
Type ft=String[125];
Var
Str:ft;
I,n:Integer;
Begin
Writeln (‘berilgen soilemdi engiziniz…’);
Read (str);
M1:if pos(‘th’,str)<>0 then
Begin
Delete (Str,pos(‘th’,str)+1.1);
Goto m1;
End;
Writeln (str);
Readln End.
ІІ-кезең
Program prl2;
Var c,s:string;k:integer;
Begin
Writeln(‘matin engiz’);readln(s);
Writeln (‘1-sozdi engiz’);readln(c);
While c<>’.’do
Begin
K:=pos(c,s);
Writeln (‘soz’,’c’,k’, pozic.kiredi’);
Writeln (‘kadimgi sozdi engiz’);Readln (C);
End;
Readln End.
Берілген текстегі сөздерді көрсетіңіз(сөздердің кестесі нүктемен аяқталады)
ІІІ-кезең
Қате жазылған программа
Program pr13;
Var S:String[15];s2:String[7];
Begin
S:=’temirgolshi’;
S2:=copy(s,1,4);writeln (s2);
S2:=copy(s,1,5)+copy(s,2,3)+copy(s,6,2);
Writeln(s2)
S2:=copy(s,15,1)+copy(s,13,2)+copy(s,12,4)
Writeln (s2)
Readln End.
Қатесіз дұрыс жазылған программа
Program pr13;
Var S:string[15];s2:string[7];
Begin
S:=’temirgolshi’;
S2:=copy(s,1,4);writeln (s2);
S2:=copy(s,1,5)+copy(s,2,3)+copy(s,6,2);
Writeln (s2);
S2:=copy(s,15.1)+copy(s,13.2)+copy(s,12.4);
Writeln (s2);
Readln End.
IV-кезең
Px:=ord(x[0]);py:=length(y);
N:=pos(x,s);
Program pr14;
Var s,x,y:string;px,py,n:integer;
Begin
Writeln (‘tekt engiz’);readln (s);
Writeln (‘berilgen cosdin tekcti’);readln (x);
Writeln (‘ozgertuge tekt engiz’);
Readln (y);
Px:=ord(x[0]);py:=length(y);
N:=pos(x,s);
While n>0 do
Begin
Delete (s,n,px);
Insert (y,s,n);
N:=pos (x,c);
End;
Writeln (s);
Readln End.
V-кезең
Program prl 17;
Var S:String;X,C:Integer;
Begin
Writeln (‘matin engiz’);readln(S);
Val (s,x,c);
If c<>0 then write (‘can bolmaidi’)
Else if x mod 9=0 then write (‘can ,kiska 9’)
Else write (‘san,birak kisca emes 9’);
Readln End.
Физика пәнінен жасалған есептер
І-кезең
Дененің жұмысы мен уақыты берілген.Осы дененің қуатын
табатын программа жаз
program kat16;
label 1;
Var A,t:integer;P:real;
Begin
Writeln;Write (‘gumis pen uakitti engiz’);readln (A,t);
P:=length(A,t);P:=A/t;
Writeln (‘P=’,P);
Readln End.
ІІ-кезең
Program kat15;
Var N:real;A.F:Integer;
Begin
Writeln;Write (‘gumis pen energiani engiz’);readln (A,F);
N:=Copy (A,F);N:=A*F;
Writeln (‘N=’,N);
End;
Readln End.
Дененің жұмысы мен энергиясы берілген.Осы дененің қуатын табыңыз
ІІІ-кезең
Қате жазылған программа
Program kat18;
Var S:string;a,h:integer;
Begin
Write (‘audannin uzindigin tabiniz’);readln (a,h);
S:=a*h; S:=copy(a,h)
Writeln (‘S=’,S)
End
Readln End.
Қатесіз дұрыс жазылған программа
Program kat18;
Var S:String;a,h:Integer;
Begin
Write (‘audannin usindigin tabiniz’);readln (a,h);
S:=a*h; S:=copy(a,h);
Writeln (‘S=’,S);
End;
Readln End.
IV-кезең
F:=a*h;F:=Val(a,h);
Program kat24;
Var a,h:Integer;F:=Real;
Begin
Readln (a,h);
F:=a*h; F:=Val(a,h);
Write (‘F=’,F);
End;
Readln End.
V-кезең
Program kat25;
Var F:real;A,S:Real;
Begin
Readln (A,S);
F:=A*S;F:=Str(A,S);
Writeln (‘F=’,F);
Readln End.
Күрделі есептер
1.Берілген есептен ең ұзын сөзді басып шығаратын программа жаз
Program kat27;
Label1;
Var I,M,I,K,D:Longint;T,N:String;
Begin
Writeln;Write (‘matindi engiz’);readln (t);t:=t+’’;
I:=length(t);M:=0;K:1;I:=1;
While I<=I do begin
If copy (t,I,1)=’’then begin d:=I-K;
If D>M then begin
M:=d;N:=copy(t,k,d);
End;
K:=I+1;End;
1:I:=I+1
End;
Write (‘en usin soz’’,’n,’’’arip sani=’,m);
Readln;End.
2.Текстегі сөзге қандай соңғы әріпке процент шамасы түседі
program Kat24;
Var i,S,I,k,s1:Longint;t,a:string;p:real;
Begin
Writeln;Write (‘matin engiz’);readln(t);t:=t+’’;
I:=Length(t);Write(‘berilgen aripti engiz’);readln (a);
K:=1;S:=0;S1:=0;
For I:=1 To I do begin
If copy(t,I,1)=’’then Begin
If copy (t,K,1)=a then s1:=s1+1;
S:=s+1;K:=K+I+1;
End;
End;
P:=s1*100/s;
Write (‘cozdegi aaripke tusetin procent’’’,a’’’ ten=’,p);
Readln;
End.
3.Мәтіндегі фамилиялар тізбегін берілген әріпке енгізу
керек.
Program z12 8;
Var i,m,I,k,d:longint;t,a:string;
Begin Writeln;Write (‘matin engiz’);readln(t);t:=t+’’;
I:=Length(t);write (‘berilgen aripti engiz’);readln(a);
K:=I;
For I:=1 to I do Begin
If copy(t,i,1)=’’then begin
If copy(t,k,1)=a then write (‘’,copy(t,k,I-K));
K:=I+1;
End;
End;
Readln;
End.
4.Орыс алфавитімен сөздер берілген.Бұл сөздердің дұрыс,дұрыс еместігін тексер
program z12 10;
var I,I,j,s:integer;a,b,t:string;K:array[1…255] of integer;
begin
a:=’АБВГДЕЖЗИКЛМНШЩХЧСЯЭЪЬЮ’;
Write (‘oris aripterin matinge engiz’);read(t);
I:=length(t);
For I:=1 ToI Do Begin
B:=copy(t,I,1);
For j:=1 to 32 do If b=copy(a,j,1) then k[I]:=j;
End;
S:=0;
For I:=1 to I-1 do if k[I+1]>=k[I] then s:=s+1;
If s=I-1 then write (‘ia’) else (‘gok’);
Readln;
End.
5.Берілген натурал сандарын рим цифрларымен басатын программа жаз
program z12 11;
Label 1,2,3;
Var n,I:integer;ns:string;as:array[1..13] of string;a:array
[1..13] of integer;
Begin
Write (‘1-den 1999-ga deiingi sandardi engiz’);read(n);
NS:=’’;
A[1]:=1000;as[1]:=’M’;a[2]:=900;as[2]:=’cm’;
A[3]:=500;as[3]:=’D’;A[4]:=400;as[4]:=’cd’;
A[5]:=100;as[5]:=’C’;A[6]:=’XC’;
A[7]:=50;as[7]:=’L’;A[8]:=40;as[8]:=’Xl’;
A[9]:=10;as[9]:=’X’;A[10]:=’IX’;
A[11]:=5;as[11]:=’V’;A[12]:=4;as[12]:=’IV’;
A[13]:=1;as[13]:=’I’;
I:=1;
While n>0 do begin
Writeln (‘I,ns,a[I]’,I,n,s,a[I]);
While a[I]<=n do begin
Ns:=ns+as[I];n:n-a[I];end;
I:=I+1;End;
Write (‘rimdik cifr=’,ns);
Readln;
End.
6.К-ны 123456789101112..санына қосып шығаратын программа жаз
program z12 12;
Var k,I,cod,p:integer;s,a,k:string;
Begin
Write (‘K-ni kos’);read(k);
A:=’’;
For I:=1 to K do begin str(I,S);A:=A+s End;Writeln (a);
Ks:=copy(a,k,1);{if K>10 then begin p:=(k-10) mod 2+1;
Ks:=copy(A,K*2-p,1);end;}
Val (ks,k,cod);Write (ks,’’,K’,’,cod);
Writeln;Write(‘K-nin cifri=’,K);
Readln End.
7.Length функциясын пайдалана отырып программа жаз
program area;
Const n=4;
Var
X1,y1,x2,y2,x3,y3:real;
I:Integer;
Su,pl:Real;
Function Length (x1,y1,x2,y2:real):Real;
Begin
Length :=sgrt(sgr(sgr(x1-x2)+Sgr(y1-y2));
End;
Procedure spase(x1,y1,x2,y2,x3,y3:real;Var pl:real);
Var a,b,c,p:real;
Begin
A:=Length (x1,y1,x2,y2);
B:=Length(x2,y2,x3,y3);
C:=Length(x1,y1,x3,y3);
P:=(a+b+c)/2;
Pl:=sgrt(p*(p-a)*(p-b)*(p-c));
End;
Begin
Write (‘1-shi gane 2-shi shinnin kordinatalari’);
Readln (x1,y1,x2,y3);
I:=2;
Su:=0;
Repeat
I:=I+1;
Write (‘1-shi shinninkord.’,I);
Readln (x3,y3);
Space (x1,y1,x2,y2,x3,y3,pl);
Su:=su+pl;
X2:=x3;
Y2:=y3;
Until I=n;
Writeln (‘Alan=’,su:10:5);
Readln End.
8.Орыс әріптерін қолдана отырып программа құрыңыз
program palindrom1;
Var a,b,c:string;
I:Integer;
Begin
Writeln (‘255-ke deingi simvoldardi engiz:’);
Readln (a);
B:=’’;
C:=’’;
For I:= 1 to length (a) do
If a[I]<>’’then
Begin
If (a[I]>=’A’) and (a[I]<=’n’);
Then
A[I]:=Chr(ord(a[I])+32)
Else
If (a[I]>=’p’) and(a[I]<=’Men’)
Then
A[I]:=Chr (ord(a[I])+80);
B:=B+A[I];
C:=A[I]+c;
End;
If b=c then Writeln (b’,-‘,’palindrom’)
Else Writeln (b,’-‘,’ palindrom emes’);
Writeln ;
Readln;
End.
9.Мысықтан кит жасайтын программа құрыңыз
program cat kit;
Var S:String;
I,J:Integer;
A,b,c:String;
Begin
A:=’misik muhitta guzip gur,kit kuhnada kaimak gep gatir’;);
B:=Kit pen misikti austiriniz’misikti kitpen auistiriniz’);
C:=a+b;
I:=1;
Repeat
S:=copy(c,I,3);
If s=’misik’ then
Begin
Delete(c,I,Length(‘misik’));
Insert(‘kit’,c,I)
End
Else
If s=’kit’ then
Begin
Delete (c, I,Length(‘Kit’));
Insert (‘misik’,c,I)
End;
I:=O+1
Until I=Length©-2;
Writeln ;
Readln;
End.
10.Күштің бар екенін тексеретін программа жаз.
program sila;
Var
A,b,C:String;
P:Integer;
Begin
A:=’kush bar akil kerek emes’;
P:=Pos(‘-‘,a);
B:=Copy (a,1,p-1);
C:=Copy (a,p+1,Length(a)-1);
A:=B+’-‘+c;
Writeln (a);
Readln End.
11.Мәтінді оқып шығып,ондағы керек емес сөздерді алып тастайтын программа жаз.
Program z1 7;
Var S:String;n,K:Integer;
Begin
Writeln (‘matindi oki’);readln (s);
N:=1;K:=Length(s);
While n<k do
If s[n]=’’then begin delete (s,n,1);K:=K-1 End Else
N:=N+1;
Write(S);
Readln End.
12.Мәтінді оқып шығыңыз да,әр мәтіннен кейін сөздерді қысқартатын программа құрыңыз.
Program z 1 8;
Var S:String;N,K:Integer;
Begin
Writeln (‘matindi engiz’);readln (s);
N:=1;K:=Length(s);
While n<k do
If s[n]=’’then begin insert(‘’s,n);K:=K+2;N:=N+3 End
Else N:=n+1;
Write (S);
End.
13. Берілген мәтінді кері жазатын программа жаз.
Program z1 9;
Var S:String;I,k:Integer;
Begin
Writeln; Writeln (‘matin engiz’);readln (s);
K:=Length(s);
For I:=k downto 1 do write(s[I]);
Readln End.
14.Мәтіндегі сөздерді санға айналдыратын программа жаз
program z 1 11a;
Var S:String;I,x,cod,flag,K:Integer;
Begin
Writeln ;Writeln (‘matindi engiz’);readln(s);
K:=length(s);flag:=0;
For I:=1 to k do begin
Val (s[I],x,cod);
If (cod<>0) or(x>6) then flag:=1
End;
If flag =0 then write (‘7-lik formada san bolip tabiladi’)
Else write (‘7-lik formada san bolip tabilmaidi’);
Readln End.
15.Алдындағы мәтіннің екінші түрін жаз
program z 1 11v;
Var s:String;I,x,x1,cod,K,sum:Integer;
Begin
Writeln ;Writeln (‘matin engiz’);readln(s);
K:=Length (s);sum:=0;
For I:=1 to K do Begin
Val (s[I],x,cod);
If cod=0 then begin sum:=sum+1;x1:=x end;
End;
If (sum=1) and(x1=K) then
Write (‘matinnin uzindigi’)
Else Write(‘gok’);
Readln End.
16.Кез-келген жолдық қатардың латын алфавитінің кіші әріптерін бас әріпке айналдыру программасын құрыңыз
program kat16;
Var X:String;K:Byte;
Begin Write (‘katardin manin engiz:’);readln (X);
For K:=1 To Length(x) Do x[K]:=Upcase (X[K]);
Writeln (‘katardin gana mani X=’,X);
Readln End.
17.Х қатарындағы фигуралық жақшалар ішінде тұрған фрагменттерді алып тастап шығару программасы
program katar 18;
Type Katar=String;
Var X:Katar;K,I:Byte;
Begin Write (‘Katardin manin engiz:’);readln (x);
Repeat
K:=pos(‘{‘,X);if K>0 Then Begin I:=Pos(‘}’,X);
If I>K Then Delete(X,K,I-K+1) End;
Until K=0;
Writeln (‘Katardin gana mani X=’,X);Readln End.
18.Берілген сөздің екі жаққа да бірдей жазылып оқылатынын анықтау программасын құру
Program kat17;
Var X,Y:String;K:Byte;
Begin Write (‘Katardin manin engiz:’);Readln (X);Y:=’’;
For K:=Length (X) Downto 1 Do Y:=Y+Copy(X,K.1);
If X=Y then Writeln (‘eki gakka da birdei’) Else Writeln (‘birdei emes’);
Readln End.
19.Әртүрлі тіркестермен амалдар қолдана отырып программа құрыңыз.
Program Katar18;
Var X:String[17];Y,A,B,C:String;N,M,Z,P:Integer;
Begin X:=’oblistik gimnazia’;
Z:=Length(x);
P:=Pos(‘azia’,’oblistik gimnazia’);
Readln (N,M);
Y:=Copy(X,N,M);
A:=Copy(X,1,3);B:=(X,10,8);C:=Concat(A,B);
Writeln (Z,’’,Y,C);
Readln End.
20.Х жолдық қатарында кездесетін ‘a’ символдарын санап,оларды ‘b’ символымен ауыстыру программасын
құрыңыз.
Program Kat20;
Var X:String;K,N:Byte;
Begin Write (‘katardin manin engiz:’);Readln (X);
For K:= 1 To Length (X) Do If X[K]=’a’ Then
Begin N:=N+1;X[K]:=’b’ End;
Writeln (‘Katardin gana mani X=’,X’,katarda’,N,’’’a’’ simvoli boldi’);
Readln End.
Тест сұрақтары
1.Turbo Pascal-да жолдық қатарларға компьютердің жадынан қанша орын беріледі?
а)6-16. байтқа дейін.
б)0-255 байтқа дейін.
с)155-255 байтқа дейін.
д)500 байтқа дейін.
е)1000 байтқа дейін.
2.Жолдық қатарлардан тұратын идентификаторлар қай тип арқылы сипатталады?
а)Byte.
б)BOOLEAN.
с)String.
д)integter.
е)real.
3.Сперандалары жолдық қатар болып табылатын өрнектерді ..... деп атаймыз.
а)Айнымалы өрнектер.
б)Қатарлық өрнектер.
с) Сперандалық өрнектер.
д)Жолдық өрнектер.
е)Жолдық қатарлар.
4.Жолдық қатарлардың ұзындығын есептеу үшін қай функция қолданылады?
а)Concat.
б)Copy.
с) Length.
д)Val.
е)Upcase.
5.Жолдық қатарларға бір фрагмент қосу үшін қай процедура қолданылыды?
а)delete.
б)insert.
с) Length.
д)pos.
е)Upcase.
6.кез келген сандық шаманы бір жолдық қатарға қою үшін қай процедура қолданылыды?
а)Str
б) Val.
с) Length.
д)Pos.
е)Arrey
7.Қатар программалауда жолдық қатарлар қандай шамалар ретінде қолданылады?
а)Айнымалы.
б)Тұрақты.
с) Идентификаторлар.
д)Өрнек шамалары.
е)Жолдық.
8.Ұзындық мәніне қанша интервал беріледі?
а)1 символ.
б)2 символ.
с) 3 символ.
д)4символ.
е)89символ.
9.Өрнектерде жолдық қатарлар қалай жазылады?
а)Жақшамен.
б)2 Тырнақша арқылы.
с) Апостровқа алынып.
д)Керісінше.
е)Бас әріппен.
10.Программада кездесетін әр түрлі символдан тұратын тізбектер?
а)Айнымалыр.
б)Тұрақтылар.
с) Идентификаторлар.
д)Өрнек шамалары.
е)Жолдық қатарлар.
Тест есептері
1. Мына программа қандай нәтежие береді?
А:=’менің’; B:=’Қазақстанымның’; X:=’тәуелсіздігіне’;
X:=’10жыл’;
Z:=X+’+Y’;
Writeln(Z);
а)Тәуелсіздігіне.
б)10 жыл.
с) Қазақстаным.
д) Тәуелсіздігіне 10 жыл.
е)Менің Қазақстаным.
2.Берілген прогамманы аяқтап, қатардың ұзындығын тап.
Program kat;
Var Z:string;A:integer:
Begin Z:=’компьютер’
Writeln (‘A=’,A);readln end.
а)A:=length(z); 8.
б)Y:= length(z); 10.
с) Z:=val(z); 7.
д) F:=concat(z); 6.
е)E:= val(z); 7
3. Мына программа қандай нәтежие береді?
Program kat;
Var Х,А:string;
Begin Х:=’pentium-III’;A:=copy(X,1,7);
Writeln (‘A=’,A);readln end.
a)Pen.
б)Pentium-III.
с) Pentium .
д) Tium.
е) Pentium-I.
4. Мына программа орындалғанда қандай сөз шығады?
Program kat;
Var Х,А:string;N:=byte;
Begin N:=3;X:=’innet’;A:=’ter’;
Insert(A,X,N);
Writeln (‘X=’,X);readln end.
a)Inter.
б)Net.
с) Internet.
д) Innet.
е)Ternet.
5.Төмендегі программаның қызметі қандай?
Program kat;
Var Х,А:string;К:=byte;
Begin Х:=’Қызылорда’;For K:= 1 to length(x) do X[K]:=upcase(X[K]);
Writeln (‘X=’,X);readln end.
a)Орда сөзі шығады.
б)Сөздерді буынға бөледі.
с) Керсінше аударады.
д) Кіші әріптерді бас әріке айналдырады.
е)Сөзді тасмалдайды.
6. Төмендегі программаның қызметі қандай?
Program kat;
Var Х:string;N,М:=byte;
Begin readln (N,M)X:=’колледж’;
Delete(X,N,M);
Writeln (‘X=’,X);readln end.
a)N-ші позициасынан бастап М символын өшіреді.
б)М- позициясынан бастап N символын өшіреді .
с) Х қатарын көшіреді.
д) Х қатарындағы сөздерді буынға бөледі .
е)Х қатарын М қатарына ауыстырады.
7. Мына программа қандай нәтежие береді?
Program kat;
Const Y:=’гимн’;
Var Х,A:string;N,М:=byte;
Begin X:=’азия’;А:=concat`(Y,X);
Writeln (‘A=’,A);readln end.
a)Наз.
б)Назия.
с) Гимназия.
д) Гимн.
е)Азия.
8. Мына программа орындалғанда қандай сөз шығады?
Program kat;
Var A:string;N,М:=byte;
Begin readln X:=’Облыстық гимназия’
Delete(A,N,M) Delete(’Облыстық гимназия’,10,4);
Writeln (‘A=’,A);readln end
a) Облыстық гимн.
б)Облыстық азия.
с) Гимназия.
д) Обылыс наз.
е)Азия.
9. Төмендегі программаның қызметі қандай?
Program kat;
Var Х,Y,S:string;A:integer;
Begin A:=134;S=’tu’str(A, X);Y:=S+X;
Writeln (‘Y=’,Y);readln end
а)Жолдық қатарды А нақты санына айналдырады.
б) А нақты санын Х жолдық қатарына айналдырады.
с) Сандарды сөзбен жазады.
д) Сөзді санға айналдырады.
е)Барлық жауап дұрыс.
10. Төмендегі программаның қызметі қандай?
Program kat;
Var X:char;K:byte;
Begin Х:=’t’;X:upcase(X);
Writeln (‘X=’,X);readln end
a) Кіші әріпті бас әріпке айналдырады.
б)Бас әріпті кіші әріпке айналдырады.
с) Неше символ бар екенін анықтайды.
д) Х қатарының ұзындығын анықтайды.
е) Х қатарының орнын анықтайды
Тапсырмалар
-
Пернетақтадан енгізілген қатардағы барлық әріптер санын табу программасын құрыңыз.
-
Жолдық қатардан фрагмент қалай көшіруге болады?
-
Қазақстан сөзінен бес түрлі сөз шығатын программа жаз.
-
Оқу,кітап,ине,қаз,алғандай,менің сөздерін пайдалана отырып ,қазақтың “Оқу инемен құдық қазғандай”мақалы шығатын программа құр.
-
Пернетақтадан енгізілген қатардағы ең ұзын сөзді табыңыз.Қатардағы сөздер бір-бірімен бос орын арқылы жазылады деп есептеңіз.
-
Европа және гимназия сөздерін пайдалана отырып Евразия сөзі шығатын программа жаз.
-
Қазақстан сөзінен қазан сөзін шығаратын программа жаз.
-
Жолдық қатарындың ішінен қол сөзін өшіретін программа жаз.
-
А қатары берілген.Қатардың жұп нөмірлі орындарында тұрған символдарын өшіріп тастау программасын құр.
10.Екі А және В жолдық қатары берілген.Ақатарынан В қатарында кездесетін символдарды алып тастау программасын құр.
ІІ тарау. Олимпиадалық есептер
-
А есебі. Шеңбер
Енгізу файлының аты: А.in
Шығару файылының аты: А. Out
Есептің жауабы файылының аты: A. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
Шеңберде бірдей қашықтықта N нүктелер белгіленген, олар қарсы сағаттық тілдің бүтін сандармен 1-ден N-ға нөмірленген. Сіздерге осы шеңбердің бірнеше қос хордалар берілген, хорданың ұштары сол нүктелер болады. Әрбір хордалар үшін анықтаңыздар, олар қиылып кетеді ме, немесе қиылымайды (сүйкелмейген хордалар қиылған деп саналады).
Мәліметтерді енгізу форматы
Кіріс файлдың бірінші жолында екі бүтін сан тұрады: N және К (1 <=N <=109, 1<=K<=100). Келесі К жолда 4 бүтін сан тұрады: А1, В1, А2, В2- бірінші хорданын (А1, В1) және екінші хорданын (А2, В2) нүктелерінің нөмірлері. Жолдағы сандар пробелмен арқылы бөлінген.
Мәліметтерді шығару форматты
Шығыс файлға әрбір қос хорладың үшін бір жол жазылу керек- YES, егер хордалар қиылып кетеді, немесе Noегер хордалар қиылыспайды (сүйкелмейді).
Мысал
A.in |
A.out |
4 3 1 3 2 4 1 2 3 4 1 2 3 2 |
YES NO YES |
uses crt;
var e,w,q,i,j,k,l,m,n:longint;
a:array[1..4,1..100]of longint;
b:boolean;
function min(var i,j:longint):longint;
begin
if(i<j)then min:=i else min:=j;
end;
function max(var i,j:longint):longint;
begin
if(i<j)then max:=j else max:=i;
end;
begin
assign(input,'a.in');reset(input);
assign(output,'a.out');rewrite(output);
readln(n,k);
for i:=1 to k do readln(a[1,i],a[2,i],a[3,i],a[4,i]);
for i:=1 to k do begin
if(a[1,i]=a[3,i])or(a[2,i]=a[4,i])then writeln('YES')else begin
b:=false;
q:=abs(a[1,i]-a[2,i]);
if(q<=n-q)then begin
for l:=min(a[1,i],a[2,i])to max(a[1,i],a[2,i])do begin
for j:=max(a[3,i],a[4,i])downto min(a[3,i],a[4,i])do
if(l=j)then begin
b:=true;
writeln('YES');
break;
end;
if b then break;
end;
if(not b)then writeln('NO');
end else begin
e:=max(a[1,i],a[2,i]);
w:=max(a[3,i],a[4,i]);
b:=false;
for l:=min(a[1,i],a[2,i])to max(a[1,i],a[2,i])do begin
if(e=n+1)then e:=1 else inc(e);
for j:=min(a[3,i],a[4,i])to max(a[3,i],a[4,i])do
begin
w:=w-1;
if(e=w)then begin
b:=true;
writeln('YES');
break;
end; end;
if b then break;
end;
if not b then begin writeln('NO');end;
end;
end; end;
close(input);close(output);
end.
-
В есебі. Бөлгіштер
Енгізу файлының аты: В.in
Шығару файылының аты: В. Out
Есептің жауабы файылының аты: В. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
А оң саны В санының бөлгіші аталып жатыр, егер В А санға қалдықсыз бөлінсе. Мысалы, 15 санында 4 бөлгіш бар: 1,3,5,15. Әрбір берілген сандардың үшін, оның бөлгіштердің саны жұп сан немесе тақ сан болады ма сіздерге анықтау қажетті.
Мәліметтерді енгізу форматы
Кіріс файлдың бірінші жолында бір бүтін сан N (1<n<=105) жазылған. Келесі жолда N бүтін сан Хі(1<=Xi<=1018) жазылған. Бір жолдағы сандар аралары пробелмен бөлінген.
Мәліметтерді шығару форматы
Шығыс файлда аралары пробелмен бөлінген N сан жазылу керек: i- ші сан 0 деп жазылады, егер Х, бөлгіші саны жұп сан болады, немесе 1, егер Х, бөлгіші саны тақ сан болады.
B. in |
B. out |
2 4 5 |
1 0 |
uses crt;
var i,j,k,l,m,n:longint;
function prime(n:longint):boolean;
var i:longint;
begin
prime:=true;
for i:=2 to trunc(sqrt(n))do
if(n mod i=0)then begin prime:=false;break;end;
end;
procedure aaa(l:longint);
var i:longint;
begin
k:=2;
for i:=2 to (l div 2) do
if(l mod i=0)then inc(k);
end;
begin
assign(input,'b.in');reset(input);
assign(output,'b.out');rewrite(output);
readln(n);
for i:=1 to n do
begin
read(l);
if(prime(l))then write('0 ')else begin
k:=0;
aaa(l);
if(odd(k))then write('1 ')else write('0 ');
end;
end;
close(input);close(output);
end.
-
C есебі. Пайда.
Енгізу файлының аты: C.in
Шығару файылының аты: C. Out
Есептің жауабы файылының аты: C. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
Компьютер процессор бөлігінен және монитордан құралады.Қоймада цессор бөлігі және М монитор болып жатыр. І-ші процессор бөлігінің бағасы- Аі тугрик, j-ші монитордың бағасы- Вj тугрик. Дүниежүзілік қаражаттық дағдарыс артынан, і- ші процессор бөлігінен және j-ші монитордан құралған компьютердің бағасы Аi,Bj (көбейту) тугрик болады. Сіздерге дәл осылай компьютерлердің ең үлкен мүмкін саны жинау керек, олардың барынша ең көп мүмкін болған жиынтық бағасы болу үшін.
Мәліметтерді енгізу форматты
Кіріс файлдың бірніші жолда екі бүтін сан тұрады N және М (1<=N, M<=1000). Екінші жолда N бүтін сан тұрады: і-ші жолдағы сан Аі. Үшінші жолда М бүтін сан тұрады: j-ші жолдағы сан Вj(1<=Aj, Bj<=1000). Жолдағы сандар пробелмен арқылы бөлінген.
Мәліметтерді шығару форматы
Шығыс файлға пробелмен бөлінген екі бүтін сан жазылу керек-ең үлкен мүмкін болған компьютердің саны және олардың барынша ең көп мүмкін болған жиынтық бағасы.
Мысал
C.in |
C.out |
3 2 1 2 3 4 5 |
2 23 |
uses crt;
type mas=array[1..1000]of longint;
var
i,j,k,l,m,n,min:longint;
sum:longint;
a,b:mas;
procedure sort(var a:mas;n:longint);
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if(a[i]<a[j])then begin
l:=a[i];
a[i]:=a[j];
a[j]:=l;
end;
end;
begin
assign(input,'c.in');reset(input);
assign(output,'c.out');rewrite(output);
readln(n,m);
for i:=1 to n do read(a[i]);
for j:=1 to m do read(b[j]);
sort(a,n);sort(b,m);
if(n>m)then min:=m else
min:=n;
for i:=1 to min do
sum:=sum+(a[i]*b[i]);
write(min,' ',sum);
close(input);close(output);
end.
-
D есебі. Жалқаулық.
Енгізу файлының аты: D.in
Шығару файылының аты: D. Out
Есептің жауабы файылының аты: D. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
Оқытушы емтиханға дайындалуға үшін оқушыларына N сұрақтарды берді. Осы сұрақтардан ол емтиханға үшін А сұрақты таңдайды, ал оқушы, бесті алу үшін В сұрақты (бұларды А сұрақтан) жауап беру тиісті. Ку оқушы барлық сұрақтарды оқытуға қаламайды. Бесті алу үшін, сұрақтардың қандай ең аз саны оған жатап алу керек?
Мәліметтерді енгізу форматы
Кіріс файлдың жекеше жолында үш бүтін сан жазылған: N, A және В (1<=N<=100000, 1<=B<=A<=N). Сандар аралары пробел арқылы бөлінген.
Мәліметтерді шығару форматы
Шығыс файлда бір бүтін сан жазылу керек- есептің жауабы.
Мысал
D.in |
D.out |
10 7 3 |
6 |
uses crt;
var i,j,k,l,m,n:longint;
begin
assign(input,'d.in');reset(input);
assign(output,'d.out');rewrite(output);
readln(i,j,k);
writeln(i-(j-k));
close(input);close(output);
end.
-
Е есебі. Серіппе
Енгізу файлының аты: E.in
Шығару файылының аты: E. Out
Есептің жауабы файылының аты: E. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
N мөлшерлі серіппе- натуральды сандарлардың NxN мөлшерімен кестесі, кесте орталығында әрқашан 1 тұрады, одан оң жақтан 2, серіппе қарсы сағаттық тілдің бұралып қалып жатыр. N мөлшерлі серіппесін шығарыңыздар.
Мәліметтерді енгізу форматы
Кіріс файлдың жекеше жолында бір бүтін сан жазылған- N(1,=N<100, N-тақ сан).
Мәліметтерді шығару форматы
Шығыс файылдың N жолда N бүтін саны жазу керек- N мөлшерлі спираль. Сандар аралары пробелмен бөлінген болу керек.
Мысал
E.in |
E. out |
1 |
1 |
3 |
5 4 3 6 1 2 7 8 9 |
5 |
17 16 15 14 13 18 5 4 3 12 19 6 1 2 11 20 7 8 9 10 21 22 23 24 25 |
uses crt;
var w,q,o,i,j,k,l,m,n:longint;
a:array[1..100,1..100]of longint;
b:array[1..100,1..100]of boolean;
procedure aaa(l:longint);
begin
if(n>0)then begin
inc(m);
if(m=1)then begin
for i:=1 to n do begin
if(b[l,i]=false)then begin
b[l,i]:=true;
a[l,i]:=o;
dec(o);
end;
end;
aaa(n);
end else
if(m=2)then begin
for i:=1 to n do
begin
if(b[i,l]=false)then begin
b[i,l]:=true;
a[i,l]:=o;dec(o);
end;
end;
aaa(n);
end else
if(m=3)then begin
for i:=n downto 1 do
if(b[l,i]=false)then begin
a[l,i]:=o;dec(o);
b[l,i]:=true;
end;
inc(w);
aaa(w);
end else
if(m=4)then
begin
for i:=n downto 1 do
if(b[i,l]=false)then begin
b[i,l]:=true;a[i,l]:=o;dec(o);
end;
m:=0;
if(m=0)then begin inc(k);dec(n);end;
aaa(k);
end;
end;end;
begin
assign(input,'e.in');reset(input);
assign(output,'e.out');rewrite(output);
w:=0;
readln(n);q:=n;k:=1;
m:=0;o:=sqr(n);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),false);
aaa(1);
for i:=q downto 1 do
begin for j:=q downto 1 do write(a[i,j],' ');writeln;end;
close(input);close(output);
end.
-
F есебі. Дәрежесі
Енгізу файлының аты: F.in
Шығару файылының аты: F. Out
Есептің жауабы файылының аты:F. pas
Уақыт шектеу: 2 секунд
Жадыға шектеу: 64 мегабайт
Сіздерге А,В және С бүтін сандары берілген. АВ(А-нің В дәрежесі) С-ға бөлуінің қалдығы шығарыңыздар. Назарды ықылас білдіріңіздер:
(Х-Y) mod Z=((X mod Z)* (Y mod Z)) mod Z
(Х-Y) mod Z=((X mod Z)+ (Y mod Z)) mod Z
Мәліметтерді енгізу форматы
Кіріс файлдың жекеше жолында үш бүтін сан жазылған А,В,С(0<=A, B<=1018,1<=C<=1018). Сандар аралары пробел арқылы бөлінген.
Мәліметтерді шығару форматы
Шығыс файлда бір бүтін сан жазылу керек-есептің жауабы.
Мысал
F. in |
F. out |
3 4 5 |
1 |
uses crt;
var i,j,k,l,m,n:longint;
begin
assign(input,'f.in');reset(input);
assign(output,'f.out');rewrite(output);
readln(i,j,k);
l:=1;m:=0;
repeat
inc(m);
l:=l*(i mod k);
until(m=j);
writeln(l mod k);
close(input);close(output);
end.
-
Спортшы бірінші күні 10 км жүгірді. Әр күні ол күнделікті жүгіру нормасына 10 % қосып отырды.Спортшы неше күнен кейін:
а) 20 км астам жол жүгіреды;
b) қосқанда 100 км астам жол жүгіреді.
a) Program F7_a1;
Var s: real; i: integer;
Begin
S:=10; i:=1;
While s<=20 do
Begin
I:=i+1;s:=s+0.1*s end;
Write (‘20 км астам жол жүгіреды ол ',I,’күні’);
End.
b) Program F7_b1;
Var s, sum: real; i: integer;
Begin
S:=10; i:=1; sum:=s;
While sum<=100 do
Begin
I:=i+1;s:=s+0.1*s;sum:=sum+s end;
Write (‘қосқанда 100 км астам жол жүгіреді, ол.',I,’күні’);
End.
-
Берілген үштаңбалы санның бірдей цифрларының бар екенін анықтайтын программа жаз.
Program F8_a1;
Var x,x1,x2,x3: integer;
Begin writeln; write(‘үш таңбалы санды енгіз’); read(x);
x1:=x mod 10;
x2:= x mod 10;
x:=x div 10;
x3:=x div 10;
if (x1=x2) or (x2=x3) or (x1=x3) then write(‘бар ’) else write (‘ жоқ’);
end.
-
N элементтен түратын массив берілген. Оны төмендегі берілген ереже бойынша өзгертіп жаңа массив құрастыратын программа жаз(егер хкі- мағынасында берілсе к-жаңа массивтің элементы болады):
-
Xri =max x, егер I<=i<=k;
-
массив элементтерінің кері жағдайдағы;
-
XiN=XI, xik=xk+1 , мұнда k=1,2,…N-1 .
-
Program F9_d1;
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 F9_d2;
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 F9_d3;
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;
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.
-
Х және У массив элементтері кему ретімен орналасқан. Массив элементтерін бір Z массивіне қосып, оның элменттерінде кему ретілігімен орналстырып программа жаз.
Program F10_d1;
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(‘x,y элементінің нөмірін енгіз’, i); 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:=I to n do if z[j]>m then begin m:=z[j]; k:=j end;
B:=z[i]; z[i]=z[k]; z[k]:=b
End;
For i:=1 to n do write(‘ ‘,z[i])
End.
-
Қашықтан сегіру жарысының қортындысы келесі матрицада көрсетіледі 5х3(5- спортшы, 3- әр споршының кезегі). Қандай споршы, қай кезекте ең жоғары нәтиже көрсететін программа жаз.
Program f11_d1;
Var I,j,max,k,m: integer; a:array[1..5,1..3] of integer;
Begin
For i:=1 to 5 do
For j:=1 to 3 do
Begin
Write(‘енгіз а ’, I,j); read (a[I,j]);
End;
Writeln(‘енгізілген екі өлшемді массивтің түрі:’);
For i:=1 to 5 do
Begin
For j:=1 to 3 do write(a[I,j]:3);
Writeln end;
Max:=a[1,1]; k:=1; m:=1;
For i:=1 to 5 do
For j:=1 to 3 do
If a(I,j)> max then begin max:=a[I,j]; k:=I; m:=j end;
Write(‘жоғары нәтиже =’. max);
Write(‘споршы нөмірі’, k,’кезекті нөмірде’, m) end.
-
3х3 берілген екі өлшемді массивтің қатар , бағана және диагональ бойынша сандардың қосындысы бірдей матрицаны шығаратын программа жаз. Мысалы:
-
2
9
4
7
5
3
6
1
8
Program f12_d1;
Const n=3;
Var I,j,x1,k,s,s1: integer; a: array[1..n,1..n] of integer;
Begin
For I:=1 to n do
For j:=1 to n do
Begin
Write(‘ а енгізу’, I,j ); read(a[I,j]);
End;
Writeln(‘енгізілген матрица түрі:’);
For I:=1 to n do
Begin
For j:=1 to n do write(a[I,j]:3);
Writeln
End;
X1:=0;
For i=1 to n do x1:=x1+ a(1,i) k:=0; for i:=1 to n do
Begin s:=0;
For j:=1 to n do s:=s+a[I,j];
If s=x1 then k:=k+1;
End;
For i:=1 to n do
Begin s:=0;
For j:=1 to n do s:=s+a[j,i];
If s=x1 then k:=k+1 end;
S:=0; s1:=0;
For i:=1 to n do begin
S:=s+a[I,i];
S1:=s1+a[I,n-i+1] end;
If s=x1 then k=k+1; if s1=x1 then k=k+1;
If k=2*n+2 then write(‘магикалық квадрат’) else write (‘жоқ’) end.
-
Латын кестесі
Берілген 4х4 екі өлшемді массивтің қатары мен бағанасында 1 ден 4-ке дейінгі сандар бір рет қана кездесетін матрица екенін анықтайтын программа жаз. Мысалы:
-
1
2
3
4
2
1
4
3
3
4
1
2
4
3
2
1
Program f13_d1;
Label 1,2;
Const n=4;
Var I,j,s,s1:integer: a: array[1..n,1..n] of integer;
Begin
For i:=1 to n do
For j:=1 to n do
Begin
Write(‘’,I,j); read( a[I,j]);
End;
Writeln(‘’);
For i:=1 to n do
Begin
For j:=1 to n do write(a[I,j]:3);
Writeln
End;
S1:=0;
For i:=1 to n do s1:=s1+I;
For i:=1 to n do
Begin
S:=0;
For j:=1 to n do s:=s+a[I,j];
If s<>s1 then goto 1
End;
For i:=1 to n do
Begin
S:=0;
For j:=1 to n do s:=s+a[j,i];
If s <> s1 then goto 1
End;
Write(‘латын квадрат’);
Goto 2;
1: write(‘’);
2: end.
-
Берілген санды ондық жүйеден : а) екілік санау жүйесіне; b) сегіздік санау жүйесіне аударатын программа жаз.
Program f14_d1;
Var x,x1:integer;
Function dv(x:integer): integer;
Var y,z,k: integer;
Begin z:=1; y:=0;
While x> 0 do begin
K:=x mod 2; y:=y+k*z; z:=z*10;x:=x div 2 end; end;
Function vos(x: integer): integer;
Var y,z,k: integer;
Begin z:=1; y:=0;
While x>0 do begin
K:=x mod 8; y:=y+ k*z; z:=z*10; x:=x div 8
End; end;
Begin
Write(‘ санды енгіз’,x); x1:= dv(x);
Write(‘сан’, x,’екілік санау жүйесі=’, x1);
X1:=vos(x);
Write(‘саны’, x,’сегіздік санау жүйесінде=’, x1);
End.
-
1, мұнда n =0
Xn= { 1/x|n| мұнда n< 0
X*xn-1 мұнда n > 0
Х саның n- дәріжесін, жоғардағы формула бойынша табатын программа жаз.
Program f15_d1;
Var x,y:real; k,n:integer;
Function xn(x:real; n: integer): real;
Begin
If n=0 then xn:=1 else xn:=x*xn(x,n-1)
End;
Begin
Writeln; write( ‘x,n енгіз’); readln(x,n);
If n< 0 then begin k:=-1; n:=abs(n) end;
Y:=xn(x,n);
If k=-1 then y:=1/y;
Write(‘x-тің дәрежесі n=’, y) end.
-
M мен N натурал сандары берілген. М санынан кіші және N санның цифрлардың квадратына тең сандарды табатын программа жаз.
Program f16_d1;
Label 1;
Var I,j,m,n,x,a,s: integer;
Begin writeln; write(‘M,N енгіз’ ) ; readln(m,n);
For i:=1 to m-1 do begin
S:=0; x:=I;
1: a:=x mod 10; s:=s+a;
X:=x div 10;
If x> 0 then goto 1;
If s*s= n then write(‘ ‘, i)
End;
Readln;
End.
-
Берілген натурал санды 16-лық есептеу өлшеміне ауыстыратын программа жаз.
Program f17_d1;
Var n,k,r,x,x1: integer; as.bs: string;
Begin
Writeln; write(‘ондық санды енгіз ’); read (x); x1:=x;
As:= ‘’; write (‘есепетеу жүйенің негізін енгіз’); read(n);
While x> 0 do begin k:=x mod n; x:=x div n;
If k < 10 then str (k,bs) else bs:= chr(ord(‘A’)+k-10);
As:= bs+as end; write (‘сан’, x1,’ есесптеу өлшемінің негізі’, n,’=’, as) end.
-
Берілген мәтіннің ішіндегі ең ұзын сөзды таңдайтын программа жаз.
Program f18_d1;
Label 1;
Var I,m,l,k,d: longint; t,n: string;
Begin
Writeln; write (‘мәтін енгіз’); readln(t); t:=+’ ’;
I:= length(t); m:=0; k:=1; i:=1;
While i<=l do begin
If copy (t,I,1)=’’ then begin d:=i-k;
If d> m then begin
M:=d; n:= copy(t,k,d);
End;
K:=i+1; end;
1: I:=i+1 end; write(‘ ең ұзын сөз’’ ‘,n,’’’әріптер саны ‘, m); readln; end.
-
Мәтін ішіндегі сөздердің соңында берілген әріп қанша кездеседі, оны пайыз түрін аудар.
Program f19_d1;
Var I,s,l,k,s1: longint; t,a: string; p: real;
Begin
Writeln; write (‘мәтін енгіз’); readln(t); t:=+’ ’;
I:= length(t); write(‘берілген әріпті енгіз ’); readln(a);
K:=1; s:=0; s1:=0;
For i:=1 to l do begin
If copy (t,I,1)= ‘ ‘ then begin
If copy (t,k,1)= a then s1:=s1+1;
S:=s+1; k:=i+1;
End; end; p:=s1*100/s;
Write(‘берілген әріптің пайызы ’’’, а, ‘’’ тең=’, p); readln; end.
-
Фамилия тізімін пробел арқылы енгізіп, осы тізімді берілген әріптен бастап құрайтын программа жаз.
Program f20_d1;
Var I ,m ,l, k, d: longint; t, a: string;
Begin writeln; write(‘тізімді енгіз ’); readln(t); t:=t+’;
L:= length(t); write(‘берілген әріпті енгіз ‘); readln(a); k:=l;
For i:=1 to l do begin
If copy (t,I,1)= ‘ ‘ then begin
If copy (t,k,1)= a then write(‘ ‘, copy(t,k,i-k)); k:=i+1;
end; end; readln; end.
-
Берілген екі таңбалы санды жазу түрінде жазылатын программа жаз (мысалы, 64 –ті «алпыс төрт » деген мәлімет шығару).
Program f21_d1;
Label 1;
Var n,n1, n2: longint; s: string;
Begin
Writeln; write(‘’); readln(n);
N1:= n mod 10;
N2:= n div 10;
If (n>=10) and (n<20) then begin
If n=10 then s:=’он’;
If n=11 then s:=’он бір’;
If n=12 then s:=’он екі’;
If n=13 then s:=’он үш’;
If n=14 then s:=’он төрт’;
If n=15 then s:=’он бес’;
If n=16 then s:=’он алты’;
If n=17 then s:=’он жеті’;
If n=18 then s:=’он сегіз’;
If n=19 then s:=’он тоғыз’;
Goto 1 end;
If n2=2 then s:=’жиырма’;
If n2=3 then s:=’отыз’;
If n2=4 then s:=’қырық’;
If n2=5 then s:=’елу’;
If n2=6 then s:=’алпыс’;
If n2=7 then s:=’жетпіс’;
If n2=8 then s:=’сексен’;
If n2=9 then s:=’тоқсан’;
If n1=1 then s:=s+’бір ‘;
If n1=2 then s:=s+’ екі‘;
If n1=3 then s:=s+’үш ‘;
If n1=4 then s:=s+’төрт ‘;
If n1=5 then s:=s+’ бес‘;
If n1=6 then s:=s+’ алты‘;
If n1=7 then s:=s+’жеті ‘;
If n1=8 then s:=s+’ сегіз‘;
If n1=9 then s:=s+’ тоғыз‘;
1:write(s);
Readln; end.
-
Берілген квадратық матрицаның элементтерін спираль бойымен орналастыр. Мысалы, 7 х7 квадраттық матрицасы берілген, оны толықтыру ретілгі
-
2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13
Program f22_d1;
Label 1,2;
Const n=7;
Var I,j,k,c,r,m,g,p: integer;
Begin k:=1; c:=0; r:=1;
Writeln;
For i:=1 to (n div 2) +1 do begin
For j:=I to n-i+1 do begin
C:=c+1; a[r,c]:=k; k:=k+1; write(a[r,c], ‘ ’) end;
For m:=i+1 to n-i+1 do begin r:=r+1; a[r,c]:=k; k:=k+1 end;
For p:=n-I downto I do begin c:=c-1; a[r,c]:=k; k:=k+1 end;
For q:=n-i+1 downto i+2 do begin r:=r-1; a[r,c]:= k; k:=k+1 end; end;
Writeln; for i:=1 to n do begin writeln;
For j:=1 to n do write(a[I,j]-5); end; end.
-
a,b,c натурал сандары берілген, олар келесі күнің күнін, айын және жылын белгілейтін сандар болатын программа жаз.
Program f23_ d1;
Label 1;
Var a,b,c,a1,b1,c1: integer;
D: array[1..12] of integer;
Begin writeln; write(‘күн, ай және жылын енгіз’); read(a,b,c);
D[1]:=31; if c mod 2 =0 then d[2]:=29 else d[2]:=28;
If(c mod 100=0) and (c mod 400 <>0) then d[2]:=28;
D[3]:=31; d[4]:=30; d[5]:=31; d[6]:=30; d[7]:=31; d[8]:=31;
d[9]:=30; d[10]:=31; d[11]:=30; d[12]:=31;
if (b=12) and (a=31) then begin a1:=1; b1:=1; c1:=c+1; goto 1 end;
if a=d[b] then begin a1:=1; b1:=b+1;c1:=c end else begin a1:=a+1; b1:=b; c1:=c end;
1: writeln; write(‘’, a1,’’,b1,’’,c1); end.
-
Мұғалімдер күні жыл сайын қазан айның бірнші жексенбісінде аталып өтеді. Берілген n саны жыл нөмірін белгілейді. Көрсетілген жылдың мұғалімдер мерекесіне сәйкес келетін санын анықта.
Program f24_d1;
Label 1,2,3;
Var n,i,s,s1,d1,v,v1,d2,c : integer;
Begin writeln; write(‘ жылын енгіз’); read(n);
S:=1; for i:=1 to n-1 do begin
if (I mod 4)= 0 then v:=366 else v:=365;
if (I mod 100= 0) and (I mod 400 <>0) then v:=365 ;
s:=s+v;end; s1:=5*31+28+3*30;
if (n mod 4)= 0 then v1:=1 else v:=0;
if (n mod 100= 0) and (I mod 400 <>0) then v:=0;
s1:=s1+v1; s:=s+s1;d2:=s mod 7; c:=7-d2;
write(‘c,s1,d1,d2’,c,s1,d1,d2);
if c >7 then c:=c-7; write(‘f’,v); writeln; write(‘’);
End.
Program f24_d1;
Label 1,2,3;
Var i,a,b,c,s,s1: integer;
D: array[1..12] of integer;
Begin 1: writeln; write(‘күн, ай және жылын енгіз’); read(a,b,c);
D[1]:=31; if c mod 2 =0 then d[2]:=29 else d[2]:=28;
If(c mod 100=0) and (c mod 400 <>0) then d[2]:=28;
D[3]:=31; d[4]:=30; d[5]:=31; d[6]:=30; d[7]:=31; d[8]:=31;
d[9]:=30; d[10]:=31; d[11]:=30; d[12]:=31;
if (a>d[b]) or (b> 12) or (c<0) then begin write(‘’); goto 1 end;
if b=1 then begin s:=a-1; goto 2 end;
s:=0;s1:=0;for i:=1 to b-1 do s:=s+d[i]; s:=s+a-1;
2: if b=12 then begin s1:=31- a; goto 3 end;
For i:=b to 12 do s1:=s1+d[i]; s1:=s1-a;
3: write(‘’, s); write(‘’,s1)
End.
-
Шахмат королі. Өлшемі 8х8 болған шахмат тақтасында ақтың корлі мен қараның пешкалары (пешкалар саны 1-ден 8-ге дейінгі аралықта мән қабылдайды) орналасқан.
Ақтың королі тек үш бағытта қозғалады.
Тұрған қатарынан оңға қарай тік;
Диоганаль бойынша оңға қарай төмен;
Төмен;
Король пешкаларды жеуіне болады. Пешкалар бастапқы тұрған орындарынан қозғалмайды. Пешкалар шахмат ойындағыдай шабуылдайды, король пешкалар шабуылдайтын алаңдарға жүре алмайды Шахмат тақтасы латын алфавитінің А, B, C, D, T,F,G,H әріптерімен және 1-ден 8- ге дейінгі цифрлармен белгіленеді.
Тапсырма: Ақтың королі шахмат тақтасындағы көрсетілген торкөзге жету үшін жүруі керек болған ең аз қадамдар санын тап.
Кіру файылының форматы: Кіру файылының алғашқы сегіз қатарында шахмат тақтасымен ондағы тастардың орналасуы берілген. Король «К» әрпімен пешка «Р» әрпімен, ал бос орын «.» символымен бейнеленеді. Кіру файылының соңғы қатарында король баруы керек торкөздің аты көрсетілген.
Шығу файылының форматы: шығу файылында тек бірғана сан королдің көрсетілген торкөзге жету үшін жасауы керек ең аз қадам саны жазылған.
Кіру файлы: Korol.in
……..
……..
……..
..K….
……..
….P..
…..P.
H1
Шығу файлы: Korol.out
Есептің алгоритмі: Есепті шығаруда ең алдымен шахмат жазуы танитындай екі өлшемді кесте жасаймыз. Одан кейін екі өлшемді қосымша сандық кесте аламыз. Осы кестеде корольдің тұрған орнын «2» деп, пешкалардың шабуылдайтын торкөздерін «1» деп белгілеп аламыз.
Король есептің шарты бойынша үш бағытқа жүреді:
I,j I,j+1
I+1,j i+1,j+1
Бұл есеп «бұтақ (дерево)» әдісіне келеді. Королмен осы үш бағыттағы әрбір торкозге жүріп көреміз. Осы үш торкөздің әрбірінен тағы үш торкөзге жүруге болады және тағыда сол сияқты. Әрбір торкөзге жасалынған қадам санын жазып отырамыз. Король көрсетілген торкөзге жеткенде сол торкөздегі сан, ең аз қадам санын береді.
Шешімі:
Program KOROL;
Uses crt;
Const
Y: array[1..8] of string=(‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’);
Label 1;
Var I,j,k,t,f,r,l,p: 0..16;
B: array[1..8,1..8] of string [2];
C: array[1..8] of string [8];
A: array[1..8,1..8] of 0..16;
Q: string;
Procedure juru;
Begin
If(i+1<=8) and (a[i+2,j]=0) then if (f=i+1) and (r=j)
Then t:=1
Else
Begin
A[i+1,j]:=i+1;k:=1;
End
If(j+1<=8) and (a[I,j+1]=0) then if(f=i) and (r=j+1) then t:=1 else begin
A[I,j+1]:=i+1; k:=1; end;
If(j+1<=8) and (,j+1<=8) and (a[i+1,j+1]=0) then if(f=i+1) and (r=j+1) then t:=1 else begin
A[i+j+1]:=i+1; k:=1; end; end;
Procedure aqw;
Begin
If(i-1>=1) and (j-1>=1) then a[i-1,j-1]:=1;
If(i-1>=1) and (j+1<=8) then a[i-1,j+1]:=1;
A[I,j]:=0;
End; begin clrscr; p:=9; for i:=1 to 8 do
Begin p:=p-1;
For j:=1 to 8 do
Begin
Str(p,q); b[I,j]:=y[j]+q;
End; end; assign() input, ‘korol.in’);
Reset(input);
assign() output, ‘korol.out’);
rewrite(output);
for i:=1 to 8 do
readln(c[i]); close(input);
for i:-1 to 8 do
for j:=1 to 8 do
begin
if b[I,j]=q then begin f:=I; r:=j; end;
if copy(c[i],j,1)= “K” then begin a[I,j]:=2; l:=I; t:=j: end;
if copy(c[i],j,l)=”P” then a[I,j]:=1;
end; if not((1<=f) and (t<=r)) then begin writeln(“no solution”); exit; end;
if(l=f) and (t=r) then begin writeln(0); exit; end;
for i:=1 to 8 do
for j:=1 to 8 do
if a[I,j]=1 then aqw;
t:=0; l:=2; for i:=1 to 8 do
for j:=1 to 8 do
if a[I,j]=1 then juru; inc(l);
if t=1 then begin writeln(1-2); halt; end;
if k<>0 then goto 1;
writeln(“no solution”);
close(output); end.
-
Меретой. Ғасыр мерейтойы деп атақты адамдардың туылған күнінен бастап 100 немесе 200 жыл өтуін айтамыз. Қалада атақты бір ақынның ғасырлық мерейтойын тойламақшы. Осыған орай ұйымдастырушылар қала орталығында үлкен табло іліп қоюды дұрыс деп тапты. Бұл таблоның қызметі мерейтойға дейін неше күн қалғаны көрсету.
Тапсырма: осы таблоның жұмыс істеуін қамтамасыз ететін, ақынның туылған күні мен ағымдағы мерзімге қарап мерейтойға неше күн қалғанын анықтайтын программа жазу керек.
Ескерту: сіз жазған программа таблоның 1999-2099 жылдар аралығында дұрыс жұмыс жасауын қаматамасыз ету керек.
Кіру файылындағы мәліметтің форматы: кіру файлы екі қатардан тұрады. Бірініші қатарда- ақынның туылған күні мына форматта :кк:аа:жжжж; екінші қатарда , дәл осы форматтағыдай ағымдағы мерзім берілген.
Шығу файылындағы мәліметтің форматы: сіз жазған программа шығу файлына мерейтойға қалған күндердің санын, егер мерейтой өту үстінде болса немесе өтіп кеткен болса «тойлануда» деген жауап шығару керек.
Есептің алгоритмдік шешуі: бұл есепте берілген ақынның туылған күні айы, жылы мен ағымдағы күн, ай, жыл айырмашылығын есепке аламыз. Одан төмендегі шарттар туындайды:
Kyn2-kyn 1<=0
Ai2-ai1<=0
Gil2 mod 4=0 болса, онда ақпан 29-ына бітеді. Егер gil2-gil1 mod 10=9 онда, мерейтойға әлі жылға жуық уақыт бар болып, мына шарт арқылы тексереміз. Gil2 mod 4=3 then b[2]:=29;
Program mereitoi;
Uses crt;
Label 1;
Const b: array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
Var s,r,m: string;
Q,I,j,n,k,,l,p,gil2,kyn1,kyn2,ail,ai2: integer;
Begin
Clrscr; assign(input,”input.in”)
Reset(input);
Readln(s); readln(r);
Close(input);
Assign(output,”output.out”);
Rewrite(output);
K:=pos(“.”,s); m:=copy(s,l,k-1); delete(s,1,k);
Val(m,kyn1,q);k:=post(“.”,s); m:=copy(s,l,k-1);
Delete(s,l,k); val(m,ail,q);val(s,gil1,q);
K:=pos(“.”,r): m:=copy(r,l,k-1);delete(r,l,k);
Val(m,kyn2,q);k:=pos(“.”,r); m:=cope(r-1,k-1);
Delete(r,l,k);val(m,ai2,q);
Var(r,gil2,q);p:=gil2-gil1;
Q:=p mod 10; p=0;
If q=9 then begin
If (gil2 mod 4=3) or ((ai2<3) and (gil2 mod 4=0)) then b[2]:=29;
K:b[ai2]-kyn2;
For i:=ai2+1 to 12 do
P:=p+b[i];
For i:=1 to ail-1 do
P:= p+b[i]; p:=p+kyn1+k;
Goto 1; end;
If (ai1<=ai2) and (kyn2>= kyn1) then begin writeln(“toilanyda”); exit; end;
If (ai1<=ai2) and (kyn1>= kyn2) then begin p:=kyn1-kyn2; goto 1; end;
P:=gil2 mod 4;
If p=0 then b[2]:=29;
Q:=ai1-ai2; k:=b[ai2]- kyn2;
If q=1 then begin p:=k+kyn1; goto 1; end;
Q:=0;
For i:=ai2+1 to ai1-1 do
Q:=q+b[i];p:=k+q+kyn1;
L:writeln(p);
Close(output);
End.
-
Бөліктерге ажырату. Натурал М(м<30000) санын N(N<20) бүтін, тең немесе жобамен тең бөліктерге ажырату керек. Жобамен тең бөлік деп, кез-келген екі бөліктің айырмашылығы 1-ден аспаған бөліктерді айтамыз.
Кіру файылындағы мәліметтің форматы: Бірінші қатар-М, екінші қатар- ON;
Шығу файлындағы мәліметтің форматы: Өсу ретімен реттелген N саннан тұратын бір қатар:
Кіру файлы: Шығу файлы:
Input.in Output.out
13 3 3 3 4
4
Program bolik;
Uses crt;
Var p, n, m, k: integer;
Begin clrscr;
Assigin(input,’input.in’);
Reset(input);
Readln(n);
Close(input);
Assign(output,’output.out’);
Rewrite(output);
P:=m od n; k:=m div n;
If p=0 then
For i:=1 to n do
Write(k,’ ’);
Else
Begin
For i:=1 to n-p do
Write(k,’ ‘);
For I:=1 to p do
Wr3te(k+1,’ ‘);
End;
Close(output);
End.
-
Ферзілер. Олипиадаларда жиі келетін есептердің бірі- «ферзілерді орналастыру» есебі. Бұл есептің шарты мынадай: N ферзіні n x n- шахмат тақтасына бір-біріне қауіп төндірмейтіндей етіп орналастыр және осындай орналастырулардың барлық варианттарын көрсет. Мұндай орналастыруды «қауіпсіз» орналастырулар деп те атайды. «Input.txt» файлында [4..20] аралығынан алынған n- ферзілер саны болу керек. Ал “output.txt” файлында әрбір «қауіпсіз» орналастыруға сәйкес келетін натурал сандар қатарларды болу керек. Қатардағы әрбір санның реттік нөмірі шахмат тақтасының вертикаль нөмірін, ал мәні горизонаталь нөмірін көрсету креке. Мысалға, «Input.txt» файлында 4 саны болса, онда “output.txt” файлында мынадай сан қатарлары болу керек:
1 3 5 2 4
1 4 2 5 3
Program fersi;
Type
TNom=1..20;
TPole=array[tNom] of TNom;
Var
N:TNom;
Pole:Ypole;
F:text;
Perv:Boolean;
Procedure Sohr;
Var i:TNom;
Begin
Assign(f,’output.txt’);
Append(f);
If perv then writeln(f) else perv:=true;
For i:=1 to n-1 do write(F,Pole[i],’ ‘);
Write(f,pole[n]); close(f);
End;
Function prover(i:TNom): Boolean;
Var
J:TNom;
Flag: Boolean;
Begin
J:=1;
Flag:=true;
While(j<>i) and flag do
Begin
Flag:=(pole[i]<>pole[j]) and (abs (pole[j]<>i-j); j:=j+1; end;
Prover:=flag; end;
Procedure poisk(I:TNom);
Var j,k:TNom;
Begin
For k:=1 to n do
Begin
Pole[i]:=k;
If prover(i) then
If i=n then sohr else poisk(i+1); end;end;
Begin
Assign(f,’input.txt’);
Reset(f);
Read(f,n);
Close(f);
Assign(f,’output.txt’);
Rewrite(f);
Close(f);
Perv:=false; poisk(1);
End.
-
Салыстыру. Сізге А және В екі саны берілген. Соларды салыстыру керек және салыстыру қортындысын шығару қажет.
Енгізу файлының аты: compare.in
Шығару файлының аты: compare.out
Кіріс файылдың жалғыз жолында А және В екі бүтін сан бар. Әр сан 100- ден аспайтын таңбадан тұрады. Егер санды 1-ден көп таңба болса, бірінші таңба нөл емес. Сандар бос орынмен бөлінген.
Есептің шешімі.
Program salistiru(input,output);
Type aa=array[0..100] of 0..9;
Var a,b:aa;
Code:integer;
Ch:char;
F: Boolean;
Function eq(a1,b1: aa): boolean;
Var j:integer;
Begin
Eq:=false;
If (a1[0]<>b1[0]) then exit
Else begin
J:=1;
While(j<=a[0]) and (a1[j]=b1[j]) do inc(j);
Eq:=j=a1[0]+1;
End; end;
Function more(a1,b1:aa): Boolean;
Var j: integer;
Begin if a1[0]< b1[0] then more:=false else if a1[0]>b1[0] then more:= true else begin j:=a[0];
While(j>0) and (a1[j]=b1[j]) do dec(j);
If j=0 then more:=false else if a1[j]> b1[j] then more:=true else more:= false; end; end;
Procedure printA;
Var i:byte;
Begin for i:=1 to a[0] do write(a[j]); end;
Procedure printB;
Var j: byte;
Begin for j:=1 to b[0] do write(b[j]); end;
Begin
Assign(input,’compare.in’); reset(inpuy);
F:=true;
While not(eof(input)) do
Begin
Read(ch);
If ch=’ ‘ then begin f:=false; read(ch); end;
If f then begin inc(a[0]); val(ch,a[a[0]], code); end else begin inc(b[0]); val(ch,b(b[0],code)); end; end; close(input);
Assign(output,’compare.out’); rewrite(output);
If a[0]> b[0] then begin printA; write(“>”); printB: end else
If a[0]< b[0] then begin printA; write(“<”); printB: end else
If eq(a,b) then begin printA; write(“=”); printB: end else
If more(a,b) then begin printA; write(“>”); printB: end else
Begin printA:write(“<”); printB; end;close(ouyput); end.
-
Алмалар. Азатта N алма бар. Достары Л алма сұрады. Таратқаннан кейін Азаттан қалған алмалардың жалпы салмағының қосындысы максималды болатындай етіп, Азатқа тарататын алмаларды таңдауға көмектесіңіз.
Енгізу файлының аты: apples,in
Шығару файлының аты: apples.out
Кіріс файылының бірінші жолында N және К екі сан берілген (1<K<N>10000). Азаттағы алманың саны және таратылған алманың саны. Екінші жолда 1-мен 10-ның арасында. N сан берілген алмалардың салмақтары. Жолдағы сандар бос орын арқылы бөлінген.
Мәліметтерді шығару форматтары. Нәтижелік шығыс файлына бір санды шығарыңыз –қалған алмалардың салмақтарының максималды қосындысы.
Есептің шешімі.
Program almalar(input,output);
Var a,c,d: array[1..10000] of 1..10;
B: array[1..10000] of Boolean;
N,k:1..10000;
M3n,max,s,j:integer;
Procedure rec(m:integer);
Var i: integer;
Begin
If m=k then begin if min< max then max:= min end else
for i:=1 to n do
if b[i] then begin
min:=min+a[i];b[i]:=false; inc(m); rec(m);
min:=min-a[i]; dec(m); b[i]:=true; end; end;
begin
filcher(b,sizeof(b), false); s:=0;
assign(input, ‘apples.in’); reset(input); read(n,k);
for j:=1 to n do begin
read(a[j]); b[j]:= true; s:=s+a[j]; end;
close(input);
max:=s; min:=0;
assign(output,’apples.out’); rewrite(output);
for i:=1 to n do begin
b[j]:=false; min:=a[j]; rec(1);b[j]:=true; end;
write(output,s-max);
close(output);
end.