Массивы. Работа с числовыми и строковыми массивами. Двухмерные массивы (матрицы). Подпрограммы. Создание подпрограмм обработки массивов

Автор работы: Пользователь скрыл имя, 28 Февраля 2013 в 14:29, лабораторная работа

Описание работы

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

Файлы: 1 файл

лаб2 готовая.docx

— 502.21 Кб (Скачать файл)

Муромский институт (филиал) федерального государственного


бюджетного образовательного учреждения высшего профессионального

образования «Владимирский государственный  университет имени Александра Григорьевича и Николая Григорьевича Столетовых»

Факультет                ИТ                          

Кафедра                  САПР                    

ЛАБОРАТОРНАЯ

РАБОТА

по             «Информатика и программирование»                             .

(наименование      дисциплины)

Тема Массивы. Работа с числовыми и строковыми массивами. Двухмерные массивы (матрицы). Подпрограммы. Создание подпрограмм обработки массивов.

Руководитель 

                     Быков А.А.  

(фамилия, инициалы) 

                                            

   (подпись)          (дата)

Студент               ПИн-112                       

(группа) 

                      Акимов А.А.                                    

(фамилия, инициалы) 

                                            

(подпись)          (дата)

Муром 2012


Лабораторная работа №2

Тема: Массивы. Работа с числовыми и строковыми массивами. Двухмерные массивы (матрицы). Подпрограммы. Создание подпрограмм обработки массивов.

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

Теоретическая часть.

Массивы

Массивы представляют собой ограниченную упорядоченную  совокупность однотипных величин. Каждая отдельная величина называется элементом массива. Тип элементов может быть любым, и называется базовым типом. Вся совокупность компонент определяется одним именем – именем массива. Доступ к элементу массива происходит по индексу – координатам элемента в массиве.

Символьные  массивы 

Особое  место в языках программирования высокого уровня занимают массивы символов - строки. Работа со строками похожа на работу с обычными массивами. Доступ к отдельным символам строки производится также как и для одномерных массивов.

  Двухмерные  массивы (матрицы)

Двухмерные  массивы (матрицы) представляют собой  массив, индекс элемента в котором состоит из двух частей – номера строки и номера столбца. В памяти ЭВМ двухмерные массивы хранятся в виде одномерного массива, по строкам. Работа с двухмерными массивами похожа на работу с обычными массивами, однако, для обработки такого массива необходимо организовать два вложенных цикла – по строкам и по столбцам.

Подпрограммы

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

языке ObjectPascal существуют два типа подпрограмм - процедуры и функции.

Ввод/вывод  текста

Компонент TEdit позволяет вводить или выводить только одну строку текста. Для ввода/вывода текста состоящего из нескольких строк (например значений элементов массива) можно использовать компонент TMemo.

Ввод/вывод  информации, представленной в виде таблицы

Среда программирования Delphi содержит компонент TStringGrid, который представляет собой графический элемент, осуществляющий ввод или вывод табличной информации.

Страничная  организация интерфейса. Закладки

Иногда  в программе необходимо, чтобы  в одном окне в зависимости  от выбора пользователя отображались различные элементы. Это можно  реализовать при

 

 помощи специальных компонент  Delphi TPageControl – контейнер страниц (закладок) и TTabSheet – страница (закладка).


Меню

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

Практическая  часть.

Для создания приложения «работа с  массивами» вначале я разработал интерфейс приложения, используя необходимые компоненты. Запустив программу Delphi, появляется дизайнер форм, который реализует окно приложения.

С помощью компонента TPageControl добавляем на форму элемент содержащий закладки, а компонент TTabSheet реализует эти закладки как показано на рисунке 1.

 

Рис.1

Далее создаём компонент TMemo для ввода/вывода многострочного текста в нашем приложении. Для полноценной работы первой закладки «массивы» добавляем компоненты TLabel, TButton, TEdit. Интерфейс первой закладки готов – это показано на рисунке 2.

 

 


Рис.2

Для создания интерфейса закладки «строки» мы используем только три компонента: TLabel, TButton, TEdit. Этих компонентов достаточно для полноценной работы данной закладки. Полученный интерфейс показан на рисунке 3.

Рис.3

Для создания интерфейса закладки «матрицы»  нам необходим компонент TStringGrid, который используется для ввода/вывода табличной текстовой информации. В нашем приложении данный компонент служит для работы с матрицами.

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


Рис.4

После разработки интерфейса приложения я создаю необходимые обработчики  событий.

Далее представлен исходный текст программы:

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrls, Menus, StdCtrls, Grids;

 

type

   Arr = array [0..9] of integer; //объявляем массив из 10 чисел

   TMatrix=array [0..9,0..9] of integer;//объявляем матрицу размером 10х10

  TForm1 = class(TForm)

    Массивы: TPageControl;

    TabSheet1: TTabSheet;

    TabSheet2: TTabSheet;

    TabSheet3: TTabSheet;

    Окна: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    N6: TMenuItem;

    N7: TMenuItem;

    N8: TMenuItem;

 

 

 

    N9: TMenuItem;


    Label3: TLabel;

    Label4: TLabel;

    Button1: TButton;

    Button2: TButton;

    Memo1: TMemo;

    Memo2: TMemo;

    Edit1: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    Label5: TLabel;

    Edit2: TEdit;

    Label6: TLabel;

    Edit3: TEdit;

    Button3: TButton;

    Label7: TLabel;

    Edit4: TEdit;

    Label8: TLabel;

    Label9: TLabel;

    Label10: TLabel;

    Edit6: TEdit;

    Button4: TButton;

Button5: TButton;

    Button6: TButton;

    StringGrid1: TStringGrid;

    StringGrid2: TStringGrid;

    Edit5: TEdit;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure N3Click(Sender: TObject);

    procedure N4Click(Sender: TObject);

    procedure N5Click(Sender: TObject);

    procedure N6Click(Sender: TObject);

    procedure N7Click(Sender: TObject);

    procedure N8Click(Sender: TObject);

    procedure N9Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

 

  private

    { Private declarations }

 

  public

    { Public declarations }

 

 

 end;


 

var

  Form1: TForm1;

  A : Arr;

  M : TMatrix;

  S : TMatrix;

 

implementation

 

{$R *.dfm}

//процедура заполнения одномерного  масссива

procedure TForm1.Button1Click(Sender: TObject);//

var i,n:integer;

begin

  n:= StrToInt(Edit1.Text);//ввод колличества символов в массиве

    begin

  for i := 0 to n-1 do//цикл заполнения случайными числами

   A[i] := random(21)-10;//заполнение массива случайными числами от -10 до 10

    end;

    begin

        for i := 0 to n do//цикл заполнения массива

        Memo1.Lines.Add(IntToStr(A[i]));//заполнение компонента Memo1

    end;

end;

//процедура вычисления кратности  р

procedure TForm1.Button2Click(Sender: TObject);

var i,n,p: integer;

begin

 n:=StrToInt(Edit1.Text);

 p:=StrToInt(Edit2.Text);//ввод числа кратности

    begin

        for i := 0 to n do //цикл вычисления кратности

          if (A[i]mod p=0)  then//если остаток от деления =0 то

          Memo2.Lines.Add(IntToStr(A[i]));//записываем число массива в компонент Memo2

 

    end;

end;

 

//процедура перевода двоичного  числа в десятичное

procedure TForm1.Button3Click(Sender: TObject);

var

i,result:integer;

bin:string;

 

 

 

 


begin

bin:=Edit3.Text;//записываем двоичное число

result:=0;//обнуляем переменную result

for i:=1 to length(bin) do//цикл обработки каждого символа строки

begin

if (copy(Edit3.Text,i,1)<>IntToStr(1))//если символ не = «1»

and (copy(Edit3.Text,i,1)<>IntToStr(0))//и не =«0»,

then //то

begin

ShowMessage('Ошибка');// выдаётся сообщение об ошибке

Exit;//выход из программы

end;

if not (copy(Edit3.Text,i,1)<>IntToStr(1)) then//если символ = «1», то

result:=result+(1 shl(length(bin)-i));//  сдвигаем строковую величину на разряд влево и прибавляем к переменной result.полученный результат является десятичным числом

end;

Edit4.Text:=IntToStr(result);//полученный результат записываем в Edit4

end;

 

//процедура заполнения стекой компонент StringGrid1 и StringGrid2

procedure TForm1.Button4Click(Sender: TObject);

var r,c: integer;

begin

  r:= StrToInt(Edit5.Text);//ввод количества строк

  c:= StrToInt(Edit6.Text);//ввод количества столбцов

  StringGrid1.RowCount:=r;

  StringGrid1.ColCount:=c;

  StringGrid2.RowCount:=r;

  StringGrid2.ColCount:=c;

end;

 

//процедура заполнения матрицы  в компонент StringGrid1 случайными числами

procedure TForm1.Button5Click(Sender: TObject);

var r,c,i,j:integer;

begin

r:= StrToInt(Edit5.Text);

  c:= StrToInt(Edit6.Text);

begin

for i:=0 to r-1 do

for j:=0 to c-1 do

M[i,j]:=random(10);//заполнение матрицы случайными числами от 0 до 10

end;

begin

 

 

 

for i:=0 to r-1 do


for j:=0 to c-1 do

StringGrid1.Cells[j,i]:=IntToStr(M[i,j]);//запись полученной матрицы в компонент StringGrid1

end;

end;

 

//процедура сложения каждой  строки с предыдущей

procedure TForm1.Button6Click(Sender: TObject);

var r,c,i,j:integer;

begin

r:= StrToInt(Edit5.Text);

c:= StrToInt(Edit6.Text);

begin

for i:=0 to r-1 do

for j:=0 to c-1 do

 S[i,j]:=M[i,j]+M[i-1,j]//сложение строки матрицы с предыдущей строкой

end;

begin

for i:=0 to r-1 do

for j:=0 to c-1 do

StringGrid2.Cells[j,i]:=IntToStr(S[i,j]);//запись полученной матрицы в компонент StringGrid2

end;

end;

 

 

procedure TForm1.N3Click(Sender: TObject);

begin

TabSheet1.Show;//при нажатии кнопки «Массивы» в меню переходим на данную вкладку

end;

 

procedure TForm1.N4Click(Sender: TObject);

begin

TabSheet2.Show;

end;

 

procedure TForm1.N5Click(Sender: TObject);

begin

TabSheet3.Show;

end;

 

procedure TForm1.N6Click(Sender: TObject);

begin

Form1.Close;

end;

 

 

//процедура тестирования работоспособности  программы для массивов


procedure TForm1.N7Click(Sender: TObject);

var i,n,p:integer;

begin

  TabSheet1.Show;

  n:= 10;

  p:=2;

 begin

        for i := 0 to n-1 do

        A[i] := random(21)-10;

    end;

    begin

        for i := 0 to n do

        Memo1.Lines.Add(IntToStr(A[i]));

    end;

    begin

Edit1.Text:=IntToStr(n);

Edit2.Text:=IntToStr(p);

    begin

        for i := 0 to n do

          if (A[i]mod p=0)  then

          Memo2.Lines.Add(IntToStr(A[i]));

 

    end;

    end;

 

end;

//процедура тестирования работоспособности  программы для строк

procedure TForm1.N8Click(Sender: TObject);

  var i,result:integer;

bin:string;

begin

TabSheet2.Show;

bin:='001';

Edit3.Text:=bin;

result:=0;

for i:=1 to length(bin) do

begin

if (copy(bin,i,1)<>IntToStr(1))

and (copy(bin,i,1)<>IntToStr(0))

then

begin

ShowMessage('Ошибка');

Exit;

end;

if not (copy(bin,i,1)<>IntToStr(1)) then

result:=result+(1 shl(length(bin)-i));

 

 

end;


Edit4.Text:=IntToStr(result);

end;

//процедура тестирования работоспособности  программы для матриц

            procedure TForm1.N9Click(Sender: TObject);

   var r,c,i,j:integer;

          begin

TabSheet3.Show;

  r:= 5;

  c:= 5;

  Edit5.Text:=IntToStr(r);

  Edit6.Text:=IntToStr(c);

  StringGrid1.RowCount:=r;

  StringGrid1.ColCount:=c;

  StringGrid2.RowCount:=r;

  StringGrid2.ColCount:=c;

     begin

        for i:=0 to r-1 do

        for j:=0 to c-1 do

        M[i,j]:=random(10);

        end;

        begin

        for i:=0 to r-1 do

        for j:=0 to c-1 do

        StringGrid1.Cells[j,i]:=IntToStr(M[i,j]);

    end;

   

 begin

        for i:=0 to r-1 do

        for j:=0 to c-1 do

         S[i,j]:=M[i,j]+M[i-1,j]

        end;

        begin

        for i:=0 to r-1 do

        for j:=0 to c-1 do

        StringGrid2.Cells[j,i]:=IntToStr(S[i,j]);

      end;

end;

 

end.

Вывод: в ходе данной лабораторной работы я изучил алгоритмы обработки одномерных числовых массивов, символьных массивов (строк) и двухмерных числовых массивов (матриц), изучил организации подпрограмм и создание подпрограмм обработки массивов.


Информация о работе Массивы. Работа с числовыми и строковыми массивами. Двухмерные массивы (матрицы). Подпрограммы. Создание подпрограмм обработки массивов