Помощь - Поиск - Пользователи - Календарь
Полная версия: сортировка массива по возрастанию с исключением сходных элементов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
18192123
дан массив целых чисел размера n=10. получить упорядоченный по возрастанию массив, содержащий все различные числа данного массива
Reflex
например:
Код

type arr : array [ 1..10] of integer;
var inarr, outarr : integer
function copy:integer;
var i,j,tmp: integer;
flag : boolean;

begin
tmp:=1;
outarr[1]:=inarr[1];
for i:= 2 to n do begin
  flag:=false;
  for j:=1 to tmp do
   if inarr[i]=outarr[j] then flag:=true;
  if not(flag) then begin
   inc(tmp);
   outarr[tmp]:=inarr[i];
  end;
  copy:=tmp;
end;


а дальше стадартный buble

Вот правильный код, для твоей программы
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;
const
nn=100;
type arr = array [ 1..nn] of integer;
var inarr, outarr : arr;
var n,i : integer;
function copy:integer;
var i,j,tmp: integer;
flag : boolean;

begin
tmp:=1;
outarr[1]:=inarr[1];
for i:= 2 to n do begin
flag:=false;
for j:=1 to tmp do
if inarr[i]=outarr[j] then flag:=true;
if not(flag) then begin
inc(tmp);
outarr[tmp]:=inarr[i];
end;
END;
copy:=tmp;
end;

procedure buble(n: integer);
var i, j, temp: Integer;
begin
for i := 1 to n do
for j := n downto i+1 do
if outarr[j-1] > outarr[j] then begin
temp:=outarr[j-1];
outarr[j-1]:=outarr[j];
outarr[j]:=temp;
end;
end;


begin
read(n);
for i:= 1 to n do
read(inarr[i]);
n:=copy;
for i:=1 to n do
write(outarr[i]);
buble(n);
for i:=1 to n do
write(outarr[i]);
READLN;
READLN;
END.
Reflex
удовлетворило решение? или есть еще вопросы
18192123
Цитата(Reflex @ 23.10.2006 21:26) *

удовлетворило решение? или есть еще вопросы

ты молодец! спасибо большое!
а ты не могла бы на основе моей программы исключить совпадающие элементы из отсортированного массива?!
пожалуйста!!!!!!!
Нажмите для просмотра прикрепленного файла
Reflex
ну... добавь вставь код процедуру COPY
18192123
Цитата(Reflex @ 23.10.2006 21:54) *

ну... добавь вставь код процедуру COPY

а ты не знаешь более просто метода?
volvo
Куда же проще? Тебе что, надо в том же массиве убрать дубликаты? Без второго массива? Тогда так (после сортировки):

  k := 0;
i := 1;
repeat

while (i <= n) and (a[i - 1] = a[i]) do inc(i);
if i <= n then begin
inc(k);
a[k] := a[i]; inc(i);
end;

until i > n;

(распечатывать первые K элементов...)
18192123
Цитата(volvo @ 24.10.2006 16:57) *
Тебе что, надо в том же массиве убрать дубликаты? Без второго массива? Тогда так (после сортировки):

большое спасибо!
18192123
еще один маленький вопрос: как задать условие для вывода первых К элементов?
volvo
Ну, наверное, так:
  for i := 1 to k do write(a[i]:4);
?
18192123
Цитата(volvo @ 24.10.2006 15:57)

  k := 0;
i := 1;
repeat

{ ***** ***** }
while (i <= n) and (a[i - 1] = a[i]) do inc(i);
if i <= n then begin
inc(k);
a[k] := a[ i ]; inc(i);
end;
{ ***** ***** }

until i > n;

объясните пожалуйста смысл выделенной части как можно подробнее, я не очень поняла
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.