Дороботать задчу на паскаль
43. Составить программу для обучения переводу чисел из десятичной системы счисления в двоичную и обратно. Программа должна предлагать десятичное (двоичное) число, выбранное с помощью датчика случайных чисел, обучающийся - назвать это число в двоичной (десятичной) системе
помогите пожалуйста доделать задчу
program algoritm;
uses crt;
label 1,2;
var s,sbox,dvaPs:string;
m:array [1..99] of integer;
i,step,des,dva,n,ost,l,delo,v,rand,box,dvaP,desP:integer;
begin
writeln('--------------------');
randomize;
des:=random(6)+2;//задаём "сложность", число цифр в десятичном числе
for i:=1 to des do
begin
rand:=random(10)+1;//выбираем рандомное число
s:=s+IntToStr(rand);
end;
l:=length(s);
{Отрубаем нолики из начала}
for i:=1 to l do
if s[1]='0' then
begin
Delete(s,1,1);
l:=l-1;
end
else
break;
{/Отрубили нолики}
des:=StrToInt(s);
des:=3831;//тест
writeln('Десятичное число:',des);
n:=0;
i:=0;
repeat
inc(n);
inc(i);
ost:=des mod 2;
des:=des div 2;
m[i]:=ost;
until des=0;
for i:=n downto 1 do
begin
box:=m[i];
sbox:=sbox+IntToStr(box);//записываем двоичное число в строку
end;
l:=length(sbox);
{Отрубаем нолики из начала}
for i:=1 to l do
if sbox[1]='0' then
begin
Delete(sbox,1,1);
l:=l-1;
end
else
break;
{/Отрубили нолики}
1:write('Переведите его в двоичную систему счисления:');
read(dvaPs);
if dvaPs=sbox then
writeln('Правильно!')
else
begin
writeln('Не правильно, попробуйте еще');
goto 1;
end;
end
program cel;
uses crt;
var a,n,d:integer;
Str:string;
begin
clrscr;
writeln('Перевод числа из двоичной в десятичную СС ');
writeln('-------------------------------------------');
Write('Число в двоичной С2--> '); ReadLn(Str);
d := 0;
for n := 1 to Length(Str) do
if Str[N] = #48 then D := D shl 1 else
if Str[N] = #49 then D := D shl 1 + 1 else
begin WriteLn('число не двоичное'); Halt; end;
WriteLn('число в 10 системе= ',d);
writeln(' конец задачи');
readln;
end.
----------------------------------------------------------------------
uses crt; // 10-2 эта короче и работает
var n:integer;s:String;
begin
clrscr;
readln(n);
while n>0 do begin
insert(chr(48+n mod 2),s,1);
n:=n div 2;
end;
writeln(s);
//readkey;
end.
program algoritm;
uses crt;
label 1,2;
var s,sbox,dvaPs:string;
m:array [1..99] of integer;
i,step,des,dva,n,ost,l,delo,v,rand,box,dvaP,desP:integer;
begin
writeln('--------------------');
randomize;
des:=random(6)+2;//задаём "сложность", число цифр в десятичном числе
for i:=1 to des do
begin
rand:=random(10)+1;//выбираем рандомное число
s:=s+IntToStr(rand);
end;
l:=length(s);
{Отрубаем нолики из начала}
for i:=1 to l do
if s[1]='0' then
begin
Delete(s,1,1);
l:=l-1;
end
else
break;
{/Отрубили нолики}
des:=StrToInt(s);
writeln('Десятичное число:',des);
n:=0;
i:=0;
repeat
inc(n);
inc(i);
ost:=des mod 2;
des:=des div 2;
m[i]:=ost;
until des=0;
for i:=n downto 1 do
begin
box:=m[i];
sbox:=sbox+IntToStr(box);//записываем двоичное число в строку
end;
l:=length(sbox);
{Отрубаем нолики из начала}
for i:=1 to l do
if sbox[1]='0' then
begin
Delete(sbox,1,1);
l:=l-1;
end
else
break;
{/Отрубили нолики}
writeln('Двоичное число:', sbox);
2:write('Переведите его обратно в десятичную систему счисления:');
read(desP);
if desP=StrToInt(s) then
writeln('Правильно!')
else
begin
writeln('Не правильно, попробуйте еще');
goto 2;
end;
end.
Доработанный код программы на PascalABC для обучения переводу чисел из десятичной системы счисления в двоичную и обратно:
program algoritm;
uses crt;
label
back;
var
s, sbox, dvaPs: string;
m: array [1..99] of integer;
i, step, des, dva, n, ost, l, delo, v, rand, box, dvaP, desP: integer;
begin
writeln('--------------------');
randomize;
des := random(6) + 2; //задаём "сложность", число цифр в десятичном числе
for var i1 := 1 to des do
begin
rand := random(10) + 1; //выбираем рандомное число
s := s + IntToStr(rand);
end;
l := length(s);
{Отрубаем нолики из начала}
for var i2 := 1 to l do
if s[1] = '0' then
begin
Delete(s, 1, 1);
l := l - 1;
end
else
break;
{/Отрубили нолики}
des := StrToInt(s);
writeln('Десятичное число:', des);
n := 0;
i := 0;
repeat
inc(n);
inc(i);
ost := des mod 2;
des := des div 2;
m[i] := ost;
until des = 0;
for var i3 := n downto 1 do
begin
box := m[i];
sbox := sbox + IntToStr(box); //записываем двоичное число в строку
end;
l := length(sbox);
{Отрубаем нолики из начала}
for var i4 := 1 to l do
if sbox[1] = '0' then
begin
Delete(sbox, 1, 1);
l := l - 1;
end
else
break;
{/Отрубили нолики}
back: write('Переведите его в двоичную систему счисления:');
read(dvaPs);
if dvaPs = sbox then
writeln('Правильно!')
else
begin
writeln('Не правильно, попробуйте еще');
goto back;
end;
end.
Программа генерирует случайное десятичное число и переводит его в двоичную систему счисления. Затем программа предлагает пользователю перевести это число обратно в десятичную систему счисления и проверяет правильность ответа. Если ответ неверный, программа предлагает пользователю попробовать еще раз.
Для перевода чисел из десятичной системы счисления в двоичную можно использовать следующий алгоритм:
Берем десятичное число и начинаем его делить на 2.
В результате деления получаем остатки, числа 0 или 1, которые и составляют наше двоичное число.
После каждой операции получения остатка, мы уменьшаем исходное десятичное число на 2, деля его нацело. И так, пока не получим 0.
Для перевода чисел из двоичной системы счисления в десятичную можно использовать следующий алгоритм:
Справа налево берем по разряду и умножаем его на степень двойки, соответствующую его порядку.
Складываем полученные произведения.
Использование типа данных BigInteger позволяет использовать намного больше разрядов, чем integer, что может быть полезно при работе с большими числами.