Turbo Pasca Сортировка

SergDS

New member
02.12.2011
0
0
#1
Здравствуйте, возникла проблема с задачей а именно вот с этим участком кода
Код:
repeat
f:=false;
for i:=1 to n+1 do
begin
if x[i] > x[i+1] then
begin
f:=true;
buf:=x[i];
x[i]:=x[i+1];
x[i+1]:=buf;
end;
end;
Writeln('Uporadovachinie:',buf:8:2);
until not f;
Вся программа
Код:
Program mas;
Const n=4;
Var
f: boolean;
x:Array[1..n] of real;
s, max, r:real;
i, q: Integer;
buf:real;	 
Begin
s:=1;
q:=0;
Writeln('Vvedite chisla');
{$I-}
For i:=1 to n do
begin
Write(i,')');
Readln(x[i]);
end;
{$I+}
if IOResult > 32767 then
Writeln('error I/O');
readln;
max:=x[1];
For i:=2 to n do
begin
If max < x[i] then
begin
max:=x[i];
If x[i] = max then q:=i;
end;
If max <> x[1] then 
begin
For i:=q+1 to n do
s:=x[i]*s;
if s = 1 then Writeln('Proizvedenie:', '0');
Writeln('Proizvedenie:',s:8:2);
end
else
If max = x[1] then 
begin
For i:=q+2 to n do
s:=x[i]*s;
Writeln('Proizvedenie:',s:8:2);
end;
end;
repeat
f:=false;
for i:=1 to n+1 do
begin
if x[i] > x[i+1] then
begin
f:=true;
buf:=x[i];
x[i]:=x[i+1];
x[i+1]:=buf;
end;
end;
Writeln('Uporadovachinie:',buf:8:2);
until not f;
readln; 
end.
При попытки сортировки происходит следующие
1)Если первым эли ментом при сортировки находиться max значение то он почему то выдает произведение и дополнительно сортирует только еще одно значение находящиеся за max
2)Если последим эли ментом при сортировки находиться max то происходит тоже что и описано в 1 пункте
3) Всё нормально работает если max не в конце и не вначале
4) Так же возникает проблема при сортировки отрицательных чисел он из просто не сортирует

Не могу понять как её решить , как можно организовать работу со значениями массива x часть которых еще не была измени на поиском max элемента и вычислением его произведения, операторные скобки здесь не помогают как можно сделать чтобы до упорядочивания доходил первоначальный массив
 

SergDS

New member
02.12.2011
0
0
#2
Хорошо, посоветуйте как тогда копировать данные из массива
x:Array[1..n] of real;
в массив
r:Array[1..n] of real;
 

hosm

* so what *
18.05.2009
2 442
6
#3
> Хорошо, посоветуйте как тогда копировать данные из массива
поэлементно
ты бы хоть задачу написал. а то просто какая-то куча кода, никто же не будет разбираться просто так. код не твой? :)
 

SergDS

New member
02.12.2011
0
0
#4
Нет мой, всю задачу сам писал, вы мне просто скажите как можно из массива
x:Array[1..n] of real;
в массив
r:Array[1..n] of real;
все данные копировать
я тупым присваивание сделал
r:=x;
но толку от этого не наблюдаю может всё это в процедуру мне загнать, буду рад любому ответу
Код:
Program mas;
Const n=4;
Var
f: boolean;
x:Array[1..n] of real;
r:Array[1..n] of real;
s, max:real;
i, j, q: Integer;
buf:real;	
Begin
s:=1;
q:=0;
Writeln('Vvedite chisla');
{$I-}
For i:=1 to n do
begin
Write(i,')');
Readln(x[i]);
r[i]:=x[i];
end;
Writeln(x[i]);