Ć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)