Другие языки программирования и технологии
Delphi... Сложение чисел... Помогите найти ошибки...
Function sum (str1,str2:string):string; var ar1,ar2,ar3:array[0..255]of shortint; str3:string; x,i,max:integer; begin x:=0; for i:=length(str1) downto 1 do begin x:=x+1; ar1[x]:=strtoint(str1); end; for i:=length(str1)+1 to 255 do ar1:=0; x:=0; for i:=length(str2) downto 1 do begin x:=x+1; ar2[x]:=strtoint(str2); end; for i:=length(str2)+1 to 255 do ar2:=0; x:=0; if length(str1)>length(str2) then max:=length(str1) else max:=length(str2); for i:=1 to max do begin ar3:=ar1+ar2+ar3; if ar3>9 then begin ar3[i+1]:=1; ar3:=ar3-10; end; end; if ar3[max+1]<>0 then max:=max+1; setlength(str3,max); for i:=max downto 1 do begin x:=x+1; str3:=char(ar3[x]); end; result:=str3; end; При проверке: 55+22=~- 123+123=xЂ, 11+9=~0 ВОТ... Помогите пожалуйста...
Во первых: массивы задаёшь от 0 до 255, а когда записываешь в них цифры из строк, то начинаешь с 1 ячейки.
Хорошо. Пусть так.
Но не проще ли одним циклом и заполнять и обнулять?
for i := 1 to 255 do if i > Length(str1) then ar1[i] := 0 else ar1[i] := Ord(str1[i]) - 48;
вместо:
x := 0;
for i := length(str1) downto 1 do
begin
x := x + 1;
ar1[x] := strtoint(str1);
end;
for i := length(str1) + 1 to 255 do
ar1[i] := 0;
Во вторых:
for i := 1 to max do
begin
ar3[i] := ar1[i] + ar2[i] + ar3[i]; < -- Какому значению у тебя равно последнее слагаемое при i = 1? Ведь ты его нигде не обнулял!
if ar3[i] > 9 then
begin
ar3[i + 1] := 1;
ar3[i] := ar3[i] - 10;
end;
end;
нужно добавить ar3[1] := 0; перед началом цикла сложения!
В третьих: какой символ будет получен из char(ar3[x]);?
Я тебе скажу - непечатный!
В начале ты преобразуешь через символ в число функцией strtoint, а теперь решил блеснуть?
Так вот: значения символов '0'..'9' больше соответствующих цифр на 48!
str3[i] := char(ar3[x] + 48);
И в последних: после этих исправлений у тебя останется ещё 1 косяк!
Но ты его увидишь, когда получишь результат ;-)
Хорошо. Пусть так.
Но не проще ли одним циклом и заполнять и обнулять?
for i := 1 to 255 do if i > Length(str1) then ar1[i] := 0 else ar1[i] := Ord(str1[i]) - 48;
вместо:
x := 0;
for i := length(str1) downto 1 do
begin
x := x + 1;
ar1[x] := strtoint(str1);
end;
for i := length(str1) + 1 to 255 do
ar1[i] := 0;
Во вторых:
for i := 1 to max do
begin
ar3[i] := ar1[i] + ar2[i] + ar3[i]; < -- Какому значению у тебя равно последнее слагаемое при i = 1? Ведь ты его нигде не обнулял!
if ar3[i] > 9 then
begin
ar3[i + 1] := 1;
ar3[i] := ar3[i] - 10;
end;
end;
нужно добавить ar3[1] := 0; перед началом цикла сложения!
В третьих: какой символ будет получен из char(ar3[x]);?
Я тебе скажу - непечатный!
В начале ты преобразуешь через символ в число функцией strtoint, а теперь решил блеснуть?
Так вот: значения символов '0'..'9' больше соответствующих цифр на 48!
str3[i] := char(ar3[x] + 48);
И в последних: после этих исправлений у тебя останется ещё 1 косяк!
Но ты его увидишь, когда получишь результат ;-)
Похожие вопросы
- Помогите найти ошибку Delphi легкая программка
- программирование C++. Помогите найти ошибку
- Помогите найти ошибку в коде
- Помогите найти ошибку в задачи,Паскаль...
- Помогите найти ошибку qbasic
- Помогите найти ошибку в коде. делфи
- помогите найти ошибку в коде на Си
- Помогите найти ошибки в коде (паскаль)
- Помогите найти ошибку...Pascal (строки)
- Помогите найти ошибку Си