Сортировка элементов в массиве




Сортировка представляет собой процесс упорядочения элементов в массиве в

порядке возрастания или убывания их значений. Например, массив X из n

элементов будет отсортирован в порядке возрастания значений его элементов,

если X1 X2 … Xn, и в порядке убывания, если X1 X2 … Xn.

Существует большое количество алгоритмов сортировки, но все они базируются

на трех основных:

сортировка обменом;

сортировка выбором;

сортировка вставкой.

23.Массивы, положение элементов в которых описывается двумя индексами, называются двумерными.

Описание массива

В разделе описаний Var имя массива: Array[границы по строкам, границы по столбцам] Of тип эл.-тов;

В разделе типов Type
vv=array[границы] of тип;
Var a:vv;

Ввод/вывод значений элементов массива

1. Заполнение с клавиатуры, вывод в столбик
Procedure InputKlav2;
Const n=10;m=5;{n строк,m столбцов}
Var a: array[1..n,1..m] of integer; i,j:integer;
Begin
{ввод с клавиатуры}
For i:=1 to n Do
Begin
For j:=1 to m Do
Begin
Writeln('ввести элемент',i,j);Readln(a[i,j]);
End;
End;
{процедура вывода}
Procedure Output;
For i:=1 to n Do
Begin
For j:=1 to m Do
Begin
Write(a[i,j]);
End;
Writeln;
End;

2. Заполнение элементов массива по формуле
Procedure InputFormula;
Const n=10;m=5;
Var a: array[1..n,1..m] of Integer; i,j:integer;
Begin
{Заполнение по формуле }
For i:=1 to n Do
Begin
For j:=1 to m Do
Begin
A[i,j]:=i*j;
Write(a[i,j]:4);
End;
Writeln
End;
End;

 

Var <имя массива>: array[<диапазон строк>,<диапазон столбцов>]

of <тип элементов>;

Пример:

Var D:array[1..2,1..3] of integer;или Type MATR=array[1..2,1..3] of integer;

Var D: MATR;

Type ST=array[1..2] of integer;

MATR=array[1..3] of ST;

Var D: MATR;

Пример:

for I:=1 to 2 do

for J:=1 to 3 do

Read(D[I,J]); {Последовательность ввода: 1 3 2 4 6 7}

{Ввод элементов двумерного массива}

В некоторых программах используются треугольные массивы, которые вклю-
чают диагональные элементы A[i, i].

В квадратной матрице

элементы (i = 1, 2,..., n) образуют главную диагональ и называются диагональными элементами.

 

 

24.Сортировка

 

Сортировка в массиве осуществляется следующим образом:

Под сортировкой понимают упорядочивание элементов. Возможны следующие виды сортировки:
- по возрастанию элементов (каждый следующий больше предыдущего);
- по убыванию элементов (каждый следующий меньше предыдущего);
- не убыванию элементов (каждый следующий больше или равен предыдущему);
- не возрастанию элементов (каждый следующий меньше или равен предыдущему).
Существует много алгоритмов сортировки. Разберём два из них: метод парных перестановок (пузырьковый) и метод прямого выбора.

Метод парных перестановок
Смысл этого метода заключается в сравнивании соседних элементов и, если нужно, их перестановке. Причём за один просмотр всех пар сортировка не достигает нужного результата. Приходится просматривать все пары элементов несколько раз.
Задача1. Отсортировать по возрастанию 20 элементов одномерного массива. Ввод массива осуществить любым способом.
Пусть массив называется M, счётчик элементов I, количество элементов в нём N, количество повторов для просмотра всех пар соседних элементов J, ячейка для обмена B. Формирование (ввод) и печать (вывод) массива рассматривались ранее. Поэтому подробно эти действия рассматриваться не будут.
Алгоритм. Программа.
Объявить и сформировать массив.
Отобразить исходный массив.
Для каждого J от 1 до N-1 повторять:
Для каждого I от 1 до N-1 повторять:
Если M(I)>M(I+1) то:
Присвоить B значение M(I)
Присвоить M(I) значение M(I+1)
Присвоить M(I+1) значение B
Конец Если
Конец Цикла по I
Конец Цикла по J
Отобразить отсортированый массив.
Конец Алгоритма

 

program BubbleSort;
uses Crt;
const
n = 20;
type
TVector = array[1..n] of Real;
var
M: TVector;
B: Real;
i,j: Integer;
begin
ClrScr;
Writeln ('Введите элементы массива:');
for i:=1 to n do Read (M[i]);
Readln;
{----------------------------}
for j:=n downto 2 do
for i:=1 to j-1 do
if M[i] > M[i+1] then
begin
B:= M[i];
M[i]:= M[i+1];
M[i+1]:= B
end;
{----------------------------}
Writeln ('Отсортированный массив:');
for i:=1 to n do Write (M[i]:8:2);
Writeln;
end

25. Алгоритмом называется точное предписание, опеределяющее процесс перехода от исходных данных к результату.
Программа это запись алгоритма на языке конкретного компьютера.

Отметим, что упомянутое предписание считается алгоритмом, если оно обладает следующими тремя свойствами:

· Однозначностью.

· Массовостью.

· Результативностью.

Под однозначностью понимают единственность толкования правил выполнения действий и порядка их выполнения. Алгоритм не допускае произвола при выполнении входящих в него действий.

Массовость - это возможность его применения для решения класса задач. При изменяющихся в определенных пределах исходных данных алгоритм будет работать правильно, независимо от меняющихся исходных значений переменных.

Результативность означает, что выполнение алгоритма должно приводить к получению определенного решения.

Алфавит языка Delphi

Алфавит языка включает в себя следующие символы:

· 53 буквы -это прописные (A...Z) и строчные (a...z) буквы латинского алфавита и символ подчеркивания (_).;

· 10 цифр (0...9);

· 23 специальных символа (+, —, *, /, точка, запятая,:,;, =, >, <, ', (,), {, }, [, ], #, $, ^, @, пробел).

Так же существуют комбинации символов:

:= (присвоение);

<> (не равно);

... (диапазон значений);

<= (меньше или равно);

>= (больше или равно);

Слова языка Delphi

Слова подразделяются на:

· ключевые слова;

· стандартные идентификаторы;

· пользовательские идентификаторы.

Ключевые слова — это зарезервированные слова, которые являются составной частью языка. Ключевые слова имеют конкретный смысл, который изменить нельзя. Вот пример ключевых слов, Label, Unit, Begin и т.д.

В компиляторе Delphi ключевые слова выделяются жирным шрифтом.

Стандартные идентификаторы обозначают заранее определенные программистом конструкции языка:

1. тип данных;

2. константы;

3. процедуры;

4. функции;

Стандартные идентификаторы можно переопределять, но во избежание ошибок, лучше их использовать без каких-либо изменений. Примером таких идентификаторов будут: sin, pi, Real.

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

· идентификатор составляется из букв и цифр;

· идентификатор всегда начинается с буквы;

· в идентификаторе можно использовать как строчные, так и прописные буквы, компилятор интерпритирует их одинаково;

· между двумя идентификаторами в программе должен быть по крайней мере один разделитель.

Выводит на экран диалоговое окно с сообщением s и возвращает код кнопки, щелчком на которой пользователь открыл окно. Параметр t определяет тип окна:

· mtWarning - внимание;

· mtError - ошибка;

· mtInformation - информация;

· mtConfirmation - запрос;

· mtCustom - пользовательское (без значка);

Параметр b (множество – заключенный в квадратные скобки список констант) задает командные кнопки диалогового окна (mbYes, mbNo, mbOK, mbCancel, mbHelp,, mbRetry и mbAll).

Параметр h задает раздел справочной системы программы, который появится в результате нажатия кнопки Help или клавиши F1. Если справочная система не используется значение параметра должно быть 0.

Значением функции может быть одна из констант: mrAbort, mrYes, mrOK, mrRetry, mrNo, mrCancel, mrAll обозначающая соответствующую командную кнопку.

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

1. Объявить файловую переменную необходимого типа.

2. При помощи функции AssignFile связать эту переменную с требуемым файлом.

3. Открыть файл при помощи функций Append, Reset, Rewrite.

4. Выполнить операции чтения или записи. При этом, в зависимости от сложности задачи и структуры данных, может использоваться целый ряд вспомогательных функций.

5. Закрыть файл при помощи функции CloseFile.

 

Главное окна всегда присутствует на экране и предназначено для управления процессом создания программы. Основное меню (прил.1)содержит все необходимые средства для управления проектом. Пиктограммы облегчают доступ к наиболее часто применяемым командам основного меню. Через меню компонентов (прил. 2) осуществляется доступ к набору стандартных сервисных программ среды DELPHI, которые описывают некоторый визуальный элемент (компонент), помещенный программистом в окно формы. Каждый компонент имеет определенный набор свойств (параметров), которые программист может задавать. Например, цвет, заголовок окна, надпись на кнопке, размер и тип шрифта и др.

Окно инспектора объектов (вызывается с помощью клавиши F11) предназначеного для изменения свойств выбранных компонентов и состоит из двух страниц. Страница Properties (Свойства) предназначена для изменения неоходимых свойств компонента, страница Events (События) - для определения реакции компонента на то или иное событие (например, нажатие определенной клавиши или щелчок "мышью " по кнопке).

Окно формы представляет собой проект Windows-окна программы. В это окно в процессе написания программы помещаются необходимые компоненты. Причем при выполнении программы помещенные компоненты будут иметь тот же вид, что и на этапе проектирования.

Окно текста программы предназначено для просмотра, написания и коретироваиия текста программы. В системе DELPHI используется язык программирования Object Pascal. При первоначальной загрузке в окне текста программы находится текст, содержащий минимальный набор операторов для нормального функционирования пустой формы в качестве Windows-окна. При помещении некоторого компонента в окно формы текст программы автоматически дополняется описанием необходимых для его работы библиотек стандартных программ (раздел uses) и типов переменных (раздел type).

Программа в среде DELPHI составляется как описание алгоритмов, которые необходимо выполнить, если возникает определенное событие, связанное с формой (например, щелчок "мыши" на кнопке - событие OnClick, создание формы - OnCreate). Для каждого обрабатываемого в форме события, с помощью страницы Events инспектора объектов в тексте программы организуется процедура (procedure), между ключевыми словами begin и end которой программист записывает на языке Object Pascal требуемый алгоритм.

Переключение между окном формы и окном текста программы осуществляется с помощью клавиши F12.

Меню и команды Delphi

Чтобы выдать команду в среде Delphi, можно воспользоваться тремя основными способами:

· С помощью меню.

· С помощью полоски SpeedBar (инструментальной линейки).

· С помощью SpeedMenu (одного из локальных меню, которое активизируется при нажатии правой кнопки мыши).

Меню File

Команды выпадающего меню File можно использовать для работы, как с проектами, так и с файлами исходного кода.

К командам, работающим с проектами, относятся New, New Application, Open, Reopen, Save Project As, Save All, Close All, Add to Project и Remove from Project. С файлами исходного кода работают команды New, New Form, New Data Module, Open, Reopen, Save As, Save, Close и Print. Основной командой является File/New, которую можно использовать для вызова экспертов, для начала работы с новым приложением, для наследования формы из уже существующей и т.д. Чтобы открыть проект или файл исходного кода, с которыми вы работали последний раз, используйте команду File/Reopen.

Меню Edit

Стандартные возможности меню Edit применимы как к тексту, так и к компонентам формы. Можно копировать и вставлять тот или иной текст в редакторе, копировать и вставлять компоненты в одной форме или из одной формы в другую. Также можно копировать и вставлять компоненты в другое групповое окно той же формы, например, в панель или блок группы; копировать компоненты из формы в редактор, и наоборот. Delphi помещает компоненты в буфер обмена, преобразуя их в текстовое описание. Можно соответствующим образом отредактировать этот текст, а затем вставить его обратно в форму в виде нового компонента. Можно выбрать несколько компонентов и скопировать их как в другую форму, так и в текстовый редактор. Это может пригодиться, когда вам придется работать с рядом схожих компонентов. Вы сможете скопировать один компонент в редактор, размножить его нужное число раз, а затем вставить назад в форму целую группу.

Меню Search

Если вы выберете команду Incremental Search, то вместо того чтобы показать диалоговое окно, где вводится образец для поиска, Delphi переходит в редактор. Когда вы введете первую букву, редактор перейдет к первому слову, которое начинается с этой буквы. Продолжайте набор букв и, курсор будет последовательно переходить к словам, в начале которых будут стоять введенные символы. Эта команда очень эффективна и чрезвычайно быстра. Команда Browse Symbol вызывает Object Browser – инструмент, который можно использовать для просмотра многих деталей при исследовании откомпилированной программы.

Меню View

Большинство команд меню View применяются для отображения какого-либо окна среды Delphi, например Project Manager, Breakpoints List или Components List. Эти окна не связаны друг с другом. Эти окна не связаны друг с другом. Команда Toggle Form/Unit используется для перехода от формы, над которой вы работаете к ее исходному коду, и обратно. Команда New edit window создает дубликат окна редактирования и его содержимого. В Delphi это единственный способ просмотреть два файла рядом друг с другом, поскольку редактор для показа нескольких загруженных файлов использует ярлычки. После дублирования окна редактирования могут содержать разные файлы. Последние две команды меню View можно использовать для удаления с экрана полоски SpeedBar и палитры Components, хотя при этом среда Delphi становится менее удобнее для пользователя. Команда Build All заставляет Delphi откомпилировать каждый исходный файл проекта, даже если после последней трансляции он не был изменен. Для проверки написанного кода без создания программы можно использовать команду Syntax Check. Команда Information дает некоторые подробности о последней выполненной вами трансляции. Команда Options применяется для установки опций проекта: опций компилятора и редактора связей, опций объекта приложения и т.д.

Меню Run

Меню Run можно было бы назвать Debug (отладка). Большинство команд в нем относится к отладке, включая саму команду Run. Программа, запускаемая внутри среды Delphi, выполняется в ее интегрированном отладчике (если не отключена соответствующая опция). Для быстрого запуска приложения используется клавиша F9. Остальные команды применяются в процессе отладки для пошагового выполнения программы, установки точек прерывания, просмотра значений переменных и объектов, и т.п.

Меню Component

Команды меню Component можно использовать для написания компонентов, добавления их в библиотеку, а также для конфигурирования библиотеки или палитры компонентов.

Меню Tools

Меню Tools содержит список нескольких внешних программ и инструментальных средств. Команда Tools позволяет сконфигурировать это выпадающее меню и добавить в него новые внешние средства. Меню Tools также включает команду для настройки репозитория и команду Options, которая конфигурирует всю среду разработки Delphi.

Работа с формами

Проектирование форм – ядро визуальной разработки в среде Delphi. Каждый помещаемый в форму компонент или любое задаваемое свойство сохраняется в файле, описывающем форму (DFM-файл), а также оказывает некоторое влияние на исходный текст, связанный с формой (PAS-файл).

Можно начать новый пустой проект, создав пустую форму или начать с существующей формы (используя различные доступные шаблоны) или добавить в проект новые формы. Проект (приложение) может иметь любое число форм.

При работе с формой можно обрабатывать ее свойства, свойства одного из ее компонентов или нескольких компонентов одновременно. Чтобы выбрать форму или компонент, можно просто щелкнуть по нему мышью или воспользоваться Object Selector (комбинированный список в Object Inspector), где всегда отображены имя и тип выбранного элемента. Для выбора нескольких компонентов можно или нажать клавишу Shift и щелкать по компонентам левой кнопкой мыши, или отбуксировать в форме рамку выбора.

SpeedMenu формы содержит ряд полезных команд. Для изменения относительного расположения компонентов одного вида можно использовать команды Bring to Front и Send To Back. Командой Revert To Inherited можно воспользоваться, чтобы в унаследованной форме установить те значения свойств выбранного компонента, которые были у них в родительской форме. При выборе сразу нескольких компонентов вы можете выровнять их или изменить их размеры.

С помощью SpeedMenu можно также открыть два диалоговых окна, в которых устанавливается порядок обхода визуальных управляющих элементов и порядок создания невизуальных управляющих элементов. Команда Add To Repository добавляет текущую форму в список форм, доступных для использования в других проектах.

Для установки положения компонента кроме применения мыши имеются еще два способа:

· Установка значений для свойств Top и Left.

· Использование клавиш курсора при нажатой клавише Ctrl.

Метод Ctrl+клавиша курсора особенно удобен при тонкой подстройке положения элемента. Точно также, нажимая клавиши курсора при нажатой клавише Shift, можно подстроить размер компонента.

 

Палитра компонентов

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

Каждая страница палитры содержит ряд компонентов, которые обозначены пиктограммами и именами, появляющимися ввиле подсказки. Эти имена являются официальными названиями компонентов. В действительности это названия классов, описывающих компоненты без первой буквы T (например, если класс называется Tbutton, имя будет Button). Если необходимо поместить в форму несколько компонентов обного и того же вида, то при выборе компонента щелчком в палитре удерживайте нажатой клавишу Shift Затем при каждом щелчке в форме Delphi будет вставлять новый компонент выбранного вида.Чтобы остановить эту операцию, просто щелкните по стандартному селектору (пиктограмма стрелки) слева от палитры Components.

Структура программ DELPHI

Программа в DELPHI состоит из файла проекта (файл с расширением.dpr), одного или нескольких файлов исходного текста (с расширением.pas), файлов с описанием окон формы (с расширением.dfm).

В файле проекта находится информация о модулях, составляющих данный проект. Файл проекта автоматически создается и редактируется средой DELPHI и не предназначен для редактирования.

Файл исходного текста - программный модуль (Unit) предназначен для размещения текстов программ. В этом файле программист размещает текст программы, написанный на языке PASCAL.

В разделе объявлений описываются типы, переменные, заголовки процедур и функции, которые могут быть использованы другими модулями, через операторы подключения библиотек (Uses). В разделе реализации располагаются тела процедур и функций, описанных в разделе объявлений, а также типы переменных, процедуры и функции, которые будут функционировать только в пределах данного модуля. Раздел инициализации используется редко,и ею можно пропустить. Модуль имеет следующую структуру:

unit Unit1;

interface

// Раздел объявлений

implementation

// Раздел реализации

begin

// Раздел инициализации

end.

Пример написания программы циклического алгоритма

Задание: написать и отладить программу, которая выводит таблицу значений функции S(х) для х изменяющихся в интервале от XI до Х2 с шагом h.

Текст программы приведен ниже.

unit tema3;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

 

type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations}

end;

var Form1: TForm1;

implementation

{$R*.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

Edit1.Text:='0';

Edit2.Text:='2';

Edit3.Text:='5';

Edit4.Text:='0.25';

Memo1.Clear;

Memo.Lines.Add('Результаты ст. гр. 9383 Валета А.В.');

end;

procedure TForm1.Button1Cllck(Sender: TObject);

var x1, x2, x, h, a, s: extended;

N, k, c: integer;

begin

x1:=StrToFloat(Edit1.Text);

Memo1.Lines.Add('x1='+Edit1.Text);

x2:=StrToFloat(Edit2.Text);

Memo1.Lines.Add('x2='+Edit2.Text);

N:=StrTolnt(Edit3.Text);

Memo1.lines.Add('N='+Edit3.Text);

h:=StrToFloat(Edit4.Text);

Memo1.Lines.Add(' h='+Edit4.Text);

c:=-1;

x:=x1;

repeat

a:=1;

S:=1;

for k:=1 to N do

begin

a:=c*a*x/k;

s:=s+a;

end;

Memo1.lines.Add('при x=' +FloatToStrF(x,ffFixed,6,2)+ ' сумма = '+FloatToStrF(s,tfFtxed,6,2));

x:=x+h;

until x>x2;

end.

end

 

Ответы

26) Подпрограмма — поименованная или иным образом идентифицированная часть компьютерной программы, содержащая описание определённого набора действий. Назначение: Подпрограммы изначально появились как средство оптимизации программ по объёму занимаемой памяти — они позволили не повторять в программе идентичные блоки кода, а описывать их однократно и вызывать по мере необходимости. К настоящему времени данная функция подпрограмм стала вспомогательной, главное их назначение — структуризация программы с целью удобства её понимания и сопровождения.

§ Выделение набора действий в подпрограмму и вызов её по мере необходимости позволяет логически выделить целостную подзадачу, имеющую типовое решение. Такое действие имеет ещё одно (помимо экономии памяти) преимущество перед повторением однотипных действий: любое изменение (исправление ошибки, оптимизация, расширение функциональности), сделанное в подпрограмме, автоматически отражается на всех её вызовах, в то время как при дублировании каждое изменение необходимо вносить в каждое вхождение изменяемого кода.

§ Даже в тех случаях, когда в подпрограмму выделяется однократно производимый набор действий, это оправдано, так как позволяет сократить размеры целостных блоков кода, составляющих программу, то есть сделать программу более понятной и обозримой...

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

§ Функция — это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность — она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания. Подробнее см. в статье Функция (программирование).

§ Процедура — это любая подпрограмма, которая не является функцией.

Структура подпрограмм

Структура подпрограммы состоит из трех частей: заголовка подпрограммы, локального описания и тела подпрограммы. Заголовок используется, чтобы явно ввести в программу новую подпрограмму и обозначить начало ее описания. Локальные описания представляют собой набор описаний типов, переменных, констант и других подпрограмм, которые действуют только в рамках данной подпрограммы. Тело подпрограммы - это логический блок begin / end, содержащий операторы и команды и реализующий нужную логику работы.

27) Формальные параметры подпрограммы указывают, с какими параметрами следует обращаться к этой подпрограмме (количество параметров, их последовательность, типы). Они задаются в заголовке подпрограммы в виде списка формальных параметров, разбитого на группы, разделенные точками с запятыми. В группу формальных параметров включаются однотипные параметры одной категории.

Все формальные параметры можно разбить на четыре категории:

  • параметры-значения (эти параметры в основной программе подпрограммой не меняются);
  • параметры-переменные (эти параметры подпрограмма может изменить в основной программе);
  • параметры-константы (используются только в версии 7.0);
  • параметры-процедуры и параметры-функции (т. е. процедурного типа).

Для каждого формального параметра следует указать имя и, как правило, тип, а в случае параметра-переменной или параметра-константы - его категорию. Имена параметров могут быть любыми, в том числе и совпадать с именами объектов программы. Необходимо лишь помнить, что в этом случае параметр основной программы с таким именем становится недоступным для непосредственного использования подпрограммой. Тип формального параметра может быть практически любым, однако в заголовке подпрограммы нельзя вводить новый тип. Например, нельзя писать

function Max(A: arrayt1..100] of Real): Real;

Чтобы правильно записать этот заголовок, следует в основной программе ввести тип-массив, а затем использовать его в заголовке:

type tArr = arrayt1..100] of Real; function Max(A: tArr): Real;

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-07-22 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: