Другие языки программирования и технологии

Помогите разобраться с задачей по PASCAL

Задача должна переводить любые числа из 10с\с в 2ую с\с. Хочу понять в чем ошибка, ибо работает не правильно. На любое введенное число выдает ответ "0". program YARRRRRR;var BIN: string; I,J,DEC: integer;beginwriteln('Введите число');readln(DEC); if DEC = 0 then BIN:= '0' else begin BIN:= ''; I:= 0; while (1 shl (I + 1)) <= DEC do I:= I + 1; { (1 SHL (I + 1)) = 2^(I + 1) } for J:= 0 to I do begin if (DEC shr (I - J)) = 1 then BIN := BIN + '1' { (DEC SHR (I - J)) = DEC DIV 2^(I - J) } else BIN := BIN + '0'; DEC := DEC and ((1 shl (I - J)) - 1); { DEC AND ((1 SHL (I - J)) - 1) = DEC MOD 2^(I - J) } end; end; writeln(DEC);end.
Auezmurat Koshkarov
Auezmurat Koshkarov
114
Доброго времени суток.

Я не понял, надо именно этот код сдавать или все же задача стоит так: перевод из десятичной в двоичную систему? Если нужен перевод, то отчитайтесь этим

{переводит число в двоичнное представление}
function DecToBin(N: Word): String;
const Binary : array[0..1] of Char = ('0','1');
var Res : String;
begin
Res := '';
while N > 0 do begin {пока в числе есть цифры}
Res := Binary[N mod 2] + Res; {выделение младшего разряда числа, получение остатка от деления на 2 и добавление его к результату}
N := N div 2; {отбрасываем младший разряд}
end;
DecToBin := Res;
end;

Всего-то делов. Если нужна программа, а не функция, переделать не сложно.

Удачи!

PS Кстати, а почему вы выводите DEC, а не BIN? Не в этм ли причина? Вы же изменяете эту переменную. Эта строчка не может ее обнулить со временем?

DEC := DEC and ((1 shl (I - J)) - 1);

Точно! Именно в этом и кроется причина! Сделал WriteLn(BIN); и все заработало. Поздравляю! :-)
Вячеслав Ткачук
Вячеслав Ткачук
59 613
Лучший ответ
(DEC shr (I - J)) - это не (I-J)-й двоичный знак, это все левые знаки числа! Надо дописать () mod 2.
Дальше не смотрел.
Пользуйся дебагером.
Удачи!
Прога написана на С++
#include<iostream.h>
#include<conio.h>
main()
{
int a,cc,i,n;
float b[20];
cout<<"a=";
cin>>a;
cout<<"CC=";
cin>>cc;
//-----------------
i=0;
while(a!=0)
{
b=aМ;
a=(a-b)/cc;
i++;
}
n=i;
b[n]=a;
//-----------------
for(i=n-1;i>=0;i--)
cout<<b<i><<" ";
getch();
}
Попробуй разберись, т. к. я Паскаля не знаю!