1 Востаннє редагувалося Torbins (16.09.2014 10:53:54)

Тема: Інтерфейс для вводу динамічного двомірного масиву

Задана дійсна квадратна матриця порядку n ( n ≥2).
1. Знайти суму елементів вказаного користувачем стовпця.
2. Знайти найбільше зі значенні елементів двох рядків, вказаних користувачем.
На паскалі в консолі я  знаю як реаізувати  а  з делфі ніколи не працював.
Допоможіть сворити інтерфейс ввод  і вивід матриці  якщо  не  складно  поділіться  інформацією на цю  тему

2

Re: Інтерфейс для вводу динамічного двомірного масиву

Колись дуже давно люди працювали на комп'ютерах безпосередньо з пам'яттю і писали всюди числа, переважно двійкові (іноді навіть не писали, а виставляли тумблери чи проколювали дірки). Це було незручно, тому був придуманий командний рядок - пишеш команду і ім'я файла, а програма вже підставляє замість цих рядків числа. Далі з'явилися командери - вже не треба було вміти писати, досить було прочитати на екрані назву файла і номер функціональної клавіші для потрібної дії. Наступною стадією деградації став графічний інтерфейс - вже не треба вміти читати-писати, а досить натиснути кнопку з малюнком...
Ну так от, я до чого: Delphi - це якраз представник останньої стадії деградації: всі елементи винесені на панель, читати майже не треба. А тепер поясніть, яким чином ви примудрилися не знайти на панельці StringGrid?

3

Re: Інтерфейс для вводу динамічного двомірного масиву

var
  Form1: TForm1;
  a: array of array of real;
  n: integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
//зададим некоторые параметры таблицы
with StringGrid1 do
 begin
  fixedCols:=0;
  fixedRows:=0;
  defaultColwidth:=35;
  scrollBars:=ssBoth
 end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var i,j,code:integer;
begin
randomize;
//проверим ввод размеров
val(Edit1.Text,n,code);
if (code<>0)or(n<2)then
 begin
  ShowMessage('Неверно введен размер матрицы');
  Edit1.Clear;
  Edit1.SetFocus;
  exit
 end;
StringGrid1.RowCount:=n;
StringGrid1.ColCount:=n;
Setlength(a,n,n);
for i:=0 to n-1 do
for j:=0 to n-1 do
 begin
  a[i,j]:=10*random;
  StringGrid1.Cells[j,i]:=FloatToStrF(a[i,j],ffFixed,6,2)
 end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var i,ns,ns1,ns2,code:integer;
    s,mx:real;
begin
//проверим ввод номеров столбца и строк
val(Edit2.Text,ns,code);
if (code<>0)or not(ns in [1..n])then
 begin
  ShowMessage('Неверно введен номер столбца');
  Edit2.Clear;
  Edit2.SetFocus;
  exit
 end;
val(Edit3.Text,ns1,code);
if (code<>0)or not(ns1 in [1..n])then
 begin
  ShowMessage('Неверно введен номер первой строки');
  Edit3.Clear;
  Edit3.SetFocus;
  exit
 end;
val(Edit4.Text,ns2,code);
if (code<>0)or not(ns2 in [1..n])or(ns2=ns1)then
 begin
  ShowMessage('Неверно введен номер второй строки');
  Edit4.Clear;
  Edit4.SetFocus;
  exit
 end;
s:=0;
for i:=0 to n-1 do
s:=s+a[i,ns-1];
mx:=a[ns1-1,0];
for i:=0 to n-1 do
 begin
  if a[ns1-1,i]>mx then mx:=a[ns1-1,i];
  if a[ns2-1,i]>mx then mx:=a[ns2-1,i];
 end;
Memo1.Clear;
Memo1.Lines.Add('Сумма в столбце '+inttostr(ns)+'='+
                 FloatToStrF(s,ffFixed,6,2));
Memo1.Lines.Add('Максимальный элемент в строках '+
                 inttostr(ns1)+' и '+inttostr(ns2)+'='+
                 FloatToStrF(mx,ffFixed,6,2));
 
end;

Можливо кому знадобиться

Подякували: koala, Torbins2