Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИНФОРМАТИКА / ЛАБ№1 / ЛАБ№1_отчет

.doc
Скачиваний:
9
Добавлен:
14.03.2015
Размер:
206.85 Кб
Скачать

МИНОБРНАУКИ РОССИЙСКОЙ ФЕДЕРАЦИЙ

Федеральное государственное бюджетное образовательное учреждение

«Ижевский государственный технический университет имени

М.Т. Калашникова»

Кафедра АСОИУ

ОТЧЕТ

По дисциплине «ИНФОРМАТИКА»

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

Выполнил:

Студент группы Б1-782-1з Жигалов А.С.

Проверил:

Преподаватель. Ю.В. Шибанова

Ижевск 2012 год

Содержание

Введение. 2

Блок схема программы 8

Скриншоты 9

Введение.

Передо мной была поставлена цель, создать программу для перевода чисел из десятичной(Далее 10СС) системы исчисления в двоичную(Далее 2СС) применив к ним операцию деления. Для её решения я вывел несколько задач:

  1. Создать подпрограмму для определения, "Какая цифра соответствует числу".

  2. Сделать подпрограмму для определения, "Какое число соответствует цифре".

  3. Заложить в программу алгоритм пересчета из 10СС системы исчисления в 2СС систему исчисления с (определенным количеством значимых знаков после запятой).

  4. Заложить в программу алгоритм деления чисел в 2СС.

  5. Реализовать интерфейс простой и приятный пользователю.

Для достижения этой цели я использовал программный продукт Delphi 7. Характеристики ноутбука, на котором производилось создание и тестирование программы:

Процессор Intel® Core™ i3-2370M Processor (3M Cache, 2.40 GHz);

ОЗУ 8 Гб;

Видеокарта NVIDIA GeForce GT 650M;

OS Windows 7 x64 bit

Описание программы.

Для написания программы было решено написать вспомогательные функции перевода из 10СС в 2СС. Для более удобного восприятия программы были так же подключёны следующие модули: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls.

В качестве дизайна было решено расположить последовательно следующие поля: входные данные "для ввода основание системы", "исходные числа", и результирующие данные . "для ввода основание системы", "исходные числа". А также иметься одна кнопка для вывода.

Исходный код:

unit uMain;

interface

uses

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

Dialogs, StdCtrls,ShellApi,Math, Spin;

type

TfrmMain = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label5: TLabel;

Label6: TLabel;

Label9: TLabel;

Label7: TLabel;

Label10: TLabel;

Label11: TLabel;

Label4: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmMain: TfrmMain;

implementation

uses StrUtils;

{$R *.dfm}

//Определяет какая цифра соответствует числу.

function IntToDigit(aNum : Byte) : String;

const

SelfName : String = 'IntToDigit.';

begin

case aNum of

0..9 : Result := IntToStr(aNum);

10 : Result := 'A';

11 : Result := 'B';

12 : Result := 'C';

13 : Result := 'D';

14 : Result := 'E';

15 : Result := 'F';

else

Raise Exception.Create(SelfName + ' Числу не сопоставлена цифра!');

end;

end;

//Определяет какое число соответствует цифре.

function DigitToInt(aDigit : AnsiChar; aBase : Byte) : Byte;

const

SelfName : String = 'DigitToInt.';

begin

if aBase < 2 then

Raise Exception.Create(SelfName + ' Основание системы счисления должно быть >= 2!')

;

case aDigit of

'0'..'9' : Result := StrToInt(aDigit);

'A', 'a' : Result := 10;

'B', 'b' : Result := 11;

'C', 'c' : Result := 12;

'D', 'd' : Result := 13;

'E', 'e' : Result := 14;

'F', 'f' : Result := 15;

else

Raise Exception.Create(SelfName + ' Неизвестный символ в представлении числа!');

end;

if Result > aBase - 1 then

Raise Exception.Create(SelfName + ' В данной системе счисления нет такой цифры!')

;

end;

//По записи числа в системе счисления с онованием aBase, определяет само это число.

function XcimalStrToNumber(aStrXcimal : String; aBase : Byte) : Extended;

const

SelfName : String = 'XcimalStrToNumber.';

var

i, j : Integer;

StrInt : String;

StrFrac : String;

Pos1 : Integer;

IntPart : Extended;

FracPart : Extended;

begin

if Length(aStrXcimal) = 0 then

Raise Exception.Create(SelfName + ' Не задано число!');

//Ищем десятичную точку. Она у нас обозначается знаком запятая: ','.

Pos1 := Pos(',', aStrXcimal);

//Определяем подстроку с записью целой части числа

//и подстроку с записью дробной части.

if Pos1 = 0 then begin

//Значит число состоит только из целой части.

StrInt := aStrXcimal;

StrFrac := '';

end else begin

//Число имеет целую и дробную части.

StrInt := LeftStr(aStrXcimal, Pos1 - 1);

StrFrac := Copy(aStrXcimal, Pos1 + 1, Length(aStrXcimal) - Pos1);

end;

//Определяем значение целой части числа.

IntPart := 0;

for i := 1 to Length(StrInt) do begin

//Порядок разряда = позиции разряда при отсчёте от нуля в направлении справа налево.

j := Length(StrInt) - i;

IntPart := IntPart + DigitToInt(StrInt[i], aBase) * Power(aBase, j);

end;

//Определяем значение дробной части числа.

//В начале вычисляем значение аналогично тому, как это сделано для целой части:

FracPart := 0;

for i := 1 to Length(StrFrac) do begin

j := Length(StrFrac) - i;

FracPart := FracPart + DigitToInt(StrFrac[i], aBase) * Power(aBase, j);

end;

//Теперь учитываем экспоненциальную часть:

FracPart := FracPart / Power(aBase, Length(StrFrac));

//Получаем число, которое соответствует записи aStrXcimal

//в системе счисления с основанием aBase.

Result := IntPart + FracPart;

end;

//Преобразует запись числа в системе счисления с основанием aSrcBase в запись

//этого же числа в системе счисления с онованием aTrgBase.

//Преобразование производится с точностью до aTrgPrecision цифр после запятой

//в результирующем представлении числа.

function XcimalStrToYcimalStr

(

aSrcBase : Byte;

aSrcNumStr : String;

aTrgBase : Byte;

aTrgPrecision : Byte

) : String;

var

//Число соответствующее записи aSrcNumStr в системе счисления с основанием aSrcBase.

SrcNum : Extended;

//Целая часть, выделенная из числа SrcNum.

IntPart : Int64;

//Дробная часть, выделенная из числа SrcNum.

FracPart : Extended;

//Представление целой части числа SrcNum в системе счисления с основанием aTrgBase.

StrInt : String;

//Представление дробной части числа SrcNum в системе счисления с основанием aTrgBase.

StrFrac : String;

//Счетчик.

i : Integer;

//Для промежуточных вычислений.

TempNum : Extended;

begin

//Исходное число.

SrcNum := XcimalStrToNumber(aSrcNumStr, aSrcBase);

// Получаем целую и дробную части числа.

IntPart := Trunc(SrcNum);

FracPart := Frac(SrcNum);

//Переводим целую часть.

StrInt := '';

repeat

StrInt := IntToDigit(IntPart mod aTrgBase) + StrInt;

IntPart := IntPart div aTrgBase;

until IntPart = 0;

// Если дробная часть = 0, то перевод закончен.

if FracPart = 0 then

begin

Result := StrInt;

exit;

end;

//Переводим дробную часть. Точность - до aTrgPrecision цифр после запятой.

StrFrac := '';

for i := 1 to aTrgPrecision do

begin

TempNum := FracPart * aTrgBase;

StrFrac := StrFrac + IntToDigit(Trunc(TempNum));

FracPart := Frac(TempNum);

//Если дробная часть = 0, то перевод закончен.

if FracPart = 0 then Break;

end;

Result := StrInt + ',' + StrFrac;

end;

//По записи числа в системе счисления с онованием aBase, определяет само это число.

function AdelitnaB(A : String; B : String) : string;

var

octatok : Int64;

rez : Int64;

Srez:string;

begin

Result:='';

repeat

rez:= strtoint(A) div strtoint(B);

octatok:= strtoint(A) mod strtoint(B);

Result:=Result+IntToStr(rez);

until octatok = 0;

end;

procedure TfrmMain.Button1Click(Sender: TObject);

begin

// 1. Перевести оба числа в двоичную систему счисления.

Edit3.Text := XcimalStrToYcimalStr(10,Edit1.Text,2,0);

Edit4.Text := XcimalStrToYcimalStr(10,Edit2.Text,2,0);

// 2. Выполнить над переведенными числами машинную операцию деления

Edit5.Text := AdelitnaB(Edit3.Text,Edit4.Text);

// 3. Выполнить операцию над числами в десятичной системе счисления и перевести

//результат в двоичную систему счисления.

Edit6.Text := inttostr(round(Strtoint(Edit1.Text)/Strtoint(Edit2.Text))) ;

Edit7.Text := XcimalStrToYcimalStr(10,Edit6.Text,2,0);

end;

end.

Блок схема программы

Скриншоты

Соседние файлы в папке ЛАБ№1
  • #
    14.03.20156.61 Кб9uMain.~pas
  • #
    14.03.2015434 б5XcimalToYcimal.cfg
  • #
    14.03.20152.13 Кб5XcimalToYcimal.dof
  • #
    14.03.2015200 б5XcimalToYcimal.dpr
  • #
    14.03.2015876 б5XcimalToYcimal.res
  • #
    14.03.2015206.85 Кб9ЛАБ№1_отчет.doc