Автор работы: Пользователь скрыл имя, 07 Февраля 2013 в 06:04, курсовая работа
С развитием вычислительной техники образовались два основных направления ее использования. Это выполнение численных расчетов и использование средств вычислительной техники в автоматических или автоматизированных системах. Информационная система представляет собой программно-аппаратный комплекс, выполняющий функции поддержки надежного хранения информации в памяти компьютера, выполнении определенных преобразований информации, предоставления пользователям удобного интуитивно понятного интерфейса.
intSize := edSizeOfArray.Value; - запоминаем введенный пользователем размер массива.
В цикле от 1 до intSize заполняем каждый элемент массива случайным числом и выводим полученное значение в поле отображение массива.
Для сортировки элементов массива по возрастанию (убыванию) можно воспользоваться алгоритмом сортировки выбора максимального (минимального) элемента.
Рисунок 1. Сортировка массива по возрастанию выбором
наибольшего элемента
Алгоритм выбором приведен в виде блок-схемы на рис. 1. Найдем в массиве самый большой элемент (блоки 2–5) и поменяем его местами с последним элементом (блок 6). После этого максимальный элемент станет на свое место. Теперь надо повторять эти действия (блоки 2–6), уменьшив количество просматриваемых элементов на единицу (блок 7), до тех пор, пока количество рассматриваемых элементов не станет равным одному (блок 8). В связи с тем что мы на каждом шаге уменьшаем количество элементов на 1, то, чтобы не потерять размер массива (N), необходимо в начале алгоритма переписать N в переменную K (блок 1) и уменьшать уже значение K. При упорядочивании массива по убыванию необходимо перемещать минимальный элемент. Для чего в алгоритме (рис. 2.) в блоке 4 достаточно знак “больше” поменять на знак ”меньше”. Ниже приведен фрагмент программы упорядочения массива по возрастанию с использованием сортировки выбором максимального элемента.[3]
//Сортировка выбором.
repeat
max:=x[1];
nom:=1;
for i:=2 to k do
begin
if max < X[i] then
begin
max:=X[i];
nom:=i;
end;
end;
b:=x[nom];
x[nom]:=x[k];
x[k]:=b;
k:=k-1;
until k=1;
Сортировка массива реализована методом пузырька.
Рисунок 2. Алгоритм упорядочивания по возрастанию методом пузырька
Метод основан на повторяющихся проходах по массиву. За каждый проход элементы последовательно сравниваются попарно и, при неверном порядке элементов в сравниваемой паре, выполняется обмен элементов. Проходы по массиву организуются двумя циклами. Внешний цикл имеет количество итераций на 1 меньше, чем размер массива. Внутренний цикл имеет переменное количество итераций, равное разности между размером массива и номером текущей итерации внешнего цикла. Элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма.
Для обмена элементов массива друг с другом реализована процедура SwapItem. Входными параметрами процедуры являются два элемента массива, которые необходимо поменять местами.
procedure SwapItem (var First, Second: integer );
var
tmp: integer; - переменная, предназначенная для временного хранения значения элемента при обмене.
begin
tmp := First; - временно запоминаем значение первого элемента
First := Second;- присваиваем первому элементу значение второго элемента
Second := tmp;-второму элементу присваиваем временно запомненное значение первого элемента.
end;
После выполнения этой процедуры значения двух элементов будут поменяны местами.
Сортировка по возрастанию и по убыванию, по сути, отличается только знаком сравнения элементов массива. Если брать за истину условие, когда очередной элемент больше или равен последующему – массив будет отсортирован по убыванию: каждый последующий элемент массива будет меньше или равен предыдущему. Если же принимать за истину условие, при котором очередной элемент меньше последующего - элементы массива будут отсортированы по возрастанию: каждый последующий элемент массива будет больше предыдущего.
Рассмотрим ход выполнения процедуры сортировки массива на примере сортировки по убыванию. Из приведенного кода процедуры убраны команды и конструкции, не имеющие прямого отношения к реализации алгоритма метода сортировки и служащие для визуализации данных.
procedure TfrmMain.btnDownClick(Sender: TObject);
var
i, j: integer; - объявляем переменные для счетчиков итераций
begin
for j:=1 to intSize-1 do – начинаем внешний счетчик с количеством итераций на 1 меньше размера массива
begin
for i:= 1 to intSize-j do – начинаем внутренний счетчик
begin
if CurrArray[i] < CurrArray[i+1] then – сравниваем текущий элемент массива с последующим.
Begin - если текущий элемент массива меньше чем последующий, «легче»
SwapItem ( CurrArray[i], CurrArray[i+1] );- меняем их местами
end;
end; - окончание внутреннего цикла
end;- окончание внешнего цикла
end; - окончание процедуры.
Отображение массива происходит путем однократного прохода по массиву с помощью цикла с фиксированным количеством итераций, равным количеству элементов массива и добавлением каждого последующего элемента массива в свойство Lines экземпляра класса TMemo.
Анализируемая информация, как правило, рассматривается как наборы однотипных данных, хранимых в виде типизованных списков, называемых массивами. Для обработки, массивов можно использовать различные операторы цикла наиболее подходящие для решения конкретных задач.
Целью этой работы являлось изучение устройства массивов в Free Pascal и методов обработки массивов с помощью различных операторов цикла. Можно создавать массивы переменных в разделе Var или констант в разделе Const в зависимости от их предназначения. Одним из главных свойств массивов является, длинна, которая в Free Pascal у статических массивов не может быть равной нулю и изменяться в процессе выполнения. В качестве типа индекса следует использовать перечислимый тип, а типа компонентов — любой, включая ранее определенный в типе данных. Можно создавать динамические массивы, размерность которых можно изменять, в процессе выполнения и ограничена объёмом свободной памяти. Работать с динамическими массивами следует очень осторожно, обращая внимание на размер выделяемой памяти и изменение границ индекса массива. Анализируемая информация, как правило, рассматривается в виде массивов. Для обработки, массивов можно использовать различные операторы цикла. В языке Free Pascal предусмотрены три оператора, реализующих циклический процесс: while, repeat…until и for. Если число повторений заранее известно, то подходящей конструкцией является оператор for. В противном случае следует использовать оператор с предусловием while или с пост условием repeat..until.
Приложения
Текст модуля u_main
unit u_main;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, Buttons, Spin, Grids;
type
{ TfrmMain }
TfrmMain = class(TForm)
btnExit: TBitBtn;
btnEnterSizeofArray: TBitBtn;
btnUp: TButton;
btnDown: TButton;
Label1: TLabel;
Label2: TLabel;
lblSizeArray: TLabel;
mmShowArray: TMemo;
pnlAction: TPanel;
edSizeOfArray: TSpinEdit;
splPanelMain: TSplitter;
procedure btnDownClick(Sender: TObject);
procedure btnEnterSizeofArrayClick(
procedure btnExitClick(Sender: TObject);
procedure btnUpClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SwapItem (var First, Second: integer );
private
{ private declarations }
public
{ public declarations }
end;
var
frmMain: TfrmMain;
intSize: integer; // Размер массива введенный пользователем
CurrArray: array[1..1000] of integer;
implementation
{ TfrmMain }
procedure TfrmMain.SwapItem (var First, Second: integer );
var
tmp: integer;
begin
tmp:= First;
First := Second;
Second := tmp;
end;
procedure TfrmMain.
var
i: integer; // Номер элемента массива
begin
// Генерируем новый массив
// очищаем массив
CurrArray[0] := 0;
// Очищаем Поле отображения массива
mmShowArray.Lines.Clear;
intSize := StrToINT ( edSizeOfArray.Text );
for i:=1 to intSize do
begin
CurrArray[i] := trunc ( Random(intSize) );
mmShowArray.Lines.Add( IntToStr(CurrArray[i]) );
end;
end;
procedure TfrmMain.btnDownClick(Sender: TObject);
var
i, j: integer; // Счетчики итераций
begin
// Очищаем поле отображения массива
mmShowArray.Lines.Clear;
// Сортируем массив по убыванию методом пузырька
for j:=1 to intSize-1 do
begin
for i:= 1 to intSize-j do
begin
if CurrArray[i] < CurrArray[i+1] then
begin
SwapItem ( CurrArray[i], CurrArray[i+1] );
end;
end;
end;
// Отображаем полученный массив
for i:=1 to intSize do
begin
mmShowArray.Lines.Add ( IntToStr(CurrArray[i]) );
end;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
close;
end;
procedure TfrmMain.btnUpClick(Sender: TObject);
var
i, j: integer; // Счетчики итераций
begin
// Очищаем поле отображения массива
mmShowArray.Lines.Clear;
// Сортируем массив по убыванию методом пузырька
for j:=1 to intSize-1 do
begin
for i:= 1 to intSize-j do
begin
if CurrArray[i] > CurrArray[i+1] then
begin
SwapItem ( CurrArray[i], CurrArray[i+1] );
end;
end;
end;
// Отображаем полученный массив
for i:=1 to intSize do
begin
mmShowArray.Lines.Add ( IntToStr(CurrArray[i]) );
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
randomize; //активируем генератор случайных чисел
mmShowArray.Lines.Clear;
mmShowArray.ReadOnly:=true;
end;
initialization
{$I u_main.lrs}
end.
Информация о работе Создание программы циклической структуры. Работа с массивами