Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Численное решение систем линейных алгебраических уравнений

Автор: dron4ik 2.11.2008 23:11

Привет всем!


В качестве контрольного примера подобрать уравнение 2-ого порядка. Получить решение в ручную и по нему проверить программу. После отладки программы сформировать уравнение 2-ого порядка, коэффициенты которого выбрать с использованием датчика случайных чисел( стандартная функция ПАСКАЛЯ RANDOM)

(Мы сам задаем любое уравнение и решаем его вручную) и потом пишем прогуэ



Автор: volvo 2.11.2008 23:35

Хорошее задание... И что? Не получается что-нибудь? Конкретнее, если можно...

Автор: dron4ik 3.11.2008 2:04

нет, абсолютно

Добавлено через 9 мин.
решить такое уравнение не составляет труда а вот как организовать прогу вот это....... или хотя бы блок схему

Автор: Unconnected 3.11.2008 2:29

Сложность в формировании уравнения со случайными коэффициентами?

Автор: dron4ik 3.11.2008 2:47

Да! я незнаю как организовать код программы....sad.gif((( Помогите кто нибудь....

Автор: мисс_граффити 3.11.2008 7:57

напиши алгоритм решения
как сам решал бы...
способов-то много

Автор: dron4ik 3.11.2008 15:27

вот прога но коэфициенты пользователем задает сам

void __fastcall TForm1::Button5Click(TObject *Sender)
{
//sqrt(*) квадратный корень из числа....
float A,B,C,D,X1,X2;
if (Edit9->Text=="" || Edit10->Text=="" || Edit11->Text=="" ||
Edit9->Text=="Значение A" || Edit10->Text=="Значение B" || Edit11->Text=="Значение C")
{
ShowMessage ("Необходимо ввести данные");
RichEdit1->Lines->LoadFromFile("lst/error.lst");
Image1->Picture->LoadFromFile("img/error.jpg");
StatusBar1->SimpleText = "Задание 2 - Ошибка";
Beep(1000,100);
return;
}
else
{

A=StrToFloat(Edit9->Text);
B=StrToFloat(Edit10->Text);
C=StrToFloat(Edit11->Text);
//Находим дискременант
D=B*B-4*A*C;
//Основное правило
//D > 0 " X1 <> X2
//D = 0 " X1 = X2
//D < 0 " Жаль, но корней у нас нету...

if (D>0)
{
X1=-(B+(sqrt(D)))/(2*A);
X2=-(B-(sqrt(D)))/(2*A);

RichEdit4->Text="Уровнение имеет два корня т.к дискреминант > 0\nДискрименант ="+
FloatToStr(D)+"\nПервый корень (X1) = "+FloatToStr(X1)+"\nВторой корень (X2) = "+
FloatToStr(X2);
}
else if(D==0) //один корень x1=x2 = +x1
{
X1 = -B/(2*A);
RichEdit4->Text="Уровнение имеет один корень (X1=X2) т.к дискрименант = "+
FloatToStr(D)+"\nКорень уравнения X1=X2="+FloatToStr(X1);
}
else
{
RichEdit4->Text="Уровнение не имеет корней т.к Дискрименант < 0 \nДискрименант = "+
FloatToStr(D);
//Нет корней
}

//выводим дополнительные данные
RichEdit1->Lines->LoadFromFile("lst/2.lst");
Image1->Picture->LoadFromFile("img/2.jpg");
StatusBar1->SimpleText = "Задание 2 - Выполнено";

}
}

Автор: Unconnected 3.11.2008 17:42

var
Form2: TForm2;
k1,k2,c,D:integer;
s:string;
x1,x2:real;
implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
randomize;
k1:=random(10)+1;
k2:=random(10)+1;
c:=random(10);
s:=inttostr(k1)+'X^2'+'+'+inttostr(k2)+'X'+'-'+inttostr©+'=0';
{Сгенерировали случайное квадратное уравнение}

label2.caption:=s;
D:=(k2*k2)-(4*k1*(-c)); {Нашли дискриминант}
label4.caption:=inttostr(d);
if d<0 then showmessage('Корней нет.');
{Такой ситуации не должно возникнуть при моих параметрах Random}

if d=0 then begin
label7.Caption:=floattostr(-k2/(2*k1));
{Находим один корень при дискриминанте равном 0}
end;

if d>0 then begin
label7.Caption:=floattostr((-k2+sqrt(D))/(2*k1));
{Находим два корня при дискриминанте > 0}
label8.Caption:=floattostr((-k2-sqrt(D))/(2*k1));
end;
end;
Программа решает уравнение со случайными коэффициентами...

Автор: feniks25 3.11.2008 23:43

wink.gif не могу понять, надо решать матрицу или квадратное уравнение или я условие не пойму

Автор: dron4ik 4.11.2008 3:27

Спасибо за код!!!! Весьма благодарен!!!!