Нужна помощь в решении задач

Тема в разделе "Pascal and Delphi", создана пользователем aaaaaaaa, 2 мар 2011.

  1. aaaaaaaa

    aaaaaaaa Гость

    Нужно написать программу позволяющую решать простейшие уравнения и системы уравнений. Исходные данные и результаты должны иметь принятый в математике вид. При отсутствии решений или бесконечном множестве решений вывести соответствующее сообщение.
    Нужна очень срочно помощь!
     
  2. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Google знает все
    СЛУ
    Вроде как квадратные уравнения
     
  3. aaaaaaaa

    aaaaaaaa Гость

    Та там чтот все не то...Пока нигде не нашел чтобы вводит можно было вводить как в математике - не просто a,b,c а допустим - x1+x3+x5+8=15...
     
  4. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    это методы решения.
    исходные данные насколько я помню - матрица коэффициентов
    2*x1+3*x3=4
    2*x1+x2-x3=0
    x1-x2+4*x3=9
    Будет задаваться как матрица
    2 0 3
    2 1 -1
    1 -1 4
    и вектор
    4
    0
    9
    интерфейс как будет уравнения вводить пользователь и как выводить результат это уже ваше дело..
     
  5. aaaaaaaa

    aaaaaaaa Гость

    Просто хотелось бы понять - как дальше действовать...
     
  6. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    говорите конкретней что непонятно если надеятесь на помощь..
     
  7. aaaaaaaa

    aaaaaaaa Гость

    Ну всмысле - матрицу сделать не проблема и вектор тоже. Я имею ввиду - как дальше использовать эту матрицу?
     
  8. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    матрицу и вектор в качестве входных параметров вместе с размерностью передаете в процедуру получаете, как я понимаю, искомый вектор значений х(i). если непонятен этот пример - реализаций метода Гаусса огромное множество.
     
  9. aaaaaaaa

    aaaaaaaa Гость

    Пасиба за помощь!!))Попробую че-нить сварганить!)
     
  10. aaaaaaaa

    aaaaaaaa Гость

    Код (Text):
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Grids, StdCtrls;
    const
    a3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    a4='1234567890';
    a5='+-=';

    type
    TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Edit2: TEdit;
    StringGrid2: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);



    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    a1:array [0..9] of string[60];
    a2:array [0..10,0..9] of real;
    implementation

    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if Edit1.Text='' then
    Edit1.Text:='Vvedite 4islo yravnenii'
    else
    StringGrid1.RowCount := StrToInt(Edit1.Text);
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var x,x1:string;
    aa:array[0..10,0..9] of real;
    b,c,i,j,p,m,k,na4,kon,kol,l:integer;
    x2:real;
    begin
    m:=0;
    x2:=0;
    kol:=0;
    na4:=0;
    kon:=0;
    if StringGrid1.Cells[0,0]='' then
    StringGrid1.Cells[0,0]:='Vvedite tekst'
    else
    for i:=0 to StrToInt(Edit1.Text) do
    begin
    a1[i]:=StringGrid1.Cells[0,i];
    for j:=1 to StrToInt(Edit1.Text) do
    if (a1[i,j]='+') or (a1[i,j]='-') then
    begin
    na4:=j;
    kol:=kol+1;
    if (kol=2) and (a1[i,j]='+') or (a1[i,j]='-') or (a1[i,j]='=') then
    kon:=j;
    end;
    for j:=na4 to kon do
    for l:=1 to length(a3) do
    if a1[i,j]=a3[l] then
    begin
    for k:=j downto 1 do
    if (a1[i,k]=a4[i+1]) or (a1[i,k]=',') then
    begin
    x:=x+a1[i,k];
    a2[(strtoint(a1[i,j+1])),j]:=strtofloat(x);
    end
    else for p:=1 to length(a4) do
    begin
    if (a1[i,m]=a4[p]) or (a1[i,m]=',') then
    x1:=x1+a4[p];
    end;
    if (a1[i,j+1]='=') or (a1[i,j+1]='=') and (a1[i,j+1]=' ') then
    x2:=x2 - strtofloat(a1[i,j+2]);
    a2[10,i]:=(x2);
    for b:=0 to StrToInt(Edit1.Text) do
    begin
    for c:=0 to 60 do
    StringGrid2.Cells[b,c]:=floattostr(a2[b,c]);
    end;
    end;
    end;
    end;
    end.
    Чтото критует...Можете поправить?
     
  11. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    что должен делать сей чудесный код. логику действий объясните, а то за таким синтаксисом ничего не видно.
     
  12. aaaaaaaa

    aaaaaaaa Гость

    Ммм - ну сей чудесный код должен считывать мои данные в массив. Вообщем - я немного затупил. Мот есть какой то альтернативный способ занести коэффициенты при переменных в массив и числа после равно тоже хотелось чтобы были там?
     
  13. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Почему бы просто не разместить на форме:
    edit label edit label edit label
    примерно
    (edit1) x1 + (edit2) x2 +...
    при этом кэфициенты считаете a[1,1]= StrToInt(edit11.text)
    Количество уравнений будет равно количеству переменных и его можно задавать отдельно в поле или спинедите. чтобы считать коэф из edit в цикле посмотрите Form.FindComponent
     
  14. aaaaaaaa

    aaaaaaaa Гость

    Просто - не все так просто!)В задании написано чтобы вводимые данные "вводились" в математическом виде - т.е нельзя использовать лэйбл т.к неизвестно будет ли использоваться переменная или нет а 0 ставить нельзя.
     
  15. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    сабж а почему не использовать StringGrid?
     
  16. aaaaaaaa

    aaaaaaaa Гость

    Всмысле?
    Просто хотелось бы чтобы можно было бы вводить уравнение целиком а не по частям...
     
  17. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    ну так что мешает сделать один столбик и кучу рядков, где каждый рядок будет соответствовать уровнению, а потом распознать коэффициенты в каждом рядке?
     
  18. aaaaaaaa

    aaaaaaaa Гость

    Ну - собственно говоря - я так и делал. Вот только чтот ничего не получилось...
     
  19. aaaaaaaa

    aaaaaaaa Гость

    Мот как нибудь подмогнешь?
     
  20. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Вот пример, распознает коэфицыенты в строке(в стринггриде)
     

    Вложения:

    • project3.zip
      Размер файла:
      4,3 КБ
      Просмотров:
      9
Загрузка...

Поделиться этой страницей