Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Целочисленные переменные.

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

Занятие 2

Алгоритм перевода чисел из Q-ричной системы счисления в 10-ю выполняется школьниками довольно легко. В систем счисления с основанием Q числа в развернутй форме записываются в виде суммы ряда степеней основания Q (степени от 0 до N-1, где N – количество позиций в записи данного числа), умноженных на коэффициенты ai, где ai - цифры числа, записанные в Q-ричной системе счисления.

Aq = an-1 * qn-1 + an-2 * qn-2 + ….+ a0* q0 + a-1 * q-1 + a-2 * q-2 + …..+ a--m * q-m

Пример

Запись числа в свернутой форме  по основанию 8: А8 = 451,38

В развернутой форме: А8 =4*82 +5*81 +1+80 +3*8-1

Очевидно, что для представления чисел в развернутой форме, необходимо уметь выделять цифры в записи этого числа. На первом этапе мы будем рассматривать только целочисленные переменные.

Задача 1

Дано число в Q-ричной ( в интервале от 2 до 9) системе счисления. Преобразовать его в 10-ю систему счисления.

program test (input,output);

var (*Перевод из Q-ричной (от 2 до 9) системы счисления в 10-ю*)

a:array[1..8] of integer;

a1,an, i,j, s,q:integer;

begin

writeln ('Введите число ');

readln(a1); an:=a1;

writeln ('Введите основание Q ');

readln(q);

i:=1;

(* выделяем цифры из заданного числа a1*)

(* i - счетчик числа позиций в заданном числе а1*)

while a1 > 0 do

begin

a[i]:=a1 mod 10;

a1:=a1 div 10;

writeln('i ',i,' a[',i:2,'] ',a[i]);

i:=i+1;

end;

(*представить заданное число в 10-ой системе счисления*)

(* p – переменная, в которой формируются степени заданного основания *)

s:=0; p:=1;

for j:=1 to i-1 do

begin

s:=s+p*a[j];

p:=p*q;

writeln('s ',s,' p ',p);

end;

(* распечатка результата *)

writeln('заданное число',an,'в ',q,'-ричной системе счисления');

writeln(‘число в 10-ой системе счисления ’,s);

end.

Задача 2

Дано число в Q-ричной ( в интервале от 2 до 16) системе счисления. Преобразовать его в 10-ю систему счисления.

Алгоритм задачи

В 11-16-ричных системах счисления в записи числа используются буквы латинского алфавита от A до F. Для выделения позиций заданного числа, мы принимаем его как переменную типа – string, используем массив a:array[1..8] of integer. Массив ssch: array[10..n] of char, будет необходим для преобразования символов алфавита в числовые значения. Адреса элементов массива прямо пропорциональны значениям символов. Это видно и в блоке присваивания ( в начале текста программы после раздела описания переменных). В разделе (*выделяем символы из заданного числа a1*) при выделении символа, соответствующего букве в массив a заносится число, равное адресу этого символа в массиве ssch. Последующее преобразование числа из Q-ричной системы счисления в 10-ю (2-й блок программы) – в точноcти повторяет алгоритм 1 задачи.

program test (input, output);

(*Перевод из Q-ричной (от 2 до 16) системы счисления в 10-ю*)

const n=15;

var

a1,an:string;

ssch: array[10..n] of char;

a:array[1..8] of integer;

l1,i, j,r, s,p, sn, q:integer;

begin

ssch[10]:='A'; ssch[11]:='B'; ssch[12]:='C'; ssch[13]:='D'; ssch[14]:='E'; ssch[15]:='F';

writeln (' Введите число в виде строки символов');

readln(a1); an:=a1;

writeln ('Введите основание Q ');

readln(q);

(*выделяем символы из заданного числа a1*)

l1:=length(a1);

for i:=l1 downto 1 do

begin

r:=ord(a1[i])-ord('0');

writeln('kod ',ord(a1[i]),' SIMVOL ',a1[i]);

if (a1[i]<='9') and (a1[i]>='0') then a[l1+1-i]:=r

else begin for j:=10 to q-1 do

if a1[i] = ssch[j] then a[l1+1-i]:=j;

end;

writeln(' nach ',a1[i],' mas A ',a[l1+1-i]);

end;

(*представить заданное число в 10-ой системе счисления *)

s:=0; p:=1;

for j:=1 to l1 do

begin

s:=s+p*a[j];

p:=p*q;

writeln('s ',s,' p ',p);

end;

(*распечатка результата*)

writeln('заданное число ',an,' в ',q,'-ричной системе счисления ');

write('число в 10-ой системе счисления ',s);

end.

Задача 3

Дано число в 10-ой системе счисления преобразовать его в R-ричную ( в интервале от 2 до 9) систему счисления.

Алгоритм перевода целого 10-го числа в R-ричную ( в интервале от 2 до 9) систему счисления:

Последовательно выполнять деление исходного целого числа, сохраняя остатки от целочисленного деления в массиве b:array[1..12] of integer; Новое целое частное делим на основание R, до тех пор пока остаток не станет меньше основания R. Первый остаток от деления соответствует младшей цифре заданного числа в R-ричной ( в интервале от 2 до 9) системе счисления, последний – старшей.

program test (input, output);

(*Перевод из 10-ой системы счисления в R-ричную (от 2 до 9) *)

var

b:array[1..12] of integer;

i, j,s, r,sn:integer;

begin

writeln (' Введите число ');

readln(s);

writeln ('Введите основание R ');

readln(r);

sn:=s; i:=1;

while s > 0 do

begin

b[i]:=s mod r;

s:=s div r;

writeln('i ',i,' b[',i:1,'] ',b[i]);

i:=i+1;

end;

(*распечатка результата *)

writeln('заданное число в ',r,' системе счисления);

for j:=I-1 downto 1 do

write(b[j]);

НЕ нашли? Не то? Что вы ищете?

end.

Задача 4

Дано число в 10-ой системе счисления преобразовать его в R-ричную ( в интервале от 2 до 16) систему счисления.

Комментарий: При работе с сиcтемами счисления больше 10-ой используем массив ssch: array[10..n] of char, котрый будет необходим для преобразования числовых значений в символы алфавита. В массиве bn будем формировать результат преобразования.

Прокомментируем фрагмент программы:

if b[j]>9 then bn[j]:=ssch[b[j]]

else bn[j]:= CHR(b[j]+ORD('0'));

Если остаток от деления оказался больше 9, то необходимо выбрать из массива ssch, символ, адрес которого совпадает со значением b[j], иначе формируем число.

program test (input, output);

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

const n=15;

var

ssch: array[10..n] of char;

b:array[1..12] of integer;

bn: array[1..12] of char;

i, j,r, s,p, sn, q:integer;

begin

ssch[10]:='A'; ssch[11]:='B'; ssch[12]:='C'; ssch[13]:='D'; ssch[14]:='E'; ssch[15]:='F';

writeln (' Введите число в 10-ой системе счисления');

readln(s); sn:=s;

writeln ('Введите основание R ');

readln(r);

sn:=s; i:=1;

while s > 0 do

begin

b[i]:=s mod r;

s:=s div r;

writeln('i ',i,' b[',i:1,'] ',b[i]);

i:=i+1;

end;

(*распечатка результата *)

writeln('заданное число в ',r,' - ой системе счисления’);

if p<=10 then

begin

for j:=I-1 downto 1 do write(b[j]);

end

else

for j:=I-1 downto 1 do

begin

if b[j]>9 then bn[j]:=ssch[b[j]]

else bn[j]:= CHR(b[j]+ORD('0'));

write(bn[j]);

end;

end.

Задача 5

Дано число в Q-ой системе счисления преобразовать его в R-ричную ( в интервале от 2 до 16) систему счисления, используя перевод его в 10-ю, как промежуточный этап работы.

Комментарий: в 5 задаче использованы все приемы преобразования задач 1-4.

program test (input, output);

(*Перевод из Q-ричной (от 2 до 16) системы счисления в R˛*)

const n=15;

var

a1,an:string;

ssch: array[10..n] of char;

a, b:array[1..12] of integer;

bn: array[1..12] of char;

l1,i, j,r, q:integer;

s, sn, p:longint;

begin

ssch[10]:='A'; ssch[11]:='B'; ssch[12]:='C'; ssch[13]:='D'; ssch[14]:='E'; ssch[15]:='F';

writeln ('Введите число в виде строки символов');

readln(a1); an:=a1;

writeln ('Введите основание Q ');

readln(q);

writeln (' Введите основание R ');

readln(r);

(*выделяем символы из заданного числа a1*)

l1:=length(a1);

for i:=l1 downto 1 do

begin

p:=ord(a1[i])-ord('0');

writeln('kod ',ord(a1[i]),' SIMVOL ',a1[i]);

if (a1[i]<='9') and (a1[i]>='0') then a[l1+1-i]:=p

else begin for j:=10 to q-1 do

if a1[i] = ssch[j] then a[l1+1-i]:=j;

end;

writeln(' nach ',a1[i],' mas A ',a[l1+1-i]);

end;

(*представить заданное число в 10-ой системе счисления *)

s:=0; p:=1;

for j:=1 to l1 do

begin

s:=s+p*a[j];

p:=p*q;

writeln('s ',s,' p ',p); (* для отладки *)

end;

(*распечатка результата *)

writeln('заданное число ',an,' в ',q,'-ричной системе счисления’);

write('число в 10-ой системе счисления ',s);

writeln;

sn:=s; i:=1;

while s > 0 do

begin

b[i]:=s mod r;

s:=s div r;

writeln('i ',i,' b[',i:1,'] ',b[i],' ssch ',ssch[b[i]]);

i:=i+1;

end;

(*распечатка результата*)

writeln('заданное число в ',r,' системе счисления');

if p<=10 then

begin

for j:=I-1 downto 1 do

write(b[j]);

end

else

for j:=I-1 downto 1 do

begin

if b[j]>9 then bn[j]:=ssch[b[j]]

else bn[j]:=CHR(b[j]+ ORD('0'));

write(bn[j]);

end;

end.

Олимпиадные задачи

ТГУ май 2005 года

Задача 6.

(z6.in, z6.out, z6.pas, z6.cpp)

Перевести число из десятичной в двоичную систему счисления

Формат входного файла: Одно число 1 < N < 32000.

Формат выходного файла: Одно число – заданное число в двоичной системе счисления.

Пример:

Z6.in

3

Z6.out

11

Z6.in

785

Z6.out

Задача 7.

(z7.in, z7.out, z7.pas, z7.cpp)

Перевести число из десятичной в троичную систему счисления

Формат входного файла: Одно число 1 < N < 32000.

Формат выходного файла: Одно число – заданное число в троичной системе счисления.

Пример:

Z7.in

3

Z7.out

10

Z7.in

785

Z7.out

1002002

Предложенные задачи могут быть реализованы в рамках вышеприведенных алгоритмов.

Городская олимпиада по информатике 2003 год

Задача 2

Требуется написать программу, которая водит несколько целых чисел ( со знаком «+» или «-» ) в заданной системе счислени и вычисляет их алгебраичекую сумму.

Порядок ввода исходных данных

основание системы счисления в виде целого числа ( оно должно находиться в пределах от 2 до 10); знак «+» или «-», следом без пробела запись первого суммируемого числа в заданной системе счисления; то же самое для второго суммируемого числа и т. д.

Окончание ввода – число 0.

Оценка задачи

величина каждого из чисел и их суммы не более 32000 – 20 баллов; величина каждого из чисел и их суммы не более 1баллов дополнительно.

Выходные данные:

Знак «+» или «-» и цифры полученной суммы в заданной системе счисления. При этом НЕ должны выводиться ведущие нули.

Пример ввода: Пример вывода

3 +22

+102

-11

+1

0

Возможные варианты реализации задачи

В случае величина каждого из чисел и их суммы не более 32000: перевести числа в 10-ю систему счисления, произвести необходимые операции и выполнить обратный перевод в заданную систему счисления. В случае величина каждого из чисел и их суммы не более 1050 : принять с клавиатуры данные вида: символьные строки – STRING. Преобразовать в массивы символов и работать по алгоритмам арифметики (если в данном разряде, после суммирования, число превышает основание системы счисления вычесть основание и признак переноса изменить с 0 на 1). При вычитании поступать аналогично, если вычитаемое больше уменьшаемого, из старшего разряда вычесть 1, а к уменьшаемому прибавить основание системы счисления и продолжить вычисления. Эти приемы работы были приведены в теме «Целочисленные переменные. Занятие 1»