Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 21:33   #1
Vigo1603
Новичок
Джуниор
 
Регистрация: 26.09.2010
Сообщений: 2
По умолчанию Уплотнение матрицы

Всем привет! Задание таково: уплотнить четные элементы матрицы по указанному маршруту, остальные элементы сделать равными 0. Программу написал, однако она не совсем правильно работает... Кто-нибудь может помочь найти косяк?

Вот маршрут:


И код с комментами:
Код:
program aa;
uses crt;
type matr=array[1..20,1..20]of integer;

procedure OutMatr(var a:matr;n:integer);
var x,j:integer;
begin
for x:=1 to n do
 begin
 for j:=1 to n do
 write(a[x,j]:2,' ');
 writeln;
 end;
end;

var a:matr;
    b:array [1..400] of integer;
    n,m,k,i,j,z:integer;
begin
clrscr;
randomize;
write('Razmer matrici n=');
readln(n);
writeln('Ishodnaya matrica:');
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(20);
OutMatr(a,n);
{sozdanie massiva}
m:=0;
i:=1;{vstayom v yacheyku [1,1]}
j:=1;
k:=1;{koefficient pereklucheniya}
{perebiraem vse nomera}
for z:=1 to n*n do
  begin
    if (a[i,j] mod 2=0)and(a[i,j]<>0) then
     begin
      m:=m+1;
      b[m]:=a[i,j];
     end;
    {sled. koordinaty}
    i:=i-k;{dvizhemsya vpravo-vverh}
    j:=j+k;
    {korrektiruem koordinaty}
    if (i=0)and(j<>0) then {esli vishli za verhnuu stenku}
     begin
      i:=1;{vozvraschaemsya vniz}
      k:=-k;{idyom vniz-vlevo}
     end;
    if (j=0)and(i<=n) then{vishli za levuyu stenku i ne v uglu}
     begin
      j:=1;{vozvrascaemsya vpravo}
      k:=-k;{vverh-vpravo}
     end;
    if i>n then{esli vishli za nizhnuu stenku}
     begin
      i:=n;{vozvraschaemsya vverh}
      j:=j+2;
      k:=-k;{vverh vpravo}
     end;
    if j>n then{vishli za pravuyu stenku}
     begin
      j:=n;{vozvraschaemsya vlevo}
      i:=i+2;{uhodim na 2 vniz}
      k:=-k;{vniz vlevo}
     end;
  end;
writeln('Massiv chetnih chisel:');
for i:=1 to m do
write(b[i],' ');
writeln;
if m<n*n then
for i:=m to n*n do{dopolnyaem ego nolyami}
  begin
   m:=m+1;
   b[m]:=0;
  end;
i:=1;{vstaem v yacheyku [1,1]}
j:=1;
k:=1;{koef-nt pereklucheniya}
{perebiraem vse nomera}
for z:=1 to n*n do
  begin
    a[i,j]:=b[z];
    {sled. koordinaty}
    i:=i+k;{dvizhemsya vlevo-vniz}
    j:=j-k;
    {korrektiruem koordinaty}
    if (i=0)and(j<>0) then{esli vishli za verhnuu stenku}
     begin
      i:=1;{vozvraschaemsya vniz}
      k:=-k;{idem vniz-vlevo}
     end;
    if (j=0)and(i<=n) then{vishli za levuyu stenu i ne v uglu}
     begin
      j:=1;{vozvraschaemsya vpravo}
      k:=-k;{vverh-vpravo}
     end;
    if i>n then{esli vishli za nizhnuu stenku}
     begin
      i:=n;{vozvraschaemsya vverh}
      j:=j+2;
      k:=-k;{vverh-vpravo}
     end;
    if j>n then{vishli za pravuyu stenku}
     begin
      j:=n;{vozvraschaemsya vlevo}
      i:=i+2;{uhodim na 2 vniz}
      k:=-k;{vniz-vlevo}
     end;
  end;
{vivodim rezultat}
writeln('Rezultat:');
OutMatr(a,n);
readln;
end.
Vigo1603 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двойное уплотнение одномерного массива PavelDD Паскаль, Turbo Pascal, PascalABC.NET 8 16.02.2013 14:25
Первый элемент - размерность матрицы, остальные образуют строки этой матрицы Anastasiya_Pot Помощь студентам 2 10.04.2012 09:46
уплотнение массива KatrinX60 Общие вопросы C/C++ 3 16.03.2010 21:53
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19
Задачка на уплотнение матрицы TheKnyazz Паскаль, Turbo Pascal, PascalABC.NET 10 17.11.2008 08:31