Top.Mail.Ru
Ответы

Дороботать задчу на паскаль

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.

Аватар пользователя
Оракул
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
 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 для обучения переводу чисел из десятичной системы счисления в двоичную и обратно:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
 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. 

Программа генерирует случайное десятичное число и переводит его в двоичную систему счисления. Затем программа предлагает пользователю перевести это число обратно в десятичную систему счисления и проверяет правильность ответа. Если ответ неверный, программа предлагает пользователю попробовать еще раз.
Для перевода чисел из десятичной системы счисления в двоичную можно использовать следующий алгоритм:

  1. Берем десятичное число и начинаем его делить на 2.

  2. В результате деления получаем остатки, числа 0 или 1, которые и составляют наше двоичное число.

  3. После каждой операции получения остатка, мы уменьшаем исходное десятичное число на 2, деля его нацело. И так, пока не получим 0.

Для перевода чисел из двоичной системы счисления в десятичную можно использовать следующий алгоритм:

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

  2. Складываем полученные произведения.

Использование типа данных BigInteger позволяет использовать намного больше разрядов, чем integer, что может быть полезно при работе с большими числами.