Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.05.2014, 00:00
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

Сижу не могу сообразить как реализовать.
Есть допустим многочлен
-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;      
Изображения
Тип файла: jpg 2014-05-26_19-27-21.jpg (23.8 Кбайт, 3 просмотров)

Последний раз редактировалось M.A.D.M.A.N., 27.05.2014 в 08:54.
Ответить с цитированием
  #2  
Старый 27.05.2014, 00:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Я не знаю почему в строка у вас при записи пустая, ибо неясно о какой строке идет речь. В коде больше коментариев чем кода. Локальные переменные не инициализированы. Покажите код в том виде, что у вас сейчас, только без ваших промежуточных редакций и четко задайте вопрос.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 27.05.2014, 08:39
MotoArhangel MotoArhangel вне форума
Новичок
 
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию

Сам все же разобрался =) Может надо кому будет
Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter