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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 01:40   #1
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
Вопрос

Исправить программу по теме сортировки.

Дана действительная матрица A размерности ( n*n) . Если минимальный элемент матрицы расположен над главной диагональю, а максимальный элемент — под главной диагональю, то упорядочить столбцы матрицы по не убыванию методом линейного выбора с подсчетом. В противном случае матрицу оставить без изменения.

Дабавьте в программу, ниже написанную сортировку.

Код:
var
a: array [1..7,1..7] of integer;
i,j, imin,jmin, imax,jmax,max, min : integer;
begin
   // заполнение матрицы
   randomize;
    for i := 1 to 7 do
      begin
        for j := 1 to 7 do
          begin
          a[i,j] := random(90);
          write(a[i,j]:3);
          end;
      writeln;    
      end;
    // поиск максимума и минимума и их инексы в матрице
    max := a[1,1];
    min := a[1,1];
    imin := 1;
    jmin := 1;
    imax := 1;
    jmax := 1;
    for i := 1 to 7 do
        for j := 1 to 7 do
          begin
            if max < a[i,j] then
              begin
                imax := i;
                jmax := j;
                max := a[i,j];
              end;
            if min > a[i,j] then
              begin
                min := a[i,j];
                imin := i;
                jmin := j;              
              end;
      end;
   if imax < jmax then
    writeln('максимум выше')
    else
      if imax > jmax then
        writeln('максимум ниже')
        else writeln('максимум на диаганали');
   writeln('i = ', imax, ' j = ', jmax);     
   if imin < jmin then
    writeln('минимум выше')
    else
      if imin > jmin then
        writeln('минимум ниже')
        else writeln('минимум на диаганали'); 
   writeln('i = ', imin, ' j = ', jmin);
 // нужно ли сортировать
 if (imin < jmin) and (imax > jmax) then
  writeln('сортируем')
    else writeln('оставляем без изменений');   
{вывод матрицы}
for i:=1 to 7 do
begin
   for j:=1 to 7 do
      write(A[i,j],' ');
   writeln;
end;
readln;
end.
Напишите именно куда в программе вставить сортировку, ну и естественно напишите саму сортировку.

Вот сортировка, проверьте её на ошибки и вставьте в верхнюю программу:
Код:
For i:=1 to n do		{инициируем вектор счетчика}
  S[i]:=1;
For i:=1 to n-1 do	{формируем вектора счетчика}
begin
  k:=0; {количество меньших элементов для i-го элемента}
  For j:=i+1 to n do
   If A[i]<A[j] then S[j]:=S[j]+1 
{в счетчики больших элементов добавляем единицы}
                else k:=k+1;
  S[i]:=S[i]+k;
end;
{формируем вектор B в соответствии со значениями вектора счетчика}
For i:=1 to n do
begin
   r:=S[i];
   B[r]:=A[i];
end;

Последний раз редактировалось Stilet; 02.04.2012 в 08:02.
Anton94.by вне форума Ответить с цитированием
Старый 31.03.2012, 00:09   #2
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

это ПРИКАЗ ?

а самому, что - лень ?
как-то так
Arhangel7 вне форума Ответить с цитированием
Старый 31.03.2012, 02:35   #3
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
По умолчанию

Нет, это не приказ, это просьба. Сам уже перепробовал много раз, выдаёт ошибку в сортировке. Поэтому ту программу где точно правильно я выложил отдельно ( вся программа), а ту часть где не получается (сортировка), я отдельно выложил.

Вообще, кто-нибудь здесь знает как добавить сортировку? Если Да, то пожалуйста помогите. Саму программу я написал, она правильная. Сортировка тоже вверху написана, только исправьте в ней ошибки если есть и вставьте в саму программу. Заранее Спасибо.

Последний раз редактировалось Stilet; 02.04.2012 в 08:06.
Anton94.by вне форума Ответить с цитированием
Старый 01.04.2012, 16:08   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Столько шуму, нет бы головой подумать.

Цитата:
Саму программу я написал, она правильная. Сортировка тоже вверху написана, только исправьте в ней ошибки если есть и вставьте в саму программу.
П***еть не надо, сам он написал. Сотрировка вообще для вектора, а не для матрицы. И обозначения другие, и переменные тоже.

Код:
var
a,b: array [1..7,1..7] of integer;
s:array [1..7]of integer;
i,j, imin,jmin, imax,jmax,max, min,k,r,ololo: integer;
begin
   // заполнение матрицы
   randomize;
    for i := 1 to 7 do
      begin
        for j := 1 to 7 do
          begin
          a[i,j] := random(90);
          write(a[i,j]:3);
          end;
      writeln;
      end;
    // поиск максимума и минимума и их инексы в матрице
    max := a[1,1];
    min := a[1,1];
    imin := 1;
    jmin := 1;
    imax := 1;
    jmax := 1;
    for i := 1 to 7 do
        for j := 1 to 7 do
          begin
            if max < a[i,j] then
              begin
                imax := i;
                jmax := j;
                max := a[i,j];
              end;
            if min > a[i,j] then
              begin
                min := a[i,j];
                imin := i;
                jmin := j;
              end;
      end;
   if imax < jmax then
    writeln('максимум выше')
    else
      if imax > jmax then
        writeln('максимум ниже')
        else writeln('максимум на диаганали');
   writeln('i = ', imax, ' j = ', jmax);
   if imin < jmin then
    writeln('минимум выше')
    else
      if imin > jmin then
        writeln('минимум ниже')
        else writeln('минимум на диаганали');
   writeln('i = ', imin, ' j = ', jmin);
 // нужно ли сортировать
 if (imin < jmin) and (imax > jmax) then
  writeln('сортируем')
    else writeln('оставляем без изменений');

ololo:=1;  //ибо мне лень переменные выдумывать.
while ololo<=7 do
begin

 For i:=1 to 7 do		{инициируем вектор счетчика}
  S[i]:=1;
For i:=1 to 7-1 do	{формируем вектора счетчика}
begin
  k:=0; {количество меньших элементов для i-го элемента}
  For j:=i+1 to 7 do
   If A[ololo,i]<A[ololo,j] then S[j]:=S[j]+1
{в счетчики больших элементов добавляем единицы}
                else k:=k+1;
  S[i]:=S[i]+k;
end;
{формируем вектор B в соответствии со значениями вектора счетчика}
For i:=1 to 7 do
begin
   r:=S[i];
   B[ololo,r]:=A[ololo,i];
end;
inc(ololo);
end;



{вывод матрицы}
for i:=1 to 7 do
begin
   for j:=1 to 7 do
      write(B[i,j],' ');
   writeln;
end;
readln;
end.
Все тривиальное просто

Последний раз редактировалось whatever; 01.04.2012 в 17:28.
whatever вне форума Ответить с цитированием
Старый 01.04.2012, 20:20   #5
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
По умолчанию

Я теперь проверил программу, она всё время сортирует, даже когда её надо оставить без изменений. Сортирует правильно, а когда надо её оставить без изменений она тоже сортирует.
Если кто может, скопируйте в pascal abc и просмотрите. ( Здесь , т.е. в программе матрица выбирается случайным видом.).
Anton94.by вне форума Ответить с цитированием
Старый 01.04.2012, 23:38   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Anton94.by Посмотреть сообщение
Я теперь проверил программу, она всё время сортирует, даже когда её надо оставить без изменений. Сортирует правильно, а когда надо её оставить без изменений она тоже сортирует.
Если кто может, скопируйте в pascal abc и просмотрите. ( Здесь , т.е. в программе матрица выбирается случайным видом.).
Что и требовалось доказать, не писал ты эту прогу. Ну хоть убейте, не верю, что можно написать все то, что написано, а потом заблудиться в трех соснах.

P.S. В честь прошедшего праздника, только часть кода, которую надо поправить:
Код:
 // нужно ли сортировать
  if (imin < jmin) and (imax > jmax) then
    begin
      writeln('сортируем');

ololo:=1;  //ибо мне лень переменные выдумывать.
while ololo<=7 do
begin

 For i:=1 to 7 do		{инициируем вектор счетчика}
  S[i]:=1;
For i:=1 to 7-1 do	{формируем вектора счетчика}
begin
  k:=0; {количество меньших элементов для i-го элемента}
  For j:=i+1 to 7 do
   If A[ololo,i]<A[ololo,j] then S[j]:=S[j]+1
{в счетчики больших элементов добавляем единицы}
                else k:=k+1;
  S[i]:=S[i]+k;
end;
{формируем вектор B в соответствии со значениями вектора счетчика}
For i:=1 to 7 do
begin
   r:=S[i];
   B[ololo,r]:=A[ololo,i];
end;
inc(ololo);
end;
    end
  else
    writeln('оставляем без изменений');
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 02.04.2012, 01:19   #7
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
По умолчанию

Я исправил, а теперь, когда оставляет матрицу без изменений выдаёт нули. Но когда надо сортировать, то сортирует правильно.
Anton94.by вне форума Ответить с цитированием
Старый 04.04.2012, 23:56   #8
Anton94.by
Форумчанин
 
Регистрация: 16.10.2011
Сообщений: 115
По умолчанию

Здесь полный сайт программистов и никто не может исправить эту программу, всё таки уже программа написана, только нужно ИСПРАВИТЬ.
Anton94.by вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись содержит сведения о сдаче экзаменов. Структура записи. Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 1 15.03.2012 23:40
Запись содержит сведения о сдаче экзаменов. Структура записи: Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 2 28.02.2012 12:49
Запись содержит сведения о сдаче экзаменов. Структура записи: Anton94.by Паскаль, Turbo Pascal, PascalABC.NET 2 08.02.2012 19:26
Создать массив, который содержит сведения о сдаче студентами сессии... bot0 Помощь студентам 9 25.12.2010 20:20
Help (Составить запись, содержащую сведения о сдаче группой студентов экзамена) Forro Паскаль, Turbo Pascal, PascalABC.NET 2 08.01.2008 12:15