Репетиторские услуги и помощь студентам!
Помощь в написании студенческих учебных работ любого уровня сложности

Тема: Массивы в Delphi

  • Вид работы:
    Курсовая работа (п) по теме: Массивы в Delphi
  • Предмет:
    Информационное обеспечение, программирование
  • Когда добавили:
    25.07.2014 14:54:14
  • Тип файлов:
    MS WORD
  • Проверка на вирусы:
    Проверено - Антивирус Касперского

Другие экслюзивные материалы по теме

  • Полный текст:
    Содержание
    Введение. 4
    Глава 1. Теоретические основы работы в Delphi. Основные структуры, использованные при реализации задач. 5
    Глава 2. Программная реализация задач на обработку массивов. 9
    2.1. Составление алгоритмов отдельных функций и процедур. 9
    2.2. Тестирование программы.. 13
    Заключение. 15
    Список использованных источников. 16
    Приложения. 17
     
    РЕФЕРАТ  
    Пояснительная записка к курсовой работе содержит:
    страниц - 24;
    рисунков - 5;
    приложений – 1.
    Цель работы: разработать программу на языке Delphi, которая
    а) вычисляет сумму модулей элементов матрицы выше главной диагонали – оформить в виде функции;
    б) подсчитывает сумму отрицательных элементов в соответствующем столбце матрицы и формирует вектор значений, оформить в виде процедуры
    В курсовой работе создана программа со всеми вышеуказанными требованиями.
    В первом разделе курсовой работы рассмотрены теоретические вопросы по использованию среды программирования Delphi и основные компоненты, использованные при разработке программы.
    Во втором разделе выполняется анализ исходных данных, приводятся блок-схемы отдельных программных модулей, словесный алгоритм работы программы.
    Листинг программы содержится в приложении А.
    Программа разработана с использованием языка Delphi.
    Введение
     
    Данный курсовой проект был разработан в среде Delphi 7 с базовым языком программирования Delphi. Среди множества языков Delphi является наиболее универсальным и легко изучаемым языком. На сегодня Delphi поддерживает все современные возможности объектно-ориентированного программирования в такой мощной системе проектирования как Delphi 7.
    Цель курсовой работы – закрепление и демонстрация знаний, полученных при изучении курса.
    Задача работы заключается в том, чтобы правильно составить алгоритм поставленной задачи по обработке текстовой информации, разработать и отладить программу, реализующую разработанный алгоритм.
    В ходе выполнения курсового проекта необходимо выполнить следующие этапы:
    - разработка алгоритма программы, предназначенной для выполнения поставленных задач;
    - составление программы согласно разработанным алгоритмам на языке Delphi;
    - отладка программы на тестовых наборах данных;
    - составление и оформление пояснительной записки.
    Теоретическая и практическая значимость заключается в закреплении навыков составления алгоритмов поставленных задач и программирования на языке Delphi.
    Глава 1. Теоретические основы работы в Delphi. Основные структуры, использованные при реализации задач.
     
    1.1 Одномерные массивы
     
    Массив представляет собой набор однотипных переменных, заключенных в одну переменную. Каждая однотипная переменная в массиве называется элементом массива и имеет свой собственный числовой индекс в массиве. Чтобы создать массив, вначале необходимо создать переменную массива требуемого типа.
    Массивы могут содержать определенное кол-во любой но однотипной информации. Теперь посмотрим на реализацию массивов в Delphi (Pascal). Как и любую обыкновенную переменную, массив тоже необходимо объявить в разделе var. Делается это следующим образом:
    1 2 3
    var a: array [0..100] of integer;
    Сначала мы, как и обычно, указываем название нашего массива. Затем, после «array», мы указываем диапазон индексов в массиве, т.е. в данном случае мы создали 101 элементов массива с заданными индексами. И затем естественно указываем тип элементов массива, а именно пишем после «of» тип «integer», т.е. элементы массива целочисленные.
    Теперь как же обратиться к элементам массива непосредственно из кода, т.е. работать с этими элементами как с обыкновенными переменными? Делается это предельно просто. Обратиться к любому элементу массива можно следующим образом:
    1 2 3
    a[1]:=100; a[99]:=200;
    В квадратных скобках мы указываем индекс самого элемента массива. Очень важно учитывать, что введенный индекс, по которому мы хотим обратиться к элементу массива, должен быть в указанном при объявлении массива диапазоне, иначе программа во время своей работы выдаст нам ошибку. Также, в качестве индекса может выступать и другая любая переменная типа integer (а также и различные примитивные математические операции), например так:
    1 2 3
    a[i]:=100; a[i+10]:=200;
     
     
    1.2. Вложенные циклы и двумерные массивы – матрицы.
    Существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Вложенный цикл по отношению к циклу, в тело которого он вложен, будет именоваться внутренним циклом, и наоборот цикл, в теле которого существует вложенный цикл, будет именоваться внешним по отношению к вложенному. Внутри вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Количество уровней вложенности, как правило, не ограничивается.
    Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов. Например взяв три вложенных друг в друга цикла, каждый по 10 итераций, получим 10 исполнений тела для внешнего цикла, 100 для цикла второго уровня и 1000 в самом внутреннем цикле.
    В данной работе использовалось количество вложений – 2, для организации работы с матрицами – двумерными массивами.
    Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы.
    Рассмотрим двумерный массив Паскаля размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента: каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a21 – это элемент, стоящий во второй строке и в первом столбце.
    Описание двумерного массива Паскаля.
    Существует несколько способов объявления двумерного массива Паскаля.
    Одномерные массивы, элементы которых могут иметь любой тип, могут быть элементами массива. Рассмотрим следующее описание типов и переменных:
    Пример описания двумерного массива Паскаля
    Type
    Vector = array [1..5] of  <тип_элементов>;
    Matrix= array [1..10] of vector;
    Var m: matrix;
    Здесь объявлен двумерный массив Паскаля m, состоящий из 10 строк, в каждой из которых 5 столбцов. При этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i , j ].
    Определение типов для двумерных массивов Паскаля можно задавать и в одной строке:
    Type
    Matrix= array [1..5] of array [1..10] of < тип элементов >;
    или еще проще:
    type
    matrix = array [1..5, 1..10] of <тип элементов>;
    Обращение к элементам двумерного массива имеет вид: M [ i , j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце. Тут главное не перепутать строки со столбцами, а то мы можем снова получить обращение к несуществующему элементу. Например, обращение к элементу M [10, 5] имеет правильную форму записи, но может вызвать ошибку в работе программы.
    Основные действия с двумерными массивами Паскаля
    Все, что было сказано об основных действиях с одномерными массивами, справедливо и для матриц. Единственное действие, которое можно осуществить над однотипными матрицами целиком – это присваивание. Т.е., если в программе у нас описаны две матрицы одного типа, например,
    type
    matrix= array [1..5, 1..10] of integer;
    var
    a , b : matrix ;
    то в ходе выполнения программы можно присвоить матрице a значение матрицы b ( a := b ). Все остальные действия выполняются поэлементно, при этом над элементами можно выполнять все допустимые операции, которые определены для типа данных элементов массива. Это означает, что если массив состоит из целых чисел, то над его элементами можно выполнять операции, определенные для целых чисел, если же массив состоит из символов, то к ним применимы операции, определенные для работы с символами.
    Ввод двумерного массива Паскаля.
    Для последовательного ввода элементов одномерного массива мы использовали цикл for, в котором изменяли значение индекса с 1-го до последнего. Но положение элемента в двумерном массиве Паскаля определяется двумя индексами: номером строки и номером столбца. Это значит, что нам нужно последовательно изменять номер строки с 1-й до последней и в каждой строке перебирать элементы столбцов с 1-го до последнего. Значит, нам потребуется два цикла for, причем один из них будет вложен в другой.
    Глава 2. Программная реализация задач на обработку массивов.
    2.1. Составление алгоритмов отдельных функций и процедур.
    Проект Delphi
    Любой проект имеет, по-крайней мере, шесть файлов, связанных с ним. Три из них относятся к управлению проектом из среды и напрямую программистом не меняются. Вот эти файлы:
    Главный файл проекта, изначально называется PROJECT1.DPR. Первый модуль программы /unit/, который автоматически появляется в начале работы. Файл называется UNIT1.PAS по умолчанию, но его можно назвать любым другим именем, вроде MAIN.PAS. Файл главной формы, который по умолчанию называется UNIT1.DFM, используется для сохранения информации о внешнем виде главной формы.   Файл PROJECT1.RES содержит иконку для проекта, создается автоматически.  Файл, который называется PROJECT1.OPT по умолчанию, является текстовым файлом для сохранения установок, связанных с данным проектом. Например, установленные Вами директивы компилятора сохраняются здесь.   Файл PROJECT1.DSK содержит информацию о состоянии рабочего пространства. Разумеется, если сохранить проект под другим именем, то изменят название и файлы с расширением RES, OPT и DSK.
    После компиляции программы получаются файлы с расширениями:
    DCU - скомпилированные модули
    EXE - исполняемый файл
    DSM - служебный файл для запуска программы в среде, очень большой, рекомендуется стирать его при окончании работы.
    ~PA, ~DP - backup файлы Редактора.
     
    Для ввода и вывода данных на форме были использованы компоненты StringGrid, причем для ввода данных в компоненту необходимо было изменить параметр goEditing с False на True. Интерфейс программы (приложение А) должен быть следующим. Сначала пользователь вводит размерность матрицы, это реализуется с помощью компоненты SpinEdit. Затем, вводит элементы самой матрицы.
    Процедуры, использованные при выполнении задач, реализованы под соответствующие кнопки.
    Вывод данных осуществляется в компоненту Edit – значение суммы, и в компоненту StringGrid – элементы вектора – одномерного массива.
    Общая структура программы представлена на рисунке 1.
    Для решения первой задачи был составлен алгоритм работы функции Summ (Рис.2). Решение второй задачи было реализовано с помощью процедуры Button2Click, для которой был составлен алгоритм (Рис.3).
     
    Рис.1  Алгоритм программы
     
    Рис.2 Блок-схема вычисления функции подсчета суммы модулей элементов матрицы, расположенных выше главной диагонали.
     
    Рис. 3 Блок-схема вычисления суммы отрицательных элементов в соответствующем столбце матрицы и формирование вектора значений.
     
     
    2.2. Тестирование программы
    Тестирование программы проводилось на самых разных вариантах матриц. В процессе тестирования ошибок не обнаружено.
    Программа тестировалась на следующих примерах:
    Матрица n=3
    1
    2
    3
    1
    1
    2
    2
    2
    3
     
    Выдан результат
    Рис.4
    Матрица n=4
    -4
    -7
    -8
    5
    13
    11
    -2
    3
    -9
    15
    -1
    4
    11
    -8
    -1
    -3
     
    Выдан результат
    Рис.5
     
    Заключение
    Данная курсовая работа была выполнена в полном соответствии поставленному заданию и отлажена в среде Delphi 7.0. В ходе выполнения курсовой работы была разработана программа, на языке Delphi (Object Pascal), которая:
    а) вычисляет сумму модулей элементов матрицы выше главной диагонали – оформить в виде функции;
    б) подсчитывает сумму отрицательных элементов в соответствующем столбце матрицы и формирует вектор значений, оформить в виде процедуры.
    В программе предусмотрен ввод непосредственно в форму.
    В ходе выполнения курсового проекта были разработаны алгоритмы отдельных процедур и программы в целом, программы, предназначенной для выполнения сформированных функций и процедур.
    Согласно разработанному алгоритму была составлена и отлажена программа на языке программирования Delphi. В ходе разработки программы проводилось ее тестирование и отладка на тестовых наборах. Результаты работы оформлены в виде пояснительной записки.
    В ходе разработки программы были закреплены навыки работы:
    - командами ввода-вывода как на экран, так и в текстовые файлы,
    - использования процедур,
    - команды обработки массивов,
    - команды для реализации циклов с заданным числом повторений;
    - команды проверки условий и реализации ветвлений.
    В результате выполнения данной курсовой работы, мы убедились в широких возможностях языка программирования Delphi, закрепили практические навыки программирования в cреде Delphi.
     
    Список использованных источников 1. Ахо А., Хопкрофт Дж., Ульман Дж. Структуры данных и алгоритмы. — М.: Видавничий будинок Вільямс, 2001. – 286 с.
    2. Зуев Е.А. Программирование на языке Delphi 6.0,7.0. – М.: Радио и связь, Веста, 1993. – 186 с.
    3. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. — М.: МЦНМО, 2001. – 563 с.
    4. Фаронов В.В. Delphi 7.0. Начальный курс. - М.: Нолидж, 2000. – 684 с.
     
     
     
    Приложения
    Приложение А
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids, Spin;
     
    type
      mass= array[1..100,1..100] of real;
      TForm1 = class(TForm)
      Label1: TLabel;
      Label2: TLabel;
      Label3: TLabel;
      StringGrid1: TStringGrid;
      Edit2: TEdit;
      Label4: TLabel;
      Button2: TButton;
      StringGrid2: TStringGrid;
      Button4: TButton;
      SpinEdit1: TSpinEdit;
      Button1: TButton;
      procedure FormCreate(Sender: TObject);
      procedure SpinEdit1Change(Sender: TObject);
      procedure Button4Click(Sender: TObject);
      function Summ(n:integer;Y:mass):real;
      procedure Button2Click(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      private
     
      { Private declarations }
      public
      { Public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    var
     A:mass;// объявление двумерного массива A
     X:array[1..100] of real; // объявление одномерного массива X
    // объявление глобальных переменных
     S:real;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     SpinEdit1.Text:='4'; // начальное значение n
     Edit2.Text:='0'; // начальное значение суммы
     StringGrid1.RowCount:=4;   // количество строк массива A
     StringGrid1.ColCount:=4;   // количество столбцов массива A
     StringGrid2.RowCount:=4;   // количество строк массива X
     end;
    //Суммируем элементы выше диагонали
    function TForm1.Summ(n:integer;Y:mass):real;
     var
    i,j:integer;
     begin
     S:=0;
    for i:=1 to n do
    if j>i then
    for j:=i+1 to n do
    S:=S+abs(y[i,j]);
     Summ:=S;
    end;
    // Отрабатываем изменение размерности матрицы
    procedure TForm1.SpinEdit1Change(Sender: TObject);
    var iTopCount: Integer;
    begin
      if SpinEdit1.Text<>'' then begin
      if Length(SpinEdit1.Text)<=2 then begin
      try
      iTopCount := StrToInt(SpinEdit1.Text);
      StringGrid1.RowCount := iTopCount;
      StringGrid2.RowCount := iTopCount;
      StringGrid1.ColCount := StringGrid1.RowCount;
      except
      ShowMessage('Введено некорректное число');
      end;
      end else begin
    ShowMessage('Число не должно быть больше 99');
    end;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
     // объявление локальных переменных
     sum:real;
     n,i,j:integer;
    begin
     n:=StrToInt(SpinEdit1.Text);
     with StringGrid2 do
    begin
    Sum:=0; {обнулить сумму перед суммированиемэлементов}
    for j:=1 to n do
    begin
    Sum:=0;
    for i:=1 to n do
    if a[i,j]<0 then
    {если значение ячейки отрицательно, то суммировать ее значение}
    Sum:=Sum+a[i,j];
    X[j]:=Sum;
    Cells[0,j-1]:=FloatToStr(X[j])
    end;
    end;
    end;
    //Закрытие формы
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    close;
    end;
     // Сумма модулей элементов выше главной диагонали
    procedure TForm1.Button1Click(Sender: TObject);
    var i, j,n: Integer;
    begin
    n:=StrToInt(SpinEdit1.Text);
     StringGrid1.RowCount:=n;
     StringGrid2.RowCount:=n;
     StringGrid1.ColCount:=n;
     
    // Ввод значений из таблицы в массив A
    with StringGrid1 do
     for i:=1 to n do
      for j:=1 to n do
    A[i,j]:=StrToFloat(Cells[j-1,i-1]);
    Edit2.Text:=FloatToStr(Summ(n,A));
    end;
     
    end.
Если Вас интересует помощь в НАПИСАНИИ ИМЕННО ВАШЕЙ РАБОТЫ, по индивидуальным требованиям - возможно заказать помощь в разработке по представленной теме - Массивы в Delphi ... либо схожей. На наши услуги уже будут распространяться бесплатные доработки и сопровождение до защиты в ВУЗе. И само собой разумеется, ваша работа в обязательном порядке будет проверятся на плагиат и гарантированно раннее не публиковаться. Для заказа или оценки стоимости индивидуальной работы пройдите по ссылке и оформите бланк заказа.