Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2010, 18:24   #1
kukushonka
 
Аватар для kukushonka
 
Регистрация: 26.05.2010
Сообщений: 4
По умолчанию матрица в Delphi (StringGrid)

Всем приветик, дали на дом доделать зачёт, нужна помощь умных людей.

Написать программу, обрабатывающую матрицу общего вида С(N*M), где N <7, M<9, в среде визуального программирования в соответствии с пунктами меню:
1. Ввести матрицу в таблицу строк StringGrid1;
2. Cохранить таблицу в бинарном файле ССС.dat;
3. Показать содержимое файла;
4. Все элементы каждого столбца умножить на соответствующий мах элемент;
5. Вывести преобразованную матрицу в другом Unit2, Form2 StringGrid2;

Первые 3 пункта то я сделала, да и 5 знаю теперь как, а вот проблемки с 4-ым(( Подскажите пожалуйста как тут быть, желательно, как это будет выглядеть в стринггриде
kukushonka вне форума Ответить с цитированием
Старый 26.05.2010, 18:29   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

П 4. В каждом столбце исходной матрицы находишь максимальный элемент. Затем все элементы ЭТОГО столбца умножаешь на этот самый максимальный элемент.
А вот расскажи как ты выполнила П.3 ??? Т.е как ты показала содержимое файла???
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 26.05.2010, 22:27   #3
kukushonka
 
Аватар для kukushonka
 
Регистрация: 26.05.2010
Сообщений: 4
По умолчанию

Ну у нас показать содержимое файла это просто открыть его =) код для сохранения из стринггрида в текстовый файл думаю знаеш
kukushonka вне форума Ответить с цитированием
Старый 31.05.2010, 09:41   #4
kukushonka
 
Аватар для kukushonka
 
Регистрация: 26.05.2010
Сообщений: 4
По умолчанию

Опачки, смотрю мой пример разобрали на Паскале! http://programmersforum.ru/showthread.php?t=101076

Перевела я всё это в Stringgrid, но почему то работать не хочет (is not a valid integer value), посмотрите пожалуйста что не так, вот код процедуры на паскале:
Код:
for j:=1 to m do
 begin
 mx:= a[1,j];
  for i:=2 to n do
if a[i,j]>mx then
  mx:=a[i,j];
 for k:=1 to n do
  b[k,j]:=a[k,j]*mx;
end;
а вот мой (в N9 этот поиск):
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure N2Click(Sender: TObject);

    procedure N3Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type matrix=record num0,num1,num2,num3,num4,num5,num6,num7:integer; end;
matfile=file of matrix;
var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:    TextFile;
   i, k: Integer;
 begin
   AssignFile(f, FileName);
   Rewrite(f);
   with StringGrid do
   begin
     // Write number of Columns/Rows 
    Writeln(f, ColCount);
     Writeln(f, RowCount);
     // loop through cells
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
         Writeln(F, Cells[i, k]);
   end;
   CloseFile(F);
 end;


procedure MatrixOpen(s:string);
var z:matrix;
f:matfile;
k:byte;
i,j:integer;

begin

  assignfile(f,s);
  reset(f);
  k:=0;

  while k < form1.stringgrid1.rowcount do
  with z do
  begin
    read(f,z);

    form1.stringgrid1.cells[0,k]:=inttostr(num0);
    form1.stringgrid1.cells[1,k]:=inttostr(num1);
    form1.stringgrid1.cells[2,k]:=inttostr(num2);
    form1.stringgrid1.cells[3,k]:=inttostr(num3);
    form1.stringgrid1.cells[4,k]:=inttostr(num4);
    form1.stringgrid1.cells[5,k]:=inttostr(num5);
    form1.stringgrid1.cells[6,k]:=inttostr(num6);
    form1.stringgrid1.cells[7,k]:=inttostr(num7);

    inc(k);
  end;

  closefile(f);

end;


procedure TForm1.FormCreate(Sender: TObject);
var i:integer;

begin

  //for i := 0 to stringgrid1.ColCount-1 do
    //begin
      //stringgrid1.ColWidths[i]:=20;
    //end;

  //for i := 0 to stringgrid1.RowCount-1 do
    //begin
      //stringgrid1.RowHeights[i]:=20;
    //end;

end;


procedure TForm1.N2Click(Sender: TObject);
var i,j:integer;

begin
  for i := 0 to stringgrid1.ColCount-1 do
   for j := 0 to stringgrid1.rowCount-1 do
    stringgrid1.Cells[i,j]:='';
  //form1.Cursor:=1;
end;

procedure TForm1.N3Click(Sender: TObject);
var s:string;

begin

  if form1.OpenDialog1.execute then
    s:=form1.OpenDialog1.filename;
  matrixopen(s);

end;





procedure TForm1.N6Click(Sender: TObject);
var rann:integer;
s:string;
i,j:integer;

begin
  randomize;

  s:=inputbox('Выбор случайности','Введите максимальное число которое хотите увидеть в матрице(по умолчанию 10)','');
  if s<>'' then
    rann:=strtoint(s)
  else
    rann:=10;

  for i := 0 to form1.stringgrid1.colcount - 1 do
    for j := 0 to form1.stringgrid1.rowcount - 1 do
      form1.stringgrid1.Cells[i,j]:=inttostr(random(rann) - random(rann));

end;

procedure TForm1.N9Click(Sender: TObject);
var mas:array[0..7,0..9] of integer;
i,j,k:integer;
mx:integer;

begin

  for i := 0 to form1.stringgrid1.colcount - 1 do
    for j := 0 to form1.stringgrid1.rowcount - 1 do
      if form1.stringgrid1.cells[i,j]='' then
        form1.stringgrid1.cells[i,j]:='0';

  for j := 0 to form1.stringgrid1.rowcount - 1 do
   begin
    mx:=strtoint(form1.stringgrid1.cells[0,j]);
    for i := 1 to form1.stringgrid1.colcount - 1 do
      if strtoint(form1.stringgrid1.cells[i,j])>mx then
        mx:=strtoint(form1.stringgrid1.cells[i,j]);
        for k := 0 to form1.stringgrid1.colcount - 1 do
        mas[i,j]:=mx*strtoint(form1.stringgrid1.cells[i,j]);
   end;

  for i := 0 to form2.stringgrid2.colcount - 1 do begin
  for j:=0 to  form2.stringgrid2.rowcount - 1 do
    form2.stringgrid2.cells[i,j]:=inttostr(mas[i,j]);

  form2.Show;
  //form1.Hide;

  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
 begin
   SaveStringGrid(StringGrid1, 'c:\temp.txt');
 end;

end.
kukushonka вне форума Ответить с цитированием
Старый 31.05.2010, 18:42   #5
kukushonka
 
Аватар для kukushonka
 
Регистрация: 26.05.2010
Сообщений: 4
По умолчанию

Новая проблемка, считает не по столбцам а по строкам, что заменить надо подскажите плз((

Код:
procedure TForm1.N9Click(Sender: TObject);
var mas:array[0..10,0..9] of integer;
i,j,k:integer;
mx:integer;

begin

  for i := 0 to form1.stringgrid1.colcount - 1 do
    for j := 0 to form1.stringgrid1.rowcount - 1 do
      if form1.stringgrid1.cells[i,j]='' then
        form1.stringgrid1.cells[i,j]:='0';

  for j := 0 to form1.stringgrid1.rowcount - 1 do
   begin
    mx:=strtoint(form1.stringgrid1.cells[0,j]);
    for i := 1 to form1.stringgrid1.colcount - 1 do
      if strtoint(form1.stringgrid1.cells[i,j])>mx then
        mx:=strtoint(form1.stringgrid1.cells[i,j]);
        for k := 0 to form1.stringgrid1.colcount - 1 do
        mas[k,j]:=strtoint(form1.stringgrid1.cells[k,j])*mx;

   end;

  for i := 0 to form2.stringgrid2.colcount - 1 do begin
  for j :=0 to  form2.stringgrid2.rowcount - 1 do
    form2.stringgrid2.cells[i,j]:=inttostr(mas[i,j]);

  form2.Show;
  //form1.Hide;

  end;
end;
kukushonka вне форума Ответить с цитированием
Старый 01.06.2010, 19:07   #6
PROSTO_ALENKA
Новичок
Джуниор
 
Регистрация: 01.06.2010
Сообщений: 2
По умолчанию

ОЧЕНЬ нужна помощь вот в такой задачке:
Дана матрица А размерностью n*n,где n<=20 необходимо:
Сформировать матрицу В возведением элементов исходной матрицы во вторую степень,не учитывая последнюю строку и столбец,если в полученной матрице B есть нулевые элементы вывести синий прямоугольник.Поменять местами строки с минимальными и максимальными элементами матрицы А
PROSTO_ALENKA вне форума Ответить с цитированием
Старый 01.06.2010, 19:48   #7
marko2008
Новичок
Джуниор
 
Регистрация: 08.05.2010
Сообщений: 1
По умолчанию

покажите пожалуйста наглядный пример умножения матрицы 4х4 на вектор помодулю 2 в области Галуа
marko2008 вне форума Ответить с цитированием
Старый 01.06.2010, 20:08   #8
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 kukushonka
Цитата:
Новая проблемка, считает не по столбцам а по строкам, что заменить надо подскажите плз((
Вот гляди:
Код:
StringGrid1.Cells[2, 3] := '1';  //это значит во 2-ом столбце и 3-ей строке
//не забываем, что столбцы и строки в StringGrid считаются с 0
Код:
mas[4, 6] := 5;  // это значит в 4-ой строке и в 6-ом столбце
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрица в delphi otmarozok87 Помощь студентам 2 07.05.2010 08:25
Матрица в Delphi sPan4eZ Помощь студентам 3 02.11.2009 23:41
Матрица в StringGrid Ратмир Помощь студентам 1 04.04.2009 20:21
Матрица в delphi Hegel Помощь студентам 11 10.01.2009 16:59
Матрица с использованием StringGrid Artruman Общие вопросы Delphi 2 18.12.2008 21:21