Создание программы циклической структуры. Работа с массивами

Автор работы: Пользователь скрыл имя, 07 Февраля 2013 в 06:04, курсовая работа

Описание

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

Работа состоит из  1 файл

массивы.doc

— 284.00 Кб (Скачать документ)

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.

 

Список использованной литературы

  1. Ян Гордон. Тонкости программирования на языке Паскаль. Учебное пособие по программированию на ПК. – М.: ООО «Литературное агентство «Бук_Пресс», 2006.
  2. http://articles.org.ru/docum/pas.php#Массивы.
  3. Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus. - Донецк.: ДонНТУ, Технопарк ДонНТУ УНИТЕХ, 2009. -503 с.
  4. http://wiki.mvtom.ru/index.php/Массивы_в_языке_Паскаль 

Приложения

Текст модуля 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(Sender: TObject);

    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.btnEnterSizeofArrayClick(Sender: TObject);

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.




Информация о работе Создание программы циклической структуры. Работа с массивами