Символдық жолдар
Рекурсивті іріктеу
Матрицалар
Файлдар
Символдық жолдар
Рекурсивті іріктеу
Матрицалар
Файлдар
аты
бастапқы индексі
соңғы индексі
Элементтер тип
var A: array[1.. ] of integer;
const N=5;
N
var A : array[ 1 .. 5 ] of integer ;
var Q: array [0..9] of real;
C: array [-5..13] of char;
var A: array ['A'..'Z'] of real;
B: array [False..True] of integer;
...
A['C'] := 3.14259*A['B'];
B[False] := B[False] + 1;
A['b']
['a'..'z']
var a: array [0..9] of integer;
...
A[10] := 'X';
for i:=1 to N do begin
write('a[', i, ']=');
read ( a[i] );
end;
a[1] =
a[2] =
a[3] =
a[4] =
a[5] =
5
12
34
56
13
for i:=1 to N do a[i]:=a[i]*2;
writeln(' A жиымы:');
for i:=1 to N do
write(a[i]:4);
A жиымы :
10 24 68 112 26
Қосымша: максималь элементтің нөмерін табу?
iMax элемент номері арқылы әрқашан оның мәнін a[iMax]-ті табуға болады. Сондықтан max-ті a[iMax]-пен алмастырамыз да max айнымалысын алып тастаймыз.
a[iMax]
for i:=1 to N do begin
a[i] := random(100) + 50;
write(a[i]:4);
end;
iMax := 1; {бірінші элемент – максималь деп есептейік}
for i:=2 to N do { қалғандарын тексерйік }
if a[i] > a[iMax] then { жаңа максималь мәні }
iMax := i; {i-ді еске сақтау }
[50,150) аралықтағы кез-келген сан
Максимальді іздеу
for i:=1 to N do
{ орындарын ауыстыру A[i] и A[N+1-i] }
N+1-индекстер қосындысы
N div 2
do
4
6
?
4
6
4
x
y
c
c := x;
x := y;
y := c;
x := y;
y := x;
3
2
1
for i:=1 to N div 2 do begin
c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c;
end;
for i:=1 to N-1 do
A[i]:=A[i+1];
Неге N емес?
c := A[1];
for i:=1 to N-1 do A[i]:=A[i+1];
A[N] := c;
қиындық O(N2)
қиындық O(N·logN)
Төменгі жағындағы екі көршілес элементтерді салыстырамыз; егер дұрыс тұрмаса онда олардың орындарын ауыстырамыз.
1 жүріс бойынша бір (ең кішкетай)
1-ші жүріс
2-ші жүріс
жүріс
N элементтен тұратын массив үшін N-1 жүріс қажет (N-1 элементті өз орнына орналастырса болғаны).
A[j] и A[j+1]
2-ші жүріс
for j:=N-1 downto 2 do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c;
end;
2
for j:=N-1 downto 1 do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1]; A[j+1]:=c;
end;
1
I-ші жүріс
for j:=N-1 downto i do
...
i
for i:=1 to N-1 do begin
for j:=N-1 downto i do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
end;
end;
i
A[i] –ден жоғары элемент
repeat
flag := False; { жалаушаны қосу }
for j:=N-1 downto 1 do
if A[j] > A[j+1] then begin
с := A[j];
A[j] := A[j+1];
A[j+1] := с;
flag := True; { жалаушыны көтеру }
end;
until not flag; {flag=Falseб-да шығу }
flag := False;
flag := True;
not flag;
var flag: boolean;
i := 0;
i
i := i + 1;
N-1
N
N-1 жүріс
A[i] -ден A[N]-дейін минимальді іздеу
Қажет болса, ауыстырамыз
i+1
i
nX := 0; { әзірше табылған жоқ ...}
if nX < 1 then writeln(‘табылған жоқ...')
else writeln('A[', nX, ']=', X);
nX – қажетті
элемент нөмірі
Жақсарту: X-ті тапқан соң, циклден шығамыз.
for i:=1 to N do { цикл}
if A[i] = X then { егер табылса, онда ... }
nX := i; { ... Номерді еске сақтау}
nX := 0; i := 1;
while i <= N do begin
if A[i] = X then begin
nX := i; i := N;
end;
i := i + 1;
end;
break;
i := N;
while R >= L do begin
c := (R + L) div 2;
if x < A[c] then R := c - 1;
if x > A[c] then L := c + 1;
end;
орташа элементтің номері
if X = A[c] then begin
nX := c;
R := L - 1; { break; }
end;
табылды
Цикл аяқталды
Шекараны жылжытамыз
Не қажет:
Символдар тізбегін біртұтас түрде қарастырылуы
Жолдың ұзындығы айнымалы болуы
var i: integer;
program qq;
var s: string;
i: integer;
begin
writeln(‘жолды енгізіңдер');
readln(s);
for i:=1 to Length(s) do
if s[i] = 'а' then s[i] := 'б';
writeln(s);
end.
readln(s);
writeln(s);
Length(s)
Жолды енгізу
Жолдың ұзындығы
Жолды шығару
s := 'Вася';
s1 := ‘Сәлем';
s2 := ‘Марат';
s := s1 + ', ' + s2 + '!';
‘Сәлем, Марат!'
Қиып алу: Бір жолда басқа жолды қиып алу
s := '123456789';
s1 := Copy ( s, 3, 6 );
s2 := Copy ( s1, 2, 3 );
'345678'
'456'
3 ші символдан
6 дана
3-ші символдан
6 дана
Жол өзгереді!
'123456789'
'129'
s := '123456789';
Insert ( 'ABC', s, 3 );
Insert ( 'Q', s, 5 );
Қайда қоямыз
Нені қоямыз?
3-ші символдан бастап
'12ABC3456789'
'12ABQC3456789'
s[3]
3
n = 1
Ерекшелігі:
функция возвращает номер символа, с которого начинается образец в строке
если слова нет, возвращается 0
поиск с начала (находится первое слово)
var n: integer;
‘Алуа Ұлан Мырза'
s := 'Алуа Ақан Мырза';
n := length ( s );
s1 := Copy ( s, 1, 4 );
s2 := Copy ( s, 11, 5 );
s3 := Copy ( s, 6, 4 );
s := s3 + s1 + s2;
n := length ( s );
‘Алуа Мырза'
15
‘Алуа'
‘Мырза'
‘Ақан'
' АлуаАқанМырза '
13
6
Алгоритм:
Бірінші бос орынды тауып, атын бөліп алу
Негізгі жолдан атты бос орынмен бірге өшіру
Бірінші бос орынды тауып алып әкесінің атын бөліп алу
Әкесінің атын өшіріп тастау
Фамилияны бірінші әріптермен біріктіру…
1
K
Әр ұяшықта 4 әріптің кез-келгені болуы мүмкін
4 нұсқа
4 нұсқа
4 нұсқа
4 нұсқа
Нұсқалар саны:
1
K
1
K
1
K
Барлық нұсқаларды
Барлық нұсқаларды
Барлық нұсқаларды
Барлық нұсқаларды
1
K
p
s
p+1
рекурсивті шақыртулар
Рекурсия соңы
Глобальды айнымалылар :
var s: string;
count, K: integer;
const letters = 'ЫЦЩО';
for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;
Барлық әріптер
Барлық әріптер бойынша цикл
Локальді айнымалы
procedure Rec(p: integer);
...
end;
процедура
s := '';
for i:=1 to K do s := s + ' ';
K пробелден тұратын жол
Глобальді айнымалылар
"4": К әріптен тұратын Ы әріпі 1 реттен артық кездеспейтін барлық сөздерді экранға шығарып, және олардың санын санау қажет.
"5": Қатар тұрған бірдей әріптері бар К әріптен тұратын барлық сөздерді экранға шығарып, (мысал, ЫЩЩО) және олардың санын санау керек.
A
баған 2
баған 3
ұяшық A[3,4]
Пернетақтадан енгізу:
for i:=1 to N do
for j:=1 to M do begin
write('A[',i,',',j,']=');
read ( A[i,j] );
end;
A[1,1]=
25
A[1,2]=
14
A[1,3]=
14
...
A[3,4]=
54
i
j
for j:=1 to M do
for i:=1 to N do begin
Жол бойынша цикл
Баған бойынша цикл
Экранға шығару
for i:=1 to N do begin
writeln;
end;
Жаңа жолға өту
for j:=1 to M do
write ( A[i,j]:5 );
Жолды шығару
Сол жолда
program qq;
const N = 3; M = 4;
var A: array[1..N,1..M] of integer;
i, j, S: integer;
begin
{матрицаны толтырып,экранға шығару}
S := 0;
writeln(‘элементтердің қосындысы ', S);
end;
for i:=1 to N do
for j:=1 to M do
S := S + A[i,j];
"4": Матрицаның минималь және максималь элементтерін және олардың нөмірлерін табу керек.
Шығару пішіні:
Минималь элемент A[3,4]=-6
Максималь элемент A[2,2]=10
"5": Элементтерінің қосындысы максималь болатын жолды экранға шығару керек.
Шығару пішіні:
Жол 2: 3 5 8 9 8
A[1,N]
A[2,2]
A[3,3]
A[N,N]
for i:=1 to N do
write ( A[i,i]:5 );
Есеп 2. Екінші диагоналді экранға шығару.
A[N,1]
A[N-1,2]
A[2,N-1]
for i:=1 to N do
write ( A[i, ]:5 );
N+1-i
жол мен баған нөмірінің қосындысы N+1
A[1,1]
S := 0;
for i:= 1 to N do
жол бойынша цикл
for j:= 1 to i do
S := S + A[i,j];
I жолдың қажет элементерін қосу
2
4
j
A[2,j]
A[4,j]
for j:=1 to M do begin
c := A[2,j];
A[2,j] := A[4,j];
A[4,j] := c;
end;
Есеп 5. 3-ші бағанға алтыншыны қосу.
for i:=1 to N do
A[i,3] := A[i,3] + A[i,6];
"4": "5":
ACSII (1символ=1 байт)
UNICODE (1символ =2 байт)
*.txt, *.log,
*.htm, *.html
символы кодтық кестенің кез-келген символы
*.doc, *.exe,
*.bmp, *.jpg,
*.wav, *.mp3,
*.avi, *.mpg
Мәтіндік
Екілік
Қапшықтар
(каталог)
assign(f, 'qq.dat');
reset(f); {оқу үшін}
rewrite(f); {жазу үшін}
II этап: файлдармен жұмыс
Айнымалы типі «мәтіндік файл":
var f: text;
III этап: файлды жабу
close(f);
read ( f, n ); {n-ді енгізу }
write ( f, n ); {n-нің мәнін жазу }
writeln ( f, n );{жаңа жолға шығу }
12 5 45 67 56●
Файл соңы
(end of file, EOF)
12 5 45 67 56●
assign ( f, 'qq.dat' );
reset ( f );
read ( f, x );
readln ( f, x );
12 5 45¤ 36 67¤ 56●
конец строки
(end of line, EOL)
цикл с условием
"пока есть данные"
while not eof(f) do begin
readln(f, x);
s := s + x;
end;
f: text;
eof(f)
егер файлдың соңы болса логикалық функция, True болады,
assign(f, 'output.txt');
rewrite(f);
writeln(f, 'Сумма чисел ', s);
close(f);
output.txt файлына нәтижені жазу
Ауқымды айнымалылар:
Функция: массивті енгізу, элементтер санын шақырады
while (not eof(f)) and (i < 100) do begin
i := i + 1;
readln(f, A[i]);
end;
ReadArray := i;
Егер файл соңына жеткенсек немесе100 сан оқылса, цикл аяқталады
function ReadArray: integer;
...
end;
assign(f, 'output.dat');
rewrite(f);
for i:=1 to N do
writeln(f, A[i]);
close(f);
сортталған массивмассивті файлға жазып шығару
"4": Кемуі бойынша массивті іріктеп және оны output.txt. файлына жазу керек
"5": Массивті цифрларының қосындысының өсуі бойынша сорттап және оны output.txt. файлына жазу керек
мәліметтер аяқталған жоқ
repeat
i := Pos(', короче,', s);
if i <> 0 then Delete(s, i, 9);
until i = 0;
", қысқасы,» іздеу
9 символды өшіру
fIn, fOut: text;
Файлдық айнымалылар
оқу файлын ашу
жазу файлын ашу
repeat
i := Pos(', короче,', s);
if i <> 0 then
Delete(s, i, 9);
until i = 0;
Әзірше файлдың соңы емес
Жолды өңдеу
«тазарған" жолды жазу
Это сайт презентаций, где можно хранить и обмениваться своими презентациями, докладами, проектами, шаблонами в формате PowerPoint с другими пользователями. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами.
Email: Нажмите что бы посмотреть