Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка 
:(
    Опции темы
Любаша
Дата 8.1.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Ребята подскажите в чем ошибка в сортировке

Код
Program shell_sort;
const
     max = 10000;
type myArray = array[0..max] of integer;
var dimension, i : integer;
    arr, sortArray : myArray;

function shellSort( arr : myArray; size : integer) : myArray;
const a:array[1..5] of integer = (31,15,7,3,1);
var i, j, k, gap : integer;
    temp : integer;
  begin
  for k := 1 to 5 do
    begin
    gap := a[k];
    for i := gap to size-1 do
      begin
      temp := arr[i];
      j := i-gap;
      while (temp<arr[j]) and (j>=0) do
        begin
        arr[j+gap]:=arr[j];
        j:=j-gap;
        end;
      arr[j+gap]:=temp;
      end;
    end;
    shellSort := arr;
end;

begin
     writeln('Shell Sort.');
     write('Enter array dimension: '); readln( dimension );
     write('Enter '); write( dimension ); write(' elements: ');
     for i := 0 to dimension-1 do
         read(arr[i]);
     sortArray := shellSort( arr, dimension );
     write('Sorting array: ');
     for i := 0 to dimension-1 do begin
         write( sortArray[i] ); write(' '); end;
     writeln;
     writeln('Press "Enter" to continue...');
     readln;
     readln;
end.


Это сообщение отредактировал(а) volvo877 - 12.1.2007, 17:45
PM MAIL   Вверх
Zero
Дата 9.1.2007, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Любаша @  8.1.2007,  19:54 Найти цитируемый пост)
подскажите в чем ошибка в сортировке

Ошибка, в том, что ты пытаешься в качестве выходного параметра функции, сделать массив, а для функций это нельзя делать.
Как вариант, замени функцию процедурой, а выходной параметр функции будет находиться внутри процедуры, как параметр переменная.
Т.е. замена функции процедурой будет выглядить так:
Код

Program shell_sort;
const
     max = 10000;
type myArray = array[1..max] of integer;
var dimension, i : integer;
    arr, sortArray : myArray;

procedure shellSort( arr : myArray; size : integer; var sortArr: myArray);
const a:array[1..5] of integer = (31,15,7,3,1);
var i, j, k, gap : integer;
    temp : integer;
  begin
  for k := 1 to 5 do
    begin
    gap := a[k];
    for i := gap to size-1 do
      begin
      temp := arr[i];
      j := i-gap;
      while (temp<arr[j]) and (j>=0) do
        begin
        arr[j+gap]:=arr[j];
        j:=j-gap;
        end;
      arr[j+gap]:=temp;
      end;
    end;
    SortArr := arr;
end;

begin
     writeln('Shell Sort.');
     write('Enter array dimension: '); readln( dimension );
     write('Enter '); write( dimension ); write(' elements: ');
     for i := 0 to dimension-1 do
         read(arr[i]);
     shellSort( arr, dimension, sortArray);
     write('Sorting array: ');
     for i := 0 to dimension-1 do begin
         write( sortArray[i] ); write(' '); end;
     writeln;
     writeln('Press "Enter" to continue...');
     readln;
     readln;
end.

Про остальные возможные ошибки молчу... Если дальше что будет непонятно, то задавай...
PM MAIL ICQ   Вверх
Любаша
Дата 9.1.2007, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



А почему теперь программа зацикливается на вводе элементов?
PM MAIL   Вверх
Zero
Дата 9.1.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Любаша @  9.1.2007,  07:16 Найти цитируемый пост)
А почему теперь программа зацикливается на вводе элементов?
 Она не зацикливается, а выдаёт ошибку о переполнении стека локальных переменных внутри процедуры, т.к. ты число max, взяла слишком большим... Впринципе, можно с помощью дериктив $S+, его увеличить, но если речь идёт о простой програмке, то можно сделать без лишних изменений, т.е. порядок max уменьшить и всё:
Код

Program shell_sort;
const
     max = 1000;
type myArray = array[0..max] of integer;
var dimension, i : integer;
    arr, sortArray : myArray;

procedure shellSort( arr : myArray; size : integer; var sortArr: myArray);
const a:array[1..5] of integer = (31,15,7,3,1);
var i, j, k, gap : integer;
    temp : integer;
  begin
  for k := 1 to 5 do
    begin
    gap := a[k];
    for i := gap to size-1 do
      begin
      temp := arr[i];
      j := i-gap;
      while (temp<arr[j]) and (j>=0) do
        begin
        arr[j+gap]:=arr[j];
        j:=j-gap;
        end;
      arr[j+gap]:=temp;
      end;
    end;
    SortArr := arr;
end;

begin
     writeln('Shell Sort.');
     write('Enter array dimension: '); readln( dimension );
     write('Enter '); write( dimension ); write(' elements: ');
     for i := 0 to dimension-1 do
         read(arr[i]);
     shellSort( arr, dimension, sortArray);
     write('Sorting array: ');
     for i := 0 to dimension-1 do begin
         write( sortArray[i] ); write(' '); end;
     writeln;
     writeln('Press "Enter" to continue...');
     readln;
     readln;
end.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.