написал модуль на 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.
зарание спасибо
29 апреля 2008 в 20:05
Надо же. Век живи, век учись. Я и не знал.
29 апреля 2008 в 13:01
> функции binsum в interface и в implementation должны быть одинаковы
Это не обязательное условие. Либо одинаковое, либо в implementation параметры должны отсутствовать вообще
29 апреля 2008 в 8:02
Нда, а я в этой каше даже не глянул на заголовок.
29 апреля 2008 в 1:02
Для начала объявления функции binsum в interface и в implementationдолжны быть одинаковы. А сейчас в интерфейсе у неё два параметра, а в имплементации ни одного.
28 апреля 2008 в 20:05
сходите к логопеду
28 апреля 2008 в 18:00
А разве это имеет значение? Спросили про ошибку, наверно синтаксическую, раз без уточнений (видимо компилятор не показывает номер строки с ошибкой).
Вызывает подозрение if o='1' then be[length(be)+1]:='1';
Тут у нас по идее, выход индекса за границы, ибо и так берём длину, да ещё +1. Просто к данной строке надо прибавить эту единицуbe := be+'1';
Ну а если речь именно про неверностьсложения двух бинарных чисел, то for i:=length(bmin)+1 to length(bmax)
тут ты вроде обрабатываешь старшие байты большего числа, так как им нет пары, ноони то у тебя в начале строки, а ты индексы с конца берёшь.
28 апреля 2008 в 18:00
А, понял – он должен складывать двоичные числа.
Первый совет: Опиши его алгоритм русским языком и примени вручную к какому-нибудь примеру.
Второй совет: Назови переменные как следует – "i","o","be" – плохие названия, они мешают и тебе, и тем кого ты просишь помочь, понять, что этот код и как делает.
Третий совет: Воспользуйся пошаговым отладчиком или хотя бы отладочной печатью – на каждом шаге алгоритма печатай "Делаю то-то, значения переменных такие-то" – так будет легче обнаружить, в какой момент программа начинает работать неправильно.
28 апреля 2008 в 17:05
Непонятно, что тут происходит, но почти уверен, что попутка с конструкциями if then else begin end
2Ромка. Пару советов для значительного улучшения читаемости кода
1) никогда не называй переменные буквами o и l
2) никогда не пиши на одной строке больше одного оператора
3) после begin всегда делай конец строки
4) перед end не должно идти ничего кроме пробелов
5) специально для VKontakte – заменяй начальные пробелы непробельными символами ("_" или ".")
28 апреля 2008 в 17:04
А что он должен делать?