КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
If (str)
Begin Begin Begin Begin 115 -45 20 -39 91 75 44 138 -72 -63 End. Begin End Begin Begin Begin Begin 47 -14 58 -69 9 -19 -72 24 97 -32 End. Begin Begin Begin Begin End. Begin Begin Begin Begin Begin End. Begin Begin Begin Begin Begin Begin Begin End. Begin Begin Begin Begin Begin WriteLn(‘Группа ИС-09’); WriteLn(‘Студент Иванов Иван’); End; В отличие от функций, использующих в качестве аргументов только параметры-значения, не изменяющиеся после выхода их функции, процедуры в качестве выходных (вычисляемых) параметров используют параметры - переменные. Любые операции над формальными параметрами-переменными внутри процедуры выполняются и над соответствующими фактическими параметрами-переменными. Поэтому формальному параметру-переменной должна соответствовать фактическая переменная, а не константа или выражение. В заголовке процедуры выходные параметры-переменные перечисляются в скобках после слова Var с указанием своего типа, причем для каждого нового типа это слово должно повторяться. В остальном структура процедуры не отличается от структуры программы на Паскале и может включать в себя следующие разделы: · описания меток Label · определения констант Const · определения типов Type · описания переменных Var · описания процедур и функций Function, Procedure · операторов процедуры Begin … End; Переменные, описанные в разделе Var процедуры или указанные в ее заголовке, считаются локальными, все остальные – глобальными. Локальные переменные существуют только в процедуре, в которой они описаны, и после выхода из процедуры исчезают. Пример: описать процедуру, обменивающую значениями две переменных целого типа: Procedure Swap(x, y: Integer);x и y – входные параметры-значения Var temp: Integer; temp – локальная переменная temp:= x; реализация алгоритма x:= y; циклического обмена y:= temp; End; Эта процедура ничего не делает: в списке формальных параметров указаны параметры-значения. Правильное описание с использованием параметров - переменных: Procedure Swap(Var x, y: Integer);x и y – входные параметры- Var temp: Integer; переменные temp:= x; x:= y; y:= temp; End; Обращение к процедуре в вызывающей программе производится по ее имени, за которым в скобках перечисляются фактические параметры, соответствующие формальным параметрам процедуры по количеству, типам и порядку следования: Program Primer; Uses CRT; Var a, b: Integer; a и b – переменные основной программы (глобальные) Procedure Swap(Var x, y: Integer);x и y – входные параметры- Var temp: Integer; переменные temp:= x; x:= y; y:= temp; End; ClrScr; a:= 3; b:= 5; Swap(a, b); обращение к процедуре WriteLn(‘a=’,a); WriteLn(‘b=’,b); ReadLn; На экран будет выведено: a=5 b=3 Правила построения и использования процедур не отличаются от правил построения и использования функций, в том числе и относительно рекурсии. Как уже отмечалось в правилах формирования подпрограмм-функций, для передачи в подпрограмму массива необходимо предварительно определить его в разделе описания типов, то есть явно задать количество его элементов и их тип. Значит, подпрограмма, формальным параметром которой является массив из десяти чисел, не сможет работать с массивом из пятнадцати чисел. Это неудобно, поэтому в списке формальных параметров подпрограмм разрешается определять открытые массивы. Открытые массивы – это вектора, состоящие из элементов любого типа, кроме файлового. На место открытого массива в качестве фактического параметра можно передавать вектор любого размера, состоящий из элементов того же типа, что и элементы открытого массива: Procedure Summ(a: Array Of Integer; Var summa: Integer); Var i: Word; s: Integer; s:= 0; For i:=0 To High(a) Do нумерация элементов начинается с нуля! s:= s + a[i]; номер последнего элемента определяется с summa:= s; помощью функции High End; Передавать открытый массив можно как значение, переменную или константу. Поскольку тип индексов массива не указывается, используется соглашение, по которому эго элементы нумеруются с нуля. Номер последнего элемента в массиве можно определить с помощью функции High. Примеры: задать целочисленный вектор a длиной n элементов случайным образом с элементами от m_min до m_max.. 1. Определить минимальный min и максимальный max элементы вектора и их индексы i_min, i_max. Результаты сохранить в текстовом файле out_min_max.txt:
Program Primer_1; Uses CRT; Const n = 10; размер вектора m_min = -50; диапазон значений m_max = 50; элементов вектора Type TVector = Array [1..n] Of Integer; Var i, i_min, i_max: Word; min, max: Integer; a: TVector; out_min_max: Text; файловая переменная Procedure Init(elem_min, elem_max: Integer; Var Vector: Array Of Integer); используется открытый массив Vector Var i: Word; Randomize; запуск генератора случайных чисел For i:=0 To High(Vector) Do задание элементов массива случайными числами в диапазоне от elem_min до elem_max Vector[i]:=elem_max - Random(elem_max - elem_min +1); End; Procedure Min_max(m: Word; vector: TVector; Var min, max: Integer; Var i_min, i_max: Word); используется массив vector типа TVector Var i: Word; min:=vector[1]; перед поиском минимального и максимального элементов max:=vector[1]; массива за таковые принимается первый элемент i_min:=1; массива i_max:=1; For i:=2 To m Do поиск начинаем со второго элемента If (vector[i] < min) Then min:=vector[i]; i_min:=i; End; If (vector[i] > max) Then max:=vector[i]; i_max:=i; End; End; End; ClrScr; Assign(out_min_max,’d:\User\out_min_max.txt’); ReWrite(out_min_max); открытие текстового файла для записи Init(m_min, m_max, a); инициализация массива Writeln(out_min_max, ‘Исходный вектор:’); For i:=1 To n Do Write(out_min_max, a[i]:5); WriteLn(out_min_max); Min_max(n, a, min, max, i_min, i_max); поиск элементов массива WriteLn(out_min_max, ‘min=’, min); WriteLn(out_min_max, ‘i_min=’, i_min); WriteLn(out_min_max, ‘max=’, max); WriteLn(out_min_max, ‘i_max=’, i_max); Close(out_min_max); закрытие текстового файла ReadLn; Результат работы программы: Исходный вектор: -1 -19 -19 -35 50 26 -47 17 1 -7 min=-47 i_min=7 max=50 i_max=5 2. Отсортировать элементы массива методом простого выбора: в массиве отыскивается минимальный элемент и меняется с первым элементом массива, из оставшихся элементов снова находится минимальный и меняется со вторым элементом, и так далее. Последний, самый большой элемент, сам станет на свое место. Результаты сохранить в текстовом файле out_sort.txt: Program Primer_2; Uses CRT; Const n = 10; размер массива m_min = -50; диапазон значений m_max = 50; элементов массива Type TVector = Array [1..n] Of Integer; Var i: Word; a: TVector; out_sort: Text; файловая переменная Procedure Init(m: Word; elem_min, elem_max: Integer; Var vector: TVector); Var i: Word; Randomize; запуск генератора случайных чисел For i:=1 To m Do задание элементов массива случайными числами vector[i]:=elem_max - Random(elem_max - elem_min +1); End; Procedure Sort_vybor(m: Word; Var vector: TVector); Var i, j, k: Word; temp: Integer; For i:= 1 To m-1 Do k:= i; temp:= vector[i]; For j:= i + 1 To m Do If (vector[j] < temp) Then temp:= vector[j]; k:= j; End; vector[k]:= vector[i]; vector[i]:= temp; End; End; ClrScr; Assign(out_sort,’d:\User\out_sort.txt’); ReWrite(out_sort); открытие текстового файла для записи Init(n, m_min, m_max, a); инициализация массива Writeln(out_sort, ‘Исходный вектор:’); For i:=1 To n Do Write(out_sort, a[i]:5); WriteLn(out_sort); Sort_vybor(n, a); сортировка элементов массива Writeln(out_sort, ‘Отсортированный вектор:’); For i:=1 To n Do Write(out_sort, a[i]:5); WriteLn(out_sort); Close(out_sort); закрытие текстового файла ReadLn;
Результат работы программы: Исходный вектор: -15 -31 12 -10 50 -27 36 -29 2 5 Отсортированный вектор: -31 -29 -27 -15 -10 2 5 12 36 50 3. Отсортировать элементы массива методом простого обмена (методом пузырька): сравниваются попарно два очередных рядом стоящих элемента и при необходимости переставляются по возрастанию. После первого прохода массива его максимальный элемент становится на последнее место, после второго прохода максимальный из оставшихся становится на предпоследнее место и так далее. Таким образом, после каждого очередного прохода по массиву максимальный элемент из оставшихся как бы всплывает наверх – к концу массива. Всего необходимо n – 1 прохода. Результаты сохранить в текстовом файле out_sort.txt:
Program Primer_3; Uses CRT; Const n = 10; размер массива m_min = -100; диапазон значений m_max = 100; элементов массива Type TVector = Array [1..n] Of Integer; Var i: Word; a: TVector; out_sort: Text; файловая переменная Procedure Init(m: Word; elem_min, elem_max: Integer; Var vector: TVector); Var i: Word; Randomize; запуск генератора случайных чисел For i:=1 To m Do задание элементов массива случайными числами vector[i]:=elem_max - Random(elem_max - elem_min +1); End; Procedure Sort_obmen(m: Word; Var vector: TVector); Var i, j, k: Word; temp: Integer; For i:= m DownTo 2 Do For j:= 1 To i – 1 Do If (vector[j] > vector[j+1]) Then
temp:= vector[j]; vector[j]:= vector[j+1]; vector[j+1]:= temp; End; End; ClrScr; Assign(out_sort,’d:\User\out_sort.txt’); ReWrite(out_sort); открытие текстового файла для записи Init(n, m_min, m_max, a); инициализация массива Writeln(out_sort, ‘Исходный вектор:’); For i:=1 To n Do Write(out_sort, a[i]:5); WriteLn(out_sort); Sort_obmen(n, a); сортировка элементов массива Writeln(out_sort, ‘Отсортированный вектор:’); For i:=1 To n Do Write(out_sort, a[i]:5); WriteLn(out_sort); Close(out_sort); закрытие текстового файла ReadLn; Результат работы программы: Исходный вектор: Отсортированный вектор: -72 -69 -32 -19 -14 9 24 47 58 97 4. Отсортировать элементы массива методом простых вставок: в уже отсортированной части элементов массива a1, a2, a3,…,ak отыскивается место для следующего элемента ak+1. Результаты сохранить в текстовом файле out_sort.txt: Program Primer_4; Uses CRT; Const n = 10; размер массива m_min = -150; диапазон значений m_max = 150; элементов массива Type TVector = Array [1..n] Of Integer; Var i: Word; a: TVector; out_sort: Text; файловая переменная Procedure Init(m: Word; elem_min, elem_max: Integer; Var vector: TVector); Var i: Word; Randomize; запуск генератора случайных чисел For i:=1 To m Do задание элементов массива случайными числами vector[i]:=elem_max - Random(elem_max - elem_min +1); End; Procedure Sort_vstavka(m: Word; Var vector: TVector); Var i, j, k: Word; temp: Integer; For i:= 2 To m Do temp:= vector[i]; j:= i – 1; k:= 1; While (j > 0) Do If (vector[i] > vector[j]) Then k:= j + 1; j:= 0; Else j:= j – 1; For j:= i DownTo k + 1 Do vector[j]:= vector[j - 1]; vector[k]:= temp; End; End; ClrScr; Assign(out_sort,’d:\User\out_sort.txt’); ReWrite(out_sort); открытие текстового файла для записи Init(n, m_min, m_max, a); инициализация массива Writeln(out_sort, ‘Исходный вектор:’); For i:=1 To n Do Write(out_sort, a[i]:5); WriteLn(out_sort); Sort_vstavka(n, a); сортировка элементов массива Writeln(out_sort, ‘Отсортированный вектор:’); For i:=1 To n Do Write(out_sort, a[i]:5); WriteLn(out_sort); Close(out_sort); закрытие текстового файла ReadLn; Результат работы программы: Исходный вектор: Отсортированный вектор: -72 -63 -45 -39 20 44 75 91 115 138
5. Отсортировать элементы массива методом быстрой сортировки К.Хоара: сравниваются элементы ai и aj, причем i = 1, j = n. Если ai < aj, то эти элементы уже отсортированы по возрастанию, поэтому значение правого индекса уменьшается на единицу, и алгоритм повторяется. Если ai > aj, то они меняются местами, останавливается правый индекс, и начинает увеличиваться левый. Обмен значениями с изменением направления движения после каждого обмена продолжается до тех пор, пока левый и правый индексы не встретятся друг с другом: i = j. В этом случае элемент ai будет стоять на своем месте в массиве: слева от него стоят элементы меньше его, а справа – больше. После этого алгоритм рекурсивно повторяется для левой и правой частей массива. Результаты сохранить в текстовом файле out_sort.txt: Program Primer_6; Uses CRT; Const n = 10; размер массива m_min = -100; диапазон значений m_max = 100; элементов массива Type TVector = Array [1..n] Of Integer; Var i: Word; a: TVector; out_sort: Text; файловая переменная Procedure Init(m: Word; elem_min, elem_max: Integer; Var vector: TVector); Var i: Word; Randomize; запуск генератора случайных чисел For i:=1 To m Do задание элементов массива случайными числами vector[i]:=elem_max - Random(elem_max - elem_min +1); End; Procedure Sort_Hoar(m, bottom, top: Word; Var vector: TVector); Var i, j: Word; Str: Boolean; temp: Integer; i:= bottom; j:= top; str:= False; While (i < j) Do If (vector[i] > vector[j]) Then temp:= vector[i]; vector[i]:= vector[j]; vector[j]:= temp; str:= Not(str); End; {If} Then i:= i + 1 Else j:= j – 1; End; {While} If (i > 1) And ((i – 1) > bottom) Then Sort_Hoar(m, bottom, i – 1, vector); If (j < (m – 1)) And ((j + 1) < top) Then Sort_Hoar(m, j + 1, top, vector); End;
Дата добавления: 2014-01-06; Просмотров: 324; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |