Алгохитрости Системы счисления

Содержание

Слайд 2

Перевод из десятичной системы в другую (от 2-ой до 16-ой) Program

Перевод из десятичной системы в другую (от 2-ой до 16-ой)

Program ten_to_Х_case

(* перевод из десятичной в любую другую систему *)
const Size=18;
Var na, a, i, j, osn: integer; mas: array[1..Size] of integer; num: string[Size];
begin
write('Введите число в десятичной системе счисления: ');
readln(na); a:=na;
write('Введите основание системы счисления: ');
readln(osn);
i:=1;
while (a<>0) do
begin
mas[i]:=a mod osn;
i:=i+1;
a:=a div osn;
end;
for j:=i-1 DownTo 1 do
if mas[j]<10
then num:=num+chr(mas[j]+48)
else case mas[j] of
10: num:=num+'A';
11: num:=num+'B';
12: num:=num+'C';
13: num:=num+'D';
14: num:=num+'E';
15: num:=num+'F';
end;
writeln('Десятичное число ',na,' равно ', osn,'-ичном числу ',num);
end.

И+ПРГ

Pascal

Выбор цифр систем счисления старше 10-тичной
в операторе множественного выбора case

Алгохитрости - Системы счисления

Слайд 3

Перевод из десятичной системы в другую (от 2-ой до 16-ой) //

Перевод из десятичной системы в другую (от 2-ой до 16-ой)

//

перевод из десятичной системы счисления в любую другую позиционную систему
#include
#include
#define Size 15
void main()
{ int na, a, i, j, k=0, osn; int mas[Size]; char num[Size]={'\x0'};
printf("\nВведите десятичное число: "); scanf("%i", &na); a=na;
printf("\nВведите основание системы счисления: "); scanf("%i", &osn);
i=0;
while (a!=0)
{ mas[i]=a%osn; i++; a=(int)a/osn; }
for (j=i-1; j>=0; j--, k++)
if (mas[j]<10)
num[k]=(char)(mas[j]+48);
else
switch (mas[j]) {
case 10: {num[k]='A'; break;}
case 11: {num[k]='B'; break;}
case 12: {num[k]='C'; break;}
case 13: {num[k]='D'; break;}
case 14: {num[k]='E'; break;}
case 15: {num[k]='F'; break;}
}
printf("\nДесятичное число %d равно %d-ичному числу %s\n", na, osn, num);
}

И+ПРГ

С/С++

Выбор цифр систем счисления старше 10-тичной
в операторе множественного выбора switch

Алгохитрости - Системы счисления

Слайд 4

Перевод из десятичной системы в другую (от 2-ой до 16-ой) Program

Перевод из десятичной системы в другую (от 2-ой до 16-ой)

Program ten_to_X_string;

(* перевод из десятичной в любую другую систему счисления *)
Var
ost, osn: integer; (* остаток от деления и основание системы счисления *)
na, a10 : longint; (* десятичное число и его дубль *)
aQ : string[18]; (* число, переведенное в систему счисления с основанием osn *)
c : string[16]; (* строка цифр систем счисления от 2-ной до 16-ричой *)
Begin
c:='0123456789ABCDEF';
write('Введите число в десятичной системе счисления: ');
readln(na); a10:=na;
write('Введите основание системы счисления: ');
readln(osn);
aQ:='';
while(a10<>0)do
begin
ost := a10 mod osn;
aQ := c[ost+1] + aQ;
a10 := a10 div osn;
end;
writeln('Десятичное число ', na, ' равно ', osn,'-ичном числу ', aQ);
end.

И+ПРГ

Pascal

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью строки, хранящей эти цифры

Алгохитрости - Системы счисления

Слайд 5

Перевод из десятичной системы в другую (от 2-ой до 16-ой) //

Перевод из десятичной системы в другую (от 2-ой до 16-ой)

//

перевод из десятичной системы счисления в любую другую позиционную систему
#include
#include
#define Size 15
void main()
{ int na, a10, i=0, j, k=0, ost, osn;
char cifr[]="0123456789ABCDEF";
int mas[Size];
char num[Size]={'\x0'};
printf("\nВведите десятичное число: ");
scanf("%i", &na);
a10=na;
printf("\nВведите основание системы счисления: ");
scanf("%i", &osn);
while (a10!=0)
{
mas[i]=a10%osn;
i++;
a10=(int)a10/osn;
}
for (j=i-1; j>=0; j--, k++)
num[k]=cifr[mas[j]];
printf("\nДесятичное число %d равно %d-ичному числу %s\n", na, osn, num);
}

И+ПРГ

С/С++

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью строки, хранящей эти цифры

Алгохитрости - Системы счисления

Слайд 6

Перевод из десятичной системы в другую (от 2-ой до 16-ой) Program

Перевод из десятичной системы в другую (от 2-ой до 16-ой)

Program ten_to_X_symbol;

(* перевод из десятичной в любую другую систему счисления *)
Var
ost, osn: integer; (* остаток от деления и основание системы счисления *)
na, a10 : longint; (* десятичное число и его дубль *)
aQ : string[18]; (* число, переведенное в систему счисления с основанием osn *)
Begin
write('Введите число в десятичной системе счисления: ');
readln(na); a10:=na;
write('Введите основание системы счисления: ');
readln(osn);
aQ:='';
while(a10<>0)do
begin
ost := a10 mod osn;
if ost < 10
Then
aQ:=chr(ost+48)+aQ
Else
aQ:=chr(ost+55)+aQ;
a10 := a10 div osn;
end;
writeln('Десятичное число ', na, ' равно ', osn,'-ичном числу ', aQ);
end.

И+ПРГ

Pascal

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью приращения кода ASCII

Алгохитрости - Системы счисления

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью приращения кода ASCII

Слайд 7

Перевод из десятичной системы в другую (от 2-ой до 16-ой) И+ПРГ

Перевод из десятичной системы в другую (от 2-ой до 16-ой)

И+ПРГ

Алгохитрости -

Системы счисления

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью приращения кода ASCII

С/С++

// перевод из десятичной системы счисления в любую другую позиционную систему
#include
#include
#define Size 15
void main()
{ int na, a10, i=0, j, k=0, ost, osn;
int mas[Size];
char num[Size]={'\x0'};
printf("\nВведите десятичное число: ");
scanf("%i", &na);
a10=na;
printf("\nВведите основание системы счисления: ");
scanf("%i", &osn);
while (a10!=0)
{
mas[i]=a10%osn;
i++;
a10=(int)a10/osn;
}
for (j=i-1; j>=0; j--, k++)
if (mas[j] < 10)
num[k]=(char)(mas[j]+48);
else
num[k]=(char)(mas[j]+55);
printf("\nДесятичное число %d равно %d-ичному числу %s\n", na, osn, num);
}

Слайд 8

Алгохитрости - Системы счисления Перевод чисел из десятичной позиционной системы счисления

Алгохитрости - Системы счисления

Перевод чисел из десятичной позиционной системы счисления
в

другую и наоборот
При переводе целого числа (целой части числа) из десятичной системы счисления в любую другую: исходное число (или целую часть) надо разделить на основание системы счисления, в которую выполняется перевод. Деление выполнять, пока частное не станет меньше основания новой системы счисления. Результат перевода определяется остатками от деления: первый остаток дает младшую цифру результирующего числа, последнее частное от деления дает старшую цифру.
Операция перевода в десятичную систему выглядит гораздо проще, так как любое десятичное число можно представить в виде
x = a0·pn + a1·pn–1 +... + an–1·p1 + an·p0,
где a0 ... an – это цифры данного числа в системе счисления с основанием p.
Например, перевести число 4A3F в десятичную систему.
По определению, 4A3F= 4·163 + A·162 + 3·161 + F ·160.
При замене A на 10, а F на 15, получается 4·163 + 10·162 + 3·16 + 15·1 = 19007.

И+ПРГ

Слайд 9

Program X_to_10_case; (* перевод из любой системы счисления в десятичную *)

Program X_to_10_case; (* перевод из любой системы счисления в десятичную *)
Var


osn, rez, st, i: integer; (*основание системы, результат, основание в степени позиции, переменная цикла*)
str: string[20]; (* число для перевода *) fl: boolean; (* флаг неправильного ввода числа *)
begin
write ('Введите основание системы счисления '); readln(osn);
write('Введите число в системе счисления от 2-ой до 16-ой: '); readln(str);
writeln ('Переводим число ', str, ' в десятичную систему');
st:=1; rez:=0; i:=length(str); fl:=true;
while (i<>0) do
begin
if (integer(str[i])-48)<10
then rez:=(integer(str[i])-48)*st+rez
else case str[i] of
'A', 'a': rez:=10*st+rez;
'B','b': rez:=11*st+rez;
'C','c': rez:=12*st+rez;
'D','d': rez:=13*st+rez;
'E','e': rez:=14*st+rez;
'F','f': rez:=15*st+rez;
else begin writeln ('Неправильный ввод числа!'); fl:=false; end;
end;
st:=st*osn; i:=i-1;
end;
if fl = true then
writeln('Число ', str, ' в ', osn,'-ой системе счисления равно ', rez,' в десятичной системе');
end.

И+ПРГ

Pascal

Выбор цифр систем счисления старше 10-тичной
в операторе множественного выбора case

Перевод из систем с основанием от 2-ой до 16-ой в десятичную

Алгохитрости - Системы счисления

Слайд 10

Перевод из систем с основанием от 2-ой до 16-ой в десятичную

Перевод из систем с основанием от 2-ой до 16-ой в десятичную


#include // перевод числа из системы счисления от 2-х до 16-и в десятичную
#include
main()
{ int osn, rez, st, i;
/* osn - основание системы счисления переводимого числа,
rez - результат перевода: число в десятичной системе счисления,
st - основание системы счисления в степени текущей позиции цифры в числе */
char str[20]; // строка содержащая исходное число в системе счисления от 2-ч до 16-и
printf("Перевод числа в 10-ичную систему счисления. \n");
printf("Введите число "); gets(str);
printf("\nВведите основание системы счисления: "); scanf("%i", &osn);
st=1; rez=0; i=strlen(str)-1;
while (i>=0)
{ if ((int(str[i])-48)<10)
rez=int(str[i]-48)*st+rez;
else switch (str[i]) {
case 'A': case 'a': {rez=10*st+rez; break;}
case 'B': case b': {rez=11*st+rez; break;}
case 'C': case 'c': {rez=12*st+rez; break;}
case 'D': case 'd': {rez=13*st+rez; break;}
case 'E': case 'e': {rez=14*st+rez; break;}
case 'F': case 'f': {rez=15*st+rez; break;}
}
st=st*osn; i--;
}
printf("%i", rez); return 0;
}

И+ПРГ

С/С++

Выбор цифр систем счисления от 2-ой до 16-ричной
в операторе множественного выбора switch

Алгохитрости - Системы счисления

Слайд 11

Перевод из систем с основанием от 2-ой до 16-ой в десятичную

Перевод из систем с основанием от 2-ой до 16-ой в десятичную


И+ПРГ

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью строки, хранящей эти цифры

Алгохитрости - Системы счисления

program X_to_10_srting;
(* перевод из системы счисления от 2-ой до 16-ой в десятичную (цифры из строки) *)
uses crt;
var
i,n,st,osn, a10: integer;
aP: string[20];
c: string [16];
begin
clrscr;
c:='0123456789ABCDEF';
write ('Введите основание системы счисления ');
readln(osn);
write ('Введите число в системе счисления от 2-ой до 16-ой: ');
readln(aP);
writeln ('Переводим число ', aP, ' в десятичную систему');
a10:=0;
st:=1;
for i:=length(aP) downto 1 do
begin
n:=pos(upcase(aP[i]),c)-1;
a10:=a10+n*st;
st:=st*osn;
end;
writeln('Число ', aP, ' в ', osn,'-ой системе счисления равно ', a10,' в десятичной системе');
repeat until keypressed;
end.

Pascal

Слайд 12

Перевод из систем с основанием от 2-ой до 16-ой в десятичную

Перевод из систем с основанием от 2-ой до 16-ой в десятичную


И+ПРГ

С/С++

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью строки, хранящей эти цифры

Алгохитрости - Системы счисления

#include // перевод из любой системы счисления в десятичную (цифры из строки)
#include
main()
{
int osn, rez=0, st=1, i, k=0;
char cifr[]="0123456789ABCDEF";
int mas[Size];
char str[20]; // строка содержащая исходное число в системе счисления от 2-ч до 16-и
printf("Перевод числа в 10-ичную систему счисления. \n");
printf("Введите число для перевода - "); gets(str);
printf("\nВведите основание системы счисления: "); scanf("%i", &osn);
for (i=strlen(str)-1; i>=0; i--)
{
for (k=0; k {
if (toupper(str[i])==cifr[k])
{ rez=rez+k*st; break; }
}
st=st*osn;
}
printf("%i", rez);
return 0;
}

Слайд 13

Перевод из систем с основанием от 2-ой до 16-ой в десятичную

Перевод из систем с основанием от 2-ой до 16-ой в десятичную


И+ПРГ

Выбор цифр систем счисления от 2-ой до 16-ричной
с помощью приращения кода ASCII

Алгохитрости - Системы счисления

program X_to_10_symbol;
(* перевод из системы счисления от 2-ой до 16-ой в десятичную (цифры из ASCII) *)
var
i,n,st,osn, a10: integer; aP: string[20]; fl : boolean;
Begin
write ('Введите основание системы счисления '); readln(osn);
write ('Введите число в системе счисления от 2-ой до 16-ой: '); readln(aP);
writeln ('Переводим число ', aP, ' в десятичную систему');
a10:=0; st:=1;
for i:=length(aP) downto 1 do begin
if (ord(upcase(aP[i]))-48 >= 0) and (ord(upcase(aP[i]))-55 < 16) then begin
if (ord(upcase(aP[i]))-48 >= 0) and (ord(upcase(aP[i]))-48 < 10) then
n:=ord(upcase(aP[i]))-48
else n:=ord(upcase(aP[i]))-55;
a10:=a10+n*st; st:=st*osn;
fl:=true; end
else fl:=false;
end;
if fl = true then
writeln('Число ', aP, ' в ', osn,'-ой системе счисления равно ', a10,' в десятичной системе')
else begin
writeln ('Извините, введенно число, основание системы счисления которого');
writeln(' не находится в диапазоне от 2-х до 16-и');
end; readln;
end.

Pascal