|
#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. |
#2
|
||||
|
||||
Я не знаю почему в строка у вас при записи пустая, ибо неясно о какой строке идет речь. В коде больше коментариев чем кода. Локальные переменные не инициализированы. Покажите код в том виде, что у вас сейчас, только без ваших промежуточных редакций и четко задайте вопрос.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Сам все же разобрался =) Может надо кому будет
Код:
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; x:=0; s:=''; //от 1 до длины строки for i := 1 to Length(str) do //если символ в строке case str[i] of '0'..'9': begin //если еще не было Х записываем число в строку if x=0 then s:=s+Str[i]; // Если был x и ^ тогда if (x=1) and (k=1) then begin //Записываем в массив S в строку номером = степени koeff[strtoint(str[i]), line]:= strtoint(s); s:=''; x:=0; k:=0; end; // Если конец строки записываем число if (i=Length(str)) then koeff[0, line]:= strtoint(s); end; 'x','X': begin //встретили x x:=1; // если просто x или -x добавляем 1 if (s='') or (s='-') then s:=s+'1'; // Если x последний в строке if i=Length(str) then begin koeff[1, line]:= strtoint(s); s:=''; x:=0; k:=0; end; end; '^': begin //Встретили ^ k:=1; end; '+','-': begin // Если был x но небыло ^ if (x=1) and (k=0) then begin koeff[1, line]:= strtoint(s); s:=''; x:=0; k:=0; end; // Если минус записываем в строку if (str[i]='-') then s:=s+Str[i]; end; end; end; |