Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2017, 23:42   #1
MachineMan
Новичок
Джуниор
 
Регистрация: 13.07.2017
Сообщений: 1
По умолчанию [Pascal] типы данных,не работает программа

Исправте пожалуйста и обьясните в чём моя ошибка
Для чего нужна программа:
дано целое положительное число,программа выводит сколько в двоичной записи этого числа единиц(пр-р:дано число 138,в двоичной сс оно 10001010,программа выведет 3 т.к. 3и единицы)
Код:
program u1;
var
b,a,y,i:real;


begin
i:=1;
b:=0;
write('Введите число ');
writeln('a=');
read(a);
y:=a mod 2;
if y=0 then
a:=a else
 begin
 a:=a-1;
 b:=b+1
 end;
while i<a do
 begin
 i:=i*2;
 end;
i:=i/2;
a:=a-i;
b:=b+1;
while a>0 do
 begin
  if i<a then
  begin
  a:=a-i;
  b:=b+1;
  i:=i:2;
  end
  else
  i:=i:2;
 end
end.
p.s.
Если чтото неправильно в коде то обьясните пожалуйста
p.s.s
Подкиньте литературу для паскаля чтобы я закрыл свой пробел

Последний раз редактировалось MachineMan; 13.07.2017 в 23:44.
MachineMan вне форума Ответить с цитированием
Старый 14.07.2017, 10:09   #2
CMY_3
Пользователь
 
Регистрация: 24.02.2016
Сообщений: 38
По умолчанию

Код:
 
var
a,i:integer;
 
. . .
{                          
while a>0 do begin
  if a mod 2 = 1 then inc(i);
  a := a div 2;
end;                      
}
while a>0 do begin
  if a and 1 = 1 then inc(i);
  a := a shr 1;
end;

Последний раз редактировалось CMY_3; 14.07.2017 в 10:14.
CMY_3 вне форума Ответить с цитированием
Старый 14.07.2017, 10:15   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

в задании
Цитата:
Сообщение от MachineMan Посмотреть сообщение
дано целое положительное число
а Вы зачем вещественный тип берёте?

Цитата:
Сообщение от MachineMan Посмотреть сообщение
Код:
b,a,y,i:real;
real - это тип для вещественных (дробных) чисел.

Вам нужен целочисленный тип. Например, Integer.

но дальше не лучше.

Цитата:
Сообщение от MachineMan Посмотреть сообщение
if y=0 then
a:=a
Это что за ужас, летящий на крыльях ночи?

а для чего все эти вычитания, сложения и т.п.?!

я ваш алгоритм не понимаю.

Вашу задачу надо решать так.
взять алгоритм (или готовый код) для перевода числа в двоичную форму.
выкинуть оттуда собственно формирование результата (это сборка строки - двоичного представления числа), вместо этого нужно поставить счётчик.

вот так:
Код:
program u1;
var
  n, a, count_bit : integer;


begin

   Write('Введите целое положительно число a: ');
   ReadLn(a);
   
   count_bit := 0;
   n:=a;
   while n>0 do begin
     if (n mod 2)<>0 then Inc(count_bit);
     n := n div 2
   end;
   
   WriteLn('Число единиц в двоичном представлении числа ',a,' = ', count_bit );
   
end.


Цитата:
Сообщение от MachineMan Посмотреть сообщение
Подкиньте литературу для паскаля чтобы я закрыл свой пробел
верхняя тема в этом разделе: Литература
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает программа Pascal ABC(функция) kseenq Помощь студентам 2 05.12.2014 02:54
Работа со строками(Pascal)(не работает программа) mxax Помощь студентам 1 29.12.2011 18:25
Pascal.Нестандартаные типы данных. Связанные списки. kelly Помощь студентам 1 15.12.2011 11:01
Не могу разобраться как работает программа (Pascal ABC) Amid1990 Помощь студентам 1 04.07.2011 01:42