в массиве из 10 чисел отсортировать в порядке возрастания все положительные числа. Отрицательные и нулевые оставить на своих местах
program laboratorn11;
uses crt;
var
a:array[1..10] of real;
i,j:integer;
x:real;
begin
for i:=1 to 10 do
begin
writeln('Enter A[',I,']=');
readln(a[i]);
end;
writeln('Sortorovka po vozrastaniyu');
for i:=1 to 10 do write(a[i]:6:2,'');
writeln;
j:=0;
for i:=1 to 10 do
begin
if a[i]>=0 then
begin
if a[j-1]>a[j] then
begin
x:=a[j];
a[j]:=a[j-1];
a[j-1]:=x;
end;
end;
end;
if J>0 then
begin
for i:=1 to 10 do
write(a[i]:6:2);
writeln;
end
else
wtiteln('NO_POSITIVE_ELEMENT');
readkey
end.
Как правильно написать эту задачку, я попытался, но безрезультатно =((
Заранее спс =)
5 ноября 2008 в 19:05
большое спс =)
4 ноября 2008 в 15:05
чьорт. я ступил)) вместо положительных чисел сортировал отрицательные. Ну короче надо чуть поменять и будет работать.
4 ноября 2008 в 15:04
а чо? работает? ^_^
4 ноября 2008 в 15:04
var
a: array [1..10] of integer;
i,j,c,n: integer;
begin
randomize;
n := 10;
for i:=1 to n do
begin
a[i] := random (10) – 5;
write (a[i],' ');
end;
writeln;
for i:=1 to n-1 do
if (a[i] > 0) then
for j:=i+1 to n do
if (a[j] > 0) and (a[i] > a[j]) then
begin
c := a[i];
a[i] := a[j];
a[j] := c;
end;
for i:=1 to n do
write (a[i],' ');
writeln;
readln;
end.
работает 100%
4 ноября 2008 в 14:04
спс большое =)
4 ноября 2008 в 14:01
ну ё-маё программер. ну ща…
var min: real;
a,b:array [1..10] of real;
i:integer;
function GetMin(var amin: real; def: real): real;
var i:integer;
begin
GetMin := def;
for i:=1 to 10 do if (a[i]<GetMin) and (a[i]>amin) and (a[i]<0) then GetMin:=a[i];
amin := GetMin;
end;
begin
{тут ввод данных в массив а сделай сам}
min:=a[1];
for i:=1 to 10 do
if a[i]>=0 then b[i]:=a[i] else b[i]:=GetMin(min, a[i]);
{вывод массива b на экран}
end.
вроде так. пишу из головы. не факт, что с первого раза заработает =)
ps. поправил код…
pps. еще поправил…
ppps. подумал и еще дописал =)
pppps. о блин! забыл что числа отрицательные только. дописал в функцию "and (a[i]<0)". хотя подозреваю что это условие лишнее
4 ноября 2008 в 14:00
Второй массив можно, если можете, то напишите пожалуйста код =)
4 ноября 2008 в 13:05
интересное условие: "if a[i]>=0 then". а в задаче вроде сказано, что нулевые мы не трогаем.
далее у тебя идет пузырьковая сортировка: "if a[j-1]>a[j] then
begin
x:=a[j];
a[j]:=a[j-1];
a[j-1]:=x;
end;". А она отсортирует не только отрицательные, но и все соседние к ним (в данном случае).
4 ноября 2008 в 13:05
Дмитрий, в твоем сообщении не содержится вопроса. Это значит, что тебе и так все понятно, и тему можно удалить?
4 ноября 2008 в 13:05
а как тогда написать? сортировкой выбором?
4 ноября 2008 в 13:05
нет, щас будет вопрос =)
4 ноября 2008 в 13:05
я даж не знаю как бы я делал. пару мыслей есть. ну вот например:
перебираем элементы массива циклом. если элемент неотрицательный, то ничего не деалем, а если отрицательный, то заменяем его на b[i] = GetMin(amin); где GetMin – функция на входе имеет число и на выходе число (ищет минимальный из отрицательных чисел, но не меньше amin)
После этого amin меняется на новое найденное значение.
Решение будет небольшое по коду, но потребуется второй массив. У тебя по условию можно второй массив использовать?
Если мое решение не понятное – напишу код.
4 ноября 2008 в 13:00
А зачем же выводить, что положительных чисел нет? Тебе даётся массив, массив же ты и должен выдать на выходе. Если чисел нужных нет – значит они уже отсортированны)