Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2014, 18:53   #1
Настя33
 
Регистрация: 28.01.2014
Сообщений: 5
По умолчанию составить программу на Паскале для сортировки только положительных элементов в одномерном массиве

составить программу на Паскале для сортировки только положительных элементов в одномерном массиве,при чем отрицательные должны оставаться на своем месте без изменений. Заранее спасибо
Настя33 вне форума Ответить с цитированием
Старый 28.01.2014, 20:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Покажешь код ввода твоего массива?
Сама сможешь просто сортировку добавить?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.01.2014, 21:15   #3
Настя33
 
Регистрация: 28.01.2014
Сообщений: 5
По умолчанию

проблема в том,что всю программу я сделала сама,но в ней есть какой то недочет в плане сортировки,а именно он положительные числа сортирует группами,то есть например дан массив 9 2 5 -2 -4 6 1 он выводит 2 5 9 -2 -4 1 6 а должен 1 2 5 -2 -4 6 9
Код:
var a:array [-50..50] of integer;
i,j,k,n,c: integer;
begin 
  clrscr;
  randomize;
  writeln('размер массива');
  readln(n);
  writeln('исходный массив');
  for i:=1 to n do begin
    a[i]:=random(101)-50;
    write (a[i]:5); end;
    writeln;
  for i:=1 to n-1 do begin 
   for j:=1 to n-1 do begin c:=a[j];
   if a[j+1] > 0 then begin if c>a[j+1] then
         begin
            k:=a[j];
            a[j]:=a[j+1]; 
            a[j+1]:=k;
         end; end;end;end;
         writeln;
   writeln('Положительные элементы упорядочены по возрастанию:');
   for i:=1 to n do write(a[i]:5);
   readln;
end.

Последний раз редактировалось Stilet; 28.01.2014 в 22:24.
Настя33 вне форума Ответить с цитированием
Старый 28.01.2014, 21:39   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
в ней есть какой то недочет в плане сортировки,а именно он положительные числа сортирует группами,то есть например дан массив 9 2 5 -2 -4 6 1 он выводит 2 5 9 -2 -4 1 6 а
а теперь читаем программу
Код:
if a[j+1] > 0 then begin if c>a[j+1] then
Код:
writeln('Положительные элементы упорядочены по возрастанию:');
Вывод - программа делает именно то, для чего писалась, и код писали не вы.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 28.01.2014, 21:47   #5
DpolenST
Форумчанин
 
Регистрация: 28.09.2013
Сообщений: 115
По умолчанию

Код:
if a[j+1] > 0 then
1. не забывайте про ноль, его тоже надо сортировать
2. вместо if a[j+1], надо найти следующий элемент >=0, используйте while
Что бы еще такого сделать, чтобы ничего не делать?
DpolenST вне форума Ответить с цитированием
Старый 28.01.2014, 21:52   #6
Настя33
 
Регистрация: 28.01.2014
Сообщений: 5
По умолчанию

это программа для сортировки стандартная,некоторые дополнения я ввела,именно из за того что у меня не получилось,я и прошу мне помочь
Настя33 вне форума Ответить с цитированием
Старый 28.01.2014, 21:54   #7
Настя33
 
Регистрация: 28.01.2014
Сообщений: 5
По умолчанию

не поняла ничего,где именно нужно вставлять цикл while?
Настя33 вне форума Ответить с цитированием
Старый 28.01.2014, 22:18   #8
DpolenST
Форумчанин
 
Регистрация: 28.09.2013
Сообщений: 115
По умолчанию

вместо этого
Код:
if a[j+1] > 0 then begin
тебе надо найти номер следующего положительного элемента допустим P, как то так:
Код:
P:=j+1;
while P<n-1 and a[P] < 0  do P:=P+1;
if P<n-1 then begin
далее:
- если элемент найден, использовать a[P] везде вместо a[j+1], причем в конце цикла нужно будет присвоить j:=P-1;
- если не найден, перейти к следующему i
Что бы еще такого сделать, чтобы ничего не делать?

Последний раз редактировалось DpolenST; 28.01.2014 в 22:27.
DpolenST вне форума Ответить с цитированием
Старый 28.01.2014, 22:20   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Здесь бы очень к месту был бы qsort..
Poma][a вне форума Ответить с цитированием
Старый 28.01.2014, 22:29   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
var a:array [-50..50] of integer;
i,j,k,n,c: integer;
begin
  randomize;
  n:=10;
  for i:=1 to n do begin
    a[i]:=random(101)-50;
    write (a[i]:5); end;
    writeln;
  for i:=1 to n-1 do begin
   for j:=1 to n-1 do begin
    if a[j] > 0 then begin
      if a[i]>a[j] then
         begin
            k:=a[j];
            a[j]:=a[i];
            a[i]:=k;
         end;
    end;
   end;
  end;
         writeln;
   for i:=1 to n do write(a[i]:5);
   readln;
Ошибка у тебя в сравнении. Нужно не с предидущим элементом по порядку сравнивать было а с предидущим по счетчику цикла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в одномерном массиве из N действительных элементов, вычислить суммы элементов по условию iren1 Visual C++ 1 22.01.2014 09:26
Составить алгоритм и программу для перестановки элементов в заданном массиве Р (10) так, чтобы в начале стояли элементы... Кулибаба Петро JavaScript, Ajax 1 23.06.2012 16:12
Дан массив D(18). Составить программу суммирования всех положительных элементов. Verushka Помощь студентам 1 19.04.2012 17:44
Оставить в одномерном массиве только уникальные значения phlamey Паскаль, Turbo Pascal, PascalABC.NET 4 25.05.2010 13:37
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16