Сортировка столбцов ТР

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

MOTOCoder, в смысле нахождение среднего арифметического должно содержаться в процедуре сортировки??
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Думаю, что да.
Ни что так не ограничивает фантазию программиста, как компилятор...
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

ааа, у меня ничего так и не получилось.... :(
ну не хочет программа работать((
помогите, пожалуйста....
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Анюта, честно говоря, не понял, зачем Вам столько массив массивов?!!
Вам же ясно сказал уважаемый MOTOCoder, если нужен двухмерный массив B описывается просто:

Код: Выделить всё

var [b]B1:Array [1..N,1..M] of integer[/b]
это раз.
второе. я бы рекомендовал среднеарифметическое сделать всё таки вещественным.
третье. существует два принципиально разных решения.
1) алгоритм - написать функцию SREDARIFMET( K : integer) - которая будет возращать среднеарифметическое значение K-го столбца и дальще сортировать столбцы, сравнивая
if SREDARIFMET(i)>SREDARIFMET(j) then {поменять столбцы I и J местами...}

2) лично мне больше нравится алгоритм с дополнительным массивом, в котором сохранять расчитанные значения среднеарифметического.
Потом, когда сортировать элементы этого массива, одновременно переставляя столбцы местами...
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

вот решение по второму алгоритму...

Код: Выделить всё

Program anuta;
uses crt;
const n=5; m=7;
var  i,j,sum, IndexMin : integer;
     B    : Array [1..N,1..M] of integer; 
     OneS : real;
     Aver : Array [1..M] of real; {массив для сохранения средний значений}
     

{процедура переставляет два столбца в массиве B}     
procedure Exchange(Idx1,Idx2:integer);
var iLoc : integer;
    OneB : integer;
begin 
  for iLoc:=1 to N do begin 
     OneB := B[iLoc,Idx1];
     B[iLoc,Idx1]:=B[iLoc, Idx2];
     B[iLoc, Idx2] := OneB;
  end;
end;     
     
begin
clrscr;
  randomize;
  for i:=1 to n do 
  begin
     for j:=1 to m do begin
       b[i,j]:=random(10);
       Write (b[i,j]:4);
     end; 
     writeln; 
  end;
  for j:=1 to m do 
  begin
     sum:=0;
     for i:=1 to n do begin
        sum:=sum+b[i,j];
     end;
     Aver[j] := sum / n;
     writeln ('SredArifm [',j:1,']= ',Aver[j]:5:1);
  end;

  {а вот теперь начинаем сортировку.
     методом "пузырька" - как самым простым}
     

  {Выбирается минимальный элемент массива
  и меняется местами с первым элементом массива.
  Затем процесс повторяется с оставшимися элементами и т. д. }

  for i:=1 to M-1 do begin
    IndexMin := i; {предварительно считаем, что первый элемент наименьший}
    {ищем индекс минимального элемента}
    for j:=i+1 to M do
      if Aver[j]<Aver[IndexMin] then IndexMin := j;

    {меняем местами элементы массива с индексами i и IndexMin
    (ну, если они не равны, конечно) }
    if i<>IndexMin then begin
      OneS := Aver[IndexMin];
      Aver[IndexMin] := Aver[i];
      Aver[i] := OneS;
      
      {а здесь мы поменяем местами два столбца!}
      Exchange(i, IndexMin)
      
    end;
  end;
  
  {выведем отсортированный двухмерный массив}
  WriteLn('--------------- RESULTAT ---------------');
  for i:=1 to n do 
  begin
     for j:=1 to m do 
       Write (b[i,j]:4);
     writeln; 
  end;
  
  {ну, и для проверки, выведем отсортированный массив 
      со среднеарифметическими значениями    }
  Write('SredArifm(');
  for j:=1 to m do
    write ( Aver[j]:5:1,',');
  WriteLn(')');

  readln;
end.
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

:p аааа!!!!!!!!
Serge_Bliznykov, огрооомное спасиибооо!!!!!!!!!!
и спасибо всем, кто со мной мучался и пытался мне помоочь!!!! thanks!!) ;)
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

ааа... у меня проблема... нужно решить эту же задачку, с использованием библиотеки...
и совсем не понимаю, как это...
помогите пожалуйста...
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Библиотеки или модуля?
По-моему, в паскале нет понятия библиотек.
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):нужно решить эту же задачку, с использованием библиотеки...
может это намек идти книжки читать ;)
It's a long way to the top if you wanna rock'n'roll
Anuta
Сообщения: 11
Зарегистрирован: 22 май 2008, 19:42

MOTOCoder, хм... преподавательница сказала, с помощью библиотеки.... хотя, может она оговорилась...
somewhere, та я читала уже) у меня просто сейчас такая каша в голове... уже ничего не понимаю....=//
Ответить