Разработка программного приложения демонстрации операций сдвигов чисел

 

Содержание


Введение

1. Техническое задание на проектирование

.1 Основание и назначение

.2 Назначение

.3 Требование к программе

1.3.1 Общие требования

1.3.2. Требования к функциональным характеристикам

1.3.3 Требования к надежности

1.3.4 Требования к параметрам технических средств

.3.5 Требования к программной совместимости

.3.6 Требование к технической документации

. Разработка программного приложения

2.1 Алгоритм решения задачи

.2 Пользовательский интерфейс

.3 Ввод и вывод данных

2.4 Операции сдвигов

.5 Завершение работы и закрытие приложения

. Реализация проекта

.1 Интерфейсная часть

.2 Кодовая часть

. Компиляция, компоновка и тестирование программы

.1 Компиляция

.2 Компоновка

4.3 Тестирование

. Руководство пользователя

Список литературы

Приложение

Введение


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

Операционное устройство в ЭВМ - это арифметическо-логическое устройство (АЛУ), в котором производятся все основные операции по преобразованию данных в ЭВМ.

Набор операций АЛУ является одной из основных его характеристик, которые должны быть функционально полными, т.е. обеспечивать реализацию любого вычислительного алгоритма. И хотя функциональную полноту можно обеспечить очень узким набором операций, число различных операций, выполняемых в АЛУ, обычно составляет от нескольких десятков до нескольких сотен. Это обеспечивает сокращение длины программ и повышение быстродействия ЭВМ в целом.

Как правило, в любом АЛУ предусмотрена возможность выполнения операций сдвигов.

Операции сдвига могут оказаться весьма полезными для декодирования входной информации, получаемой от внешних устройств (например, цифроаналоговых преобразователей), и обработки информации о состоянии устройств. Поразрядные операторы сдвига можно также использовать для выполнения ускоренных операций умножения и деления целых чисел. С помощью сдвига влево можно эффективно умножать на два, сдвиг вправо позволяет не менее эффективно делить на два.


1. Техническое задания на проектирование


.1 Основание и назначение


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


1.2 Назначение


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


1.3 Требование к программе


1.3.1 Общие требования

К общим требованием в эксплуатации данного приложения можно отнести:

-квалификация персонала может находиться на уровне пользователя ПК;

-знание назначения данного программного обеспечения;

-знание основ синтаксиса языка С++.


.3.2 Требования к функциональным характеристикам

Приложение должно обеспечивать выполнения следующих функций:

ввод исходных данных в полях ввода;

выполнение операций «Сдвиг влево» и «Сдвиг вправо»;

вывод результата в поле вывода;

Исходные данные - целые числа.

1.3.3 Требования к надежности

Предусмотреть:

корректность ввода исходных данных;

прекращение выполнения задачи и выход из приложения.


1.3.4 Требования к параметрам технических средств

1. Иметь простой и понятный интерфейс.

. Программа должна работать на IBM совместимых персональных компьютерах. Минимальная конфигурация:

тип процессора…………………….Pentium и выше;

объем ОЗУ ………………………..32 Мб и более


1.3.5 Требования к программной совместимости

Система должна работать под управлением семейства операционных систем Win 32 (Windows 95, Windows 98, Windows 2000, Windows NT и т.п.).


.3.6 Требование к технической документации

1. Разрабатываемые программные модули должны содержать все необходимые комментарии.

. В состав сопровождающей документации должны входить:

  1. пояснительная записка, содержащая описание разработки;
  2. руководство пользователя.

2. Разработка программного приложения


2.1 Алгоритм выполняемых операций


Алгоритм выполняемых операций приведен в приложении 1.

В алгоритме используется пять блоков подпрограмм:

«вход в приложение» (открытие интерфейса программы);

«ввод исходных данных» (ввод только целых чисел);

«сдвиг влево», «сдвиг вправо» (осуществляется проверка введенных

пользователем исходных данных и если по каким то причинам исходные данные не введены выводится сообщение: «Числа не введены», а если введены производится операции сдвигов и вывод результата);

«выход» (прекращение работы и выход из приложения).


2.2 Пользовательский интерфейс


От того, насколько удобен и практичен интерфейс зависит во многом успех программы среди огромной массы уже созданных. Не редко, программы, которые имеют меньше функциональных возможностей, но более приятный и интуитивный интерфейс становятся лидерами среди своих конкурентов. За примером далеко ходит не надо. Всем известная Windows получила такое широкое распространение и монополию, всего лишь тем, что её интерфейс понятен даже ребёнку, ведь до её создания понятие пользователь не существовало, было лишь понятие программист, который должен был днём и ночью помнить кучу команд для выполнения простейших операций.

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

{->BorderStyle = bsToolWindow; // создание окна с ограниченными размерами

}


2.3 Ввод и вывод данных


Исходные данные и результат вычислений будут отображаться в области редактирования компонента Edit, доступ к которой обеспечивается свойством Text редактора. Это поле представляет собой стандартную строку на языке С++ с классовым типом AnsiString. В С++ Builder тип строк AnsiString реализован как класс, представляющий строки с нулевым символом в конце и память для AnsiString выделяется только по мере необходимости.

Все переменные программы хранятся во внутреннем формате, поэтому использование компонента Edit при вводе данных потребует преобразования строки AnsiString в число, при выводе - преобразования числа в строку AnsiString. Учитывая, что для выполнения операций сдвигов используются только целые числа, можно использовать следующие функции преобразования:

StrToInt(Edit->Text) - преобразует строку в целое число;

IntToStr (result) - преобразует целое число в строку символов.

Для корректности ввода (только целые числа) в свойстве OnKeyPress компонента Edit предусмотрено запрет на ввод алфавитных символов, а также таких символов как "*", "&" и т.д.:


{(IsCharAlpha(Key) || Key == '!' || Key == '"' || Key == ';' || Key == '%' || Key == ':' || Key == '?' || Key == '*' || Key == '(' || Key == ')' || Key == '=' || Key == '+' || Key == '_' || Key == '@' || Key == '#' || Key == '$' || Key == '^' || Key == '&')

Key = 0;

}


Для проверки введены ли числа пользователем использованы операторы сравнения введенных цифр со строковыми символами = = и логического ИЛИ || - результат операции которого имеет значение "истина", если один или оба операнда истинны, и "ложь" в противном случае.


Edit1->Text = =" " || Edit2->Text = =" "


Для проверки условия использована конструкция:

(условие)

{

ShowMessade (" Числа не введены ") ; выводится сообщение

}

{

a << b ; выполняется операция сдвига

}


.4 Операции сдвигов

демонстрационный показ сдвиг компиляция

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

Также различают сдвиги влево (в направление от младшего бита к старшему) и вправо (в направление от старшего бита к младшему). Операторы сдвига, >> и <<, сдвигают все биты в значении переменной вправо или влево. Общий формат использования оператора сдвига вправо выглядит так.

переменная >> число_битов

А оператор сдвига влево используется так.

переменная << число_битов

Здесь элемент число_битов указывает, на сколько позиций должно быть сдвинуто значение элемента переменная. При каждом сдвиге влево все биты, составляющие значение, сдвигаются влево на одну позицию, а в младший разряд записывается нуль. При каждом сдвиге вправо все биты сдвигаются, соответственно, вправо. При применении операции сдвига происходит потеря старших или младших разрядов (Рисунок 1). Применение операций >> и << по очереди к одной и той же переменной может изменить значение этой переменной из-за потери разрядов. Если сдвигу вправо подвергается значение без знака, в старший разряд записывается нуль. Сдвиг целого числа на n разрядов вправо эквивалентен целочисленному делению его на 2n. Сдвиг целого на n разрядов влево эквивалентен умножению его на 2n. Если же сдвигу вправо подвергается значение со знаком, значение знакового разряда сохраняется. Как мы знаем, отрицательные целые числа представляются установкой старшего разряда числа равным единице. Таким образом, если сдвигаемое значение отрицательно, при каждом сдвиге вправо в старший разряд записывается единица, а если положительно - нуль.


а) б)

Рисунок 1: а) Сдвиг влево; б) Сдвиг вправо

2.5 Завершение работы и закрытие приложения


Для закрытия приложения использован оператор:

{( ); // завершение работы приложения

}


3. Реализация проекта


Программу реализуем в программной среде Borland C++ Builder, в которой есть большой выбор визуальных компонентов для создания графического интерфейса приложений Windows, на языке программирования С++ с набором стандартных процедур ввода-вывода. Для этого:

. Запускаем программу Borland C++ Builder 6.0.

. Создаем новый проект с помощью команд File->New -> Application и сразу же сохраняем его с помощью команд File->Save Project As, создав для этого отдельную папку с названием «Битовые сдвиги». Программный модуль сохраним с именем b_sdvig.cpp (Рисунок 2), а сам проект - с именем BitSdvig.bpr. В среде разработки Borland C++ Builder файл заголовков с описаниями функций и переменных (интерфейсная часть) и файл с текстами программ (кодовая часть) принято называть модулями. Интерфейсная часть хранится в файле с расширением «h», а кодовая - в файле с расширением «срр» (сокращение от C++). Таких модулей в программе может быть несколько в зависимости от числа форм (окон) в программе и ее сложности.


Рисунок 2. Программный модуль


3.1 Интерфейсная часть


Приступим к созданию интерфейсной части программы при помощи окна формы Form1, представляющая собой проект Windows-окна программы. Форма является одним из важнейших элементов приложения C++ Builder. Процесс редактирования формы происходит при добавлении к форме компонентов, изменении их свойств, создании обработчиков событий. При добавлении компонента к форме заголовочный файл и файл формы модифицируются. При редактировании свойств компонента в Инспекторе объектов эти изменения сохраняются в файле формы. Каждый компонент C++ Builder имеет три характеристики: свойства, события и методы. Инспектор объектов автоматически показывает свойства и события, которые могут быть использованы с компонентом. Свойства являются атрибутами компонента, определяющими его внешний вид и поведение.

Для ввода/вывода данных использован визуальный компонент - однострочный редактор Edit. Очевидно, что пользователь должен иметь подсказку, какое из окон однострочных редакторов соответствует конкретному входному и выходному значению. Для отображения поясняющего статического текста использован компонент Label. Программа должна быть функциональной и принимать от пользователя, по крайней мере, две команды: - произвести вычисления;

прекратить выполнения программы.

Для того чтобы пользователь мог задать эти команды воспользуемся компонентами-кнопками Button (событие OnClick).

Все перечисленные компоненты расположим на одной форме и в Инспекторе объектов изменим размеры, шрифты и надписи внесенных компонентов и формы Form1 (Рисунок 3).

Свойства компонентов и формы

? Форма Form1 (окно программы): Caption (заголовок программы) - «Битовые сдвиги»;

? Компонент Label1 (статический текст): Caption (заголовок метки) - «Ввод числа»;

? Компонент Label2: Caption- «Ввод числа битов»;

? Компонент Label3: Caption - «Вывод результата»;

? Компонент Edit1 (однострочный редактор): Text (поле ввода) - " ";

? Компонент Edit2: Text (поле ввода) - " ";

? Компонент Edit3: Text (поле вывода) - " ";

? Компонент Button1 (кнопка): Caption (текст на кнопке) - «Сдвиг влево»;

? Компонент Button2: Caption - «Сдвиг вправо»;

? Компонент Button3 : Caption - «Выход»;


а) б)

Рисунок 3. Окно приложения: а) до редактирования; б) после редактирования


.2 Кодовая часть


После установки свойств следующим шагом будет подготовка текстов для обработчиков событий:

FormCreate для создания окна приложения с ограниченными размерами в форме Form1;

OnKeyPress для ввода только целых чисел в однострочном редакторе Edit;

OnClick под кнопки Button1, Button2 и Button3 предназначенные обеспечить функциональность приложения.

Выделяется соответствующий компонент, в окне Object Inspector открывается страница Events. В свободном поле строки FormCreate, OnKeyPress и onClick производится двойной щелчок левой кнопкой мыши. После этого активизируется окно Code Editor. В него вставляем заготовку кода программы для соответствующей процедуры.

. Текст программы для создания окна приложения с ограниченными размерами в форме Form1:


//---------------------------------------------------------------------------__fastcall TForm1::FormCreate(TObject *Sender)

{->BorderStyle = bsToolWindow;

}


. Текст программы для ввода только целых чисел в Edit 1:


//---------------------------------------------------------------------------__fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{(IsCharAlpha(Key) || Key == '!' || Key == '"' || Key == ';' || Key == '%' ||== ':' || Key == '?' || Key == '*' || Key == '(' || Key == ')' ||== '=' || Key == '+' || Key == '_' || Key == '@' || Key == '#' ||== '$' || Key == '^' || Key == '&')

Key = 0;

}

3. Текст программы для ввода только целых чисел в Edit 2:


//---------------------------------------------------------------------------__fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)

{(IsCharAlpha(Key) || Key == '!' || Key == '"' || Key == ';' || Key == '%' ||== ':' || Key == '?' || Key == '*' || Key == '(' || Key == ')' ||== '=' || Key == '+' || Key == '_' || Key == '@' || Key == '#' ||== '$' || Key == '^' || Key == '&')

Key = 0;

}


Алгоритм решения задачи (событие «Сдвиг влево» или «Сдвиг вправо») сводится к следующим шагам:

В окнах однострочных редакторов проводится проверка введенных исходных данных.

Из окон однострочных редакторов (свойство Text) читаются исходные данные. При чтении необходимо преобразование информации из типа AnsiString в тип int.

Производится операции сдвига.

После операции сдвига производится запись результата в поле Text соответствующего редактора с предварительным преобразованием в тип AnsiString из типа int.

. Текст программы для кнопки Button1(«Сдвиг влево»)


//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{ (Edit1->Text = =" " || Edit2->Text = =" ") // проверяем введены ли числа

{("Числа не введены!"); // если нет выводим сообщение

}// если введены то

{a; // переменная для числа ab; // переменная для числа bresult; // переменная для результата= StrToInt (Edit1->Text); // берем из Edit1 строку и переводим ее в число= StrToInt (Edit2->Text); // берем из Edit2 строку и переводим ее в число= a << b; // сдвигаем число а на b-битов влево и помещаем в переменную для результата->Text = IntToStr (result); // выводим значение переменной

}

}


. Текст программы для кнопки Button2(«Сдвиг вправо»)


//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{ (Edit1->Text = =" " || Edit2->Text = =" ") // проверяем введены ли числа

{("Числа не введены!"); // если нет выводим сообщение

}// если введены то

{a; // переменная для числа ab; // переменная для числа bresult; // переменная для результата= StrToInt (Edit1->Text); // берем из Edit1 строку и переводим

ее в число= StrToInt (Edit2->Text); // берем из Edit2 строку и переводим ее в число= a >> b; // сдвигаем число а на b-битов влево и помещаем в переменную для результата->Text = IntToStr (result); // выводим значение переменной

}

}


Для выхода из приложения предназначена кнопка «Выход» (Button3).

. Текст программы для кнопки Button3(«Выход»)


//---------------------------------------------------------------------------__fastcall TForm1::Button5Click(TObject *Sender)

{(); // закрываем приложение

}


4. Компиляция, компоновка и тестирование программы


После разработки любого приложения необходимо выполнить его компиляцию, компоновку и тестирование. Эти операции выполняются автоматически каждый раз при выполнении команды Run из главного меню среды разработки Borland C++ Builder 6. Однако данные процедуры можно выполнять по отдельности с целью сокращения времени на отладку всего проекта в целом.

На этапе компиляции происходит автоматический поиск синтаксических ошибок, неправильного объявления или использования переменных и т. п. При обнаружении подобных ошибок в инспекторе кодов будет выведено соответствующее сообщение об ошибке или предупреждение. Предупреждение в отличие от ошибки не блокирует выполнение программы, но не гарантирует корректность ее работы. Если ошибок в программе нет, компилятор создает объектный (машинный) код программы в модулях (файлах) с расширением obj.

При компоновке программы также выявляются некоторые виды ошибок, связанные с отсутствием объявления переменных, функций, библиотек и т. п., и выполняется объединение всех объектных модулей и библиотек при необходимости в один исполняемый файл с расширением ехе. Вместо исполняемого файла может создаваться библиотечный файл с расширением lib или dll при соответствующих установках среды разработки.


4.1 Компиляция


Скомпилируем разработанное приложение выполнив команду Compile из группы Project главного меню или нажатием комбинацию клавиш для компиляции программы Alt+F9. Откроется окно, приведенное на рисунке 4 . В верхней строке этого окна отображается путь размещения и имя проекта программы. В следующей строке вначале отображается процесс компиляции, сменяющийся записью Done, говорящей о завершении данной операции без обнаруженных ошибок. Ниже отображается номер текущей строки программы Current line и общее количество строк программы Total lines. В нижней строке отображается обнаруженное на данный момент число замечаний Hints, предупреждений Warnings и ошибок Errors.


Рисунок 4. Результат компиляции


4.2 Компоновка


Теперь выполним компоновку проекта с помощью команды Make из группы Project главного меню или нажав комбинацию клавиш для компоновки программы <Ctrl>+<F9>. В результате мы должны получить безошибочную компоновку приложения (Рисунок 5).


Рисунок 5. Результат компоновки


Теперь приложение можно сохранить и запустить на выполнение с помощью команды Run или воспользоваться горячей кнопкой запуска программы <F9>. На экране появится окно нашей программы (Рисунок 6).


Рисунок 6. Окно программы


.3 Тестирование


Теперь приступим к тестированию:

. Тест на ввод алфавитных символов и др. - не вводятся.

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


Рисунок 7. Вывод сообщения о не введенных числах


. Тест на решение задач (Рисунок 8).

Пример: двоичное представление числа а = 9: 00001001, тогда

а = 9 << 3 01001000 - 72

а = 9 >> 3 00000001 - 1

а = 9 >> 5 00000000 - 0


Рисунок 8. Результаты решения примера


5. Руководство пользователя


1. Откройте приложение;

. Введите число в поле «Ввод числа»;

. Введите число битов в поле «Ввод числа битов» на какое нужно сдвинуть число в поле «Ввод числа»;

. Нажмите кнопку «Сдвиг влево» или «Сдвиг вправо»;

. В поле «Вывод результата» получаем результаты сдвигов;

. Для прекращения работы и закрытия приложения нажмите кнопку «Выход».


Список литературы


1. В. С. Романчик, А. Е. Люлькин - Программирование в C++ BUILDER: учебное пособие для студ. механико-матем. фак. - Мн.: БГУ, 2007. -126 с.;

. Т. А. Павловская - C/C++. Программирование на языке высокого уровня - СПб.: Питер, 2003. - 461 с.;

3. Иванова Г.С, Ничушкина Т.Н., Пугачев Е.К. - Объектно-ориентированное программирование: Учеб. для вузов - М.: Изд-во МГТУ им. Н.Э. Баумана, 2001. - 320 с.;

. В. Л. Бусько, В. Т. Карцев, Т. М. Кривоносова, А. А. Навроцкий - Основы программирования в среде С++ Builder: лаб.практикум по курсу «Основы алгоритмизации и программирования» для студ. 1 - 2-го курсов БГУИР. В 2 ч. Ч. 1 / Бусько В. Л. [и др.] . - Минск: БГУИР, 2007. - 70 с.;

. Культин Н. Б. - C/C++ в задачах и примерах. - СПб.: БХВ-Петербург, 2005. - 288 с.;

. Аленский Н. А. - Визуальное объектно-ориентированное программирование в примерах: пособие для студентов механико-математического факультета - Минск, БГУ, 2008. - 114с.;

. Рыбалка С.А., Шкатова Г.И. - С++ Builder. Задачи и решения: учебное пособие - Томск: Изд-во Томского политехнического университета, 2010. - 479с.


Приложения


Приложение 1


Алгоритм выполняемых операций


Приложение 2


Листинг программы «Битовые сдвиги»


//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "b_sdvig.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm1::FormCreate(TObject *Sender)

{

Form1->BorderStyle = bsToolWindow; // создание окна с ограниченными размерами

}

//---------------------------------------------------------------------------__fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{(IsCharAlpha(Key) || Key == '!' || Key == '"' || Key == ';' || Key == '%' ||== ':' || Key == '?' || Key == '*' || Key == '(' || Key == ')' ||== '=' || Key == '+' || Key == '_' || Key == '@' || Key == '#' ||== '$' || Key == '^' || Key == '&') = 0; // запрет ввода алфавитных символов и др.

}

//---------------------------------------------------------------------------__fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)

{(IsCharAlpha(Key) || Key == '!' || Key == '"' || Key == ';' || Key == '%' ||== ':' || Key == '?' || Key == '*' || Key == '(' || Key == ')' ||== '=' || Key == '+' || Key == '_' || Key == '@' || Key == '#' ||== '$' || Key == '^' || Key == '&') = 0; // запрет ввода алфавитных символов и др.

}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{(Edit1->Text=="" || Edit2->Text=="") // проверяем введены ли числа

{("Числа не введены!"); // если нет выводим сообщение

}// если введены то

{a; // переменная для числа ab; // переменная для числа bresult; // переменная для результата=StrToInt (Edit1->Text); // берем из Edit1 строку и переводим ее в число=StrToInt (Edit2->Text); // берем из Edit2 строку и переводим ее в число=a<<b; // сдвигаем число а на b-битов влево и помещаем в переменную для результата->Text=IntToStr (result); // выводим значение переменной

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{(Edit1->Text=="" || Edit2->Text=="") // проверяем введены ли числа

{("Числа не введены!"); // если нет выводим сообщение

}// если введены то

{a; // переменная для числа ab; // переменная для числа bresult; // переменная для результата=StrToInt (Edit1->Text); // берем из Edit1 строку и переводим ее в число=StrToInt (Edit2->Text); // берем из Edit2 строку и переводим ее в число=a>>b; // сдвигаем число а на b-битов вправо и помещаем в переменную для результата->Text=IntToStr (result); // выводим значение переменной результат

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Button3Click(TObject *Sender)

{(); // закрываем приложение

}


Содержание Введение 1. Техническое задание на проектирование .1 Основание и назначение .2 Назначение .3 Требование к программе 1.3.1 Общие

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ