русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

If (str)


Дата добавления: 2013-12-23; просмотров: 825; Нарушение авторских прав


Begin

Begin

J := top;

I := bottom;

Begin

End;

Begin

Uses CRT;

Program Primer_6;

115 -45 20 -39 91 75 44 138 -72 -63

ReadLn;

WriteLn(out_sort);

WriteLn(out_sort);

ClrScr;

Begin

End;

End;

End

J := 0;

Begin

K := 1;

Begin

Begin

End;

Begin

Uses CRT;

Program Primer_4;

47 -14 58 -69 9 -19 -72 24 97 -32

End.



ReadLn;

WriteLn(out_sort);

WriteLn(out_sort);

ClrScr;

Begin

End;

End;

Begin

Begin

End;

Begin

Uses CRT;

Program Primer_3;

End.



ReadLn;

WriteLn(out_sort);

WriteLn(out_sort);

ClrScr;

Begin

End;

End;

End;

K:= j;

Begin

K := i;

Begin

Begin

End;

Begin

Uses CRT;

Program Primer_2;

End.



ReadLn;

WriteLn(out_min_max);

ClrScr;

Begin

End;

End;

End;

Begin

End;

Begin

Begin

Begin

End;

Begin

Uses CRT;

Program Primer_1;

End;

S:= 0;

Begin

S: Integer;

End.



ReadLn;

ClrScr;

Begin

End;

Begin

Uses CRT;

Program Primer;

End;

Begin

End;

Begin

End;

Begin

Procedure Zagolovok;

WriteLn(‘Группа ИС-09’);

WriteLn(‘Студент Иванов Иван’);

В отличие от функций, использующих в качестве аргументов только параметры-значения, не изменяющиеся после выхода из функции, процедуры в качестве выходных (вычисляемых) параметров используют параметры-переменные. Любые операции над формальными параметрами-переменными внутри процедуры выполняются и над соответствующими фактическими параметрами-переменными. Поэтому формальному параметру-переменной должна соответствовать фактическая переменная, а не константа или выражение. В заголовке процедуры выходные параметры-переменные перечисляются в скобках после слова 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;

Эта процедура ничего не делает: в списке формальных параметров указаны параметры-значения. Правильное описание с использованием параметров-переменных:

Procedure Swap(Var x, y: Integer);x и y – входные параметры-

Var temp: Integer; переменные

temp := x;

x := y;

y := temp;

Обращение к процедуре в вызывающей программе производится по ее имени, за которым в скобках перечисляются фактические параметры, соответствующие формальным параметрам процедуры по количеству, типам и порядку следования:

Var a, b: Integer; a и b – переменные основной программы (глобальные)

Procedure Swap(Var x, y: Integer);x и y – входные параметры-

Var temp: Integer; переменные

temp := x;

x := y;

y := temp;

a := 3;

b := 5;

Swap(a, b); обращение к процедуре

WriteLn(‘a=’,a);

WriteLn(‘b=’,b);

На экран будет выведено:

a=5

b=3

Правила построения и использования процедур не отличаются от правил построения и использования функций, в том числе и относительно рекурсии.

Как уже отмечалось в правилах формирования подпрограмм-функций, для передачи в подпрограмму массива необходимо предварительно определить его в разделе описания типов, то есть явно задать количество его элементов и их тип. Значит, подпрограмма, формальным параметром которой является массив из десяти чисел, не сможет работать с массивом из пятнадцати чисел. Это неудобно, поэтому в списке формальных параметров подпрограмм разрешается определять открытые массивы.

Открытые массивы – это вектора, состоящие из элементов любого типа, кроме файлового. На место открытого массива в качестве фактического параметра можно передавать вектор любого размера, состоящий из элементов того же типа, что и элементы открытого массива:

Procedure Summ(a: Array Of Integer; Var summa: Integer);

Var i: Word;

For i:=0 To High(a) Do нумерация элементов начинается с нуля!

s:= s + a[i]; номер последнего элемента определяетсяс

summa:= s; помощью функции High

Передавать открытый массив можно как значение, переменную или константу. Поскольку тип индексов массива не указывается, используется соглашение, по которому эти элементы нумеруются с нуля. Номер последнего элемента в массиве можно определить с помощью функции High.

Примеры: задать целочисленный вектор a длиной n элементов случайным образом с элементами от m_min до m_max..

1. Определить минимальный min и максимальный max элементы вектора и их индексы i_min, i_max. Результаты сохранить в текстовом файле out_min_max.txt:

 

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);

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;

If (vector[i] > max) Then

max:=vector[i];

i_max:=i;

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);

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); закрытие текстового файла

Результат работы программы:

Исходный вектор:

-1 -19 -19 -35 50 26 -47 17 1 -7

min=-47

i_min=7

max=50

i_max=5

2. Отсортировать элементы массива методом простого выбора: в массиве отыскивается минимальный элемент и меняется с первым элементом массива, из оставшихся элементов снова находится минимальный и меняется со вторым элементом, и так далее. Последний, самый большой элемент, сам станет на свое место. Результаты сохранить в текстовом файле out_sort.txt:

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 задание элементов массива случайными числами
в диапазоне от elem_min до elem_max

vector[i]:=elem_max - Random(elem_max - elem_min +1);

Procedure Sort_vybor(m: Word; Var vector: TVector);

Var i, j, k: Word;

temp: Integer;

For i := 1 To m-1 Do

temp := vector[i];

For j := i + 1 To m Do

If (vector[j] < temp) Then

temp := vector[j];

vector[k] := vector[i];

vector[i] := temp;

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);

Sort_vybor(n, a); сортировка элементов массива

Writeln(out_sort, ‘Отсортированный вектор:’);

For i:=1 To n Do

Write(out_sort, a[i]:5);

Close(out_sort); закрытие текстового файла

Результат работы программы:

Исходный вектор:

-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:

 

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 задание элементов массива случайными числами
в диапазоне от elem_min до elem_max

vector[i]:=elem_max - Random(elem_max - elem_min +1);

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;

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);

Sort_obmen(n, a); сортировка элементов массива

Writeln(out_sort, ‘Отсортированный вектор:’);

For i:=1 To n Do

Write(out_sort, a[i]:5);

Close(out_sort); закрытие текстового файла

Результат работы программы:

Исходный вектор:

Отсортированный вектор:

-72 -69 -32 -19 -14 9 24 47 58 97

4. Отсортировать элементы массива методом простых вставок: в уже отсортированной части элементов массива a1, a2, a3,…,ak отыскивается место для следующего элемента ak+1 . Результаты сохранить в текстовом файле out_sort.txt:

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 задание элементов массива случайными числами
в диапазоне от elem_min до elem_max

vector[i]:=elem_max - Random(elem_max - elem_min +1);

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;

While (j > 0) Do

If (vector[i] > vector[j]) Then

k := j + 1;

Else j := j – 1;

For j := i DownTo k + 1 Do

vector[j] := vector[j - 1];

vector[k] := temp;

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);

Sort_vstavka(n, a); сортировка элементов массива

Writeln(out_sort, ‘Отсортированный вектор:’);

For i:=1 To n Do

Write(out_sort, a[i]:5);

Close(out_sort); закрытие текстового файла

End. Результат работы программы:

Исходный вектор:

Отсортированный вектор:

-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:

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 задание элементов массива случайными числами
в диапазоне от elem_min до elem_max

vector[i]:=elem_max - Random(elem_max - elem_min +1);

Procedure Sort_Hoar(m, bottom, top: Word; Var vector: TVector);

Var i, j: Word;

Str: Boolean;

temp: Integer;

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);



<== предыдущая лекция | следующая лекция ==>
Процедуры | Программные модули


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.017 сек.