![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 21.05.2009
Сообщений: 10
|
![]()
Здравствуйте!
Есть задача. Задана матрица размером NxM. Упорядочить ее строки по возрастанию первого элемента. В случае равенства первых элементов выполнять проверку по вторым элементам строки, и т.д. C решением я что то намудрила и разобраться уже не в силах подскажите пожалуйста. Код procedure TZadanie12.BitBtn1Click(Sender: TObject); var i,j:integer; begin for i:=1 to m do begin for j:=1 to N do begin if Length(StringGrid2.Cells[i,j])<>0 then a[i,j]:=StrToInt(StringGrid1.Cells[i,j]); // else a[i,j]:=0; end; end; K:=1; for i:=1 to m do begin for j:=i+1 to n do if a[k,i]> a[k,j] then//при компиляции на эту строчку ругается так:Project Project1.exe raised exception class Eaccessviolation with message Access violation at address 0046379C in module project1.exe. Read of addres 00000004 begin //ïîìåíÿòü ìåñòàìè for l:=0 to m-1 do begin temp[l]:=a[k,i]; a[k,i]:=a[k,j]; a[k,j]:=temp[l]; end; //StringGrid2.Cells[i,0]:=FloatToStrf(a[i,j],fffixed,3,0); end; end; end; Очень жду помощи......Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]()
Где и как описывались переменные остаётся только гадать...
Access violation at address - нет доступа по адресу. Скорее всего массив a объявлен как динамический, но setlength'a нет или неправильный. Вобщем диагноз - выход за границы массива. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 21.05.2009
Сообщений: 10
|
![]()
a:array of array of integer;
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 21.05.2009
Сообщений: 10
|
![]()
Да описывала я так a:array of array of integer;
Подскажите пожалуйста что мне с кодом сделать ...ОЧЕНЬ надо....А своих знаний не хватает.... |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]()
setlength(a, m, n) и циклы для динамических массивов должны идти от 0 до n-1 и от 0 до m-1, а не с единицы до n и m
Код:
Последний раз редактировалось eoln; 01.04.2010 в 01:27. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 21.05.2009
Сообщений: 10
|
![]()
У меня и такой вариант был ошибка от этого не исчезала, вот я и пробовала разные вариации...То что он за границы выходит я понимаю но не один вариант кот я использовала не подходит....Просто вывод массива я сделала бы но там еще и сортировка....
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]() Цитата:
Вот рабочий код. Код:
Последний раз редактировалось eoln; 01.04.2010 в 02:22. Причина: оптимизация |
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 21.05.2009
Сообщений: 10
|
![]()
Да большое спасибо теперь работает но сортирут что то не так...и не то.
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 21.05.2009
Сообщений: 10
|
![]()
Правда обошлась без динамических массивов, но главное работает!!!
Ура!!! Кого заинтересует вот код:var Zadanie12: TZadanie12; M,N:integer; // Ðàçìåð òàáëèöû Stringgrid temp:array [0..14] of integer; i,j,l,x,y,k:integer; s,v:integer; //ðàçìåð îêíà stringRID //a:array of array of integer; a:array [0..14,0..7] of integer; implementation {$R *.dfm} procedure TZadanie12.BitBtn2Click(Sender: TObject); begin M:=StrToInt(Edit1.Text); N:=StrToInt(Edit2.Text); if m >=8 then MessageDlg('Ââåäèòå ÷èñëî M ìåíüøå 15 ',mtInformation,[mbOK],0) else begin StringGrid1.RowCount:=M; StringGrid2.RowCount:=M; s:=M*20+15; end; if n >=15 then MessageDlg('Ââåäèòå ÷èñëî N ìåíüøå 8 ',mtInformation,[mbOK],0) else begin StringGrid1.ColCount:=N; StringGrid2.ColCount:=N; v:=N*20+15; end; StringGrid1.height:=s; StringGrid1.width:=v; StringGrid2.height:=s; StringGrid2.width:=v; end; procedure TZadanie12.BitBtn1Click(Sender: TObject); begin for i:=0 to N-1 do begin for j:=0 to M-1 do begin if Length(StringGrid1.Cells[i,j])<>0 then a[i,j]:=StrToInt(StringGrid1.Cells[i,j]) else a[i,j]:=0; end; end; K:=0; for i:=0 to n do for j:=i+1 to n do begin for k := 0 to m do if a[k,i] <> a[k,j] then break; if a[k,i] > a[k,j] then for l:=0 to n do begin temp[l]:=a[l,i]; a[l,i]:=a[l,j]; a[l,j]:=temp[l]; end; end; for i:=0 to N-1 do for j:=0 to M-1 do StringGrid2.Cells[i,j]:=IntToStr(a[i,j]); end; end. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
(СИ)непонятная ошибка. | RZMTZM | Помощь студентам | 7 | 04.02.2010 02:49 |
непонятная ошибка в Delphi | smithana | Помощь студентам | 2 | 07.06.2009 19:18 |
Непонятная ошибка | RealSHELS | Общие вопросы Delphi | 16 | 24.10.2008 20:49 |
Непонятная ошибка!!! Delphi | Dimon88 | Помощь студентам | 7 | 06.05.2008 00:14 |
Непонятная ошибка | Slash | Общие вопросы Delphi | 6 | 19.06.2007 14:45 |