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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2009, 22:16   #1
Dimanduc
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 40
Вопрос простая задачка, а не могу разобраться

требуется определить, является ли введенное число двоичным? Вот прога:
var a:string;
b:integer;
begin
b:=1;
while (a[b]<=length(a)) and (a[b]='0') and (a[b]='1') do
begin
b:=b+1;
end;
write ('Это число ');
if b<length(a) then write (' не ');
writeln (' является двоичным числом');
readln
end.
Компиляция ошибок не находит, но почему-то выводится сообщение выводится постоянно с "не". Почему так происходит?
Dimanduc вне форума Ответить с цитированием
Старый 01.03.2009, 22:47   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Во-первых, где вы вводите само число?
Добавить
Код:
readln(a);
В цикле сразу несколько ошибок:
Код:
while (a[B]<=length(a)) and (a[b]='0') and (a[b]='1') do
надо:
Код:
while (b<=length(a)) and ((a[b]='0') or (a[b]='1')) do
и здесь:
Код:
if b<length(a) then write (' не ');
должно быть:
Код:
if b-1<length(a) then write (' не ');
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 01.03.2009 в 22:49.
Sazary вне форума Ответить с цитированием
Старый 01.03.2009, 23:05   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

бред.
1) это даже не откомплируется из-за
Код:
a[b]<=length(a)
нельзя сравнить элемент строки с числом.
предполагалось: while (b<=length(a)) ...
2) но а дальше что?!
[B]
Код:
and (a[b]='0') and (a='1')

читаем B-й элемент строки равен нулю и этот же элемент строки равен единице! Трудно представить, чтобы один и тот же элемент строки был и нулём и единицей одновременно!
поэтому - у Вас и выдаётся, что число не двоичное!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.03.2009, 23:14   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Sazary, коллега, извините. не обновил страничку и не увидел Вашего ответа! сорри!!

Dimanduc
попробуйте такой код:
Код:
var a:string;
  b:integer;
begin
  a:='11';
  if Length(a)=0 then WriteLn('Строка пуста!')
  else
  begin
    b:=0;
    while (b<length(a)) and ((a[b+1]='0') or (a[b+1]='1')) do
      b:=b+1;

    write ('Это число');
    if b<>length(a) then write (' не');
    writeln (' является двоичным числом');
  end;
  readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.03.2009, 15:06   #5
Dimanduc
Пользователь
 
Регистрация: 25.02.2009
Сообщений: 40
По умолчанию

Спасибо за объяснение. Теперь понял, в чем ошибка: вместо and надо or, так как сравнивается один и тот же символ строки с 0 и с 1. Поменял только and на or и все работает! Еще раз отдельное спасибо!))
Dimanduc вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая задачка про дефис Кси Помощь студентам 4 06.03.2009 08:17
Задачка на Pascal, объясните, пожалуйста, я тут что -то не могу разобраться. Girlo4ka Помощь студентам 6 28.12.2008 15:02
Простая задачка Dukalis Общие вопросы C/C++ 1 13.01.2008 18:10