obliczane układu równań + sprawdzanie
Wyświetlono wersję archiwalną tematu "obliczane układu równań + sprawdzanie" z forum pl.comp.lang.delphi
Przemek
Piszę program w delphi. Ma sprawdzać poprawnosć rozwiązania układu równań. Ma
wyświetlać takie komunikaty:

Tak, dobrze to obliczyłeś
pOMYLIłEś SIę

Jak to zrobić, bo nie moge sobie poradzić z instrukcją warunkowa?

p.s. jak połączyć dwa programy w 1 (bo to ma być druga część programu.
Pierwsza ma obliczać. Wszystko w osobnych okienkach)

Kod, który na razie zrobiłem:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Edit7: TMenuItem;
    Window1: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Label5: TLabel;
    Label6: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    procedure Window1Click(Sender: TObject);
    procedure Edit7Click(Sender: TObject);
    procedure File1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Window1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Edit7Click(Sender: TObject);
begin
showmessage('o mnie info')
end;

procedure TForm1.File1Click(Sender: TObject);
begin
Form1.ShowModal;
end;

procedure TForm1.Button1Click(Sender: TObject);

var
a, b, c, d, e, f, o, p, r, x, y : Real;

begin
a := StrToInt(Edit1.text);
b := StrToInt(Edit2.text);
c := StrToInt(Edit3.text);
d := StrToInt(Edit4.text);
e := StrToInt(Edit5.text);
f := StrToInt(Edit6.text);

o := a * e - b * d;
p := c * e - b * f;
r := a * f - c * d;

x := p / o;
y := r / o;

var
x, y, k, l : Boolean;
if x := k and y := l;

end;

end.

talthen.z-serwera...@nospam.pl

var
a, b, c, d, e, f, o, p, r, x, y : Real;

begin


[ciach]

var
x, y, k, l : Boolean;
if x := k and y := l;

end;

end.


To nie ma prawa dzialac. Pascal to jezyk ludzi, ktorzy lubia porzadek a nie
syf i chlew jak C++-sowcy :P

var dajemy zawsze przed begin danej funkcji.

Pozdrawiam,
Talthen


To nie ma prawa dzialac. Pascal to jezyk ludzi, ktorzy lubia porzadek a nie
syf i chlew jak C++-sowcy :P

var dajemy zawsze przed begin danej funkcji.


Ja to pisze w delphi... Prosze o pomoc, bo jutro musze oddać ten program by
zaliczyć informatykę (klasa maturalna). Proszę o pomoc...

Kod, żeby to działało...

Jak zastosować funkcję jeżeli...
jezeli k=x i l=y to komunikat dobrze rozwiązałeś
jeżeli k nie równa sie x i l nie równa sie y to komunikat złe rozwiązanie

Solaris

: : : var
: a, b, c, d, e, f, o, p, r, x, y : Real;
:
: begin
:
: [ciach]
:
: var
: x, y, k, l : Boolean;
: if x := k and y := l;

Nieźle się opier******* na tej informatyce, że operator przypisania mylisz
z operatorem porównania.

talthen.z-serwera...@nospam.pl
: var
: x, y, k, l : Boolean;
: if x := k and y := l;

Nieźle się opier******* na tej informatyce, że operator przypisania mylisz
z operatorem porównania.


Troche nie tej osobie odpisales :P Ale przyznam, ze masz racje- nie
zwrocilem uwagi na poczatku.

Pozdrawiam,
Talthen

Przemek

: var
: x, y, k, l : Boolean;
: if x := k and y := l;

| Nieźle się opier******* na tej informatyce, że operator przypisania mylisz
| z operatorem porównania.

Troche nie tej osobie odpisales :P Ale przyznam, ze masz racje- nie
zwrocilem uwagi na poczatku.


Mistrzem świata to ja nie jestem. Raczej programista początkujący. A wy się na
tym znacie... PROSZE O POMOC!!!!!!!!!!!!!!

talthen.z-serwera...@nospam.pl
 unit Unit2;

 interface

 uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

 type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Edit7: TMenuItem;
    Window1: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Label5: TLabel;
    Label6: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    procedure Window1Click(Sender: TObject);
    procedure Edit7Click(Sender: TObject);
    procedure File1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 var
  Form1: TForm1;

 implementation

 {$R *.dfm}

 procedure TForm1.Window1Click(Sender: TObject);
 begin
 close;
 end;

 procedure TForm1.Edit7Click(Sender: TObject);
 begin
 showmessage('o mnie info')
 end;

 procedure TForm1.File1Click(Sender: TObject);
 begin
 Form1.ShowModal;
 end;

 procedure TForm1.Button1Click(Sender: TObject);

 var
 a, b, c, d, e, f, o, p, r, x, y : Real;
  x, y, k, l : Boolean;
 begin
 a := StrToInt(Edit1.text);
 b := StrToInt(Edit2.text);
 c := StrToInt(Edit3.text);
 d := StrToInt(Edit4.text);
 e := StrToInt(Edit5.text);
 f := StrToInt(Edit6.text);

 o := a * e - b * d;
 p := c * e - b * f;
 r := a * f - c * d;

//Nie wiem co ma sie stac z x i y ;/
//O ile o nie jest rowne 0, to w bedzie zawsze ladowala wartosc Real, a Ty
chcesz miec typ Boolean.

 x := p / o;
 y := r / o;

 if ((x= k) and (y = l)) showMessage('OK')
else showMessage('ZLE');

 end;

 end.

Piotr Dałek

Ja to pisze w delphi... Prosze o pomoc, bo jutro musze oddać ten program by zaliczyć informatykę (klasa maturalna). Proszę o pomoc...


Klasa maturalna? I nie umiesz takiego banału zrobić? To może i lepiej,
że nie zaliczysz...

Pozdrawiam,

Przemyslaw Osmanski

procedure TForm1.File1Click(Sender: TObject);
begin
Form1.ShowModal;
end;


Co to ma byc???

procedure TForm1.Button1Click(Sender: TObject);

var
a, b, c, d, e, f, o, p, r, x, y : Real;


Optymalizuj, po kiego tyle zmiennych? I jak juz to wszystkie na poczatku
a nie gdzies tam w kodzie...
Inna bajka jesli a,b itp masz real to po jakiego robisz StrToInt?
StrToFloat nie ma? A pozatym dlaczego uzywasz Real? To jest typ
zgodnosciowy z pascalem, uzyj albo single albo double.

begin
a := StrToInt(Edit1.text);
b := StrToInt(Edit2.text);
c := StrToInt(Edit3.text);
d := StrToInt(Edit4.text);
e := StrToInt(Edit5.text);
f := StrToInt(Edit6.text);


Gore wywalamy i skracamy

o := StrToFloat(Edit1.text) * StrToFloat(edit5.text) -
StrToFloat(edit2.text) * StrToFloat(edit4.text);
x := ( StrToFloat(edit3.text) * StrToFloat(edit5.text) -
StrToFloat(edit3.text) * StrToFloat(edit6.text) ) / o;
y := (StrToFloat(edit1.text) * StrToFloat(edit6.text) -
StrToFloat(edit3.text) * StrToFloat(edit4.text) ) / o;

o := a * e - b * d;
p := c * e - b * f;
r := a * f - c * d;

x := p / o;
y := r / o;


To tez wywalamy

var
x, y, k, l : Boolean;
if x := k and y := l;


i to takoz ;)

Dlaczego x,y ma byc boolean??? Z poczatku kodu wynika ze raczej double,
float lub cos kolo tego...
pozatym z takiej deklaracji wynika ze k i l zawsze beda
niezdefiniowane... wiec teoretycznie nigdy nie bedzie wiadomo jaki
bedzie wynik...

jesli chodzi o sama konstrukcje to:
if ((x=k) and (y=l)) then //costam
else //costam...

Tylko cos w tym k i l musi byc, nie?

Tocbac

Piszę program w delphi. Ma sprawdzać poprawnosć rozwiązania układu równań.
Ma
wyświetlać takie komunikaty:


No dobrze. Na przyszłość ucz się pilnie.

Tak, dobrze to obliczyłeś
pOMYLIłEś SIę


Przecież to rozwiązywanie układ 2 równań liniowych o 2 niewiadomych
za pomocą wyznaczników (wzór Cramera).
   Zależnie od współczynników układ może nie mieć rozwiązania. To
przecież nie zależy od mojej zdolności matematycznej. Jeśli współczynniki
są takie, ze układ nie ma rozwiązania to nie możesz twierdzić: "Pomyliłeś
się".

Dla zadanego zestawu współczynników możesz twierdzić tylko:
1. układ ma jedno rozwiązanie.
2. układ jest sprzeczny
3. układ ma nieskończenie wiele rozwiązań.

Jak to zrobić, bo nie moge sobie poradzić z instrukcją warunkowa?

p.s. jak połączyć dwa programy w 1 (bo to ma być druga część programu.
Pierwsza ma obliczać. Wszystko w osobnych okienkach)

Kod, który na razie zrobiłem:

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
 Dialogs, Menus, StdCtrls;

type
 TForm1 = class(TForm)
   MainMenu1: TMainMenu;
   File1: TMenuItem;
   Edit7: TMenuItem;
   Window1: TMenuItem;
   Label1: TLabel;
   Label2: TLabel;
   Label3: TLabel;
   Label4: TLabel;
   Label7: TLabel;
   Label8: TLabel;
   Label9: TLabel;
   Label10: TLabel;
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   Edit4: TEdit;
   Edit5: TEdit;
   Edit6: TEdit;
   Button1: TButton;
   Label5: TLabel;
   Label6: TLabel;
   Edit8: TEdit;
   Edit9: TEdit;
   Label11: TLabel;
   Label12: TLabel;
   Label13: TLabel;
   Label14: TLabel;
   procedure Window1Click(Sender: TObject);
   procedure Edit7Click(Sender: TObject);
   procedure File1Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Window1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Edit7Click(Sender: TObject);
begin
showmessage('o mnie info')
end;

procedure TForm1.File1Click(Sender: TObject);
begin
Form1.ShowModal;


O co chodzi??? Przecież Form1 już jest wyświetlony.
Próba wywołania ShowModal dla takiego form powoduje
wyjątek.

procedure TForm1.Button1Click(Sender: TObject);

var
a, b, c, d, e, f, o, p, r, x, y : Real;

begin
a := StrToInt(Edit1.text);
b := StrToInt(Edit2.text);
c := StrToInt(Edit3.text);
d := StrToInt(Edit4.text);
e := StrToInt(Edit5.text);
f := StrToInt(Edit6.text);

o := a * e - b * d;
p := c * e - b * f;
r := a * f - c * d;

x := p / o;
y := r / o;

var
x, y, k, l : Boolean;
if x := k and y := l;


1. W bloku begin ... end nie można deklarować zmiennych.
2. Nawet jeśli p.1 jest dozwolony to aby porównać zmienne
  to najpierw trzeba im nadać jakieś wartości, czego tu nie widać.
3. To chyba nie tak. Obliczysz wyznaczniki i powinieneś na
  podstawie ich wartości wyrokować co do istnienia rozwiązań układu.
4. Sprawdzenie powinno być chyba tak:

Jeśli o <0 to
   jest jedno rozwiązanie (x := p / o i y := r / o)
w przeciwnym razie (czyli o = 0) jeśli p <0 lub r <0 to
  układ jest sprzeczny (nie ma rozwiązania)
w przeciwnym razie (czyli o = 0, p = 0, r = 0) to
   układ jest sprzeczny lub nieoznaczony (nieskończenie wiele roz.)

Jeśli chcesz rozważyć i ten ostatni przypadek to chyba tak:

jeśli a <0 lub b <0 lub d <0 lub e <0 then
   układ ma nieskończenie rozwiązań
   (np. dla a <0 to
   x = (c - b*y) / a oraz y = dowolny spełniają dany układ)
w przeciwnym razie jeśli c <0 lub f <0 to
   układ sprzeczny
w przeciwnym razie (czyli a, b, c, d, e, f = 0) to
   układ nieoznaczony - każde x i y dowolne spełniają układ.

Czyli w sumie jest tak:

procedure TForm1.Button1Click(Sender: TObject);
var
  a, b, c, d, e, f, o, p, r, x, y : Integer;
  s: string;
begin
  a := StrToInt(Edit1.text);
  b := StrToInt(Edit2.text);
  c := StrToInt(Edit3.text);
  d := StrToInt(Edit4.text);
  e := StrToInt(Edit5.text);
  f := StrToInt(Edit6.text);

  o := a * e - b * d;
  p := c * e - b * f;
  r := a * f - c * d;

  if o <0 then
  begin
     x := p / o;
     y := r / o;
  end
  else if (p <0) or (r <0) then
     ShowMessage('układ jest sprzeczny!!!')
  else if (a <0) or (b <0) or (d <0) or (e <0) then
  begin
     if a <0 then
        s := 'x = (c - b*y) / a, y = dowolny'
     else if b <0 then
        s := 'y = (c - a*x) / b, x = dowolny'
     else if d <0 then
        s := 'x = (f - e*y) / d, y = dowolny'
     else
        s := 'y = (f - d*x) / e, x = dowolny';
      ShowMessage(s);
  end
  else if (c <0) or (f <0) then
     ShowMessage('układ sprzeczny')
  else
     ShowMessage('x = dowolny, y = dowolny);
end;

Pisane w czytniku, może zawierać błędy, mogłem coś przeoczyć,
wszelkie udoskonalenie pożądane itd.

ps. Przyjąłem taki układ równań:

a*x + b*y = c
d*x + e*y = f

oraz współczynniki całkowite.

Tocbac.

Tocbac

oraz współczynniki całkowite.


Aha, x i y jako Double. Nie tylko ze względu na dzielenie ( / )
ale obliczamy je z "wysoką" dokładnością (zatem nie DIV)

Tocbac.

Przemek

[ciach]

 var
 a, b, c, d, e, f, o, p, r, x, y : Real;
  x, y, k, l : Boolean;


to x i y czym będa?

 begin
 a := StrToInt(Edit1.text);
 b := StrToInt(Edit2.text);
 c := StrToInt(Edit3.text);
 d := StrToInt(Edit4.text);
 e := StrToInt(Edit5.text);
 f := StrToInt(Edit6.text);

 o := a * e - b * d;
 p := c * e - b * f;
 r := a * f - c * d;

//Nie wiem co ma sie stac z x i y ;/
//O ile o nie jest rowne 0, to w bedzie zawsze ladowala wartosc Real, a Ty
chcesz miec typ Boolean.

 x := p / o;
 y := r / o;

 if ((x= k) and (y = l)) showMessage('OK')
else showMessage('ZLE');

 end;


z góry dzięki, ale wyskakują błędy

Przemek

Przecież to rozwiązywanie układ 2 równań liniowych o 2 niewiadomych
za pomocą wyznaczników (wzór Cramera).
   Zależnie od współczynników układ może nie mieć rozwiązania. To
przecież nie zależy od mojej zdolności matematycznej. Jeśli współczynniki
są takie, ze układ nie ma rozwiązania to nie możesz twierdzić: "Pomyliłeś
się".

Dla zadanego zestawu współczynników możesz twierdzić tylko:
1. układ ma jedno rozwiązanie.
2. układ jest sprzeczny
3. układ ma nieskończenie wiele rozwiązań.


Nie o to mi chodzi. To można wykorzystać i owszem w pierwszej części mojego
programu, który już działa.

Chodzi mi o program sprawdzający - wpisujesz równania i wartość x i wartość y.
Program ma podać, czy obliczyłeś poprawnie, czy źle.

Jak sprawdzić czy dana liczba jest liczbą pierwszą
string -> float - sprawdzenie poprawnosci stringa przed konwersja
Jaka funkcja systemowa potrafi sprawdzic czy w ListBox znajduje sie okreslony String??
Jaka funkcja sprawdzi, czy rekord jest zajety? [lock, TTable]
  • czy ktos powie nam dobranoc
  • monitor do monitoringu
  • sound blaster kazdy kto posiada prosze o pomoc
  • ozon3 ipb 2
  • program ber sher
  • simlok za darmo sagem
  • firefox backup
  • bank of ireland millenium scholars trust
  • szafki tv sklep
  • Zestaw wątków z for dyskusyjnych ; Start