1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здравствуйте! Я написала программу сортировки массива букв шейкерной сортировкой! Но у меня программа не компилируется и ошибку выдает на for downto. Не могли бы вы сказать в чем дело! Вот код! Заранее благодарю!
Код
program Sheikernaya_sortirovka; const N=10; type mas=array[0..N] of integer;
procedure sheiker(var J,L:integer;var a:mas); var x,K,R:integer; begin L:=2; R:=N; K:=N; repeat for J:=R downto L do if a[J-1]>a[J] then begin x:=a[J-1]; a[J-1]:=a[J]; a[J]:=x; K:=J end; L:=K+1; for J:=L to R do if a[J-1]>a[J] then begin x:=a[J-1]; a[J-1]:=a[J]; a[J]:=x; K:=J end; R:=K-1 until L>R; end;
var J,L,K,R,X,N,I:integer; s:string[50]; begin writeln('Vvedite stroku'); readln(s); for I:=1 to N do read(a[I]); sheiker(J,L,a); writeln('Result:'); for I:=1 to N do write(a[I],' ') end.
--------------------
Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.
type TType = string; { теперь для изменения типа сортируемых переменных достаточно изменить TType... Все остальное изменится само }
{ Вот тут была логическая ошибка: не от 0, а от 1... Если сделать от 0, сортировка работать перестанет } mas = array[1 .. n] of TType;
procedure sheiker(var a: mas);
{ Ну, это по желанию, но по-моему проще записать swap, чем каждый раз писать 3 строки... } procedure swap(var x, y: TType); var T: TType; begin T := x; x := y; y := T end;
var K,R,J,L:integer; X: TType; { Это будет того типа, что нужно } begin L:=2; R:=N; K:=N; repeat for J:=R downto L do if a[J-1]>a[J] then begin swap(a[j], a[j-1]); { 1 строка вместо 3-х... } K:=J end; L:=K+1; for J:=L to R do if a[J-1]>a[J] then begin swap(a[j], a[j-1]); { ... и здесь тоже } K:=J end; R:=K-1 until L>R; end;
var i: integer;
{ это для проверки работы со строками } const a: mas = ('44', '55', '12', '42', '94', '18', '6', '67'); begin { for I:=1 to N do read(a[I]); } sheiker(a); writeln('Result:'); for I:=1 to N do write(a[I],' ') end.
Кстати, вызов Sheiker не должен содержать ничего кроме имени самого сортируемого массива - это лишняя информация...