понедельник, 25 апреля 2011
Я офигеваю со свей гениальности. И от ощущения того
что кто-то где-то меня Паскаль надо мной просто издевается
староеProgram celuechisla;
var r,p,l,i,n:integer;d:real;
begin
write('vvedite chislo' );
readln (n);
r:=0;
while n>1 do
begin
d:=n mod 2;
if d<>0
then r:=(10*r+1)
else r:=10*r;
write (r);
writeln;
n:=n div 2;
end;
{дальше ещё много-много, но это не имеет значения}
В результате выполнения этого куска получается:
vvedite chislo 585
1
10
100
1001
10010
-30972
17961
-16998
26628
Так какого хрена?Новый, полный и безобразный, но такой рабочий код. Я оставлю его себе на память здесь.Program celuechisla;
var p,i,n,k:integer;d:real;r,l,m:longint;
begin
write('vvedite chislo');
readln (n);
r:=0;
m:=n;
while n>1 do
begin
d:=n mod 2;
if d<>0
then r:=(10*r+1)
else r:=10*r;
n:=n div 2;
end;
r:=(r*10+1);
p:=0;
l:=r;
repeat
l:=l div 10;
p:=p+1;
until l=0;
for i:=1 to p do
begin
l:=r mod 10;
r:=r div 10;
write (l);
end;
k:=m mod 2;
if k=0
then write ('0');
readln
end.
upd: Спасибо
mask of mr. Pruett и
Просто_Сидниupd2:
Перевод целых и дробных чисел в двоичную систему, я сделал этоProgram celuechisla;
var p,i,n,k:integer;d,o,f,g:real;r,l,m:longint;
begin
write('vvedite celuiy chast chisla');
writeln;
readln (n);
writeln;
write('vvedite drobnuiy chast chisla');
writeln;
readln (o);
writeln;
write (n,'=');
r:=0;
m:=n;
while n>1 do
begin
d:=n mod 2;
if d<>0
then r:=(10*r+1)
else r:=10*r;
n:=n div 2;
end;
r:=(r*10+1);
p:=0;
l:=r;
repeat
l:=l div 10;
p:=p+1;
until l=0;
for i:=1 to p do
begin
l:=r mod 10;
r:=r div 10;
write (l);
end;
k:=m mod 2;
if k=0
then write ('0');
write (',');
p:=0;
g:=o;
repeat
g:=g/10;
g:=int(g);
p:=p+1;
until g=0;
for i:=1 to p do
begin
o:=o/10
end;
repeat
o:=o*2;
f:=int(o);
o:=frac(o);
write (f:1:0);
until o=0;
readln
end.
@темы:
.::Сегодня я - гений::.,
My ultramarine kingdom,
Подчинить жизнь, подчинить себе самого себя
уверен что не имеет?
ошибка уже в начале, имеет ли смысл проверять оставшиеся извращения?
может ты где еще write (хуйня) написал?
я скопировал кусок программы и кусок результата который относится только к нему. Дальше всё совсем не айс, но начинается отсюда
Это я вычислил, написав "write (r); writeln;". Оно нужно мне ровно для того, чтобы проследить за началом ошибки, и себя оправдало
writeln - переход на новую строку, чтобы не всё на экране было в одну строчку
n:=n div 2;
не здесь ли кроется великий смысл?
На простом-понятном эти строчки звучат:
Я беру число, делю его на два, приравниваю n к целой части от деления и d к остатку от деления
И выбешивает меня то, что с короткими числами прокатывает. Смотри же, там 1, 10, 100, 1001, и БЛЯТЬ ВДРУГ -30972!
Ну откуда, ведь переменную R я только умножаю на 10 и прибавляю 1. Как можно умножением десяти тысяч на десять получить -30972?
возьми его как longInt
божеж, я люблю тебя
Всё оказалось так просто
рад быть полезным xD