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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2012, 19:54   #1
TIMERA
Новичок
Джуниор
 
Аватар для TIMERA
 
Регистрация: 16.06.2012
Сообщений: 2
По умолчанию Дан двумерный массив А(М,М) в виде квадратной матрицы

Уважаемые программисты! Помогите с задачкой, очень нужно

Дан двумерный массив А(М,М) в виде квадратной матрицы. Составьте программу, обнуляющую главную диагональ матрицы, если в ней найдется хотя бы один отрицательный элемент. Из элементов побочной диагонали сформируйте одномерный массив и отсортируйте его по возрастанию методом Шелла (Shell Sort). Выведите на экран исходную и преобразованную матрицы и отсортированный массив.

первую часть программы написала(до красного шрифта):
Код Pascal
Код:
const n=5;
var
a:array[1..n,1..n] of longint;
i,j:integer;
begin
writeln('Заполните матрицу ');
for i:=1 to n do
for j:=1 to n do
begin
read(a[i,j]);
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5);
writeln;
end;
for i:=1 to n do
for j:=1 to n do
if i=j then
if a[i,j]<0 then
if i=j then
a[i,j]:=0;
writeln;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5);
writeln;
end;
end;
TI

Последний раз редактировалось Stilet; 16.06.2012 в 20:10.
TIMERA вне форума Ответить с цитированием
Старый 18.06.2012, 15:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я вам по большому секрему расскажу, что Вы даже то, что до красного не очень то сделали...

но, по крайней мере, пытались решить задачу самостоятельно.

Поэтому, в качестве приза (и пользуясь моей добротой ) попробуйте такой код:
Код:
const 
  n = 5;
var
  a: array[1..n, 1..n] of longint;
  R: array[1..n] of longint;
  i, j: integer;
  h,k:integer;
  x : longInt;

begin
  Randomize;
  writeln('Заполните матрицу ');
  for i := 1 to n do
    for j := 1 to n do
    begin
      {read(a[i, j]); }  {для ручного заполнения расскомментировать тут}
      a[i,j] := - Random(120) + 100;
    end;

  writeLn('Исходная матрица: ');
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]: 5);
    writeln;
  end;

  {сформируем одномерный массив R из элементов побочной диагонали}
  for i:=1 to n do
    R[i] := a[i, n+1-i];


  {проверим, есть ли хоть один отрицательный элемент
     на главной диагонали матрицы}
  x := 0; {признак есть или нет. 0 - нет, 1 - есть.
           в начале, перед циклом проверки, считаем,
           что нет отрицательного элемента на диагонали}
  for i := 1 to n do
    if a[i, i] < 0 then
    begin
      x := 1; {опля! Есть такой элемент}
      Break; {смысла продолжать перебор нет, нужный элемент найден!}
    end;

  {если был на гл.диагонали хоть один отрицательный элемент,
    тогда занулим элементы главной диагонали}
  if x<>0 then
    for i := 1 to n do
        a[i, i] := 0;
  {закончили зануление}

  { сортировка Шелла }
  h := n div 2;
  repeat

    begin
      for i := 1 to (n - h) do
      begin
        if R[i] > R[i + h] then
        begin
          x := R[i];
          R[i] := R[i + h];
          R[i + h] := x;
        end;
      end;
      h := h div 2
    end;
  until h = 1;
  for i := 2 to n do
  begin
    x := R[i];
    k := 0;
    for j := i - 1 downto 1 do
      if R[j] <= R[i] then
      begin
        k := j;
        break;
      end;
    for j := i downto k + 1 do
      if (j>1) and (j<=n) then
         R[j] := R[j - 1];
    R[k + 1] := x;
  end;
  { конец сортировки Шелла }

  writeLn('Полученная матрица: ');
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]: 5);
    writeln;
  end;

  WriteLn('Полученный отсортированный массив:');
  for i:=1 to n do
      write(R[i]: 5);
  writeln;

  Readln;

end.
p.s.

1. 25 чисел мне вносить было влом, поэтому я поставил randomize (заполнение матрицы случайными числами). Если что - удалите то, что выделено и расскоментируйте строчку с read(a[i,j])

2. сортировку Шелла я взял из этой темы: Визуализация алгоритма Шелла
насколько она корректна - не знаю. я не спец в этой сортировке.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2012, 20:32   #3
TIMERA
Новичок
Джуниор
 
Аватар для TIMERA
 
Регистрация: 16.06.2012
Сообщений: 2
Хорошо

Спасибо большое за внимание и потраченное время))
я правда её решила по-своему, сроки поджимали...)
TI
TIMERA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан двумерный массив rustik24 Паскаль, Turbo Pascal, PascalABC.NET 1 01.04.2012 19:24
Дан двумерный массив Genius94 Паскаль, Turbo Pascal, PascalABC.NET 3 30.11.2011 11:00
Дан двумерный массив размерностью n*m ValeriySergeevich Помощь студентам 4 16.01.2011 13:13
Дан двумерный массив, отсортировать его по строкам С++ kontroller Помощь студентам 7 18.02.2010 23:17