Home > IT, Programe > Aplicatie de rezolvare a unei probleme dintr-un test de inteligenta

Aplicatie de rezolvare a unei probleme dintr-un test de inteligenta

Acum ceva timp în urmă un prieten îmi dă spre rezolvare o problemă:

Avându-se 20 de lei, să se cumpere 20 de ouă de diferite sortimente, cunoscându-se preţurile acestora: 3 lei oul de gâscă, 2 lei oul de raţă şi 0.5 lei oul de găină. Să se cheltuie toţi banii (nu mai mult sau mai putin de 20 de lei), dar să se cumpere exact 20 de ouă (nu contează câte din fiecare sortiment).

A trebuit să pun mâna pe hârtie ca să rezolv problema şi pentru că mi s-a părut interesantă am realizat o aplicaţie în Turbo Delphi Explorer care permite rezolvarea problemelor de acest tip, putându-se schimba preţurile, suma de bani şi numărul de ouă. Soluţiile (dacă există mai multe) sunt afişate toate într-un tabel.

Pentru interfaţa grafică am utilizat următoarele componente: 4 GroupBox-uri (cutii de grupare), 3 Button-uri (butoane), 1 CheckBox (cutii de validare), 5 Edit-uri (cutii de editare), 7 Label-uri (etichete) şi 1 StringGrid (matrice de cutii de editare) ordonate ca în figura următoare:

01

Evenimentele pe care le-am ataşat Form-ului (ferestrei) sunt următoarele: eveniment la crearea ferestrei, evenimente la apăsarea butoanelor Button1, Button2, Button3. Suplimentar am realizat două funcţii: una de transformare din text în număr real – StringToReal şi una de transformare din număr real în text (pentru afişarea valorilor calculate) – RealToString. Totodată am mai creat separat o procedură de calculare a soluţiilor, pe care am denumit-o OuaBani.

02

Listingul codului sursă (fişierul Unit1.pas) este următorul:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
GroupBox2: TGroupBox;
Edit4: TEdit;
GroupBox3: TGroupBox;
Edit5: TEdit;
CheckBox1: TCheckBox;
GroupBox4: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Type Vector=Array [1..1000] Of Integer;
Function StringToReal (t:String):Real;
Var x:Real;
c:Integer;
Begin
Val (t,x,c);
If c=0
Then
StringToReal:=x
Else
StringToReal:=0;
End;
Function RealToString (x:real):string;
Var t:String;
Begin
Str (x,t);
Result:=t;
End;
Procedure OuaBani (a,b,c,d,e:Real;Var x,y,z:Vector;Var n:Integer);
Var i,j:Integer;
xx,yy,zz:Real;
Begin
i:=0;
With Form1 Do
Begin
StringGrid1.Visible:=True;
Label5.Visible:=True;
Label6.Visible:=True;
Label7.Visible:=True;
End;
If b-c=0
Then
With Form1 Do
Begin
StringGrid1.Visible:=False;
Label5.Visible:=False;
Label6.Visible:=False;
Label7.Visible:=False;
End
Else
For j:=0 To Trunc (e) Do
Begin
xx:=j;
yy:=(d-c*e-(a-c)*xx)/(b-c);
If (yy>=0) And (frac (yy)=0)
Then
Begin
zz:=e-(xx+yy);
If (zz>=0) And (frac (zz)=0)
Then
Begin
Inc (i);
x [i]:=Trunc (xx);
y [i]:=Trunc (yy);
z [i]:=Trunc (zz);
If (Form1.CheckBox1.Checked) And ((x [i]=0) Or (y [i]=0) Or (z [i]=0))
Then
Dec (i);
End;
End;
End;
n:=i;
End;
Procedure TForm1.Button1Click(Sender: TObject);
Var x,y,z:Vector;
i,n:Integer;
Begin
OuaBani (StringToReal (Edit1.Text),StringToReal (Edit2.Text),StringToReal (Edit3.Text),StringToReal (Edit4.Text),StringToReal (Edit5.Text),x,y,z,n);
If n=0
Then
Begin
Stringgrid1.visible:=false;
Label5.visible:=false;
Label6.visible:=false;
Label7.visible:=false;
Label4.Caption:='Problema nu are solutie!'
End
Else
Begin
StringGrid1.Visible:=True;
Label5.Visible:=True;
Label6.Visible:=True;
Label7.Visible:=True;
If n=1
Then
Label4.Caption:='Problema data are doar o solutie'
Else
Label4.Caption:='Problema data are '+IntToStr (n)+' solutii';
StringGrid1.RowCount:=n;
For i:=1 To n Do
Begin
StringGrid1.cells [0,Pred (i)]:=IntToStr (i);
StringGrid1.Cells [1,Pred (i)]:=IntToStr (x [i]);
StringGrid1.Cells [2,Pred (i)]:=IntToStr (y [i]);
StringGrid1.Cells [3,Pred (i)]:=IntToStr (z [i]);
End;
End;
End;
Procedure TForm1.Button2Click(Sender: TObject);
Begin
ShowMessage ('Se da urmatoarea problema:'+#10#13+#10#13
+'Avandu-se 20 de lei,'+#10#13
+'sa se cumpere 20 de oua de diferite sortimente,'+#10#13
+'cunoscandu-se preturile acestora:'+#10#13+#10#13
+'          3 lei oul de gasca'+#10#13
+'          2 lei oul de rata'+#10#13
+'          0.5 lei oul de gaina.'+#10#13+#10#13
+'Sa se cheltuie toti banii (nu mai mult sau mai putin de 20 de lei)'+#10#13
+'Sa se cumpere exact 20 de oua (nu conteaza cate de fiecare sortiment).');
End;
Procedure TForm1.Button3Click(Sender: TObject);
Begin
Edit1.Text:='3';
Edit2.Text:='2';
Edit3.Text:='0.5';
Edit4.Text:='20';
Edit5.Text:='20';
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
If ParamCount=5
Then
Begin
Edit1.Text:=ParamStr (1);
Edit2.Text:=ParamStr (2);
Edit3.Text:=ParamStr (3);
Edit4.Text:=ParamStr (4);
Edit5.Text:=ParamStr (5);
end;
Button1Click (Sender);
End;
end.

Aplicaţia lansată în execuţie este ilustrată mai jos:

03

Categories: IT, Programe Tags: , , , , , , ,
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: