Ćwiczenie 2

Transkrypt

Ćwiczenie 2
Komputerowe wspomaganie projektowania – ED6, IPEE PL, rok. Akad. 2009/2010
© dr inż. Jarosław Diatczyk
Aplikacja do obliczeń macierzy kwadratowej
A. Zaprojektować interfejs użytkownika tak jak pokazano
na rysunku, umieszczając w pierwszej kolejności na
pustym formularzu dwa panele (z lewej i prawej strony).
Wstawione panele będą pełnić rolę pojemników na
pozostałe kontrolki. Ustawić właściwość Align lewego
panelu na alLeft, a prawego na alClient. Wykasować
zawartość Caption w obu panelach.
Wykorzystane kontrolki:
– paleta Standard: Label, Edit, Button, Panel,
GroupBox;
– paleta Additional: StringGrid;
– paleta Dialogs: OpenDialog, SaveDialog;
– paleta Samples: SpinEdit;
– paleta ActiveX: Chartfx.
Za pomocą inspektora obiektów zmienić następujące
właściwości kontrolek:
– StringGrid1, StringGrid2, StringGrid3:
– FixedCols:=0
– FixedRows:=0
– ColCount:=3
– RowCount:=3
– SpinEdit1:
– Value:=3
– MinValue:=2
– Chartfx1
– NSeries:=3
– Nvalues:=3
Dla wszystkich kontrolek Edit umieszczonych wewnątrz
pojemnika GroupBox (Obliczenia), należy ustawić
właściwość ReadOnly na True.
B. Oprogramować zdarzenie OnClick dla przyciska
„Generuj”:
var
i,j: Longint;
begin
with StringGrid1 do begin
ColCount:=SpinEdit1.Value;
RowCount:=SpinEdit1.Value;
for i:=0 to ColCount-1 do
for j:=0 to RowCount-1 do
Cells[i,j]:=IntToStr(Random(100));
end; // with
with StringGrid2 do begin
ColCount:=SpinEdit1.Value;
RowCount:=SpinEdit1.Value;
end; // with
with StringGrid3 do begin
ColCount:=SpinEdit1.Value;
RowCount:=SpinEdit1.Value;
end; // with
end; //OnClick
C. Oprogramować zdarzenie OnClick dla przyciska
„Zapisz”:
var
F: TextFile;
i,j: Longint;
begin
if SaveDialog1.Execute then begin
AssignFile(F,SaveDialog1.FileName);
Rewrite(F);
Write(F,StringGrid1.ColCount,' ',
StringGrid1.RowCount);
WriteLn(F);
for j:=0 to StringGrid1.ColCount-1
Komputerowe wspomaganie projektowania – ED6, IPEE PL, rok. Akad. 2009/2010
do begin
for i:=0 to StringGrid1.RowCount-1
do Write(F,
StringGrid1.Cells[i,j],' ');
WriteLn(F);
end; // for
CloseFile(F);
end; // if
end; // OnClick
D. Oprogramować zdarzenie OnClick dla przyciska
„Otwórz”:
var
F: TextFile;
i,j,x: Longint;
begin
if OpenDialog1.Execute then begin
AssignFile(F,OpenDialog1.FileName);
Reset(F);
Read(F,x);
StringGrid1.ColCount:=x;
Read(F,x);
StringGrid1.RowCount:=x;
SpinEdit1.Value:=x;
ReadLn(F);
for j:=0 to StringGrid1.ColCount-1
do begin
for i:=0 to StringGrid1.RowCount-1
do begin
Read(F,x);
StringGrid1.Cells[i,j]:=
IntToStr(x);
end; // for
ReadLn(F);
end; // for
CloseFile(F);
end; // if
end; // OnClick
E. Oprogramować zdarzenie OnClick dla przyciska
„Rysuj”:
var
i,j: Longint;
begin
// Przekazywanie danych wykresowi
// ChartFX
// Otwarcie kanału komunikacji
// z wykresem dla przekazania danych
Chartfx1.OpenDataEx(COD_VALUES,
StringGrid1.ColCount-1,
{liczba serii}
StringGrid1.RowCount-1);
{liczba wartości w serii }
for j:=0 to StringGrid1.ColCount-1 do
begin
// Ustalenie pierwszej serii (od 0)
Chartfx1.ThisSerie:=j;
// Przekazywanie wartości pierwszej
// kolumny do wykresu
for i:=0 to StringGrid1.RowCount-1
© dr inż. Jarosław Diatczyk
do Chartfx1.Value[i]:=
StrToInt(StringGrid1.Cells[j,i]);
end; // for
// Zamknięcie kanału
Chartfx1.CloseData(COD_VALUES);
end; // OnClick
F. Oprogramować zdarzenie OnClick dla
przyciska „Sprawdź”:
var
i,j,k,Wymiar: Longint;
x: Single;
Ok: Boolean;
begin
Ok:=True;
Wymiar:=StringGrid1.RowCount-1;
for i:=0 to Wymiar do begin
for j:=0 to Wymiar do begin
x:=0;
for k:=0 to Wymiar do x:=x+
StrToInt(StringGrid1.Cells[i,k])
*StrToFloat(StringGrid3.Cells[k,j]);
if i=j then begin
if (x>1.05) or (x<0.95) then
Ok:=False;
end else if (x>0.05) or
(x<-0.05) then Ok:=False;
end; // for
end; // for
if Ok then ShowMessage('Macierz
poprawna!') else ShowMessage
('Macierz NIE poprawna!');
end;
G. Oprogramować zdarzenie OnCreate dla formularza
(Form1):
begin
Randomize; // inicjalizacja
// generatora liczb pseudolosowych
OpenDialog1.InitialDir:=
ExtractFilePath(Application.ExeName);
SaveDialog1.InitialDir:=
ExtractFilePath(Application.ExeName);
end; // OnCreate
H. Samodzielnie oprogramować zdarzenie OnClick dla
przycisku „Oblicz”, którego działanie polega na:
– wyznaczeniu wartości minimalnej w macierzy i
wpisania jej do odpowiedniego pola edycji
– wyznaczeniu wartości maksymalnej w macierzy
i wpisania jej do odpowiedniego pola edycji
– obliczeniu wyznacznika macierzy i wpisania
jego do odpowiedniego pola edycji (np. wg
algorytmu ze strony - http://4programmers.net/
Delphi/Gotowce/Obliczanie_wyznacznika_maci
erzy)
– wyznaczenie macierzy transponowanej
– wyznaczenie macierzy odwrotnej (np. wg
algorytmu ze strony - http://4programmers.net/
Algorytmy/Odwracanie_macierzy)