Позиційні системи числення


Тема: позиційні системи числення (ПСЧ), переведення чисел з десяткової системи числення до довільної ПСЧ та переведення з довільної ПСЧ до десяткової системи числення.

Мета роботи: опанувати правила переведення чисел з десяткової системи числення в довільну ПСЧ і навпаки.

Програма позиційний числення

Хід роботи

Кінцевою метою роботи є створення програми для переведення чисел з довільної системи числення в довільну ПСЧ і навпаки. Щоб виконати дане завдання, було обрано мову програмування Object Pascal.

Спершу були створено рядок внесення початкових даних і кінцевого обрахунку для виконання необхідного завдання.

Підбір та використання процедур для переведення ПСЧ з однієї системи числення в іншу.

Реалізація раніше описаних алгоритмів розрахунку засобами та інструментами Pascal ABC.

Перевірка отриманих результатів.

Лістинг програми

Program sustemu_chuslennya;

Uses

CRT;

Const line='--------------------------------------';

Sline='---------------';

A: string[36] = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

Var

C: char;

F:text;

X:string;

N, r: real;

Rez, s, s2, s3: string;

T, cc, ind, cc2, k: integer;

{процедура для поділу дробної і целої частини числа}

Procedure Del(var ss: string);

Var

I: integer;

Begin

Ind := 0;

S2 := '';

For i := 1 to length(ss) do

If ss[i] in [',', '.'] then

Begin

Ind := i;

Break

End

Else

S2 := s2 + ss[i];

S3 := '';

If ind <> 0 then

Begin

Delete(s, 1, ind);

S3 := ss;

End;

End;

Function ToDec(var ss: string; cc: byte): integer;

Var

I, n, sum: integer;

Begin

Sum := 0;

N := length(ss);

For i := 1 to n do

Begin

Dec(n);

Sum := sum + round((pos(ss[i], a) - 1) * exp(ln(cc) * n));

End;

ToDec := sum;

End;

Function Cel(d: real; c: integer): string;

Var

S: string;

N2: integer;

Begin

N2 := round(int(d));

S := '';

Repeat

S := ((a[n2 mod c + 1]) + s);

N2 := n2 div c;

Until (n2 = 0);

Cel := s;

End;

Function Drob(var d: real; t, c: integer): string;

Var

S: string;

L2, k, n3: real;

I, l: integer;

Begin

K := d - int(d);

S := '';

I := 0;

If t <> 0 then

Begin

Repeat

L2 := k * c;

K := frac(l2);

S := s + a[round(int(l2)) + 1];

Until i = t;

End

Else

S := '0';

Drob := s;

End;

Function drob2(ss: string; c: integer): real;

Var

I: integer;

Sum: real;

Begin

For i := 1 to length(ss) do

Sum := sum + (pos(ss[i], a) - 1) * exp(ln(c) * - i);

Drob2 := sum;

End;

Label metka;

Begin textbackground(Blue);//светло-серый

Textcolor(Yellow);

ClrScr;

Write('Ви бажаєте перевести число з будь-якої системи числення в іншу? ');

Readln(x);

Metka:

If ((x='так') or (x='Так')) then begin

Repeat

Writeln(line);

Write('Введіть систему числення з якої бажаєте перевести: ');

Readln(cc2)

Until cc2 in [2..36]; {проверка ввода}

Writeln(line);

Write('Введіть систему числення в яку бажаєте перевести: ');

Readln(cc);

If cc2 = 10 then {если перевод из 10 то юзаем функции Cel и Drob}

Begin

Writeln(line);

Write('Введіть число в ', cc2, '-й системі числення: ');

Readln(n);

Writeln(line);

{write('Введіть число: '); }

{readln(t); }

If ((n - round(int(n))) = 0) then {если дробная часть числа=0 то юзаем Cel}

Rez := Cel(n, cc)

Else {иначе юзаем обе и добавляем, между дробной и целой}

Rez := Cel(n, cc) + ',' + Drob(n, t, cc);

End

Else {иначе если перевод не из 10-й СС}

Begin

Writeln(line);

Write('Введіть число в ', cc2, '-й системі числення: ');

Readln(s);

Del(s); {разбиваем на дробную и целую части строку}

If ind = 0 then

Rez := Cel(ToDec(s2, cc2), cc) {переводим сначала из любой в 10-ю сс, а затем из

10-й в любую}

Else

Begin

R := drob2(s3, cc2); {переводим дробную часть числа}

Rez := Cel(ToDec(s2, cc2), cc) + ',' + drob(r, length(s3), cc); {переводим из любой сс

В другую }

End;

End;

Writeln(rez); { THE END }

Readkey;

Writeln(line);

Writeln('Бажаєте здійснити переведення числа ще раз?');

Readln (c);

If (x='так') then goto metka

Else

Begin

If (x='ні') then Halt(1);

End;

End;

End.

Форми програми:

Контрольні запитання

Визначення системи числення (Системою числення називається сукупність правил і знаків за допомогою яких можна відобразити будь-яке невід'ємне число).

Класифікація СЧ (Системи числення бувають:

Позиційні (двійкова, десяткова);

Змішані (фібоначчі);

Непозиційні (римська)).

Визначення позиційної СЧ (Позиційна СЧ - це така система числення, де цифра у записі числа залежно від свого розташування змінює саме число, тобто цифра має свою вагу у числі).

Основні ПСЧ що використовуються в обчислювальній техніці (16-ва, 8-ва, та 2-ва системи числення).

Аналітичні розрахунки

    256(10) 5 256/5=51 (ост. 1) 51/5=10 (1) 10/5 = 2 (0)

Отже, вірна відповідь - 2011.

Висновок

В даній лабораторній роботі були засвоєні основні поняття, які стосуються позиційних систем числення, створено універсальний алгоритм для здійснення переведень з десяткової системи числення в іншу ПСЧ і навпаки та реалізовано даний алгоритм на необхідній мові програмування.

Похожие статьи




Позиційні системи числення

Предыдущая | Следующая