Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Сортировка Пузырьком


Автор: ddosDns 4.7.2010, 12:19
Задача:
Дана последовательность не более 100 чисел,вводятся все числа пользователем
0-конец файла (программы)
Отсортировать все введенные числа по возрастанию 
Вводится число ,нужно вставить его в последовательность не нарушая сортировку и дать номер позиции числа!
Помогите пожалуйста 

Автор: ddosDns 4.7.2010, 12:46
начало зделал немного
Код

program sort;
uses crt;
const EOF=0;
type dataA=array [1..100] of integer;
var a:dataA;
i,j,n:integer;
begin
clrscr;
for i:=1 to 100 do
begin
write ('input ',i,' element of sequance');
readln (a[i]);
if a[i]=EOF then break;
end;
end.

дальше не знаю как отсортировать по возрастанию+ввести число и что бы мне показало позицию на какою оно вставлено и что вставлялось не нарушая сортировки по возрастанию помогите   

Автор: ~FoX~ 4.7.2010, 23:05
Вот тебе пузырек:
Код

var
  i, j, TEMP: integer;
begin
  for i := 1 to 99 do begin
    for j := i to 100 do begin
      if a[i] > a[j] then begin 
        TEMP := a[i];
        a[i] := a[j];
        a[j] := temp;
      end; //if
    end; // j
  end; //i
end;

На счет вставки, тут на самом деле проще использовать указатели нежели массив

Автор: LoveMeCozImBLONDE 10.7.2010, 18:12
Код

uses crt;
type 
mass=array[1..100] of integer;

procedure sort(var a:mass;n:integer;);
var
  i, j, TEMP: integer;
begin
for i := 1 to n-1 do begin
    for j := i to n do begin 
      if a[i] > a[j] then begin 
        TEMP := a[i];
        a[i] := a[j];
        a[j] := temp;
          end; 
end;
  end; 
end;
var
b,c:mass;
k,l:integer;
begin
clrscr;
write('VVedite kol-vo elementov - ');
readln(n);
for k:=1 to n do 
readln(b[k]);
sort(b,n);
write('Enter number which u want to add - ');
readln(l);
a[n+1]:=l;
sort(b,n+1);
for i:=1 to n+1 do
write(a[k]:3:2);
readln;
end.


написал на коленке, проверить надобы может дето чото напутал, т.к. делфи уже давно не включал=)

Автор: Somewho 11.7.2010, 15:10
Во-первых, по-моему тут надо не 
Код
procedure sort(var a:mass;n:integer;);
var
  i, j, TEMP: integer;
begin
for i := 1 to n-1 do begin
    for j := i to n do begin 
      if a[i] > a[j] then begin 
        TEMP := a[i];
        a[i] := a[j];
        a[j] := temp;
          end; 
end;
  end; 
end;
, а 
Код
procedure sort(var a:mass;n:integer;);
var
  i, j, TEMP: integer;
begin
for i := 1 to n-1 do begin
    for j := i+1 to n do begin 
      if a[i] > a[j] then begin 
        TEMP := a[i];
        a[i] := a[j];
        a[j] := temp;
          end; 
end;
  end; 
end;


Во-вторых, зачем писать 
Код
a[k]:3:2
, если число целое?
И в-третьих, собственно говоря, почему 
Код
write(a[k]:3:2);
 в конце? Ведь a[k] - это вообще левое число, это максимальный элемент в массиве до вписывания нового числа ;)

Если ошибаюсь - прошу обьяснить.

Автор: LoveMeCozImBLONDE 11.7.2010, 15:36
там тоесть a[i]
ето мог бы и сам догадатся)

Автор: Somewho 11.7.2010, 21:14
LoveMeCozImBLONDE, с меня плохой телепат smile

У меня вот вопрос по самой задаче: нам же не нужно выводить сам отсортированный массив, да? Тогда почему мы не можем просто посчитать кол-во элементов в массиве, которые меньше заданного числа, прибавить единицу - и мы получим ответ?

P.S. Зачем ты делаешь две подряд сортировки, если можно сразу добавить элемент, а потом уже всё сортировать? ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)