Название: Информатика и программирование - Лабораторный практикум (М.Г. Зайцев)

Жанр: Информатика

Просмотров: 1177


Т е м а:  множества object pascal

 

Цель

 

Сформировать практические навыки: организации процессов обработки данных с помощью множеств Object Pascal, использования стандартных подпрограмм и операций, определенных на множествах; построение однооконных интерфейсов с помощью визуального компонента окно (класс TForm) и визуальных компонентов панели инструментов Standart: метка (класс TLabel), редактор (класс TEdit), кнопка (класс TButton), ниспадающего меню (TMainMenu), таблицы строк (TStringGrid).

 

Задание

 

1. В соответствии с вариантами задания и приведенной ниже спецификацией реализуйте приложение под Windows.

2. Разработайте тестовые задания и оттестируйте программу одним из методов тестирования.

 

Спецификация приложения

 

Приложение обеспечивает пользователя следующими возможностями:

1) выбор одной из следующих категорий действий:

 · операции отношения на множествах: =, <>, >=, <=;

 · операции на множествах: объединения - (+), вычитания -

              (-), пересечения - (*).

2) ввод исходных данных для выбранного действия;

3) вычисление и вывод результата.

 

Рекомендации к выполнению

 

1. Для организации пользовательского интерфейса используйте следующие элементы управления: «форма» (класс Tform), «кнопка» (класс TButton), «метка» (класс TLabel), «однострочный редактор» (класс TEdit), «ниспадающее меню» (класс TMainMenu). Ввод данных осуществляйте с помощью «таблицы строк» (класс TStringGrid) посредством двойного щелчка на клетке таблицы, содержащей интересующий вас элемент. Вывод результатов осуществляйте в элементы управления «статический текст» (класс TStaticText). Подписи к ним сделайте с помощью элементов «метка» (класс TLabel). Выбор операции реализуйте с помощью элемента управления «ниспадающее меню». Вычисление результата свяжите с нажатием на элементе управления «кнопка» левой клавиши мыши.

2. Установите удобный для пользователя порядок перемещения фокуса по компонентам с помощью клавиши Tab.

3. Чтобы на компонент нельзя было установить фокус ввода с помощью клавиши Tab, занесите в его свойство TabStop значение False.

4. Разработанные приложения сохраняйте в отдельной папке.

 

Варианты заданий

 

Реализуйте приложения для следующих типов множеств:

1. Прописных латинских букв.

2. Строчных латинских букв.

3. Прописных букв кириллицы.

4. Строчных букв кириллицы.

5. Шестнадцатеричных цифр

 

Пример

 

Пусть требуется обеспечить пользователю возможность выбора любой операции на множествах типа Arabic = set of 0..9 из определенных в языке, ввод значений операндов, вычисление и вывод результата. Для решения этой задачи можно построить приложение, состоящее из одной формы следующего вида:

 

 

 

Ей соответствует модуль, текст которого приведен ниже.

unit USetOpns;

 

interface

 

uses

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

  Dialogs, StdCtrls, Menus, Grids, ExtCtrls;

 

type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    N4: TMenuItem;

    Equel: TMenuItem;

    NonEquel: TMenuItem;

    Button1: TButton;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N5: TMenuItem;

    StringGrid1: TStringGrid;

    RadioGroup1: TRadioGroup;

    ASet: TRadioButton;

    BSet: TRadioButton;

    Button2: TButton;

    Label4: TLabel;

    GrOrEq: TMenuItem;

    SmOrEq: TMenuItem;

    Memo1: TMemo;

    StaticText1: TStaticText;

    StaticText2: TStaticText;

    StaticText3: TStaticText;

    in1: TMenuItem;

    procedure EquelClick(Sender: TObject);

    procedure NonEquelClick(Sender: TObject);

    procedure GrOrEqClick(Sender: TObject);

    procedure SmOrEqClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure AddClick(Sender: TObject);

    procedure StringGrid1DblClick(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure N2Click(Sender: TObject);

    procedure N3Click(Sender: TObject);

    procedure in1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

  TOperation = (Eq,Noneq,GorE,SorE,InSet,SubSet,MulSet,AddSet);

//тип применяемой операции

  Arabic = set of 0..9;

var

  Form1: TForm1;

  Operation:TOperation;//переменная для хранения выбранной операции

  a: Arabic = []; //Множество а – левый операнд

  b: Arabic = []; //Множество в – правый операнд

  c: Arabic = []; //Множество с – результат операции

const

  Message1 = '1. Выберите операцию с помощью меню "Операции".';

  Message2 = '2. Выберите множество, используя радиокнопки. ';

  Message3 = '3. Добавьте в множество необходимые элементы с помощью двойного клика на требуемом элементе.';

  Message4 = '4. Для выполнения операции кликните мышью на кнопку "Выполнить"';

  Message5 = '5. Для очистки А,В и результата кликните мышью на кнопку "Очистить"';

implementation

 

{$R *.dfm}

 

function SetToStr(s: Arabic):String;

//Преобразует  множество в строку

var i: Integer;

begin

  Result:= '';

  for i:= 0 to 9 do  if i in s then Result:= Result + ' ' + chr(i + Ord('0'));

end;

 

procedure SetVarSets;

//Установить множества в состояние пусто

begin

//Опустошить множества

  a:= [];

  b:= [];

  c:= [];

//Отобразить состояние множеств в соответствующих компонентах интерфейса

  Form1.StaticText1.Caption:= SetToStr(a);

  Form1.StaticText2.Caption:= SetToStr(b);

  Form1.StaticText3.Caption:= SetToStr(c);

end;

 

procedure SetEnvironment(Op: String);

//настраивает визуальные компоненты формы на выбранную операцию

begin

  with Form1 do begin

    Label1.Visible:= True;

    Label2.Visible:= True;

    Label3.Visible:= True;

    Label1.Caption:= 'А';

    Label2.Caption:= 'B';

    Label3.Caption:= 'А ' + Op + ' B';

    Label4.Visible:= True;

    StaticText1.Visible:= True;

    StaticText2.Visible:= True;

    StaticText3.Visible:= True;

    Button1.Visible:= True;

    Button2.Visible:= True;

    RadioGroup1.Visible := True;

    StringGrid1.Visible:= True;

    Aset.Visible:= True;

    Bset.Visible:= True;

  end;

  SetVarSets;

end;

 

procedure TForm1.EquelClick(Sender: TObject);

//Операция '='

begin

  SetEnvironment('=');//настроить компоненты

  Operation:= Eq;//выполнить операцию

  SetVarSets     //опустошить множества а, в, с

end;

 

procedure TForm1.NonEquelClick(Sender: TObject);

//Операция '<>'

begin

  SetEnvironment('<>');//настроить компоненты

  Operation:= NonEq;   //выполнить операцию

  SetVarSets           //опустошить множества а, в, с

end;

 

procedure TForm1.GrOrEqClick(Sender: TObject);

//Операция '>='

begin

  SetEnvironment('>=');//настроить компоненты

  Operation:= GorE;    //выполнить операцию

  SetVarSets           //опустошить множества а, в, с

end;

 

procedure TForm1.SmOrEqClick(Sender: TObject);

//Операция '<='

begin

  SetEnvironment('<=');//настроить компоненты

  Operation:= SorE;    //выполнить операцию

  SetVarSets           //опустошить множества а, в, с

end;

 

procedure TForm1.AddClick(Sender: TObject);

//Операция '+'

begin

  SetEnvironment('+');//настроить компоненты

  Operation:= AddSet;    //выполнить операцию

  SetVarSets          //опустошить множества а, в, с

end;

 

procedure TForm1.N2Click(Sender: TObject);

//Операция '-'

begin

  SetEnvironment('-');//настроить компоненты

  Operation:= SubSet;    //выполнить операцию

  SetVarSets             //опустошить множества а, в, с

end;

 

procedure TForm1.N3Click(Sender: TObject);

//Операция '*'

begin

  SetEnvironment('*');//настроить компоненты

  Operation:= MulSet;    //выполнить операцию

  SetVarSets             //опустошить множества а, в, с

end;

 

procedure TForm1.in1Click(Sender: TObject);

//Операция 'in'

begin

  SetEnvironment('in');//настроить компоненты

  Operation:= InSet;    //выполнить операцию

  SetVarSets;           //опустошить множества а, в, с

  BSet.Checked:= True;  //выбрать для ввода множество в

  StaticText1.Visible:= False;//скрыть содержимое множества а

  Label1.Visible:= False;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

//скрыть компоненты формы

var i: Integer;

begin

//Заполняем Memo1 строками инструкции пользователю

  Memo1.Lines.Add(Message1);

  Memo1.Lines.Add(Message2);

  Memo1.Lines.Add(Message3);

  Memo1.Lines.Add(Message4);

  Memo1.Lines.Add(Message5);

//Скрываем метки

  Label1.Visible:= False;

  Label2.Visible:= False;

  Label3.Visible:= False;

// Скрываем компоненты формы

  Label4.Visible:= False;

  StaticText1.Visible:= False;

  StaticText2.Visible:= False;

  StaticText3.Visible:= False;

  Button1.Visible:= False;

  Button2.Visible:= False;

  RadioGroup1.Visible := False;

  StringGrid1.Visible:= False;

  Aset.Visible:= False;

  Bset.Visible:= False;

//Заполняем StringGrid1 элементами множеств Arabic

  for i:= 0 to 9 do StringGrid1.Cells[i,0]:= Chr(i + Ord('0'));

end;

 

function OpRun(sL,Sr: Arabic;Operation:TOperation):String;

//выполняет выбранную операцию и формирует строку результата

var r: Boolean;

begin

  with Form1.StringGrid1 do

  case Operation of

    Eq    : r:= a =  b;

    NonEq : r:= a <> b;

    GorE  : r:= a >= b;

    SorE  : r:= a <= b;

    InSet : r:= StrToInt(Cells[Col,Row]) in b;

    SubSet: c:= a - b;

    MulSet: c:= a * b;

    AddSet: c:= a + b;

  end;

  if not(Operation  in [SubSet,MulSet,AddSet])

    then if r then Result:= 'True' else Result:= 'False'//операции отношения

    else Result:= SetToStr(c);          //другие операции

end;

 

procedure TForm1.Button1Click(Sender: TObject);

//Выполнить операцию

begin

  StaticText3.Caption:= OpRun(a,b,Operation);//выполнить операцию и отобразить результаты

end;

 

procedure TForm1.StringGrid1DblClick(Sender: TObject);

//Копирование элемента из StringGrid1 в выбранное множество

//и отображение множества

begin

  with  StringGrid1 do begin

    if aset.Checked then begin include(a,StrToInt(Cells[Col,Row]));

      StaticText1.Caption:= SetToStr(a) end;

    if bset.Checked then begin include(b,StrToInt(Cells[Col,Row]));

      StaticText2.Caption:= SetToStr(b) end;

  end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

//Очистить содержимое множеств и их отображение на экране

begin

  SetVarSets

end;

 

end.

 

Содержание отчета

 

1. Задание.

2. Текст программы на Object Pascal.

3. Тестовые наборы данных для тестирования приложения.

 

Контрольные вопросы

 

1. Дайте характеристику множественным типам.

2. Синтаксические правила описания множественного типа.

3. Какие типы данных могут быть выбраны в качестве базового типа для описания множественного типа?

4. Назначение и особенности применения операции =

5. Назначение и особенности применения операции <>

6. Назначение и особенности применения операции >=

7. Назначение и особенности применения операции <=

8. Назначение и особенности применения операции in

9. Назначение и особенности применения операции +

 10. Назначение и особенности применения операции -

 11. Назначение и особенности применения операции *

 12. Назначение и особенности применения стандартной процедуры Include модуля System.

 13. Назначение и особенности применения стандартной процедуры Exclude модуля System.