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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 00:09   #1
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
Печаль Проблема с массивом . Delhi.

Привет. Вот собственно задание : Из матрицы n-го порядка получить матрицу порядка n-1 путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.
Вот мой код.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

 const
  nmax=5;   //ìàêñ ðàçìåð
 type
 mas1=array[1..nmax,1..nmax] of extended;
 mas2=array[1..nmax,1..nmax] of extended;




var
  Form1: TForm1;
  B: mas2;
  A: mas1;
n, m, i, j, imax: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
n:=3;
   Edit1.Text:=floattostr(n);

{çàäàíèå ñòðîê è ñòîëáöîâ}
stringgrid1.RowCount:=n+1;
stringgrid1.colCount:=n+1;
stringgrid2.RowCount:=n+1;
stringgrid2.colCount:=n+1;


{ââîä â ëåâóþ âåðíþþ ÿ÷åéêó òàáëèöû íàçâàåèÿ ìàññèâà}
stringgrid1.Cells[0,0]:='Maccèâ À';
stringgrid2.Cells[0,0]:='Maccèâ B';

{çàïîëíåíèå âåðõíåãî è ëåâîãî ñòîëáöîâ}
for i:=1 to n do begin
stringgrid1.Cells[0,i]:='i='+inttostr(i);
stringgrid2.Cells[0,i]:='j='+inttostr(i);
end;


end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   n:=StrToInt(Edit1.Text);

 {Çàäàíèå ÷èñëà ñòðîê è ñòîëáöîâ â òàáëèöàõ}
   StringGrid1.RowCount:=n+1;
   StringGrid1.ColCount:=n+1;
   StringGrid2.RowCount:=n+1;
   StringGrid2.RowCount:=n+1;
 {Çàïîëíåíèå âåðõíåãî è ëåâîãî ñòîëáöîâ ïîÿñíÿþùèìè ïîäïèñÿìè}
   for i:=1 to n do StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

    try
  {Çàïîëíåíèå ìàññèâà À ýëåìåíòàìè èç òàáëèöû StringGrid1}
  for i:=1 to n do
  for j:=1 to n do
  A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
{íàõîæäåíèå max}
For i:=1 to n do
For j:=1 to n do     Begin
if A[i,j]=nmax then begin  imax:=i; n:=j;
end;

{âû÷åðêèâàíèå}

for i:=1 to n-1 do
     begin
       for j:=1 to imax-1 do B[i,j]:=A[i,j];
       for j:=imax to n-1 do  B[i,j]:=A[i,j+1];
      end;
 
for i:=n to m-1 do
     begin
          for j:=1 to imax-1 do B[i,j]:=A[i+1,j];
       for j:=imax to n-1 do  B[i,j]:=A[i+1,j+1];
   end;
 
   for i:=1 to n-1 do
       begin
       for j:=1 to n-1 do   Begin

           Stringgrid2.Cells[i,j]:=floattoStr(B[i,j]);
  end;

end.


Ошибку выделяет самую последнюю строку и пишет
[Error] Unill pas(121) Record. ob|ect or class type required
[Error] Umll pas(130) 'END' e-pected bul end oi file found
[Falal Error] Proiecll dpr(5) Could nol compile used unil'Unill pas'
Не знаю что и делать

Не ругайте сильно , только сегодня узнал что такое массив.
mta0 вне форума Ответить с цитированием
Старый 17.10.2013, 08:49   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

C begin-end разберитесь! у вас половина не закрыта.

Код:
program ideone;
const
  nmax=5;
type
 mas1=array[1..nmax,1..nmax] of extended;
	
var
A: mas1;
n, i, j, imax,jmax: integer;
absmax: double;
begin
n:=5;
imax:=0;
jmax:=0;
      for i:=1 to n do
      for j:=1 to n do
         read(A[i,j]);{:=2;StrToFloat(StringGrid1.Cells[j,i]);}
     
     for i:=1 to n do
      begin
      for j:=1 to n do
         write(A[i,j]);{:=2;StrToFloat(StringGrid1.Cells[j,i]);}
        writeln();
      end;
        
      absmax:=A[1][1];
      For i:=1 to n do
          For j:=1 to n do     
	         if abs(A[i,j])>absmax then 
		        begin
		           imax:=i;
		           jmax:=j;
		           absmax:=A[i][j];
		        end;
		        
for i:=imax to n-1 do
       for j:=1 to n do 
       A[i,j]:=A[i+1,j];
       
 for j:=jmax to n-1 do
       for i:=1 to n-1 do 
       A[i,j]:=A[i,j+1];      
         
 
   for i:=1 to n-1 do
      begin
      for j:=1 to n-1 do
         write(A[i,j]);{:=2;StrToFloat(StringGrid1.Cells[j,i]);}
        writeln();
      end;

end.
только это паскаль, допилите до форм
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 17.10.2013 в 09:57.
SaLoKiN вне форума Ответить с цитированием
Старый 22.10.2013, 13:03   #3
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

вот . Прога работает. Осталось разобраться с нахождением максимума и вычернкиванием . Максимум вроде нахожу но вычеркивает не то что нужно...
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

 const
  nmax=5;   //макс размер
 type
 mas1=array[1..nmax,1..nmax] of extended;
 mas2=array[1..nmax,1..nmax] of extended;




var
  Form1: TForm1;
  B: mas2;
  A: mas1;
n, m, i, j, imax: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
n:=3;
   Edit1.Text:=floattostr(n);

{задание строк и столбцов}
stringgrid1.RowCount:=n+1;
stringgrid1.colCount:=n+1;
stringgrid2.RowCount:=n;
stringgrid2.colCount:=n;
{Заполнение верхнего и левого столбцов поясняющими подписями}
   for i:=1 to n do StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[i,0]:=' j= '+IntToStr(i);


{ввод в левую вернюю ячейку таблицы назваеия массива}
stringgrid1.Cells[0,0]:='Maccив А';
stringgrid2.Cells[0,0]:='Maccив B';

{заполнение верхнего и левого столбцов}
for i:=1 to n do begin
stringgrid1.Cells[0,i]:='J='+inttostr(i);
stringgrid2.Cells[0,i]:='J='+inttostr(i);
end;
end;





procedure TForm1.Button1Click(Sender: TObject);
begin
   n:=StrToInt(Edit1.Text);

 {Задание числа строк и столбцов в таблицах}
   StringGrid1.RowCount:=n+1;
   StringGrid1.ColCount:=n+1;
   StringGrid2.RowCount:=n;
   StringGrid2.colCount:=n;
 {Заполнение верхнего и левого столбцов поясняющими подписями}
   for i:=1 to n do StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[i,0]:=' j= '+IntToStr(i);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin


  {Заполнение массива А элементами из таблицы StringGrid1}
  for i:=1 to n do
  for j:=1 to n do
  A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

{нахождение max}
  For i:=1 to n do
  For j:=1 to n do     Begin
    if A[i,j]=nmax then begin  imax:=i; n:=j;
    end;


{вычеркивание}
  for i:=1 to n-1 do begin
    for j:=1 to imax-1 do B[i,j]:=A[i,j];
    for j:=imax to n-1 do  B[i,j]:=A[i,j+1];
    end;


  for i:=n to imax-1 do begin
    for j:=1 to imax-1 do B[i,j]:=A[i+1,j];
    for j:=imax to n-1 do  B[i,j]:=A[i+1,j+1];
    end;


  for i:=1 to n-1 do begin
    for j:=1 to n-1 do   Begin
       Stringgrid2.Cells[i,j]:=floattoStr(B[i,j]);
       end;
     end;
     end;
end;

end.

Последний раз редактировалось mta0; 22.10.2013 в 13:05.
mta0 вне форума Ответить с цитированием
Старый 22.10.2013, 13:21   #4
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Код:
{нахождение max}
  For i:=1 to n do
  For j:=1 to n do     Begin
    if A[i,j]=nmax then begin  imax:=i; n:=j;
    end;
опять ДВА BEGIN ОДИН END
У вас nmax это максимальное значение?
как у вас компилятор не ругается? вы в программе размерность цикла меняете в каждой итерации n:=j ... ЧТО ЗА!!!!!?!?!?
вы вообще мой код смотрели? там все написано! и как максимальный найти и как вычеркнуть все. Вам осталось только формы вернуть в код и все! ваш ДЕЛФИ готов. ковыряйтесь сами с вашим кодом,я разочарован =(
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 22.10.2013 в 13:30.
SaLoKiN вне форума Ответить с цитированием
Старый 22.10.2013, 13:38   #5
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
Код:
{нахождение max}
  For i:=1 to n do
  For j:=1 to n do     Begin
    if A[i,j]=nmax then begin  imax:=i; n:=j;
    end;
опять ДВА BEGIN ОДИН END
У вас nmax это максимальное значение?
как у вас компилятор не ругается? вы в программе размерность цикла меняете в каждой итерации n:=j ... ЧТО ЗА!!!!!?!?!?
вы вообще мой код смотрели? там все написано! и как максимальный найти и как вычеркнуть все. Вам осталось только формы вернуть в код и все! ваш ДЕЛФИ готов. ковыряйтесь сами с вашим кодом,я разочарован =(
упс. Простите . Сейчас разберусь
mta0 вне форума Ответить с цитированием
Старый 22.10.2013, 13:43   #6
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
Код:
{нахождение max}
  For i:=1 to n do
  For j:=1 to n do     Begin
    if A[i,j]=nmax then begin  imax:=i; n:=j;
    end;
опять ДВА BEGIN ОДИН END
У вас nmax это максимальное значение?
как у вас компилятор не ругается? вы в программе размерность цикла меняете в каждой итерации n:=j ... ЧТО ЗА!!!!!?!?!?
вы вообще мой код смотрели? там все написано! и как максимальный найти и как вычеркнуть все. Вам осталось только формы вернуть в код и все! ваш ДЕЛФИ готов. ковыряйтесь сами с вашим кодом,я разочарован =(
absmax: double; извините но что это за тип переменной?
mta0 вне форума Ответить с цитированием
Старый 22.10.2013, 13:46   #7
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

double - "длинный" аналог float, числа с плавающей точкой. Гугл Вам в помощь с такими вопросами в дальнейшем.

upd: для паскаля float == real
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 22.10.2013 в 13:49.
Vanta11a вне форума Ответить с цитированием
Старый 22.10.2013, 13:46   #8
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
absmax: double; извините но что это за тип переменной?
типы данных
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 22.10.2013, 13:59   #9
mta0
Пользователь
 
Регистрация: 18.09.2013
Сообщений: 23
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
Понял.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

 const
  nmax=5;   //ìàêñ ðàçìåð
 type
 mas1=array[1..nmax,1..nmax] of extended;
 mas2=array[1..nmax,1..nmax] of extended;




var
  Form1: TForm1;
  B: mas2;
  A: mas1;
n, jmax, i, j, imax: integer;
absmax: double;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
n:=3;
   Edit1.Text:=floattostr(n);

{çàäàíèå ñòðîê è ñòîëáöîâ}
stringgrid1.RowCount:=n+1;
stringgrid1.colCount:=n+1;
stringgrid2.RowCount:=n;
stringgrid2.colCount:=n;
{Çàïîëíåíèå âåðõíåãî è ëåâîãî ñòîëáöîâ ïîÿñíÿþùèìè ïîäïèñÿìè}
   for i:=1 to n do StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[i,0]:=' j= '+IntToStr(i);


{ââîä â ëåâóþ âåðíþþ ÿ÷åéêó òàáëèöû íàçâàåèÿ ìàññèâà}
stringgrid1.Cells[0,0]:='Maccèâ À';
stringgrid2.Cells[0,0]:='Maccèâ B';

{çàïîëíåíèå âåðõíåãî è ëåâîãî ñòîëáöîâ}
for i:=1 to n do begin
stringgrid1.Cells[0,i]:='J='+inttostr(i);
stringgrid2.Cells[0,i]:='J='+inttostr(i);
end;
end;





procedure TForm1.Button1Click(Sender: TObject);
begin
   n:=StrToInt(Edit1.Text);

 {Çàäàíèå ÷èñëà ñòðîê è ñòîëáöîâ â òàáëèöàõ}
   StringGrid1.RowCount:=n+1;
   StringGrid1.ColCount:=n+1;
   StringGrid2.RowCount:=n;
   StringGrid2.colCount:=n;
 {Çàïîëíåíèå âåðõíåãî è ëåâîãî ñòîëáöîâ ïîÿñíÿþùèìè ïîäïèñÿìè}
   for i:=1 to n do StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[0,i]:=' i= '+IntToStr(i);
   for i:=1 to n do StringGrid2.Cells[i,0]:=' j= '+IntToStr(i);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin


  {Çàïîëíåíèå ìàññèâà À ýëåìåíòàìè èç òàáëèöû StringGrid1}
  for i:=1 to n do
  for j:=1 to n do
  A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

{íàõîæäåíèå max}


 For i:=1 to n do
 For j:=1 to n do
	  if abs(A[i,j])>absmax then
		        begin
		           imax:=i;
		           jmax:=j;
		           absmax:=A[i][j];
		        end;




{âû÷åðêèâàíèå}
for i:=imax to n-1 do
       for j:=1 to n do 
       A[i,j]:=A[i+1,j];

 for j:=jmax to n-1 do
       for i:=1 to n-1 do
       A[i,j]:=A[i,j+1];


   for i:=1 to n-1 do
      begin
      for j:=1 to n-1 do
      Stringgrid2.Cells[i,j]:=floattoStr(B[i,j]);
      end;
      end;

 end.




end.
вот код.
В ответ выводит массив с одними нулями , постоянно
mta0 вне форума Ответить с цитированием
Старый 22.10.2013, 15:17   #10
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

не нашел
Код:
imax:=0;
jmax:=0;
absmax:=A[1][1];
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Excel в Delhi. KyTuH Общие вопросы Delphi 2 30.05.2013 11:31
Проблема с массивом logo23 Паскаль, Turbo Pascal, PascalABC.NET 8 03.05.2012 21:42
Проблема с массивом Тёма_) Visual C++ 9 22.03.2012 00:01
проблема с массивом и бд hunter03 Помощь студентам 4 16.10.2011 17:57
проблема с массивом Lonix Общие вопросы Delphi 2 06.11.2007 23:56