• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Сортировка одномерного массива

Major_Pain

Ученик
Регистрация
27 Дек 2010
Сообщения
9
Реакции
0
Баллы
0
Сортировка одномерного массива

Помогите решить задачу на сортировку одномерного массива, надо использовать метод, где надо найти сначало минимум и поставить его на 1 место и ....
задача:Дан массив с (n) . Переписать в мас¬сив х (n) все ненулевые элементы массива Затем упорядочить методом «выбора и перестановки» по возрастанию но¬вый массив

Вот моя версия, я хоть правильно думаю?

program o;const
n=10;
var
c,x:array[1..n] of Integer;
i,l,j,min,n_min,t,buf:integer;
begin
randomize;
for i:=1 to n do
begin
c:=random(10);
write(c);
end;
for i:=1 to n do
begin
for j:=1 to n do
if c<>0 then
x[j]:=c;
writeln(x[j]);
end;
min:=100;
for j:=1 to n do
begin
if x[j]<min then
begin
min:=x[j];
n_min:=j;
end;
t:=x[n_min];
x[n_min]:=x[j];
x[j]:=t;
for j:=1 to n do
writeln('x=',x[j]);
end;
end.
Спасибо)
 
Программа может выглядеть вот так, использована сортировка выбором
Код:
const
n=10;
var
c,x:array[1..n] of Integer;
i,l,k,j:integer;
begin
randomize;
for i:=1 to n do
begin
c[i]:=random(10);
write(c[i],' ');
end;
writeln ('Исходный массив');
writeln;
for i:=1 to n do begin
if c[i]>0 then
x[i]:=c[i];
write(x[i],' ');
end;
writeln ('Новый массив X');
writeln;
writeln ('Отсортированный массив');
for i:=1 to n-1 do begin
l:=i;
for j:=i+1 to n do
if x[j]<x[l] then
l:=j;
k:=x[i];
x[i]:=x[l];
x[l]:=k;
end;
for i:=1 to n do
write (x[i],' ' );
readln 
end.
 
Не моё, конечно, собачье дело, но так, вскользь... Касательно формирования массива Х.

В варианте от Major_Pain:
for i:=1 to n do
begin
for j:=1 to n do
if c<>0 then
x[j]:=c;
writeln(x[j]);
end;
массив Х будет весь заполнен значением последнего ненулевого элемента массива С.

В варианте Shrek'а:
for i:=1 to n do begin
if c>0 then
x:=c;
write(x,' ');
end;
оба массива (Х и С) окажутся в итоге просто тождественными и никакого отбора не произойдет, потому что по умолчанию, как правило, объявленным переменным, включая элементы массивов, присваиваются нулевые значения.

Я уже давал полностью отлаженный вариант решения задачи: http://www.tehnari.ru/f41/t43977/#post435634 , но, поскольку это решение было проигнорировано и задача выложена повторно, я заключаю, что ко мне доверия нет. Ну ладно, как говорится, "насильно мил не будешь". Дело ваше.
 
Назад
Сверху