Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.12.2009, 00:38
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию Dilphi двумерные массивы

Дан двумерный целочисленный массив размерностью m*n. Упорядочить строки матрицы по возрастанию количества нечетных элементов в строке. Сортировка методом выбора.
Ответить с цитированием
  #2  
Старый 11.12.2009, 00:38
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

Забивать массив рандомно!=)
Ответить с цитированием
  #3  
Старый 11.12.2009, 00:41
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

вот что у мя получилось! но чето не работает!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var a:array of array of integer;
    b:array of array of integer;
    p:array of integer;
    q:array of integer;
    m,n,i,j,h,min,y,z,k,x:integer;
begin
N:=StrToInt(Edit1.text);
M:=StrToInt(edit2.text);
StringGrid1.colcount:=n;
StringGrid1.rowcount:=m;
StringGrid2.colcount:=n;
StringGrid2.rowcount:=m;
for I := 1 to N do
for j := 1 to M do  A[i,j]:=random(40);

for I := 1 to N do
for j := 1 to M do StringGrid1.Cells[j-1,i-1]:=IntToStr (a[i,j]);

for I := 1 to N do begin k:=0;
for j := 1 to M do if A[i,j]mod 2 = 1 then k:=k+1;
                         p[i]:=k; q[i]:=i;
                   end;
for h := 1 to N - 1 do begin min:=q[h];
                             x:=h+1;
for i := x to N do if min>p[i] then begin y:=min; min:=p[i]; p[i]:=y;
                                          z:=q[h]; q[h]:=q[i]; q[i]:=z;
                                    end;
                        end;
for h := 1 to n do
for i := 1 to n do
for j := 1 to m do
B[i,j]:=a[q[h],j];
for i := 1 to n do
for j := 1 to m do
stringgrid2.cells[j-1,i-1]:=IntToStr(B[i,j]);
end;

end.
Admin: Пользуемся тегами!

Последний раз редактировалось Admin, 11.12.2009 в 10:17.
Ответить с цитированием
  #4  
Старый 11.12.2009, 17:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А в чем не работает.
А вообще, несколько советов.

1. Не надо писать все одной процелурой. Разбей код на несколько процедурок. Проще проверять.
2. Сделай контрольные выводы на экран промежуточных значений.
Ответить с цитированием
  #5  
Старый 12.12.2009, 23:44
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

я забыл размерность массива! добавил ее! воткусочек измененного
StringGrid1.colcount:=n;
StringGrid1.rowcount:=m;
StringGrid2.colcount:=n;
StringGrid2.rowcount:=m;
SetLength(a,n,m);
SetLength(b,n,m);
SetLength(p,n);
SetLength(q,n);
for I := 1 to N do
for j := 1 to M do A[i,j]:=random(40);

но он все равно выдает ошибку! он компилирует! запускается! вводишь n и m и тут он как раз и выдает ошибку! выделяет строку которую я выделил цветом!
Ответить с цитированием
  #6  
Старый 12.12.2009, 23:53
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

несколькими процедурами у меня препод не разрешает!
Ответить с цитированием
  #7  
Старый 13.12.2009, 00:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Отсчет элементов в динамическом массиве начинается с 0 поэтому:
Код:
for I := 0 to N-1 do
for j := 0 to M-1 do A[i,j]:=random(40);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 13.12.2009, 00:31
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

попробовал! один раз сработала но результат бредом каким то оказался! а когда запустил второй раз опять начал выдавать ошибку на какой то адрес =((
Ответить с цитированием
  #9  
Старый 13.12.2009, 00:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Значит вы на верном пути. Смотрите где еще выходите за границы массива.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 13.12.2009, 00:47
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

ды я посмотрю тока когда он запустился то у меня неправильно вывелось! следовательно не правильно что-то в самой логике программы! не могли бы это проверить?
Ответить с цитированием
  #11  
Старый 13.12.2009, 13:14
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

Код HTML:
procedure TForm1.Button1Click(Sender: TObject); var a:array of array of integer; b:array of array of integer; p:array of integer; q:array of integer; m,n,i,j,h,min,y,z,k,x:integer; begin N:=StrToInt(Edit1.text); M:=StrToInt(edit2.text); StringGrid1.colcount:=n; StringGrid1.rowcount:=m; StringGrid2.colcount:=n; StringGrid2.rowcount:=m; SetLength(a,n,m); SetLength(b,n,m); SetLength(p,n); SetLength(q,n); for I := 0 to N-1 do for j := 0 to M-1 do A[i,j]:=random(40); for I := 0 to N-1 do for j := 0 to M-1 do StringGrid1.Cells[j,i]:=IntToStr (a[i,j]); for I := 0 to N-1 do begin k:=0; for j := 0 to M-1 do if A[i,j]mod 2 = 1 then k:=k+1; p[i]:=k; q[i]:=i; end; for h := 1 to N - 1 do begin min:=q[h]; x:=h+1; for i := x to N do if min>p[i] then begin y:=min; min:=p[i]; p[i]:=y; z:=q[h]; q[h]:=q[i]; q[i]:=z; end; end; for h := 0 to n-1 do for i := 0 to n-1 do for j := 0 to m-1 do B[i,j]:=a[q[h],j]; for i := 0 to n-1 do for j := 0 to m-1 do stringgrid2.cells[j,i]:=IntToStr(B[i,j]); end; end.

вот так код не выдает ошибок! но считает не то что надо! он у меня выводит первой строкой последнюю строку введенного массива, а во все остальные строки копирует ее!

Последний раз редактировалось F@got555, 13.12.2009 в 16:14.
Ответить с цитированием
  #12  
Старый 14.12.2009, 22:23
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

Народ! ну помогите пожалуйста!=(((
Ответить с цитированием
  #13  
Старый 16.12.2009, 23:49
F@got555 F@got555 вне форума
Прохожий
 
Регистрация: 11.12.2009
Сообщения: 10
Репутация: 10
По умолчанию

Мне помогли! кого интересует вот код!
Код HTML:
procedure TForm1.Button1Click(Sender: TObject); var a:array of array of integer; b:array of array of integer; p:array of integer; q:array of integer; m,n,i,j,y,k:integer; begin N:=StrToInt(Edit1.text); M:=StrToInt(edit2.text); StringGrid1.colcount:=n; StringGrid1.rowcount:=m; StringGrid2.colcount:=n; StringGrid2.rowcount:=m; SetLength(a,n,m); SetLength(b,n,m); SetLength(p,n); SetLength(q,n); randomize; for I := 0 to N-1 do for j := 0 to M-1 do A[i,j]:=random(1000); for I := 0 to N-1 do for j := 0 to M-1 do StringGrid1.Cells[j,i]:=IntToStr (a[i,j]); for I := 0 to N-1 do begin k:=0; for j := 0 to M-1 do if A[i,j]mod 2 = 1 then k:=k+1; p[i]:=k; q[i]:=i; end; for j := 0 to N - 1 do begin for i := j+1 to N - 1 do if p[j]>p[i] then begin y:=p[j]; p[j]:=p[i]; p[i]:=y; y:=q[j]; q[j]:=q[i]; q[i]:=y; end; end; for i := 0 to n-1 do begin for j := 0 to m-1 do begin b[i,j] := a[q[i],j]; end; end; for i := 0 to n-1 do for j := 0 to m-1 do begin stringgrid2.cells[j,i]:=IntToStr(b[i,j]); end; end; end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter