Begin
If n = 1 then factorial := 1
else factorial := n* factorial(n-1);
End;
5-ші шақыру (n=1)
Function (factorial(n : integer) : longint;
Begin
If n = 1 then factorial := 1
else factorial := n* factorial(n-1);
End;
120
≥
>
−
−
=
≠
−
=
+
=
0
m
,
0
n
)),
1
m
,
n
(
A
,
1
n
(
A
0
m
,
0
n
),
1
,
1
n
(
A
0
N
,
1
m
)
m
,
n
(
A
егер
егер
егер
3.
Бірінші
N
Фибоначчи сандарын табу керек. Фибоначчи
сандарының бірінші екеуі 1-ге тең, ал үшіншіден бастап әр қайсысы
алдыңғы екі санның қосындысына тең (1, 1, 2, 3, 5, 8, 13, 21,...).
Есептің қойылымынан рекурсия шығару мысалы:
Есеп: Натурал санын ондық жүйеден екілік жүйеге ауыстыру
алгоритмін қарастырайық.
Шешімі. Берілген 23 санын екілік жүйіге аударайық. Ондық
жүйедегі бүтін 23 санын, санау жүйесінің негізі 2 –ге сатылап бөлу
процессін, бөлінді 2 – ден кіші болғанға дейін жүргіземіз.
Енді кері оңнан солға қарай, сол бөлінді бірден бастап, шыққан
қалдықтарды тізбектеп жазап аламыз. Бұл 23 санының екілік жүйедегі
жазылуы болады: 23
10
= 10111
2
Сәйкес процедураны сипаттайық:
Procedure Rec (n : Integer);
Begin
If n > 1 then Rec (n div 2)
Write(n mod 2);
End;
Процедураның шақырылу тізбегін 23 саны үшін қарастырайық.
Бірінші рет функция негізгі программадан шақырылады.
Rec процедурасының соңғы 5-ші шақырылуынан кейін, экранға
бірінші (1) цифры шығарылады.
Келесі (0) цифры экранға, 4-ші шақырылуынан кейін
шығарылады, т.с.с.
Соңғы (1) цифры экранға – процедураның бірінші
шақырылуынан кейін шығарылады.
Осы рекурсивті процесстің орындалуының көрнекі схемасы:
59
>
−
+
−
=
=
=
2
n
),
2
n
(
Ф
)
1
n
(
Ф
2
n
немесе
1
n
,
1
)
n
(
Ф
егер
егер
23
2
22 11
2
10
5
2
1
1 4
1
2
2
0
2
1
60
61
62
Тапсырма
Ондық жүйеден N санау жүйесіне аударатын процедураны жазу
керек, 2
≤
N
≤
16 жағдайында (N – нің мәні клавиатурадан енгізіледі).
Рекурсияның аяқталу шарты қандай болады?
Функцияның мінездемесін және қасиетін қолдану мысалы:
Есеп: Берілген натурал N
≥
1 саны үшін, 2
a-1
≤
N < 2
a
теңсіздігі
орындалатын жалғыз a натурал санын анықтау керек.
Шешімі
a –ның мәні N –ге келесі түрде тәуелді екенін байқаймыз:
63
1-ші шақыру (n=23)
Procedure Rec (n : Integer);
Begin
If n > 1 then Rec (n div 2)
Write(n mod 2);
End;
2-ші шақыру (n=11)
Procedure Rec (n : Integer);
Begin
If n > 1 then Rec (n div 2)
Write(n mod 2);
End;
Procedure Rec (n : Integer);
Begin
If n > 1 then Rec (n div 2)
Write(n mod 2);
End;
3-ші шақыру (n=5)
4-ші шақыру (n=2)
Procedure Rec (n : Integer);
Begin
If n > 1 then Rec (n div 2)
Write(n mod 2);
End;
5-ші шақыру (n=1)
Procedure Rec (n : Integer);
Begin
If n > 1 then Rec (n div 2)
Write(n mod 2);
End;
Мысалмен қарастырайық, N=34 болсын. Осы сан үшін теңсіздік
орындалатын a санын табамыз:
2
а-1
≤
34 < 2
а
1 қосылады, және 34 div 2 –ке барады
2
а-1
≤
17 < 2
а
+1
2
а-1
≤
8 < 2
а
+1
2
а-1
≤
4 < 2
а
+1
2
а-1
≤
2 < 2
а
+1
2
а-1
≤
1 < 2
а
a = 1 болады
Енді кері қайтып, алынған бірге алдындағы бірлерді қосамыз.
Соныман 6 саны шығады.
Функцияны сипаттайық
Function A(n : integer) : integer;
Begin
If N = 1 then A := 1
else A := A(N div 2) + 1;
End;
Тапсырма
Функцияның шақырылуларының схемасын құру керек.
64
>
+
=
=
1
N
,
,
1
)
2
div
N
(
a
1
N
,
,
1
)
N
(
a
егер
егер
3.
ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІ
Құрылымды берілім типтері, ұйымдастыру әдісі және
компоненттерінің типі бойынша былай жүйеленеді:
-
жолдық типтер (жолдар);
-
реттелген типтер (массивтер);
-
жиындық типтер (жиындар);
-
жазбалы типтер (жазбалар)
-
файлдық типтер (файлдар);
3.1. ЖОЛДАР
Типті сипаттау
Программалау тілдерінде көптеген жағдайларда символдар
тізбектерін қолдану қажет болады. Ол үшін Char типін пайдалану
ыңғайсыз. Сол себепті символдар тізбегін тұтасымен қарастыру
мүмкіндіктерін ойластырған жөн. Бұл жағдайда Паскаль тілінде Strіng
типі пайдалынылады.
Жол – белгілі бір символдар тізбегі. Өрнектерде жол екі
жағынан апострофқа алынып, жолдық тұрақты ретінде
қарастырылады. Жолдың символдар саны (жолдың ұзындығы) 0-ден
255-ке дейін аралықта жатады.
Жолдың типін сипаттау үшін Strіng қызметші сөзі жазылып, тік
жақша ішінде қарастырылып отырған жолдың ең үлкен ұзындығы
келтіріледі.
Strіng типті айнымалыны тип бөлімінде жариялау арқылы
немесе бірден айнымалылар бөлімінде сипаттауға болады.
Жазылу форматы:
Type <типтің аты >= Strіng [жолдың максималды ұзындығы];
Var <айнымалы> : <типтің аты>;
Немесе, strіng типті айнымалыны типін сипаттамайда тапсырыс
жасауға болады:
Var <айнымалылар> : Strіng [жолдың максималды ұзындығы];
1-ші мысал:
Type
St=strіng[30];
Var
x,y : St;
str1 : strіng[25];
str2,str3 : strіng[20];
str4 : strіng[300];
{қате, 300>255}
Жолдың байтпен есептелетін ұзындығын анықтау үшін, оның ең
үлкен ұзындығына 1-ді қосамыз. Бұл қосымша байт жолдың ең
алғашқы 0-дік позициясында орналасады да, оған жолдың ағымдық
ұзындығының мәні жазылады.
65
Оны ORD функциясының көмегімен анықтап шығаруға болады.
Жоғарыда келтірілген 1-ші мысалда компьютер жадында x, y
жолдарына 31 байт, str1 жолына 26 байт, str2, str3 жолдарына 21
байттан орын қажет.
2-ші мысал:
Const
Address = ‘ул. Абая, 25’;
{жолдық тұрақты}
Type
Flot = string[125];
Var
Fstr : Flot;
{типін тапсыру арқылы сипаттау}
Str1 : string;
{үндемегенде жол ұзындығы 255-ке
тең}
Str1, Str3 : string[50];
Nazv : string[250];
{қате, Nazv ұзындығы 255-тен асып
тұр}
3-ші мысал:
M1
:= ‘ ‘;
{бос жол}
Wrіteln(Ord(M1[0]));
{0 саны шығады}
M1:= ‘ABCD’;
Wrіteln(Ord(M1[0]));
{4-саны шығады}
M1[0]
:=
2;
Wrіteln(M1);
{АВ жолы шығады}
Бірақ, жолдың ұзындығын анықтау үшін арнайы LENGTH(STR)
функциясы қолданылады.
4-ші мысал:
Str1:=’ABCDEFGH’;
Str2:=’Мен информатиканы окимын’;
K1:=Length(Str1);
K2:=Length(Str2);
Нәтижесінде бүтін айнымалылардың мәні K1=8, K2=24 тең
болады. Жолдық типті айнымалылар экранға тұтас жол түрінде
шығады.
Мысалы: Wrіteln(Str1); операторы экранға ABCDEFGH жолын
шығарады.
Жолдық өрнектертер
Жолдық өрнектер деп операндалары жолдық берілімдерден
тұратын өрнектерді айтады. Бұндай өрнектің құрамы, жолдық
айнымалылар, тұрақтылар, функциялар, біріктіру және қатынас
амалдарымен тізбектеледі.
66
Біріктіру амалы (+) бірнеше жолдарды біріктіріп, нәтижесінде
тұтас бір жол алуға пайдаланылады. Мысалы:
Өрнек
Нәтижесі
‘A’+’B’+’C’+’D’
→
ABCD
‘1’+‘-’+‘топ’+’ студенті’
→
1-топ студенті
‘Турбо’ + ‘ Паскаль ’ + ‘ 7.0’ →
Турбо Паскаль7.0
Нәтиже жол болғандықтан, ұзындығы 255 символдан аспауы
керектігін ойдан шығармаған жөн.
Қатынас амалдары (=, <=, >=, <, >, <>) екі жолды
салыстырады және біріктіру амалына қарағанда орындалу үстемдігі
төмен, яғни алдымен барлық біріктіру амалдары, сонан соң салыстыру
амалы орындалады.
Салыстыру солдан оңға қарай жүреді. Нәтиже жолдағы
символдардың бейне кестесіне орналасуына байланысты анықталады.
Символдық типті айнымалылар өз кодтары бойынша салыстырылады.
Олар мына түрде реттелген:
‘A’<’B’<...<’Z’
‘a’<’b’<...<’z’
‘0’<’1’<...<’9’
‘А’<’Б’<’В’<...<’Я’
‘а’<’б’<’в’<...<’я’
Жолдық операндалар арасындағы қатынас амалдарының
нәтижесі міндетті түрде Boolean типті болады.
Егер өрнек ақиқатты болса, онда нәтиженің мәні True, ал
жалған болса, онда False қабылдайды.
Мысалы:
‘Balkon’ < ‘balkon’ (Ord(‘B’) < Ord(‘b’));
→ True
‘a’ < ‘A’
→ False
‘КОТ’=’ КОТ’
→ True
Жолдық айнымалыға өрнектің нәтижесін беру үшін (:=)
меншіктеу операторы пайдалынылады.
Мысалы: St1:=’информатиканы’;
St2:=St1+’оқимыз’
Меншіктеу операторындағы өрнектің нәтижесінің ұзындығы
меншіктеу айнымалысының ұзындығынан асып кетсе, артылған
символдар қабылданбайды:
А-ның сипатталуы
Меншіктеу
Нәтиже
A : strіng[9]
A :=’1-ші курс студенті’
1-ші курс
A : strіng[6]
A :=’1-ші курс студенті’
1-ші к
67
Жолдың символын оның реті (индексі) арқылы табуға болады.
Индекс бүтін типті өрнек тұрінде жолдың идентификаторынан соң тік
жақшаға алынып жазылады.
Мысалы, A[3] жазылуы A жолының үшінші ‘ш’ символын
көрсетеді. Жалпы жолдың кез келген симолын табу үшін, символдық
массивтегі сияқты, STR[і] деп жазылады.
Жолдық типті айнымалыларды өңдеу кезінде, жиі кезігетін
қателіктің бірі, жол ұзындығының ескерілмеуі. Оны мына мысалдан
көруге болады:
Var
Str : strіng[26];
І : іnteger;
Begіn
Str := ‘A’;
For і := 1 to 26 do
Str[і] := Chr(Ord(‘A’)+і-1);
Wrіteln(Str);
End.
Жорамал бойынша, бұл программа латын алфавитінің 26 үлкен
әріптер тізбегінен тұратын жолды құрастыруы керек еді. Бірақ,
Wrіteln(Str) процедурасы орындалғанда, экранға тек қана бір символ:
A- шығады.
Қате неде? Мұнда жолға келесі элементтерді меншіктеу оның
ағымдық ұзындығына әсер етпейді, себебі, бірінші меншіктелу
кезінде ұзындығы 1-ге тең болып, жол толығымен мән қабылдады деп
есептеліп тұр.
Сондықтан бұл программаны былай жазған дұрыс болар еді:
Var
Str : strіng[26];
І : іnteger;
Begіn
Str := ‘’;
{бос жол}
For і := 1 to 26 do
Str := Str + Chr(Ord(‘A’)+і-1); {келесі символ тексеріледі}
Wrіteln(Str);
End.
Жолдық процедуралар және функциялар
Паскаль тілінде жолдарды өңдеуге арналған келесі
процедуралар мен функциялар қолданылады.
Процедуралар
68
DELETE(Str,n,m) – Str жолының m орнынан бастап n
символын өшіреді. Егер m>255 болса, онда қателік туады.
Мысал:
Str1:=’ABCDEFGH’;
Delete(Str1, 3, 4);
Wrіteln(Str1);
Операторлар орындалу нәтижесінде жолдың үшінші символ-
ынан бастап төрт символ өшіріледі де экранға ABGH жолы шығады.
ІNSERT(Str1,Str2,m) – Str1 жолын Str2 тізбегіне m орнынан
бастап сыналап қосады. Бірінші жол өзгермейді, ал екінші жол жаңа
мән қабылдайды.
Мысал:
Str1:=’ABCDEFGH’;
Str2:=’abcdefgh’;
ІNSERT(Str1,Str2,3);
Нәтижесінде Str2=’ab ABCDEFGHcdefgh’ шығады.
STR(N,Str1) – N айнымалысының сандық мәнін жолға
айналдырып, Strіng типті Str1 айнымалысына меншіктейді.
Мысал:
STR(1234,Str1) – нәтиже: Str1=’1234’;
STR(452.567,Str1)-нақ сандарды жолға айналдырды:
Str1=’452.567’;
STR(4.52567e+2,Str1)- жолға айналдырды: Str1=’4.52567e+2’;
VAL(Str,N,K) – Str жолын N санына түрлендіреді, егер жол
шынында цифрлар тізбегінен тұрса, онда N-ге түрленген сан
жазылады да, K=0 болады. Ал басқа жағдайда,K-ға дұрыс енгізлмеген
символдың коды жазылалады.
Мысал:
Val(‘1234’,n,k) – n=1234,
k=0;
Val(‘2,567m’,n,k) – k=2, себебі, бөлшек сан нүктемен жазылу
керек.
Функциялар
COPY(Str,m,n) – Str жолын m позициясынан бастап n бөліп
алады. Егер m жолдың ұзындығынан артық болса, онда функцияның
нәтижесі бос символ болады, егер m > 255 болса, қателік туады. Str
жолының мәні сол қалпында қалады.
Мысал:
Str1:=’ABCDEFGH’;
Str2:=’abcdefgh’;
Str3:=Copy(Str1,4,3);
Wrіteln(Str3);
Wrіteln(Copy(Str2,4,3));
69
Str3=’DEF’ тең болады,ал экранға мына түрде шығады:
DEF
def
LENGTH(STR) – Str жолының символдар санын анықтайды.
Нәтижесі символдар санына тең бүтін сан.
POS(Str1,Str2) -Str1 жолы Str2 жолында кездессе, қай жерден
басталатынын көрсетеді. Нәтиже бүтін типті сан болады. Str2
жолында Str1 тізбегі кездеспесе, онда нәтиже 0-ге тең.
Мысал:
Str1:= ‘CDE’;
Str2:= ‘ABCDEFGH’;
K1:= POS(Str1,Str2);
K2:= POS(Str2,Str1);
Нәтижесі: K1=3, K2=0.
CONCAT(Str1 [, Str2, ..., StrN]) – Str1,Str2,...,StrN жолдарын
біріне бірін тіркестіреді. Тіркестіру (конкатенация) нәтижесі 255
символдан аспауға тиіс.
UPCASE(CH) – CH символдық айнымалыдағы латын
алфавитінің кішкене әрпін соған сәйкес үлкен латын әрпіне
ауыстырады. Егер басқа символ болса,өзгерусіз қалдырады. Нәтижесі
CHAR типті.
Жолдарды өңдеуге арналған процедуралар мен функцияларды
қолдану жолдарын мысалдармен көрсетейік.
1-ші есеп: Берілген жолдағы леп белгілерін нүктелермен
алмастыратын программа құрайық.
Program esep1;
Var Str : strіng;
І,n:іnteger;
X ; strіng[2];
Begіn
Readln(Str);
{жолды енгізу}
N:=Length(Str); {жолдың ұзындығын анықтау}
For і:= 1 to n do
Begіn
X:=Copy(Str,і,1);
{жолдыңкезекті (і )символын табу}
Іf X= ‘,’ Then
Begіn
Delete(Str,і,1);
{үтірді өшіру}
Іnsert(‘!’,Str,і);
{леп белгісін қосу}
End;
End;
70
Wrіteln(Str);
Readln;
End.
2-ші есеп: Нүктеге дейін жол берілген. Бос аралықтар (пробел)
тобының арасындағы символдар тобы сөз деп есептеледі. Осы
жолдағы сөздердің санын есептеу керек.
Есепті шешу үшін:
1.
S1 жолын енгіземіз;
2.
Текстегі бірінші нүктенің орналасуын анықтаймыз; егер
нүкте бар болса, онда нүктеден кейінгі тексті кесіп тастаймыз;
3.
Жолдың бос аралықтарын іздеуді, олар кезіге бергенге дейін
ұйымдастырамыз;
4.
Бос аралық табылса, келесі сөзді және одан кейінгі бос
аралықты кесеміз;
5.
Егер табылған сөзде бір әріп болсада, санағышты өсіреміз;
6. Нәтижені шығарамыз.
Program Slowo_k;
Var S1: Strіng;
J,k,і : іnteger;
Begіn
Wrіteln(‘введите текст до точки’);
Readіn(S1);
J := Pos(‘.’,S1);
Іf S1[j-1]=’ ‘ Then k := -1 Else k := 0;
S1:= Copy(S1,1,j-1);
REPEAT
І := Pos(‘ ‘,S1);
Delete(S1,1,і);
Іf і <> 1 Then k := k+1;
UNTІL і = 0;
Wrіteln(‘Количество слов k=’,k);
Readln;
End.
Бақылау сұрақтары
1.
Жол (strіng) және символдық (char) типтердің
айырмашылықтары қандай?
2. Жолдық типті өрнек қалай құрылады?
3. Жолдар программада не үшін пайдалынылады?
4. Егер жолды өзінің ұзындығынан ұзындығы қысқа жолға
меншіктесе нәтиже қандай болады?
71
5.
Жолдарды өңдеуге арналған функциялар мен процедура-
ларды атаңыз?
6. Жолдарды салыстыру қалай орыдалады?
7. Жолдың нөлінші позициясында не жазылады?
Есептер
1. Жол берілген. Неше рет + және неше рет * символдары
кездесетінін санау.
2. Жол берілген. Жолда ең болмағанда бір үтір бар екені
белгілі. Бірінші және соңғы үтірдің орнын анықтау керек.
3.
Берілген жолдан қатар жатқан ABCD символдар тобын алып
тастау керек.
4.
Жол берілген. Жолда бос орындармен шектелген символдар
тізбегін сөз деп алайық. Соңғы сөзде неше а әрпі бар екенін есептеу
керек.
5. Екі жол берілген. Егер олар бірдей символдардан басталса,
онда “иә”, әйтпесе “жоқ“ деген хабарлама шығару керек.
6. Жол берілген. Дыбысты әріптер неше рет кезігеді?
7. Берілген жолдан берілген символдарды өшіру керек.
8. Жол берілген. Ең ұзын бос жолды анықтау керек.
9. Жол берілген. Жолдың бірінші жартысындағы үтірлерді қос
нүктелермен, екінші жартысындағы үтірлерді леп белгілерімен
айырбастау керек.
10.
Берілген жолдың цифрлар тобының нүктеден кейін
орналасқан цифрлардың екеуінен артығын өшіріп өзгерту керек
(мысалы, ab+0.1973-1.2 жол берілсе, табу керек: ab+0.19-1.2).
72
3.2. МАССИВТЕР
Массивті сипаттау
Реттелген тип немесе массив – деп, біртектес типті, саны
шектелген, барлық элементтері индекспен реттеліп және бір
идентификатормен бірлестіріп аталған, берілімдер жиынын
айтады.
Мысалы мына нақ типті кездейсоқ сандар тізбегін:
1.2, 14.6, -5.2, 8.3, 0.15, 3.9
нақ типті А массиві деуге болады.
Массивтерді өңдеу процессінде, оның әр элементтеріне тура
қатынас жасау үшін, оны нөмірлеу (индекстеу) қажеттілігі
туындайды:
Элементтерінің нөмірі (индексі) 1
2
3
4
5
6
Массивтің идентификаторы: A
1.2
14.6 -5.2 8.3
0.15 3.9
Массивтің элементтері индекстің нөмірлерімен реттеледі,
сондықтан оларды индекстелген айнымалылар дейді. Паскаль тілінде
индекс тік жақшаға алынады.
Қарастырылғен мысалда А массивінің элементтері:
A[1] = 1.2, A[2] = 14.6, A[3] = -5.2, A[4]= 8.3, A[5] = 0.15,
A[6] = 3.9.
Элементтері бір индекспен нөмірленген массивті, бір өлшемді
дейді.
Массивті сипаттау
Егер программада массив қолданылса, онда ол, айнымалы Var
бөлімінде немесе Type типтер бөлімінде сипатталуға тиіс. Алдымен
Var бөлімінде сипатталу тәртібін қарастырайық.
а) Var айнымалылар бөлімінде сипаттау
Жазылу үлгісі:
Var
<массивтің идентификаторы> : Array [ T1] Of T2;
мұндағы:
Array (массив), Of (одан)-резевтелген сөздер;
T1
–
массив индексінің типі, тек реттелген типтер қолданылады.
Индекстер тұрақты диапазонымен беріледі, сондықтан массив
элементтерінің саны тұрақты болуы керек.
T2- массив элементтерінің типін анықтайды. (Паскаль тілінің
кез келген типі).
Жоғарыдағы мысалдың сипаттамасы мынадай:
Var A : Array [1..6]
Of Real;
Массивті дұрыс сипаттау мысалдары:
73
Var
A:
Array [1..10]
Of
Іnteger;
B:
Array [0..40]
Of
Char;
C:
Array [-2..2]Of
Boolean;
Type бөлімінде сипаттау
Паскаль тілінде, массивтерді сипаттаудың тәртібі екі кезеңнен
тұруы мүмкін. Алдымен Type бөлімінде массивтің типі көрсетіледі.
Содан кейін, Var бөлімінде сол көрсетілген типке қатысты массивтер
тізіммен сипатталады.
Жазылу үлгісі
Type <типтің идентификаторы > = Array[T1] Of T2;
Var <массивтің идентификаторы> : <типтің идентификаторы >;
Мысалы:
Type
MAS = Array [1..10] Of Іnteger;
Var M1: MAS;
Егер, программада бір неше, мысалы, R,A,B,C массивтері,
көрсетілген MAS типті болса, онда, тек айнымалылар бөлімінде
өзгеріс енгізіледі:
Var
R, A, B, C : MAS;
Екі өлшемді массивтерді сипаттау
Егер, кез келген берілімдер тізімі жолмен және бағаналармен
берілсе, онда оны екі өлшемді массив дейді.
Математикада матрица деп аталатынын білеміз. Екі өлшемді
массивтің элементтері екі индекспен нөмірленеді.
Мысалы:
5
4
3
6
2
8
1
7
4
3
9
5
матрицасы, бүтін сандар типті, өлшемі -3 жолдан,4-бағанадан
тұрады.
Матрицаның идентификаторын -A, жолдарын -І, бағаналарын -J
десек, онда әр мүшесі жалпы түрде былай жазылады: A[І, J].
Сонда: A[1,1]=5, A[2,3]=1, [3,2]=2, т. с. с.
Сипаттау түрлері
1) Var
Mas Array[1..3] Of Array[1..4] Of Іnteger;
Бұл сипаттаманы 1-шіден, бірнеше массивтерден тұратын
массив; 2-шіден екі өлшемді массив сипаттамасы деп ұғуға болады.
Бұл мысалдың эквиваленті төмендегідей жазылады:
2).Var
74
Mas : Array[1..3,1..4] Of Іnteger;
Регуляр типтердің (массивтің) синтаксистік диаграммасы:
Массив элементтерінің қолдану түрлері:
Vector [1] V2 [3,7]
V2 [K]
Vector[(і+1)*2]
V2[і,j]
V2[K,5]
Массив элементтері айнымалы болуы мүмкін:
MAS[і,j]:=MAS[і,j-1]+5;
Достарыңызбен бөлісу: |