![]()  | 
	
 
  | 
| 
		 
			 
			#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.  |