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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2015, 19:38   #1
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию Помогите пожалуйста разобраться....

ввожу двоичное число(например:11110000001000000100 000001111110000000000) на что получаю ответ: значение было недопустимо малым или большим для int32...как это исправить?
Код:
program p589;
uses crt;
var
   n : integer;   // количество битов в числе
   res : integer; // результат перевода бинарного числа в десятичное
   i : integer;   // счетчик
   bit : integer;   // текущий бит
   
procedure toBinnary(value : integer); // процедура перевода 10 числа в двоичное
var
   i, k : integer; // счетчики
   a : array [1..1000] of integer; // массив битов числа
begin
     k := 0;
     while (value > 0) do // пока наше 10-ое число не равно 0
     begin
          inc(k); // увеличиваем k
          a[k] := value mod 2; // берем остаток от деления числа на 2
          value := value div 2; // берем целую часть от числа при деление на 2
     end;
     while (a[k] = 0) do dec(k); // отбрасываем ведущие нули
     for i := k downto 1 do // выводим биты числа
         write(a[i]);
     writeln();
end;
   
begin
     write('Введите число n=');
     read(n);
     writeln('По условию последний бит числа не может равняться 0');
     res := round(power(2,n-1)); // возводим в квадрат число n-1
     for i := 1 to n-1 do // считываем биты числа
     begin
          write('Введите ', i ,' бит числа = ');
          read(bit);
          res := res + bit * round(power(2,i-1)); // переводим двоичное представление числа в 10 по правилу
     end;
     writeln('Числом p будет являться десятичное представление введенного двоичного числа'); // считаем результат
     writeln('p+1');
     toBinnary(res + 1);
     end.

Последний раз редактировалось Stilet; 17.01.2015 в 19:48.
ИриSка-147 вне форума Ответить с цитированием
Старый 17.01.2015, 19:45   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

ИриSка-147 Integer, это десятичное, а не двоичное число. Вводя такое число вы выходите за диапазон Integer. Оперируйте двоичным числом как строкой (string)
WinCoder вне форума Ответить с цитированием
Старый 17.01.2015, 19:52   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

ИриSка-147, а с чего вы взяли, что
Код:
 read(bit);
будет вводить одну цифру ?
Она введет все до первого пробела.
Или попытайтесь вводить эти ваши 0 и 1 через пробел, или используйте для этого 11110000001000000100000001111110000 000000 переменную типа string, и потом выдергивайте по одному символу.
type_Oleg вне форума Ответить с цитированием
Старый 17.01.2015, 20:26   #4
isst
Пользователь
 
Регистрация: 02.01.2015
Сообщений: 85
Радость

Да, тут даже Int64 не поможет... Вводите строкой, я, например, когда писал перевод из 2 в 10, строку тока и юзал
isst вне форума Ответить с цитированием
Старый 17.01.2015, 21:18   #5
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию

Код:
можно пожалуйста поподробнее
ИриSка-147 вне форума Ответить с цитированием
Старый 17.01.2015, 21:21   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может тут ты найдешь пояснение: http://www.programmersforum.ru/showp...4&postcount=36
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2015, 21:26   #7
ИриSка-147
 
Регистрация: 16.01.2015
Сообщений: 8
По умолчанию

Код:
спасибо))))
ИриSка-147 вне форума Ответить с цитированием
Старый 17.01.2015, 21:46   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
ИриSка-147 Integer, это десятичное, а не двоичное число. Вводя такое число вы выходите за диапазон Integer. Оперируйте двоичным числом как строкой (string)
не вводи людей в заблуждение! в цифровой электронике всё (!!) двоичное. остальные системы счисления используются только для ввода/вывода.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.01.2015, 21:56   #9
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
не вводи людей в заблуждение! в цифровой электронике всё (!!) двоичное. остальные системы счисления используются только для ввода/вывода.
Лучше сказать так:
если вводишь число типа Integer 100, то программа поймет это как сто, а не как четыре
type_Oleg вне форума Ответить с цитированием
Старый 17.01.2015, 22:08   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
если вводишь число типа Integer 100, то программа поймет это как сто, а не как четыре
программа поймет это как 00000000 00000000 00000000 01100100.
а в сишниках при форматированном вводе прога может интерпретировать введённое так, как программист захочет.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста разобраться! TECTO Паскаль, Turbo Pascal, PascalABC.NET 0 02.10.2014 20:44
Помогите пожалуйста разобраться. Ryjik Общие вопросы C/C++ 0 22.10.2009 14:07
помогите разобраться пожалуйста Aronax Общие вопросы C/C++ 2 04.07.2009 11:14
Помогите пожалуйста разобраться в С++. radikayupov1710 Общие вопросы C/C++ 0 30.01.2009 21:16
Пожалуйста помогите разобраться) Atij1 Общие вопросы C/C++ 4 13.04.2008 20:32