Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 5
1

Разбиение уравнения на два

04.04.2012, 10:44. Показов 548. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Помогите пожалуйста с дипломом.
На данный момент есть два Edit'a, в которых записываются два уравнения и считываются в файл следующим образом:
Delphi
1
2
3
4
5
k:=TStringList.Create;
k.Add(Form1.Edit1.Text);
k.Add(Form1.Edit2.Text);
k.SaveToFile('C:\Users\...');
k.Free;
Данным образом эти уравнения записываются в текстовый файл удобным мне видом, построчно, потом мне их проще считать тут же для матлаба и запустить его скрипт выполняться.
Проблема следующая, нужно убрать один Edit, чтобы в один оставшийся пользователь записывал уравнение вида:
(1+3*x-5*x^2)+(3-7*x+9*x^2-2*x^3)*s+(7*x-5*x^3)*s^2+...
Это уравнение надо разбить на два и записать оба в файл. Разбиение надо произвести таким образом, чтобы получились следующие уравнения:
1: (1+3*x-5*x^2)-(7*x-5*x^3)*s^2+(...)*s^4-(...)*s^6+...
2: (3-7*x+9*x^2-2*x^3)*s-(...)*s^3+(...)*s^5-...

Как-то у меня совсем все плохо с разбором текста в Delphi.
Наброски кода:
Delphi
1
2
3
4
a[i]:=Form1.Edit1.Text;
len:=length(a);
for i:=0 to len do
if a[i]='s' and (StrToInt(a[i]+2) mod 2=0) then
Все что пока пришло в голову, и то тут получается не запишется первая скобка, без s которая вообще. Точнее тут вообще ничего не запишется.
Не могу додумать как записывать длину уже считанных символов, чтобы когда напоролся на "s" записал все знаки до и 2 знака после, ну и "+\-" чтобы вставлять.

Помогите пожалуйста, а то диплом пишу, сам уже не соображаю ничего.
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Delphi следует выделить этот код и на панели редактирования сообщения нажать кнопку: "DELPHI".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2012, 10:44
Ответы с готовыми решениями:

Разбиение одного столбца на два
Всем привет! Столкнулся с такой проблемой, как можно осуществить разбиение одного столбца в...

Разбиение списка на два подсписка
Задание: Написать функцию, которая разбивает список на два подсписка: элементы из начала списка,...

Разбиение строки по два элемента
Я в консоле сделал так, что введёное число переводится из 10 в 16 СС (например 20000 = 4Е20)....

Lisp списки , разбиение на два списка
Дан список целых чисел , необходимо разбить на два списка, поместив в первый отрицательные, а во...

3
24 / 24 / 7
Регистрация: 01.11.2011
Сообщений: 53
04.04.2012, 12:04 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TfMain.btn5Click(Sender: TObject);
var s, s_temp, s_even, s_uneven : string;
begin
  s_even := '';
  s_uneven := '';
  s := Trim(Edit1.Text);
  s_temp := Copy(s, 1, Pos(')', s));
  // Обработаем выражения при нулевой и первой степенях s
  if (s[Pos(')', s) + 1] = '+') or (s[Pos(')', s) + 1] = '-') then
  begin
    s_even := s_temp;
    s := Copy(s, Pos(')', s) + 1, length(s));
  end
  else
    if s[1] = '(' then
      s := '+' + s;
  s := StringReplace(s, ')*s+', ')*s^1+', []);
  s := StringReplace(s, ')*s-', ')*s^1-', []);
 
  // Теперь уравнение выглядит так: -(+)(...)*s^1-(+)(...)*s^2-(+)(...)*s^3-...
  while Length(s) > 0 do
  begin
    s_temp := Copy(s, 1, Pos('^', s) + 1);
    if (Ord(s[Pos('^', s) + 1]) mod 2) = 0 then
      s_even := s_even + s_temp
    else
      s_uneven := s_uneven + s_temp;
    s := Copy(s, Pos('^', s) + 2, Length(s));
  end;
 
  memo1.Lines.Add('1:  '  + s_even);
  memo1.Lines.Add('2:  '  + s_uneven);
Можно еще лишние плюсики в начале строки убирать, степень ^1, ну отшлифовать, короче...
1
252 / 138 / 45
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
04.04.2012, 13:44 3
вот посмотри

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
unit Unit1;
 
interface
 
uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, 
  QDialogs, QStdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  i:word;
  nachalo,schet:word;
  str,str1,str2:string;
 
implementation
 
{$R *.xfm}
 
procedure razdel (konec:word);
begin
case (schet mod 2) of
    0:  str1:=str1+copy(str,nachalo,konec);
    1:  str2:=str2+copy(str,nachalo,konec);
    end;
    inc(schet);
    nachalo:=i;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
str:=Edit1.Text;
str1:='';
str2:='';
schet:=0;
nachalo:=1;
for i:=1 to Length(str) do
 if (i=Length(str)) then razdel((i-nachalo)+1) else
  if ((str[i]='+') or (str[i]='-')) and (str[i+1]='(') then razdel((i-nachalo));
 Label1.Caption:=str1;
 Label2.Caption:=copy(str2,2,length(str2));
end;
 
end.
Вложения
Тип файла: rar разделение строк.rar (143.8 Кб, 1 просмотров)
0
252 / 138 / 45
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
04.04.2012, 13:44 4
о, блин.. опоздал я ))
 Комментарий модератора 
Будет два решения в теме - это хорошо.
0
04.04.2012, 13:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2012, 13:44
Помогаю со студенческими работами здесь

Разбиение списка на два примерно равной длины
задача простая но решить не могу :(( буду признателен. возможно скину небольшое поощрение на веб...

Тема: Списки. (разбиение списка на два списка одинаковой длины)
Сдрасти. Прошу помочь решить следующую задачу. Буду очень благодарен. Написать программу...

Разбиение текстового файла, содержащего четное количество строк, на два текстовых файла
1 разбиения текстового файла, содержащего четное количество строк, на два текстовых файла, в каждый...

Union разбиение 64-битного слова на два 32-битных слова
Написать программу, реализующую разбиение 64-битного слова на два 32-битных слова с помощью UNION

Разбиение списка на два списка одинаковой длины
Помогите пожалуйста!!! НЕ оставьте в беде!!!!! Срочно нужна помощь!!!!!!!!!!!!!!!!! Написать...

Разбиение одного массива на два массива
Имеется массив с данными A. Необходимо в массив B записать четные значения массива A, а в массив C...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru