![]() |
|
|
|
|
#1
|
|||
|
|||
|
Дан двумерный массив действительных чисел размером NxM. Поменять местами строки с номерами 1 и 3, 2 и 4, 5 и 7, 6 и 8 и т. д. Мой вариант
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const N=5;M=7;
type mas=array[1..N,1..M] of integer;
var l:mas; i,j:integer;
procedure vvod(var l:mas);
var i,j: integer;
begin
randomize;
for i:=1 to N do
for j:=1 to M do
l[i,j]:=random(100);
end;
procedure vivod(l:mas);
var i,j: integer;
begin
for i:=1 to N do begin
for j:=1 to M do
write(l[i,j]:4,' '); writeln; end;
end;
procedure ioke(var l:mas);
var i,j,p: integer;
begin
i:=1;
while i< = m -2 do
begin
for j:=1 to n do begin
p:=l[i,j];
l[i,j]:=l[i+2,j];
l[i+2,j]:=p;
end;
if i mod 2=0 then i:=i+3
else i:=i+1;end;
end;
begin
vvod(l);vivod(l);
ioke(l);
writeln(' ');
vivod(l);
readln;
end.Помогите найти ошибку!! Программа работает но из-за того что M >N в последней строке получаются 0 Подскажите как можно это исправить |
|
#2
|
|||
|
|||
|
А причем тут то, что M > N???
Тут такая фигня. 1. Нужна процка, которая будет менять строки местами, притом на вход они просто принимает массив и индексы строк. 2. В основной процке у нас цикл, в котором вычисляем пары и запускаем обмен. Код:
const
N = 5;
M = 7;
type
TMatrix = Array [1..N,1..M] Of Integer;
procedure ExchangeRows(var M : Matrix; Index1, Index2 : Integer);
var
I, Buf : Integer;
begin
For I := 1 To N Do // по колонкам
Begin
Buf := M[I,Index1];
M[I,Index1] := M[I,Index2];
M[I,Index2] := Buf;
End;
end;
procedure DoWork(var M : TMatrix);
var
I : Integer;
I1, I2 : Integer;
begin
I := 1;
While I < N Do
Begin
I1 := I;
I2 := I+2;
If (I1 <= N) And (I2 <= N) Then ExchangeRows(M,I1,I2);
I1 := I+1;
I2 := I+3;
If (I1 <= N) And (I2 <= N) Then ExchangeRows(M,I1,I2);
I := I + 4;
End;
end;Вот. |
|
#3
|
|||
|
|||
|
Спасибо!!!!!!!!Но она тож работает не правильно тож не меняет последние 3 столба в этом условии надо While I <= N Do
Последний раз редактировалось Asira, 11.01.2010 в 21:54. |