![]() |
|
|
#1
|
|||
|
|||
|
Сижу не могу сообразить как реализовать.
Есть допустим многочлен -7x^4-8x^2-1x-9 Его необходимо запихнуть в массив в виде -9 -1 -8 0 -7 Вот мое кривое, не рабочее творение:d Код:
procedure input(line: integer; str:string);
var
i,n,k: integer;
s:string;
begin
//обнуляем массив
for i:=0 to maxpower do
koeff[i, line] := 0;
//узнаем длину строки
n:=Length(str);
k:=0;
s:='';
for i := 1 to n do
begin
if (str[i]<>'X') and (str[i]<>'+') and (str[i]<>'^')
then
if k=0 then s:=s+str[i];
else
begin
if str[i]='^' then k:=1;
if (k=1) and (str[i]<>'^')
begin
koeff[str[i]+1, line] := StrToInt(s);
k:=0;
s:='';
end;
if (k=0) and (s<>'') then
begin
koeff[str[1], line] := StrToInt(s);
s:='';
if (str[i]='-')
then s:=s+str[i];
end;
end;
end;
end; Здесь все должно быть просто. Возьмем тот же пример -7x^4-8x^2-1x-9 x^4 по сути является указателем на место в массиве. А как разбить строку не соображу. Никто не поможет? Вот нарисовал, и все равно не получается=( В чем ошибка? Почему в строка при записи пустая? Код:
procedure inputPoly(line: integer; str:string);
var
i,x,k: integer;
s:string;
begin
//обнуляем массив
for i:=0 to maxpower do
koeff[i, line] := 0;
k:=0;
//от 1 до длины строки
for i := 1 to Length(str) do
//если символ в строке
case str[i] of
'0'..'9':
begin
//если еще не было Х записываем число
if x=0
then s:=s+Str[i]
else
// if s<>'' then
begin
//Записываем в массив S в строку номером = степени
koeff[strtoint(str[i]), line]:= strtoint(s);
s:='';
x:=0;
end;
end;
'x','X':
begin
x:=1;
end;
'^':
begin
end;
'+','=':
begin
// Если минус записываем в строку второе условие для множетеля с x^1
if (str[i]='-') and (x<>1)
then s:=s+Str[i]
else
// if s<>'' then
begin
//запись для множетеля с x^1
koeff[1, line]:= strtoint(s);
s:='';
x:=0;
// s:=s+Str[i];
end;
end;
end;
end; Последний раз редактировалось M.A.D.M.A.N., 27.05.2014 в 08:54. |