![]() |
|
#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 Подскажите как можно это исправить Asira |
#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 Последний раз редактировалось Asira, 11.01.2010 в 21:54. |