Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

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

Тип: реферат
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Разработка программы с использованием языка программирования Pascal для выполнения алгебраических действий с действительными числами без знака в шестнадцатеричной системе счисления. Описание хода выполнения, схема алгоритма, листинг программы, ее функции.
Краткое сожержание материала:

Размещено на

Агентство по образованию РФ

Рязанский государственный радиотехнический университет

Кафедра САПР ВС

Пояснительная записка

по дисциплине "Информатика"

Тема " Разработка программы для перевода данных в разные системы счисления"

Выполнил студент 846 группы

Чирков Антон

Проверил Орехов В.В.

Рязань 2009

Содержание

  • Практическая и математическая постановки задачи
  • Анализ существующих алгоритмов решения задачи
  • Описание разрабатываемого алгоритма, его укрупненная схема
  • Заключение
  • Список литературы

Введение

Мы постоянно сталкиваемся с различными системами счисления в нашей повседневной жизни. Посмотрев на часы, мы даже не задумываемся, что имеем дело с шестидесятеричной системой счисления, с одной стороны, и двадцатичетырехричной - с другой. Задачи перевода в разные системы счисления особенно важны в компьютерной или IT сфере, так как большинство данных представляется не в привычной нам десятичной, а в двоичной, шестнадцатеричной и других системах счисления.

Практическая и математическая постановки задачи

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

Для создания программы был выбран язык Pascal, который не имеет стандартных функций (процедур) перевода в шестнадцатеричную систему счисления (16сс) и из 16сс в 10сс. Поэтому одной из главных задач является написать функции перевода 16 - >10 и 10->16. Также в Pascal нет стандартного типа для 16сс, поэтому будет использоваться строковой тип (srting).

То есть для выполнения поставленной задачи необходимо:

· Считать строку, содержащую 2 аргумента и знак математического действия

· Разбить строку на 2 (извлечь аргументы), и сохранить знак действия

· Перевести каждый из аргументов в 10сс и выполнить действие, проанализировав знак математического действия.

· Полученный результат перевести в 16сс и вывести (на экран и/или в файл)

Анализ существующих алгоритмов решения задачи

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

система счисление программа алгоритм

Например, требуется перевести шестнадцатеричное число 5A3 в десятичное. В этом числе 3 цифры. В соответствии с вышеуказанным правилом представим его в виде суммы степеней с основанием 16:

5A316=5·162+10·161+3·160 =5·256+10·16+3·1=1280+160+3=144310

Для перевода десятичного числа в шестнадцатеричное, необходимо целую часть числа целочисленно делить на основание степени 16, записав остатки в обратном порядке.

Например, переведем число 42210 в шестнадцатеричную систему счисления.

422: 16=26 (ост6)

26: 16=1 (ост10)

То есть получается 42210=1A616

Для перевода дробной части, необходимо умножать дробную часть на основание системы счисления (16), пока не получим дробную часть равную 0, или пока не достигнем необходимой точности.

Например, переведем 0,062510 в шестнадцатеричную систему счисления.

0,

0625

1

0

То есть мы получили, что 0,062510=0,116

Описание разрабатываемого алгоритма, его укрупненная схема

Считав строку, нам необходимо ее разбить на 2 аргумента и символ знака математического действия. Для этого мы "запускаем" цикл с параметром от 1 (начального символа) до длинны строки, и с помощью простого условия (if) ищем символ знака (+,-,*,/). Найдя этот символ, мы записываем его номер в переменную, если же мы не находим этот символ, то выдаем пользователю ошибку с просьбой ввести корректное выражение.

Имея порядковый номер знака математического действия, мы можем разбить строку на аргументы и "запомнить" знак.

Теперь у нас есть 2 аргумента в 16сс и знак математического действия. Для выполнения действия, нам необходимо перевести аргументы в 10сс.

Перевод осуществляется посредством стандартного алгоритма перевода в 10сс из любой системы счисления. Мы "нумеруем" разряды числа начиная от 0 (нулевого разряда), влево, прибавляя, а вправо - вычитая. И значение соответствующей цифры в разряде умножаем на основание системы счисления в степени порядкового номера разряда.

Возникает проблема. Мы функции передали строковой тип данных, и выполнение никаких математических действий с ней невозможно. Для начала, мы разбиваем строку на целую и дробную часть, с помощью цикла с параметром (от 1 до длинны строки), и ищем фиксированную точку (символ"." или ","). После чего разбиваем на 2 переменные, остаток и целую часть числа. Первая часть проблемы решена, второй проблемой является наличие в нашем числе буквенных символов, которые не получится обработать с помощью стандартной процедуры val. Для решения этой проблемы, мы воспользуемся таким алгоритмом:

· Переведем символ в верхнюю раскладку клавиатуры (UpCase)

· Считаем номер символа

· Вычтем из него номер символа "А"

Получили разность нашего символа и символа А. То есть если наш символ соответствует символу А, мы получим "0". Чтобы перевести этот символ корректно в 10сс, мы должны к этой разности прибавить 10.

Теперь у нас есть 2 числа в 10 системе счисления, осталось выполнить действие (предусмотрев, что разность чисел может быть отрицательной, и что пользователь может ввести делитель равный 0)

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

Так выглядит приблизительный ход выполнения программы.

Текст программы:

{ЦЕЛЬ: выполнить все основные арифметические действия с действительными }

{числами с фиксированной запятой без знака в шеснадцатиричной }

{системе счисления (16сс), записав результат в файл }

{ПЕРЕМЕННЫЕ: allst - исходная строка, введенная пользователем, содержащая }

{математическое выражение с 16сс. gotst - результат выполнения операции }

{и исходная строка. n - переменная указателя меню }

{cl - булевая переменная с меткой выхода из программы }

{ПОДПРОГРАММЫ: StProc - процедура обработки первоначальной строки }

{stepen - функция возведения числа в положительную степень }

{minusstepen - функция возведения числа в отрицательную степень }

{_16to10 - функция перевода числа из 16сс в 10сс }

{_10to16 - функция перевода числа из 10сс в 16сс }

{Convd - функция преобразования символа }

{ВЫПОЛНИЛ студент группы 846 Чирков Антон }

{ПРОВЕРИЛ Орехов В.В. }

{ДАТА 11 мая 2009 года }

Program kursach;

var

n: integer;

allst, gotst: string;

cl: boolean;

result, data: text;

Procedure StProc (allst: string; var gotst: string);

var

i, zn1, zn2: integer;

mainzn: char;

st1, st2, dec: string;

{Функция положительной степени числа}

function stepen (x,n: integer): longint;

var

k: longint;

i: integer;

begin

k: =1;

for i: =1 to n do k: =k*x;

stepen: =k;

end;

{Функция отрицательной степени числа}

functio...

Другие файлы:

Лаба по информатике
Лабораторная работа 1СИСТЕМЫ СЧИСЛЕНИЯПРАВИЛА ПЕРЕВОДА ЧИСЕЛ ИЗ ОДНОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДРУГУЮЦ е л ь р а б о т ы . Изучение систем счисления, испол...

Лабораторная работа №1 по информатике
Лабораторная работа 1СИСТЕМЫ СЧИСЛЕНИЯПРАВИЛА ПЕРЕВОДА ЧИСЕЛ ИЗ ОДНОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДРУГУЮЦ е л ь р а б о т ы . Изучение систем счисления, испол...

Правила перевода из двоичной системы числения в восьмеричную и шестнадцатеричную системы счисления
Сущность двоичной, восьмеричной и шестнадцатиричной систем счисления, их отличительные черты и взаимосвязь. Пример алгоритмов перевода чисел из одной...

Системы счисления
Понятие и математическое содержание систем счисления, их разновидности и сферы применения. Отличительные признаки и особенности позиционных и непозици...

Шестнадцатеричная система счисления
Понятие шестнадцатеричной системы счисления как позиционной с основанием "16", история ее внедрения. Символы и синтаксис использования, виды и правила...