![]() |
|
|
|
|
#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; |