Автор | Сообщение |
|
Отправлено: 10.02.15 11:19. Заголовок: диагностика от 26.01 - бинарное представление
Коллеги, подскажите, как средствами АВС Паскаля получить двоичное представление цифры? Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество значащих цифр в двоичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на пяти языках программирования.) var x,cnt: integer; begin readln(x); cnt := 0; while x > 0 do begin cnt:=cnt + x mod 2; x := x div 10 end; writeln(cnt) end.
|
|
|
Ответов - 3
[только новые]
|
|
|
| постоянный участник
|
Сообщение: 279
|
|
Отправлено: 10.02.15 12:17. Заголовок: Коллеги, подскажите,..
цитата: | Коллеги, подскажите, как средствами АВС Паскаля получить двоичное представление цифры? |
|
цифры или числа? стандартных средств нет, на сколько я помню если в эту программу добавить переменную типа string и исправить x := x div 10 на x := x div 2, то получим строку, изображающую двоичную запись числа как-то так: var x,cnt: integer; s:string; begin readln(x); s:=''; cnt := 0; while x > 0 do begin cnt:=cnt + x mod 2; s:= inttostr(x mod 2)+s; x := x div 2 end; writeln(cnt); writeln(s) end.
|
|
|
|
Отправлено: 11.02.15 16:32. Заголовок: Здесь, как мне кажет..
Здесь, как мне кажется, нужно найти ошибку в программе? Это ведь задание 24(С3)? Строку "cnt:=cnt + x mod 2;" нужно заменить на "cnt:=cnt + 1;" - это первая ошибка Строку "x := x div 10" нужно заменить на "x := x div 2" - это вторая ошибка
|
|
|
|
| постоянный участник
|
Сообщение: 280
|
|
Отправлено: 11.02.15 16:43. Заголовок: Lavanda пишет: Это ..
Lavanda пишет: только С1 цитата: | Строку "cnt:=cnt + x mod 2;" нужно заменить на "cnt:=cnt + 1;" - это первая ошибка |
| да, просмотрела про количество значащих цифр, решила что надо считать количество единиц в двоичной записи числа вопрос был о получении двоичного представления числа, вдруг ошибки сами исправили
|
|
|
|