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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 19:35   #1
shokoladka5013
 
Регистрация: 23.02.2011
Сообщений: 4
Восклицание не могу разобраться в чем ошибка

Цитата:
Написала прогу, и не могу понять почу она не так работает...Помогите пожалуйста....

Дано натуральное N (1 N 10)? целочисленный квадратный массив - матрица (aij) Отсортировать элементы матрицы так, чтобы при прохождении по спирали против часовой стрелки начиная с верхнего левого угла они были упорядочены по не убыванию методом сортировки выбора

Код:
uses Crt;
  type
DataArray = array [1..100] of integer;
TMx = array[0 .. 100, 0 .. 100] of integer;
var
  A:DataArray;
  n,j,imin,i,x : integer;
  t:integer;
  B:TMx;
  w,k,g,l,m,s:integer;

  {заполнение матрицы случайными числами}
procedure matrix (var B:TMx);
begin
randomize;
For l:=1 to n do
 begin
  for m:=1 to n do
   begin
    B[l,m]:=random(20);
    write(B[l,m]:2,' ');
   end;
   writeln;
 end;
end;

{занесение значения матрицы в линейный массив}
procedure massiv(var x: DataArray);
begin
g:=1;
For l:=1 to n do
  for m:=1 to n do
  Begin
  A[g]:=B[l,m];
  inc(g);
  end;
end;

{сортировка выбора}
procedure SortVibor (var a:DataArray);
var
  k:integer;
  max:integer;
begin
 for g:=1 to n*n-1 do
 begin
   k:=g;
   max:=a[g];
   for j:=g+1 to n*n do
     if a[j]<max then
     begin
       max:=a[j];
       k:=j;
     end;
     A[k]:=a[g];
     a[g]:=max;
 end;
end;

{вывод отсортированного массива на экран}
procedure PrintVector (var a:DataArray);
  begin
   for g:= 1 to n*n do
    write(a[g],' ');
  writeln;
end;

{вывод сортированного массива матрицуй спиралью}
procedure spiral (n, k:integer; var i, j : integer);
begin
  if (k<(n*4-4))then
  begin
      if (k<n) then //верхний слой
      begin
        j:=0;
        i:=k;
      end
      else
        if (k<(n*2-1)) then  //слой справа
        begin
           j := k - n + 1;
           i := n-1;
        end
        else
          if (k < (n*3-2)) then   //нижний слой
          begin
             j:= n - 1;
             i:= n*3-3 - k;
          end
          else
          begin//слой слева
             j:= n*4-4 - k;
             i:= 0;
          end;
  end
  else
  begin
    spiral(k-(n*4-4), n-2, i, j); // удаление пройденое количество элементов, спучкаемся на нижний слой
    inc(i);
    inc(j);
  end;

end;



begin
  writeln('Введите число n');
readln(n);
matrix(B);
massiv(A);
SortVibor(A);
writeln;
printvector(a);
for k:=1 to n*n do
  begin
    spiral(n,k,i,j);
    B[i,j]:=A[k];
 end;
 writeln;

{финальная матрица:');
For l:=1 to n do
 begin
  for m:=1 to n do
   begin
    write(B[l,m]:2,' ');
   end;
  writeln;
 end;

end.
Оч прошу помочь....зачет не получу пока не сделаю эту программу

Последний раз редактировалось shokoladka5013; 13.06.2011 в 19:40.
shokoladka5013 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять в чем ошибка.... Blonde Помощь студентам 0 21.05.2011 14:19
нужно разобраться в чем ошибка))) ИГА1 Помощь студентам 0 23.02.2011 20:30
Немогу разобраться в чем ошибка Ev1L Visual C++ 9 26.11.2010 12:13
не могу разобраться в чем ошибка pavel42 Помощь студентам 10 23.04.2009 18:22
Помогите разобраться в чем ошибка, pasha_1 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.10.2008 12:14