singlepost

немагу найти ошибку << На главную или назад  

написал модуль на Pascale но он неработает помогите плз
unit Sbin;
interface
function binsum(bin1,bin2:string):string;
implementation
function binsum;
var i:byte; o:char; be,bmax,bmin:string;
begin
be:='';
if length(bin1)>length(bin2) then
begin
bmax:=bin1;
bmin:=bin2;
end
else begin
bmax:=bin2;
bmin:=bin1;
end;
o:='0';
for i:=1 to length(bmin) do
begin
if o='0' then
if (bmin[length(bmin)-i+1]='1')xor(bmax[length(bmax)-i+1]='1') then be[i]:='1'
else if (bmin[length(bmin)-i+1]='0') then be[i]:='0'
else begin be[i]:='0'; o:='1'; end
else if (bmin[length(bmin)-i+1]='1')xor(bmax[length(bmax)-i+1]='1') then
begin be[i]:='0'; o:='1'; end
else if (bmin[length(bmin)-i+1]='0') then
begin be[i]:='1'; o:='0'; end
else begin be[i]:='1'; o:='1'; end
end;
for i:=length(bmin)+1 to length(bmax) do
if (bmax[i]='1')xor(o='1') then
begin be[i]:='1'; o:='0'; end
else if (bmax[i]='0') then be[i]:='0'
else begin be[i]:='1'; o:='1'; end;
if o='1' then be[length(be)+1]:='1';
binsum:=be;
end;
end.
зарание спасибо

34 ответов в теме “немагу найти ошибку”

  1. 9
    Александр Чигринец ответил:

    Надо же. Век живи, век учись. Я и не знал. :D

  2. 8
    Антон Щиров ответил:

    > функции binsum в interface и в implementation должны быть одинаковы
    Это не обязательное условие. Либо одинаковое, либо в implementation параметры должны отсутствовать вообще

  3. 7
    Алексей Гридин ответил:

    Нда, а я в этой каше даже не глянул на заголовок.

  4. 6
    Александр Чигринец ответил:

    Для начала объявления функции binsum в interface и в implementationдолжны быть одинаковы. А сейчас в интерфейсе у неё два параметра, а в имплементации ни одного.

  5. 5
    Андрей Говоровский ответил:

    сходите к логопеду

  6. 4
    Алексей Гридин ответил:

    А разве это имеет значение? Спросили про ошибку, наверно синтаксическую, раз без уточнений (видимо компилятор не показывает номер строки с ошибкой).
    Вызывает подозрение if o='1' then be[length(be)+1]:='1';
    Тут у нас по идее, выход индекса за границы, ибо и так берём длину, да ещё +1. Просто к данной строке надо прибавить эту единицуbe := be+'1';
    Ну а если речь именно про неверностьсложения двух бинарных чисел, то for i:=length(bmin)+1 to length(bmax)
    тут ты вроде обрабатываешь старшие байты большего числа, так как им нет пары, ноони то у тебя в начале строки, а ты индексы с конца берёшь.

  7. 3
    Жека Кирпичев ответил:

    А, понял – он должен складывать двоичные числа.
    Первый совет: Опиши его алгоритм русским языком и примени вручную к какому-нибудь примеру.
    Второй совет: Назови переменные как следует – "i","o","be" – плохие названия, они мешают и тебе, и тем кого ты просишь помочь, понять, что этот код и как делает.
    Третий совет: Воспользуйся пошаговым отладчиком или хотя бы отладочной печатью – на каждом шаге алгоритма печатай "Делаю то-то, значения переменных такие-то" – так будет легче обнаружить, в какой момент программа начинает работать неправильно.

  8. 2
    Антон Щиров ответил:

    Непонятно, что тут происходит, но почти уверен, что попутка с конструкциями if then else begin end

    2Ромка. Пару советов для значительного улучшения читаемости кода
    1) никогда не называй переменные буквами o и l
    2) никогда не пиши на одной строке больше одного оператора
    3) после begin всегда делай конец строки
    4) перед end не должно идти ничего кроме пробелов
    5) специально для VKontakte – заменяй начальные пробелы непробельными символами ("_" или ".")

  9. 1
    Жека Кирпичев ответил:

    А что он должен делать?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.