Примеры программ Пример 1 Пусть имеются описания: const n=20; type строка= array[1..n] of char; var S1,S2: строка; i1,i2: integer; Требуется сделать следующее: если в строку S1 входит символ '+', а в строку S2 - буква 'a', тогда требуется поменять местами первые вхождения этих символов (т.е. первое вхождение '+' в S1 заменить на 'a', а первое вхождение 'a' в S2 заменить на '+'). Здесь будет полезной такая логическая функция: true, если с S, i <--номер первого вхождения BX(S,c,i) = false, иначе; i не меняется Эта функция не только определяет, входит ли символ с в строку S, но еще и меняет свой 3-й параметр, что и является побочным эффектом. Имея такую функцию, уже легко решить нашу задачу: if BX(S1,'+',i1)and BX(S2,'a',i2) then begin S1[i1]:='a'; S2[i2]:='+' end
function BX(var S:строка; c:char; var i:integer):boolean; var k:integer; begin BX:=false; for k:=1 to N do if S[k]=c then begin BX:=true; i:=k; break end; end; Стандартные процедуры ТР 7.0 для повышения эффективности выполнения программ: BREAK процедура прекращает выполнение ближайшего охватывающего цикла (for, while, repeat); CONTINUE процедура, вызывающая прекращение текущей итерации (выполнения) ближайшего охватывающего цикла; EXIT процедура выхода из ближайшего охватывающего блока (обычно из тела процедуры или функции); если таковым является программа, то это действие означает окончание программы HALT процедура принудительного окончания программы
Пример 2. Программа поиска смежных элементов одномерного массива, удовлетворяющих двойному неравенству. Пусть задана последовательность x 1 <x 2 <….<x n вещественных чисел вещественное число y. Требуется написать функцию, которая определяет такое целое число k, что x k <y<x k+1 Простейший алгоритм основан на последовательном переборе элементов заданной числовой последовательности и проверке выполнения двойного неравенства из условия задачи. const max=1000; type vektor = array [1..max] of real; function maximum_search( x : vektor; y : real) : integer; varelement_before, element_after : real; index : integer; begin for index := 1 to max-1 do if (x[index] <y) and (y<x[index+1] ) then begin maximum_search:=index; break end end;
Пример 3 Програма поиска максимального элемента одномерного массива и его индекса. Требуется написать процедуру, которая в заданном целочисленном массиве находит максимальный элемент и его индекс (номер) const max=1000; type vektor = array [1..max] of integer; procedure max_and_index (x : vektor; var max_element, max_index : integer); var index : integer; begin max_element := x[1]; max_index : = 1; for index :=2 to max do max_element < x[index] then begin max_element := x[index]; max_index := index end end;
Пример 3. Программа проверки симметричности матрицы с целочисленными коэффициентами Требуется написать функцию, принимающую значение true, если заданная целочисленная матрица (двумерный массив) симметрична, и false в противном случае. const n = 100; type matrix = array [1..n, 1..n] of integer; function symmetric (var A : matrix) : boollen; var j,k : integer; begin symmetric:=true; for j := 1 to n-1 do begin for k := j+1 to n do begin if A[j,k] <> A[k,j] then begin symmetric := false; exit; end end;