IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Внутренняя сортировка в массиве., ):
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Доброго времени суток всем!

Народ, помажите. Нужно написать программу, которая будет сортировать отрицательную последовательность в массиве. То есть, например:
массив
-1;-3;-6;-4;-2;2;2;2;2;2;
отсортирует в:
-6;-4;-3;-2;-1;2;2;2;2;2;

Без стандартных функций Java или C не могу ))%

Вот то у меня получилось, но работает как то криво. Точнее не криво, а не правильно. Если отрицательные числа идут в начале - то все ок, а если сначала идет любое положительное - лагает ):

program sort_array; 
uses CRT;

type M = array[1..10] of integer;

var inp,sort:M;
var i,j,t,n_i:integer;
var n:boolean;

procedure setArray(var M:M);
begin
writeln('Input array`s element');

for i := 1 to 10 do begin
readln(M[i]);
end;
end;

procedure getSortArray(var M1:M);
//var temp:M;
begin
n := true;
for i := 1 to 10 do begin
for j := 0 to 10 - i do begin
if M1[i] AND M1[i+1] < 0 then begin
if M1[i] > M1[i+1] then begin
t := M1[i];
M1[i] := M1[i+1];
M1[i+1] := t;
end;
end;
end;
end;

writeln();
writeln('Sort array: ');

for i := 1 to 10 do begin
writeln('Array[',i,'] = ',M1[i]);
end;
end;

Begin
setArray(inp);

getSortArray(inp);
End.



ЗЫ. Паскаль изуаю уже третий час... (((8

вот так вот:

[beowulf@localhost pascal]$ ./sort_array
Input array`s element
1
2
-5
-6
-2
-4
-5
-10
0
3

Sort array:
Array[1] = 1
Array[2] = 2
Array[3] = -6
Array[4] = -5
Array[5] = -4
Array[6] = -5
Array[7] = -10
Array[8] = -2
Array[9] = 0
Array[10] = 3
[beowulf@localhost pascal]$
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Комбинируем: Нужна помощь по массивам
и
FAQ: Методы сортировки

Получаем:
program sort_array;
uses CRT;

const n = 10;
type M = array[1..n] of integer;

var
inp:M;

procedure setArray(var M1:M);
var i: integer;
begin

writeln('Input array`s element');
for i := 1 to 10 do begin
readln(M1[i]);
end;

end;

procedure getSortArray(var arr:M);
var T, i, j, last_neg: integer;
begin

last_neg := 0;
for i := 1 to n do begin
if arr[i] < 0 then begin
inc(last_neg); T := arr[i];
for j := i downto last_neg + 1 do
arr[j] := arr[j - 1];
arr[last_neg] := T;
end;
end;

for j := 1 to last_neg do begin

for i := last_neg downto j+1 do begin
if arr[i-1] > arr[i] then begin
t := arr[i-1];
arr[i-1] := arr[i];
arr[i] := t;
end;
end;

end;

writeln();
writeln('Sort array: ');

for i := 1 to 10 do begin
writeln('Array[',i,'] = ',arr[i]);
end;

end;

Begin
setArray(inp);
getSortArray(inp);
End.

Тестировалось на массиве: (-1, -3, 2, -4, -2, 2, -6, 2, 2, 2)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


он не должен сбивать все последовательности отрицательных чисел в начало массива.

то есть он должен сортировать подряд стоящие отрицательные числа.

-2 -3 2 5 2 -3 -4 -7 -5
-3 -2 2 5 2 -7 -5 -4 -3

чтобы он так все сбил в начало у меня тоже получается )%
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ах, вот оно что тебе нужно smile.gif

procedure getSortArray(var arr:M);
var T, i, j: integer;
begin

for j := 1 to n do begin

for i := n downto j+1 do begin
if (arr[i-1] < 0) and (arr[i] < 0) then
if arr[i-1] > arr[i] then begin
t := arr[i-1];
arr[i-1] := arr[i];
arr[i] := t;
end;
end;

end;

writeln();
writeln('Sort array: ');

for i := 1 to n do begin
writeln('Array[',i,'] = ',arr[i]);
end;

end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


ВООООООООТ ТАКОООООООЕ БОЛЬЧУЧЕЕЕ СПАСИБО! (:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 16:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name