• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы SergDS
  • Дата начала
S

SergDS

Здравствуйте, возникла проблема с задачей а именно вот с этим участком кода
Код:
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 элемента и вычислением его произведения, операторные скобки здесь не помогают как можно сделать чтобы до упорядочивания доходил первоначальный массив
 
S

SergDS

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

hosm

> Хорошо, посоветуйте как тогда копировать данные из массива
поэлементно
ты бы хоть задачу написал. а то просто какая-то куча кода, никто же не будет разбираться просто так. код не твой? :)
 
S

SergDS

Нет мой, всю задачу сам писал, вы мне просто скажите как можно из массива
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]);
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!