IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Хитрая задача,, преобразования, изминение порядка цифр
zhorik
сообщение 4.01.2007 22:13
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Задача:

Дано натуральное число m. Найти такое натуральное число n, двоичная запись которого получается из двоичной записи m изменением порядка цифр на обратный.

ломаю голову несколько дней

как делать представляю:

1)преобразовать введенное число в двоичный вид
2)поменять порядок цифр на обратный
3)преобразовать полученное число в десятичный вид

с первыми двумя пунтками проблем не возникает, а вот с третьим проблема.

Делаю так:
Код


program test;
uses
crt;

var
x, xxx,  d, c, rez, n  : integer;
res,ves:longint; i,j:byte;
y : real;

begin
clrscr;
readln(x);
rez:=0;
n:=0;

xxx:=x;

{в этом цикле узнаю кол-во повторов цикла}
while xxx<>0 do begin
d:=xxx mod 2;
xxx :=xxx div 2;
n :=n+1;
end;

n :=n-1;

{Нахожу двоичный вид введенного числа, изменяю порядок цифр на обратный и пытаюсь получить десятичный вид числа}
while x<>0 do begin
d:=x mod 2;
x :=x div 2;
rez := d*(2*n)+rez;
n := n-1;
end;

writeln(rez);
readln;
end.



у кого какие мысли по поводу решения этой задачки?


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 4.01.2007 22:15
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


почитай FAQ


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 4.01.2007 22:57
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Поменяй строку:
rez := d*(2*n)+rez;

на
rez := d+rez*2;

yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zhorik
сообщение 4.01.2007 23:07
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Цитата(Malice @ 4.01.2007 22:57) *

Поменяй строку:
rez := d*(2*n)+rez;

на
rez := d+rez*2;

yes2.gif


спасибо тебе огромное! smile.gif

я знал, что истина где-то рядом!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 4.01.2007 23:15
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(zhorik @ 4.01.2007 23:07) *

спасибо тебе огромное! smile.gif

я знал, что истина где-то рядом!

Не за что, только тебе по сути не нужен вообще 1-ый цикл, т.к. его результат (n) дальше не используется. Убирай и его и лишние переменные (нужны только 2) и будет красота smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 13:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"