Другие языки программирования и технологии
Помогите разобраться с задачей по 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.
Доброго времени суток.
Я не понял, надо именно этот код сдавать или все же задача стоит так: перевод из десятичной в двоичную систему? Если нужен перевод, то отчитайтесь этим
{переводит число в двоичнное представление}
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); и все заработало. Поздравляю! :-)
Я не понял, надо именно этот код сдавать или все же задача стоит так: перевод из десятичной в двоичную систему? Если нужен перевод, то отчитайтесь этим
{переводит число в двоичнное представление}
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); и все заработало. Поздравляю! :-)
(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();
}
Попробуй разберись, т. к. я Паскаля не знаю!
#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();
}
Попробуй разберись, т. к. я Паскаля не знаю!
Похожие вопросы
- Помогите в решении задачи на Pascal
- Помогите пожалуйста решить задачу в Pascal ABC
- Помогите пожалуйста написать задачи на "Pascal"? Хотя бы несколько.
- Помогите с составлением задач в Pascal ABC!!Срочно!
- Помогите пожалуйста решить задачу в Pascal
- Помогите разобраться в задаче
- Прошу помочь разобраться в задаче по программированию:
- Помогите разобраться, Pascal!
- Pascal. Помогите пожалуйста решить задачу в паскале !
- Проверьте пожалуйста блок-схему к задаче на Pascal