Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Представление чисел и машинные операции

Автор: bakalava92 24.10.2009 13:20

Помогите решить пожалуйста!

Даны два числа в десятичной системе счисления. Написать программу, которая выполняет следующие действия:
1.Перевести оба числа в двоичную систему счисления.
2.Выполнить над переведенными числами операцию деления.
3.Выполнить операцию деления над числами в десятичной системе счисления и перевести результат в данную систему счисления.
4.Сравнить полученные результаты.

Автор: maksimla 24.10.2009 14:24

а на что делить эти числа?

Автор: bakalava92 24.10.2009 14:36

первое число разделить на второе, первое число - 312, второе - 6

Автор: maksimla 24.10.2009 15:12

все ясно

Автор: maksimla 24.10.2009 18:57

Я уже можно сказать решил но осталось это http://forum.pascalnet.ru/index.php?showtopic=24826

Автор: bakalava92 24.10.2009 20:19

перевести в двоичную я тоже смог))сам не понимаю как числа делить в двоичной, если бы знал возможно бы написал программу сам)

Автор: maksimla 25.10.2009 15:39

мне так объяснили в той теме как двоичный код делят но я чего то не могу алгоритм сделать может быть кто то другой тебе решит эту задачю

Автор: bakalava92 25.10.2009 15:56

сам попробую, я просто не знал как деление выполняется)) нам в университете объясняли с восстановлением остатка и без восстановления остатка, я ни чего не понял т.к практики не было никакой

Автор: maksimla 25.10.2009 16:10

program Noname0;
var j,i,d,b,k:integer;

xc,x,xx,xy:int64;
p:array [1..2] of int64;
a:array [1..2] of integer;
m:array [0..2] of 0..30;
y:array [1..2,0..17] of 0..1;
{**********s desetricnoi v dvoicnuju**********}
procedure dv(a,i:integer);
begin
j:=0;
while a<>0 do
begin
inc(j);
y[i,j]:=a mod 2;
a:=a div 2;
end;
m[i]:=j;
end;
begin
writeln('vvedite dva cislo');
for i:=1 to 2 do
begin
readln(a[i]);
dv(a[i],i);
end;
for i:=1 to 2 do
begin
for j:=m[i] downto 1 do
write(y[i,j]);
writeln ;
end;

{********eto v odno cislo dvoicniji odno cislo}
x:=1;
i:=2;
b:=m[i];
k:=10;
for d:=m[i] downto 1 do
begin
for j:=1 to b-1 do
x:=x*k;
dec(b);
xc:=xc+x*y[i,d];
x:=1;
end;
p[i]:=xc;
writeln(p[i]);
xc:=0;
{*************************************************888}

{ eto delenije dokonca nedonisano }
x:=1;
i:=1;
k:=10;
b:=0;
for d:=m[i] downto 1 do
begin
inc(b);
for j:=1 to b-1 do
x:=x*k;
if x=0 then xc:=xc+y[i,d]
else xc:=xc*k+y[i,d];
x:=1;
if xc>=p[2] then
begin
xx:=xc;
xy:=p[2];


end
end;
p[i]:=xc;
writeln(p[i]);
xc:=0;

{*************8tyt***************}
{ xc:=p[1] div p[2];
writeln(xc); }
{**********************tut**************}
{ i:=1;
while p[1]<>1 do
begin
y[1,i]:=p[1] mod 10;
p[1]:=p[1] div 10;
inc(i);
end;
for j:=i downto 1 do
write(y[1,j]);
writeln;
k:=0; }
{******s 2 v 10}
{ k:=0;
for j:=i downto 1 do
k:=k*2+y[1,j];
writeln(y[1,j]); }
readln ;
end.


вот что я сделал тогнее немогу даделать еще деления двоичной системы

Автор: andriano 25.10.2009 22:21

Цитата(bakalava92 @ 24.10.2009 20:19) *

перевести в двоичную я тоже смог))сам не понимаю как числа делить в двоичной, если бы знал возможно бы написал программу сам)

В двоичной делят точно так же, как и в десятичной. Только проще.
Делят, естественно, в столбик.
Только если в десятичной нужно подбирать очередную цифру частного так, чтобы по максимуму использовать остаток от предыдущего деления, то в двоичном этот этап не нужен: если остаток больше делителя - вычитаем и записываем в частное "1", если меньше - записываем в частное "0".

Автор: maksimla 26.10.2009 9:52

немогу придумать как делить двоичные коды в програмке я

program Noname0;
var j,i,d,b,k:integer;

xc,x,xx,xy:int64;
p:array [1..2] of int64;
a:array [1..2] of integer;
m:array [0..2] of 0..30;
y:array [1..2,0..17] of 0..1;
{**********s desetricnoi v dvoicnuju**********}
procedure dv(a,i:integer);
begin
j:=0;
while a<>0 do
begin
inc(j);
y[i,j]:=a mod 2;
a:=a div 2;
end;
m[i]:=j;
end;
begin
writeln('vvedite dva cislo');
for i:=1 to 2 do
begin
readln(a[i]);
dv(a[i],i);
end;
{************vivodim masiv dvoicnix cisel *****************************}
for i:=1 to 2 do
begin
write('cisla v masive ');
begin
for j:=m[i] downto 1 do
write(y[i,j]);
writeln ;
end;
writeln;
end;
{********berem delitel vtoroe cislo i delaem kak odno cislo}
x:=1;
i:=2;
b:=m[i];
k:=10;
for d:=m[i] downto 1 do
begin
for j:=1 to b-1 do
x:=x*k;
dec(b);
xc:=xc+x*y[i,d];
x:=1;
end;
p[i]:=xc;
writeln('odno cislo ',p[i]);
writeln;

{ eto delenije dokonca nedonisano }
xc:=0;
x:=1;
i:=1;
k:=10;
b:=0;
for d:=m[i] downto 1 do
begin
inc(b);
for j:=1 to b-1 do
x:=x*k; {mozet tut ctoto lisneje no vse vivodit normalno}
if x=0 then xc:=xc+y[i,d]
else xc:=xc*k+y[i,d];
x:=1;
if xc>=p[2] then {sravnivaem cisla delimoe bolse togda delim esli}
begin
xx:=xc;
xy:=p[2]; {nenapisal kak delit }


end
end;
p[i]:=xc;
writeln(p[i]);
xc:=0;
readln ;
end.

Автор: русофоб 19.05.2015 1:09

а как будет выглядеть вся написанная программа?