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

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

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


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

 

Варианты заданий приведены в табл .1. Номер вашего варианта задания определяется вашим порядковым номером в списке студентов группового журнала. Вы можете выполнить по вашему выбору вариант (29* или 30*) повышенной сложности вместо своего варианта.

 

Т а б л и ц а  1

 

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

 

Номер

варианта

«Входной

формат»

«Выходной

формат»

Основание системы

 счисления р

1

10

р

2

2

10

р

3

3

10

р

4

4

10

р

5

5

10

р

6

6

10

р

7

7

10

р

8

8

10

р

9

9

10

р

11

10

10

р

12

 

О к о н ч а н и е  т а б л.  1

 

Номер

варианта

«Входной

формат»

«Выходной

формат»

Основание системы

 счисления р

11

10

р

13

12

10

р

14

13

10

р

15

14

10

р

16

15

р

10

2

16

р

10

3

17

р

10

4

18

р

10

5

19

р

10

6

20

р

10

7

21

р

10

8

22

р

10

9

23

р

10

11

24

р

10

12

25

р

10

13

26

р

10

14

27

р

10

15

28

р

10

16

29*

10

p

2..16

30*

p

10

2..16

 

Примечание. Здесь р означает, что число представлено в р-ичной системе счисления, а 10 – что число представлено в десятичной системе счисления. Варианты 29* и 30* – варианты повышенной сложности. В них пользователь может выбрать основание системы счисления из заданного диапазона от 2 до 16 во время работы приложения.

 

Для вариантов с 1 по 14 характеристики форматов следующие:

 «входной» формат – десятичное действительное число,

 «выходной»  формат – р-ичное  действительное  число,

                где р – основание системы счисления, определяемое ва-

                риантом задания.

Входной формат состоит из четырех полей и имеет следующий вид:

<знак><целое><разделитель><дробь>

Суммарное количество цифр n (n = i + f, здесь i – количество цифр в целой части, f – количество цифр в дробной части) в полях <целое> и <дробь> должно лежать в диапазоне 1 <= n <= N, где N = 12.

Поле <знак> является необязательным, оно может содержать символ «–» или быть пустым (знак плюс не вводится).

Поле <целое> является обязательным, оно должно содержать десятичное целое без знака, количество десятичных цифр в котором должно быть 1 =< i <= N (незначащие нули слева не вводятся, исключая случай, когда ноль в поле единственный).

Поле <разделитель> является необязательным, оно содержит символ «,», отделяющий целую часть числа от его дробной части.

Поле <дробь> является необязательным, оно может содержать десятичные цифры дробной части числа. Количество десятичных цифр в нем должно принадлежать диапазону 0 =< f < = N - 1.

Пример 1. Правильное представление десятичных чисел во «входном» формате для вариантов с 1 по 14.

0

0,

-2

2

-278945612325

278945612325

-0,01234567891

0,01234567891

123456,012345

12345678910,1

5,34

-0,2

Пример 2. Неправильное представление десятичных чисел во «входном» формате для вариантов с 1 по 14.

-0  – знак перед числом 0

,     – отсутствует <целое> и <дробь>;

-,   – отсутствует <целое> и <дробь>;

-,123 – отсутствует поле <целое>;

1471232123456 недопустимая длина (13 разрядов);

1471232,1234567 недопустимая длина (14 разрядов);

-0,256123456789012 недопустимая длина (16 разрядов).

Для вариантов с 15 по 28 характеристики форматов следующие:

 «входной» формат – р-ичное действительное число, где

                р – основание  системы  счисления,  определяемое вари-

                антом,

 «выходной» формат – десятичное действительное число.

Входной формат состоит из четырех полей и имеет следующий вид:

<знак><целое><разделитель><дробь>

Суммарное количество цифр n (n = i + f, здесь i – количество цифр в целой части, f - количество цифр в дробной части) в полях <целое> и <дробь> должно лежать в диапазоне 1 <= n <= N,

где N = 12.

Поле <знак> является необязательным, оно может содержать символ «–» или быть пустым (знак плюс не вводится).

Поле <целое> является обязательным, оно должно содержать р-ичное целое без знака, количество р-ичных цифр в котором должно быть 1 =< i <= N (незначащие нули слева не вводятся, исключая случай, когда ноль в поле единственный).

Поле <разделитель> является необязательным, оно содержит символ «,», отделяющий целую часть числа от его дробной части.

Поле <дробь> является необязательным, оно может содержать р-ичные цифры дробной части числа. Количество р-ичных цифр в нем должно принадлежать диапазону 0 =< f <= N – 1.

Пример 3. Правильное представление троичных чисел во «входном» формате для вариантов с 15 по 28.

0,

0

-2

2

-210020212021

212021012122

-0,01221221211

0,012345678912

120012,012212

12001212201,1

1,2

-102,2101

Пример 4. Неправильное представление троичных чисел во «входном» формате для вариантов с 15 по 28.

-0                             знак перед числом 0

,                               отсутствует <целое> и <дробь>;

-,                              отсутствует <целое> и <дробь>;

-,121        отсутствует поле <целое>;

1201212121200           недопустимая длина (13 разрядов);

1221202,1201212        недопустимая длина (14 разрядов);

-0,200121202211012  недопустимая длина (15 разрядов).

Порядок выполнения

 

Спроектируйте программу и опишите проект с помощью схемы иерархии логических модулей (см. рис. 5 и 6).

Поведение каждого логического модуля опишите с помощью HIPO-диаграммы.

Для каждого модуля разработайте блок-схему в соответствии с технологией структурного программирования.

Реализуйте проект на языке Object Pascal в следующем порядке:

 реализуйте модули преобразования формы представле-

                ния числа;

 постройте интерфейс приложения в режиме визуально-

                го программирования;

 реализуйте модули ввода и редактирования;

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

                ла к интерфейсу.

Физические модули реализуйте с помощью подпрограмм Object Pascal. Выберите метод тестирования, разработайте тестовые наборы данных и оттестируйте каждую подпрограмму.

Опишите реализацию программы с помощью схемы иерархии физических модулей.

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

 

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

 

Вариант задания.

Схема иерархии логических модулей.

HIPO-диаграмма для каждого модуля.

Блок-схема для каждого модуля.

Схема иерархии физических модулей.

Таблицу соответствия логических и физических модулей.

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

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

Литература.

 

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

 

Для вариантов заданий с 1 по 14 схема иерархии логических модулей может выглядеть так, как показано на рис. 5. Для вариантов заданий с 15 по 28 – как показано на рис. 6.

 

 

 

Рис. 5. Схема иерархии логических модулей приложения для вариантов с 1 по 14

 

 

 

 

Рис. 6. Схема иерархии логических модулей приложения для вариантов с 15 по 28

 

 

 
 

2. Реализация приложения для вариантов задания с 1 по 14 может выглядеть так, как показано в примере 5 и примере 6. Для вариантов заданий с 15 по 28 – как в примере 7 и примере 8. Соответствие между логическими и физическими модулями приведено в табл. 2 и табл. 3.

 

Т а б л и ц а  2

 

Соответствие между логическими и физическими модулями

для вариантов с 1 по 14

 

Номер

Логический модуль

Физический модуль

1

Ввод/Вывод

function Edit(i: Integer;s: String): String;

1.1

Добавить знак

function Signe(s: String): String;

1.2

Добавить запятую

function Comma(s: String): String;

1.3

Добавить десятичную цифру

function Digits(p: integer;s: String): String;

1.3.1

Разрядов в числе

function LenNum(s: String):

Cardinal;

1.3.2

Добавить ‘0’

function AddZero(s: String): String;

1.4

Удалить число

function Clear: String;

1.5

Удалить символ справа

function Backspace(s: String): String;

2

Преобразование представления числа

function DoTransfer(S: String): String;

2.1

Перевод целого в р-ичную строку

function Int10ToP(r: Comp; b:Cardinal):String;

2.1.1

Перевод целого в р-ичный символ

function IntToPChar(d: Integer):String;

2.2

Перевод дроби в р-ичную строку

function Frac10ToP(f: Extended; b:Cardinal):String;

 

Т а б л и ц а  3

 

Соответствие между логическими и физическими модулями

для вариантов с  15 по 28

 

Номер

Логический модуль

Физический модуль

1

Ввод/Вывод

function Edit(i: Integer;s: String): String;

1.1

Добавить знак

function Signe(s: String): String;

1.2

Добавить запятую

function Comma(s: String): String;

1.3

Добавить р-ичную цифру

function Digits(p: integer;s: String): String;

1.3.1

Разрядов в числе

function LenNum(s: String): Cardinal;

1.3.2

Добавить ‘0’

function AddZero(s: String): String;

1.4

Удалить число

function Clear: String;

1.5

Удалить символ справа

function Backspace(s: String): String;

О к о н ч а н и е  т а б л.  3

 

Номер

Логический модуль

Физический модуль

2

Преобразование представления числа

function DoTransfer(S: String): String;

2.1

Перевод р-ичного целого

в число

function StrPToInt(r: String; b:Cardinal):Comp;

2.1.1

р-ичный символ в число

function PCharToInt(d: Char):Cardinal;

2.1.2

Вес единицы разряда

р-ичного целого

function StrPToInt(r: String; b:Cardinal):Comp;

2.2

Перевод р-ичной дроби

в число

function StrPToFrac(f: String; b:Cardinal): Real;

2.2.1

Вес единицы разряда

 р-ичной дроби

function StrPToFrac(f: String; b:Cardinal): Real;

 

3. Форма приложения должна быть с неизменяемыми размерами и с кнопками управления размерами. Для этого в свойство BorderStyle формы установите значение bsSingle.

4. Для отображения вводимого числа и вывода результата используйте компонент «статический текст» (класс TstaticText на вкладке панели компонентов Additional).

5. Для обработки события OnClick (нажатие кнопки) для кнопок с изображением цифр, знаков «-», «,» разработайте одну событийную процедуру ButtonClick, которую подключите к событиям OnClick каждой кнопки с помощью Инспектора объектов. Эту событийную процедуру вам необходимо описать самостоятельно, как показано в Пример 5 и Примере 7. Заголовок этой событийной процедуры может иметь вид, как показано в примерах ниже. Из примеров модулей форм исключен код подпрограмм, кроме событийной процедуры ButtonClick, оставлены только заголовки подпрограмм.

6. Для того чтобы можно было различить нажатую кнопку, кнопки необходимо пронумеровать и номер кнопки поместить в свойство Tag c помощью инспектора объектов. Номера кнопок, изображающих цифры, сделайте равными изображенным на них цифрам.

7. Для обеспечения возможности выхода из приложения и предоставления справки вставьте в форму главное меню (класс TmainMemu вкладки Standart панели компонентов). В меню вставьте два ниспадающих меню: Файл и Помощь. В меню Файл вставьте пункт Выход. В меню Помощь вставьте пункт Справка. Справочную информацию по работе с приложением поместите в компонент «многострочный редактор» (класс Tmemo вкладки Standart панели компонентов).

8. Добавьте подсказки к кнопкам управления (класс Tbutton). Для этого с помощью инспектора объектов поместите необходимое сообщение в свойство Hint компонента. В свойство ShowHint компонента занесите значение True.

9. Для завершения работы приложения используйте свойство Terminate объекта Application (см. пример 7).

10. Для отображения и скрытия окна справки используйте свойства Show и Hide объекта формы (см. пример 6, пример 7, пример 8).

11. Для работы с буфером обмена (варианты 29*, 30*) используйте свойство AsText глобального объекта ClipBoard (класс TClipBoard модуль Clipbrd.pas).

Например:

ClipBoard.AsText:= StaticText1.Caption

Копировать в буфер обмена из компонента StaticText1.

StaticText1.Caption := ClipBoard.AsText;

Копировать из буфера обмена в компонент StaticText1.

 

Пример 5. Исходный текст модуля главной формы  для перевода числа из десятичного представления в шестнадцатиричное (для вариантов с 1 по 14).

 

unit Unit1;

//Модуль главной формы для перевода числа из 10 системы счисления в р-ичную

 

interface

 

uses

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

  Mask, StdCtrls, ComCtrls, Menus, unit2, Clipbrd;

 

type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    Button8: TButton;

    Button9: TButton;

    Button10: TButton;

    Button11: TButton;

    Button12: TButton;

    Button13: TButton;

    Button14: TButton;

    Button15: TButton;

    Label2: TLabel;

    Label1: TLabel;

    StaticText1: TStaticText;//Десятичное представление числа

    StaticText2: TStaticText;//р-ичное представление числа

    MainMenu1: TMainMenu;

    N1: TMenuItem;//меню Файл

    N2: TMenuItem;//пункт Выход меню Файл

    N3: TMenuItem;//меню Помощь

    N4: TMenuItem;//пункт Справка меню Помощь

    procedure ButtonClick(Sender: TObject);

    procedure N2Click(Sender: TObject);

    procedure N4Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

const

  accurancy = 20;//точность представления исходного числа

  NumLen    = 12;//суммарная длина целой и дробной частей исходного числа

var

  Done: Boolean = False;//Имеет значение False при вводе и редактировании True -

                        //после нажатия клавиши "="

  b: Cardinal   = 16;//основание системы счисления

{$R *.DFM}

function Edit(i: Integer;s: String): String;

//Модуль Ввод/Вывод.

//Управляет вводом и редактированием

//числа s во «входном» формате. Управляющее значение i.

begin

  case i of

    0..9: result:= Digits(i,s);

    10  : result:= Signe(s);

    11  : result:= Comma(s);

    12  : result:= Backspace(s);

    13  : result:= Clear;

  end;

end;

 

function Signe(s: String): String;

//Модуль Добавить знак.

//Изменяет знак вводимого числа s на противоположный.

 

function Comma(s: String): String;

//Модуль Добавить запятую.

//Добавляет запятую к вводимому числу s.

 

function Digits(p: integer;s: String): String;

//Модуль Добавить десятичную цифру.

//Добавляет десятичную цифру к вводимому числу.

 

function LenNum(s: String): Cardinal;

//Модуль Разрядов в числе.

//Вычисляет и возвращает суммарную длину полей <целое> и //<дробь>.

 

function AddZero(s: String): String;

//Модуль Добавить ‘0’.

//Добавляет '0' к вводимому числу s и возвращает результат.

 

function Clear: String;

//Модуль Удалить число.

//Очищает поле ввода, в котором хранится вводимое число.

 

function Backspace(s: String): String;

//Модуль Удалить символ справа.

//Удаляет символ справа во вводимом числе s.

 

function