![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Дан двумерный целочисленный массив размерностью m*n. Упорядочить строки матрицы по возрастанию количества нечетных элементов в строке. Сортировка методом выбора.
|
|
#2
|
|||
|
|||
|
Забивать массив рандомно!=)
|
|
#3
|
|||
|
|||
|
вот что у мя получилось! но чето не работает!
Код:
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, 11.12.2009 в 10:17. |
|
#4
|
|||
|
|||
|
А в чем не работает.
А вообще, несколько советов. 1. Не надо писать все одной процелурой. Разбей код на несколько процедурок. Проще проверять. 2. Сделай контрольные выводы на экран промежуточных значений. |
|
#5
|
|||
|
|||
|
я забыл размерность массива! добавил ее! воткусочек измененного
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
|
|||
|
|||
|
несколькими процедурами у меня препод не разрешает!
|
|
#7
|
||||
|
||||
|
Отсчет элементов в динамическом массиве начинается с 0 поэтому:
Код:
for I := 0 to N-1 do for j := 0 to M-1 do A[i,j]:=random(40); |
|
#8
|
|||
|
|||
|
попробовал! один раз сработала но результат бредом каким то оказался! а когда запустил второй раз опять начал выдавать ошибку на какой то адрес =((
|
|
#9
|
||||
|
||||
|
Значит вы на верном пути. Смотрите где еще выходите за границы массива.
|
|
#10
|
|||
|
|||
|
ды я посмотрю тока когда он запустился то у меня неправильно вывелось! следовательно не правильно что-то в самой логике программы! не могли бы это проверить?
|
|
#11
|
|||
|
|||
|
Код HTML:
вот так код не выдает ошибок! но считает не то что надо! он у меня выводит первой строкой последнюю строку введенного массива, а во все остальные строки копирует ее! Последний раз редактировалось F@got555, 13.12.2009 в 16:14. |
|
#12
|
|||
|
|||
|
Народ! ну помогите пожалуйста!=(((
|
|
#13
|
|||
|
|||
|
Мне помогли! кого интересует вот код!
Код HTML:
|