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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2010, 21:08
Asira Asira вне форума
Новичок
 
Регистрация: 11.12.2009
Сообщения: 76
Репутация: -26
По умолчанию Массивы

Дан двумерный массив действительных чисел размером 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  
Старый 11.01.2010, 21:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А причем тут то, что 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  
Старый 11.01.2010, 21:48
Asira Asira вне форума
Новичок
 
Регистрация: 11.12.2009
Сообщения: 76
Репутация: -26
По умолчанию

Спасибо!!!!!!!!Но она тож работает не правильно тож не меняет последние 3 столба в этом условии надо While I <= N Do
__________________
Asira

Последний раз редактировалось Asira, 11.01.2010 в 21:54.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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