Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Перевод шестнадцатеричного числа в десятичное число

Задача:

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

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

Алгоритм аналогичен переводу двоичного числа, за исключением того, что цифры обозначенные буквами от A до F следует заменить цифрами от 10 до 15.

Программа на языке Паскаль:

var

hexa: string; {шестнадцатеричное число}

n: byte; {его длина}

ch: char; {цифра очередного разряда как символ}

digit: byte; {цифра очередного разряда}

m: byte; {степень 16}

decimal: integer; {десятичное число}

i: byte;

function pow16(m: byte):integer;

var i: byte;

begin

pow16 := 1;

for i := 1 to m do

pow16 := pow16 * 16;

end;

begin

write('Hexadecimal: ');

readln(hexa);

n := length(hexa);

decimal := 0;

m := n;

for i:=1 to n do begin

ch := hexa[i];

if ch in ['A'..'F'] then

case ch of

'A': digit := 10;

'B': digit := 11;

'C': digit := 12;

'D': digit := 13;

'E': digit := 14;

'F': digit := 15

end

else

digit := ord(ch) - ord('0');

m := m - 1;

decimal := decimal + digit * pow16(m);

end;

writeln('Decimal: ',decimal);

readln

end.

Примечания:

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

Перевод десятичного числа в шестнадцатеричное

Задача:

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

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

Алгоритм перевода десятичного числа в другую систему счисления одинаков. Однако в случае шестнадцатеричной системы он усложнен тем, что цифры с 10 до 15 должны быть заменены буквами.

Поэтому сначала находится остаток от деления на 16. Если он представляет собой двузначное число, то переменной ch присваивается соответствующий символ. Иначе происходит перевод цифры в ее символьное представление. Символ добавляется к строке.

Программа на языке Паскаль:

var

decimal: word;

function hexadecimal(decimal:word):string;

var digit: byte; ch: char;

begin

while decimal > 0 do begin

digit := decimal mod 16;

if digit in [10..15] then

case digit of

10: ch := 'A';

11: ch := 'B';

12: ch := 'C';

13: ch := 'D';

14: ch := 'E';

15: ch := 'F'

end

else

ch := chr(ord('0') + digit);

hexadecimal := ch + hexadecimal;

decimal := decimal div 16

end;

end;

begin

write('Decimal: ');

readln(decimal);

writeln(hexadecimal(decimal));

readln

end.

Определение принадлежности даты диапазону времени

Задача:

Представим, что нам надо определить принадлежит ли определенная дата диапазону времени, т.е. находится ли между двумя другими датами.

Две крайние даты пусть задаются программно. А дату, требующую исследования, вводит пользователь.

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

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

Второй, более простой, способ это «поэлементное» сравнение дат: сначала сравниваются года, если этого недостаточно, то месяцы и, затем, дни. Ниже приводится пример реализации этого способа. Однако тут тоже могут быть варианты.

Программа на языке Паскаль:

type date = record

year:integer;

month:1..12;

day:1..31;

end;

var d1, d2, dmy: date;

begin

with d1 do begin

year := 1990;

month := 5;

day := 15

end;

with d2 do begin

year := 2005;

month := 12;

day := 25

end;

write('Год: ');

readln(dmy.year);

write('Месяц: ');

readln(dmy.month);

write('День: ');

readln(dmy.day);

if (dmy.year > d1.year) and (dmy.year < d2.year) then

writeln('Yes');

if dmy.year = d1.year then

if dmy.month > d1.month then

writeln('Yes')

else

if dmy.month = d1.month then

if dmy.day > d1.day then

writeln('Yes');

if dmy.year = d2.year then

if dmy.month < d2.month then

writeln('Yes')

else

if dmy.month = d2.month then

if dmy.day < d2.day then

writeln('Yes');

readln

end.